2017-01-26 1 views
0

Wenn ich einen bestimmten Satz von Einschränkungen mit der Z3 C++ API aufbaue, bekomme ich "unbekannt" als Antwort. Wenn ich jedoch das Objekt z3::solver mit dem Operator < <() serialisieren und die Ausgabe an die Binärdatei z3 übergeben, ergibt dies erwartungsgemäß "unsathm". Interessanterweise, wenn ich z3::solver::to_smt2() anstelle von Operator < <() verwende, die Z3-Binärausgaben "unbekannt".Z3 C++ API ergibt "unknown", während binär auf serialisierten Ausgang "unansehnlich" ergibt

Warum tritt das auf? Wie kann ich Z3 mithilfe der C++ - API "sehen", was die eigenständige Binärdatei "sieht"?

Ich habe die serialisierten Constraint-Dateien hochgeladen, falls Pastebin die

Mit Operator < <() hilft: http://pastebin.com/uRfP90W5

Mit to_smt2(): http://pastebin.com/6qQ6WsHN

Antwort

0

Das Beispiel verwendet nichtlineare Arithmetik, so endet mit einem unvollständigen Löser trotz der Tatsache, dass es nicht lineare Arithmetik über die Reals ist.

nach dem (Check-sat) Anruf: Sie können, warum z3 kehrt unbekannt mit dem Befehl

(Grund-unknown get-info) abfragen. Es wird dann sagen:

(: Grund-unknown „smt Taktik Ziel nicht dargetan/unsat werden sat (unvollständig (Theorie Arithmetik))“)

Graben in die Formel, die wir ein paar Multiplikationen sehen zwischen Funktionsanwendungen. Es gibt keine vollständige Integration in Z3 der nichtlinearen Argumentation für Reale und Formeln, die freie Funktionen verwenden.

+0

Bekam, aber warum würde eine Darstellung (Ausgabe von Operator <<()) lösbar sein, während eine andere (die Ausgabe von to_smt2()) nicht? –