Comment puis-je lister uniquement les résultats de contraintes spécifiques de mon noyau unsat? J'ai beaucoup de conditions et l'impression de tout le noyau n'imprime pas tout. J'ai lu que cela peut être fait avec les commandes assert_and_track et unsat_core. J'ai trouvé quelques exemples mais ils ne fonctionnent pas. Une expérience avec ça?Comment afficher la contrainte insat spécifique, pas le noyau entier (Z3, Python)
s.assert_and_track(A > B, 'p1')
s.assert_and_track(B > C, 'p2')
if s.check() == sat:
print('ok')
else:
c = s.unsat_core
print(c) <- this print all core
Alors, comment imprimer seulement p1 ou p2 (juste vrai/faux résultat)? par exemple. p2 = false, ou il peut être affiché tel qu'il est affiché en mode impression (c) - mais seulement pour p1.
Cela ne fonctionne pas. Premièrement, je dois corriger l'erreur de syntaxe correcte 'print M [str (e)]' à 'print (M [str (e)])' et ensuite j'obtiens 'TypeError: 'méthode' objet n'est pas itérable' en ligne' pour e dans le noyau: '. Essayez aussi de l'afficher directement avec 'print (M ['p1'])' mais cet affichage 'A> B'. Donc, j'essaie de le convertir en booléen 'print (booléen (M ['p1']))' mais cette impression est toujours vraie quelles que soient les conditions (< > ==) je définis. –
On dirait que vous utilisez Python 3.x alors que j'ai utilisé 2.x; Je vais devoir mettre à jour l'exemple pour qu'il fonctionne avec 3.x. –
J'ai mis à jour l'exemple et j'ai corrigé un autre problème de Python 3.x, l'API de Z3. L'exemple fonctionne correctement avec mon Python 3.4.3 sous Windows. Utilisez-vous une ancienne version de Z3 ou de Python? –