Z3 4.0 Z3_parse_smtlib2_string

Ich benutze Z3 mit SMT2 über C API / JNA / Scala und scheint ziemlich gut zu funktionieren.

Ich möchte versuchen, inkrementell zu lösen. Also übersetze ich das zuerst mitZ3_parse_smtlib2_string:

(declare-fun x () Int)
(assert (>= x 0))
(check-sat)
(get-model)

Dann bekomme ich wieder einZ3_ast, lege es in einen Löser überZ3_solver_assert, überprüfen Sie es mit Z3_solver_check und rufen Sie ein Modell über abZ3_solver_get_model (Wenn der Scheck zufriedenstellend zurückgegeben wurde, ist dies in diesem Beispiel der Fall.) Bisher gibt es kein Problem.

Aber wenn ich zusätzlich so etwas behaupten will:

(assert (= x 1))

Ich bleibe an der Stelle stecken, woZ3_parse_smtlib2_string heißt, weil es sich beschwert, dass x eine unbekannte Konstante ist. Wenn ich hinzufüge, füge ich auch das hinzudeklarieren-Spaß beim zweiten schnipsel erhalte ich einen ungültigen argumentfehler. Sollte diese Variable nicht bereits in der Umgebung existieren? Muss ich die zusätzlichen Parameter von einstellen?Z3_parse_smtlib2_string? Wie kann ich diese aus der zuvor analysierten Formel herausholen?

Auch mit(set-option: global-decls true) hat nicht funktioniert, wie Z3 mir sagt, dass diesDer Optionswert kann nach der Initialisierung nicht mehr geändert werden.

Hat jemand eine Ahnung, wie man dieses Problem löst?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage