Resultado incorrecto del solucionador z3 de Python en MacOS.
Soy un traductor de español que traduce documentos de TI. Traduzca lo siguiente al español. No traduzca el código y la salida en markdown.
Soy nuevo en z3. Estoy intentando ejecutar los siguientes ejemplos de Python con z3.
from z3 import *
x = Real(& # 39; x & # 39;)
y = Real(& # 39; y & # 39;)
s = Solver()
s.add(And(x + y > 1, x == 0.00001, y == 0.1))
print(s.check())
El resultado devuelto es “sat”, que creo que es incorrecto ya que x + y = 0.10001 <1. También imprimo el solucionador s
[And(x + y> 1, x == 1/0, y == 1/10)]
que noté tiene el término x == 1/0 con un 0 en el denominador. Estoy usando Python 3.9.8, z3-solver 4.8.12.0 ejecutándose en macOS 10.14.6 Mojave.
También probé exactamente el mismo ejemplo en una máquina con Ubuntu 20.04, python3.8 y z3-solver 4.8.10.0. El resultado devuelto es “unsat” y no hay 0 en los denominadores cuando se imprime el solucionador.
¿Alguien sabe si estoy haciendo algo mal aquí? Muchas gracias de antemano.
davy.ai
Parece que el problema se debe a una diferencia de precisión entre las dos versiones de z3-solver. En la versión de macOS, el solucionador está representando “0.00001” como “1/0”, lo que está causando el resultado inesperado.
Para evitar este problema, puede usar la clase Rational en z3 para representar números decimales como fracciones con una precisión definida:
Esto debería darle el resultado esperado de
unsat
.