Ich möchte einen Weg, eine invariante und eine oder mehrere Operation Auswirkungen, überprüfen Sie, ob nach der Ausführung der Operation die Invariante immer noch gilt.Z3-Invariant-Check
Irgendwelche Ideen, wie dies zu erreichen ist?
Z3 Verwendung Ich dachte an etwas Ähnliches tun zu
(declare-const a Int)
(declare-const b Int)
(declare-const c Int)
(declare-const d Int)
(define-fun invariant() Bool
(= a b c d 2)
)
(assert invariant)
(assert (= a 1)) ;operation1
(assert (= b 2)) ;operation2
(assert (not invariant))
(check-sat)
Wenn (Check-sat) gibt unsat dann schließe ich, dass das staatliche System nach den Operationen gültig ist.
Ich kann natürlich nicht die oben tun, da
(assert invariant)
(assert (not invariant))
immer den Satz unsat machen.
Aber ich muss feststellen, dass der Anfangszustand gültig ist, so dass die Teile des Systems, die nicht von den Operationen geändert werden, gültig sind, wenn ich (assert (nicht invariant)) ausführen.
Diese [Präsentation] (http://homepage.cs.uiowa.edu/~tinelli/talks/FT-11.pdf) von * Cesare Tinelli * könnte für Sie relevant sein. –
Ich realisiere (assert (= a 1)) ist keine Zuweisung. Ich habe nur versucht, die Zustände des Systems als ein Beispiel zu modellieren. Ich weiß nicht, ob ich mich klar genug ausgedrückt habe. Die Präsentation scheint relevant zu sein, es nimmt mich aber irgendwann auf, ihren Inhalt zu interpretieren. Danke für den Vorschlag. – user2009400