In Non-linear arithmetic and uninterpreted functions, Leonardo de Moura, dass die qfnra-nlsat
Taktik wurde nicht vollständig in den Rest von Z3 integriert noch. Ich dachte, dass sich die Situation in zwei Jahren geändert hat, aber anscheinend ist die Integration noch nicht vollständig abgeschlossen.Verwenden von Z3 QFNRA Taktik mit Datentypen: Interaktion oder Inlining
Im folgenden Beispiel verwende ich Datentypen rein für "Software Engineering" Zwecke: um meine Daten in Datensätze zu organisieren. Auch wenn es keine uninterpretierte Funktionen sind nicht Z3 noch mir eine Lösung geben:
(declare-datatypes() (
(Point (point (point-x Real) (point-y Real)))
(Line (line (line-a Real) (line-b Real) (line-c Real)))))
(define-fun point-line-subst ((p Point) (l Line)) Real
(+ (* (line-a l) (point-x p)) (* (line-b l) (point-y p)) (line-c l)))
(declare-const p Point)
(declare-const l Line)
(assert (> (point-y p) 20.0))
(assert (= 0.0 (point-line-subst p l)))
(check-sat-using qfnra-nlsat)
(get-model)
> unknown
(model
)
Wenn ich jedoch manuell inline alle Funktionen, Z3 sofort ein Modell findet:
(declare-const x Real)
(declare-const y Real)
(declare-const a Real)
(declare-const b Real)
(declare-const c Real)
(assert (> y 20.0))
(assert (= 0.0 (+ (* a x) (* b y) c)))
(check-sat-using qfnra-nlsat)
(get-model)
> sat
(model
(define-fun y() Real
21.0)
(define-fun a() Real
0.0)
(define-fun x() Real
0.0)
(define-fun b() Real
0.0)
(define-fun c() Real
0.0)
)
Meine Frage ist, gibt es eine Möglichkeit, pe Ein solches Inlining automatisch gestalten? Ich bin fein mit einem dieses Workflows.
- Einführung Z3 mit einer Taktik, die sagt: „Inline zuerst, dann
qfnra-nlsat
bewerbe ich mich nicht einen Weg, dies zu tun gefunden haben, aber vielleicht war ich nicht auf der Suche gut genug. - Einführung Z3 eine Version von
simplify
mit dem inlining zu tun. Starten Sie Z3 zum zweiten Mal auf dem Ergebnis des ersten Aufrufs (die inlined Version).
mit anderen Worten, wie qfnra-nlsat
zu machen Arbeit mit Tupeln?
Vielen Dank!
Vielen Dank! * (seufz) * Jetzt muss ich mich nur noch entscheiden, was schwieriger ist: eine vollständige inline/symbolische Ausführung in meiner App implementieren oder eine PR mit erweiterter Datentypvereinfachung für Z3 vorbereiten. – Skiminok
Tut mir leid, aber im Moment sind das die einzigen Optionen :(Es klingt, als ob diese Art von Inlining auch für andere Benutzer nützlich sein könnte, also würden wir uns über ein PR freuen, wenn Sie sich dazu entscheiden, es zu implementieren! –