Wenn Z3 ohne Logik ausgeführt wird und (check-sat)
ausgegeben wird, wird die Logik in default_tactic.cpp verwendet, um den "besten" Löser bedingt aufzurufen. Ich möchte auf diese Standardtaktik von der SMT-LIB 2-Schnittstelle zugreifen.(check-sat-using default) oder ähnliches?
Ich habe versucht, die Logik von default_tactic.cpp in SMT-LIB übersetzen, und ich kam mit dieser:
(check-sat-using (and-then simplify
(cond is-qfbv qfbv
(cond is-qflia qflia
(cond is-qflra qflra
(cond is-qfnra qfnra
(cond is-qfnia qfnia
(cond is-nra nra
(cond is-lira lira
(cond is-qffpabv qffpa
smt))))))))))
Dieses „fast“ funktioniert, dass, wenn Sie die Zeilen mit nra
, löschen lira
und qffpa
, dann führt Z3 das ohne Problem aus. Es scheint, dass diese drei Taktiken nicht mit der SMT-LIB 2-Schnittstelle von Z3 4.4.1 offengelegt werden. Ein anderes Problem dabei ist, dass wenn die Standardtaktik in einer zukünftigen Version von Z3 aktualisiert wird, dann wird jede hartcodierte Strategie, wie sie oben geschrieben wurde, nicht aktualisiert.
Was ich wirklich gerne tun würde, ist einen Befehl wie (check-sat-using default)
, oder etwas ähnliches, und erhalten Sie das gleiche Ergebnis wie mit (check-sat)
erhalten. Ist das möglich?
Vielen Dank. Wenn ich z3 master kloniere und baue und das, was ich oben geschrieben habe, an die neueste Version von 'default_tactic.cpp' anpasse, dann bekomme ich eine Strategie mit' check-sat-using', die dem Verhalten von 'check-sat' entspricht . –
Dies hat immer noch das Problem, dass wenn 'default_tactic.cpp' aktualisiert wird, der benutzerdefinierte' (check-sat-using ... 'Befehl wird nicht von der Aktualisierung profitieren. Stattdessen habe ich versucht, die Standard-Taktik durch Hinzufügen einer Zeile zu exportieren zu 'default_tactic.h' ähnlich dem, das Sie zu' nra_tactic.h' hinzugefügt haben, und das funktionierte großartig! Wenn ich es begehe und eine Pull-Anfrage auf GitHub mache, würden Sie es in den Master integrieren? –
Sicher, wir werden Überlegen Sie sich das. Es kann ein wenig überflüssig sein, da (check-sat) dasselbe tut (Standard anwenden), aber ich nehme an, Sie haben einen Anwendungsfall, der die Standardtaktik mit anderen kombiniert? –