Ich bin mir bewusst, dass die Theorie der Ganzzahlen mit Multiplikation generisch unentscheidbar ist. In bestimmten Fällen gibt Z3 jedoch ein Modell zurück. Ich bin neugierig zu wissen, wie das gemacht wird. Hat es etwas mit dem neuen Entscheidungsverfahren für nichtlineare Arithmetik über Real zu tun? Welche spezifischen Instanzen (zB: Integer unter endlichem Modulus usw.) wurden erkannt, für die Z3 ein Modell für eine Multiplikationsabfrage zurückgibt? Jede Hilfe wird sehr geschätzt.Wie behandelt Z3 nichtlineare Ganzzahlarithmetik?
Antwort
Ja, das Entscheidungsproblem für nichtlineare Ganzzahlarithmetik ist unentscheidbar. Wir können das Halting-Problem für Turing-Maschinen in nichtlinearer Ganzzahlarithmetik codieren. Ich empfehle dringend das schöne Buch Hilbert's tenth problem für alle an diesem Problem interessiert.
Beachten Sie, dass, wenn eine Formel eine Lösung hat, wir sie immer mit roher Gewalt finden können. Das heißt, wir führen alle möglichen Zuordnungen auf und prüfen, ob sie der Formel entsprechen oder nicht. Dies ist nicht anders als zu versuchen, das Halting-Problem zu lösen, indem Sie einfach das Programm ausführen und prüfen, ob es nach einer bestimmten Anzahl von Schritten beendet wird.
Z3 führt keine naive Aufzählung durch. Bei einer Nummer k
codiert es jede Integer-Variable unter Verwendung von k
Bits und reduziert alles in die Anweisungslogik. Dann wird ein SAT-Löser verwendet, um eine Lösung zu finden. Wenn eine Lösung gefunden wird, konvertiert sie sie zurück in eine Ganzzahllösung für die ursprüngliche Formel. Wenn es keine Lösung für die formale Aussage gibt, versucht es, k
zu erhöhen, oder wechselt zu einer anderen Strategie. Diese Reduktion auf Aussagenlogik ist im Wesentlichen ein Modell/Lösungsfindungsprozedur. Es kann nicht zeigen, dass ein Problem keine Lösung hat. Für Probleme, bei denen jede Integer-Variable eine untere und eine obere Grenze hat, kann sie dies tun. Also muss Z3 andere Strategien verwenden, um zu zeigen, dass keine Lösung existiert.
Darüber hinaus funktioniert die Reduktion in die propositionale Logik nur, wenn es eine sehr kleine Lösung gibt (eine Lösung, die eine kleine Anzahl von zu codierenden Bits benötigt). Ich diskutiere, dass im folgenden Beitrag:
Z3 nicht gute Unterstützung hat für nichtlineare Integer-Arithmetik. Der oben beschriebene Ansatz ist sehr einfach. Meiner Meinung nach, scheint Mathematica das umfassendste Portfolio an Techniken zu haben:
http://reference.wolfram.com/legacy/v5_2/functions/AdvancedDocumentationDiophantinePolynomialSystems
Schließlich ist der nichtlineare reale Arithmetik (NLSat) Solver nicht standardmäßig für nicht-lineare Integer-Probleme verwendet wird. Bei ganzzahligen Problemen ist es normalerweise sehr ineffektiv. Trotzdem können wir Z3 zwingen, NLSat auch für ganzzahlige Probleme zu verwenden. Wir müssen einfach ersetzen:
(check-sat)
Mit
(check-sat-using qfnra-nlsat)
Wenn dieser Befehl verwendet wird, Z3 wird das Problem als ein echtes Problem lösen. Wenn keine echte Lösung gefunden wird, wissen wir, dass es keine ganzzahlige Lösung gibt. Wenn eine Lösung gefunden wird, prüft Z3, ob die Lösung Integer-Variablen tatsächlich ganzzahlige Werte zuweist. Wenn dies nicht der Fall ist, wird unknown
zurückgegeben, um anzuzeigen, dass das Problem nicht behoben wurde.
- 1. Warum ist nichtlineare reelle Arithmetik entscheidbar, nichtlineare ganzzahlige Arithmetik nicht?
- 2. nichtlineare pyplot imshow Farben
- 3. Zweck von z3 :: Taktik und z3 :: Ziel
- 4. Z3 Polarität mit Z3 als SAT-Solver
- 5. Z3-Leistung mit nicht-linearer Arithmetik
- 6. Mehrfachgewinde Z3?
- 7. Z3 Kompilierungsoption
- 8. Wie soll ich nichtlineare Gleichung mit R
- 9. Wie erzwinge ich 64-Bit-Ganzzahlarithmetik auf OS X?
- 10. Wie variabel verstecken mit Z3
- 11. Zeichnen Sie eine nichtlineare Gleichung
- 12. Lesen func interp eines z3-Arrays aus dem z3-Modell
- 13. Z3-Power-Modulo-Anweisungen
- 14. z3 C++ API & ite
- 15. Lesen einer Z3-Datei
- 16. Sortiervererbung in z3
- 17. Z3-Invariant-Check
- 18. z3 Echte Exponentiation
- 19. Segmentierungsfehler für Z3 SMT
- 20. z3/python Reale
- 21. z3 falsch sagen UNSAT
- 22. HORN Klausel Z3 Dokumentation
- 23. Z3-Quantor-Unterstützung
- 24. Wie zu TopperCase Funktion in Z3 hinzufügen?
- 25. in R, plotten eine nichtlineare Kurve
- 26. LINQ nichtlineare Reihenfolge von String-Länge
- 27. Stückweise lineare und nichtlineare Regression in R
- 28. Lineare/nichtlineare Texturabbildung eines verzerrten Quads
- 29. ggplot2: set (nichtlineare) Werte für alpha
- 30. Entscheidbare sqrt Funktion in Z3
Dies ist eine gültige Frage. Bitte stimmen Sie nicht ab oder stimmen Sie ab, um es zu schließen. Vielen Dank. –