Ich möchte in meinen Einschränkungen über natürliche Zahlen nachdenken.
Ich weiß, dass ich etwas tun kann wie:
x = Int('x')
und fügen Sie dann eine Einschränkung hinzu, die x >= 0
. Aber gibt es eine bessere Möglichkeit, dies zu tun, damit ich nicht jedes Mal eine zusätzliche Einschränkung hinzufügen muss, wenn ich eine Variable deklariere?
Lösung des Problems
Leider gibt es keinen "guten" Weg, um Naturtöne zu modellieren. Am besten fügen Sie >= 0
Einschränkungen nach Bedarf hinzu. Beachten Sie, dass Sie dies nach jeder mathematischen Operation tun müssen, insbesondere nach der Subtraktion.
Wenn Maschinenarithmetik akzeptabel ist (dh Modulo 2^n
für einige n
; typischerweise n=32
oder n=64
), dann reichen Bitvektoren weit aus. Beachten Sie, dass in SMTLib Bitvektoren ohne Vorzeichen sind, nur die Operationen. So können Sie davonkommen, ohne ständig zusätzliche Einschränkungen des Formulars auferlegen zu müssen >= 0
. Siehe Gibt es einen UnsignedIntSort in Z3? für eine Diskussion.
Keine Kommentare:
Kommentar veröffentlichen