J'ai deux instances de problèmes SMT. Le premier est ici:Z3: Une meilleure façon de modéliser?
http://gist.github.com/1232766
Z3 retourne un modèle pour ce problème dans environ 2 minutes sur ma machine pas si grande, ce qui est génial .. J'ai aussi celui-ci:
http://gist.github.com/1232769
J'ai couru z3 pendant la nuit sur ce problème, sans Z3 complétant. Si vous vérifiez le contenu de ces fichiers, vous verrez que le second est identique au premier, sauf qu'il a une assertion supplémentaire pour "rejeter" le modèle retourné par la première instance. (Vous pouvez faire un "diff" entre eux pour voir ce que je veux dire.) Je sais que ce problème a plusieurs modèles satisfaisants, et j'essaie d'utiliser z3 pour trouver tous les modèles satisfaisants. Je comprends que cela pourrait être complètement attendu, mais j'étais curieux de savoir pourquoi le second est un problème beaucoup plus difficile pour Z3 par rapport à la première. Y a-t-il une meilleure façon de formuler le deuxième problème afin que Z3 ait un temps plus facile?
Merci ..
Merci, passer à la v3.2 et en utilisant AUFBV aidé. Je vois maintenant environ. une solution par minute, ce qui est plutôt bien. Par ailleurs, existe-t-il une meilleure façon de générer successivement tous les modèles satisfaisants? Jusqu'à présent, j'ai analysé le résultat du premier modèle et généré un nouveau programme pour ajouter des contraintes pour rejeter l'original, en redémarrant Z3 pour chaque nouveau modèle. Ce serait bien plus agréable s'il y avait un moyen de dire '(get-next-model)' ou similaire, où Z3 retournerait un modèle différent, s'il existe. –
Nous n'avons pas de commande comme 'get-next-model'. Cependant, cette fonctionnalité peut être automatisée en utilisant l'API C. BTW, je crois que Philippe Suter (http://lara.epfl.ch/~psuter/) a implémenté cette fonctionnalité. –