Ich versuche, eine Theorie von Sätzen (Vereinigung, Kreuzung etc.) für Z3 zu definieren, die die SMTLIB-Schnittstelle verwenden. Leider hängt meine aktuelle Definition z3 für eine triviale Abfrage, also denke ich, dass mir einige einfache Option/Flags fehlen.Definieren einer Theorie von Sätzen mit Z3/SMT-LIB2
hier ist der Link: http://rise4fun.com/Z3/JomY
(declare-sort Set) (declare-fun emp() Set) (declare-fun add (Set Int) Set) (declare-fun cup (Set Set) Set) (declare-fun cap (Set Set) Set) (declare-fun dif (Set Set) Set) (declare-fun sub (Set Set) Bool) (declare-fun mem (Int Set) Bool) (assert (forall ((x Int)) (not (mem x emp)))) (assert (forall ((x Int) (s1 Set) (s2 Set)) (= (mem x (cup s1 s2)) (or (mem x s1) (mem x s2))))) (assert (forall ((x Int) (s1 Set) (s2 Set)) (= (mem x (cap s1 s2)) (and (mem x s1) (mem x s2))))) (assert (forall ((x Int) (s1 Set) (s2 Set)) (= (mem x (dif s1 s2)) (and (mem x s1) (not (mem x s2)))))) (assert (forall ((x Int) (s Set) (y Int)) (= (mem x (add s y)) (or (mem x s) (= x y))))) (declare-fun z3v8() Bool) (assert (not z3v8)) (check-sat)
Jeder Hinweis, was ich vermisst habe?
Auch, was ich sagen kann, gibt es keine Standard-SMT-LIB2 Kodierung der Set-Operationen, z.B. Z3.mk_set_{add,del,empty,...}
(weshalb ich versuche, diese Funktionalität über Quantifizierer zu bekommen.) Ist das korrekt? Oder gibt es eine andere Route?
Danke!
Ranjit.
Danke Leo! Option 1 sieht gut aus. Wird Option 2 in SMTLIB unterstützt? (d. h. sind map und const in SMTLIB2)? –
Nein, Option 2 ist nicht Teil des SMT-LIB-Standards :( –
hi leo, fügte einen Link zu einem Beispiel hinzu, das die Option 2 zeigt. Ihre Konstanten und Kartenoperatoren sind wirklich ordentlich! Danke! –