Ist die Division durch Null in QF_NRA enthalten?Ist die Division durch Null in QF_NRA enthalten?
Der SMT-LIB-Standard ist in dieser Angelegenheit verwirrend. Die paper where the standard is defined diskutiert einfach diesen Punkt nicht, tatsächlich erscheinen NRA und QF_NRA nirgendwo in diesem Dokument. Einige Informationen finden Sie unter standard website. Reals sind definiert als einschließlich:
- all terms of the form (/ m n) or (/ (- m) n) where
- m is a numeral other than 0,
- n is a numeral other than 0 and 1,
- as integers, m and n have no common factors besides 1.
Dies schließt explizit Null aus dem Nenner, wenn es zu konstanten Werten kommt. Doch später wird Teilung wie folgt definiert:
-/as a total function that coincides with the real division function
for all inputs x and y where y is non-zero,
Dies wird durch eine Notiz weiterverfolgt:
Since in SMT-LIB logic all function symbols are interpreted as total
functions, terms of the form (/ t 0) *are* meaningful in every
instance of Reals. However, the declaration imposes no constraints
on their value. This means in particular that
- for every instance theory T and
- for every closed terms t1 and t2 of sort Real,
there is a model of T that satisfies (= t1 (/ t2 0)).
Dies ist scheinbar widersprüchlich, weil das erste Zitat sagt, dass (/ m 0)
ist keine Zahl in QV_NRA, aber das letztere Zitat sagt, dass /
eine Funktion ist, so dass (= t1 (/ t2 0))
für alle t1
und t2
erfüllbar ist.
Die De-facto-Realität auf dem Boden ist, dass Division durch Null scheint in SMT-LIB enthalten sein, trotz der Aussage, dass (/ m n)
ist nur eine echte Zahl, wenn n
ist nicht Null. Dies wird auf eine frühere Anfrage von mir bezogen werden: y=1/x, x=0 satisfiable in the reals?
Ich habe keine Grundschule Mentalität über Division durch Null, ich verstehe, dass wir es definieren können, wie wir wollen. Ich denke, der Standard ist schlecht formuliert und verwirrend, da _how_ '(/ m 0)' in SMT-LIB_ definiert ist, speziell in Bezug darauf, ob '(/ m 0) 'ein Real in SMT-LIB ist oder nicht. Neben dem Rat, was ich "tun muss", ist diese Antwort richtig. –
Der Fehler war, dass ich das erste Zitat fälschlich interpretierte, dass "(/ m 0)" kein Real _in SMT-LIB_ ist. Das erste Zitat stammt aus der Definition dessen, was ein Real ist, und macht keine Aussage darüber, was kein Real ist.Soweit ich das beurteilen kann, hätten sie das Bit, in dem sie sagten, "m ist eine andere Zahl als 0", weggelassen. –
Viele Leute denken, dass die Division durch Null "tabu ist", also kann diese Antwort zukünftigen Besuchern helfen. Es schien, dass Sie diesen Glauben teilten, aber Ihre Aussagen waren, dass m/0 überhaupt nicht real ist (worüber ich nichts weiß, aber Ihre Interpretation scheint richtig zu sein). Es ist auch architektonisch erforderlich, dass die Z3-Datenstrukturen jedem Begriff eine Sortierung zuweisen. Es gibt keine Sorte für "irgendein mathematisches Objekt überhaupt". Wenn m/0 nicht real wäre, würde die Sortierung auch von Modellwerten abhängen und im Allgemeinen nicht als eine bestimmte Art bestimmt werden. – usr