Я хочу проверить формулу вида:
Exists p . ForAll x != 0 . f(x, p) > 0
Реализация (которая не работает) следующая:
def f0(x0, x1, x, y):
return x1 ** 2 * y + x0 ** 2 * x
s = Solver()
x0, x1 = Reals('x0 x1')
p0, p1 = Reals('p0 p1')
s.add(Exists([p0, p1],
ForAll([x0, x1],
f0(x0, x1, p0, p1) > 0
)
))
#s.add(Or(x0 != 0, x1 != 0))
while s.check() == sat:
m = s.model()
m.evaluate(x0, model_completion=True)
m.evaluate(x1, model_completion=True)
m.evaluate(p0, model_completion=True)
m.evaluate(p1, model_completion=True)
print m
s.add(Or(x0 != m[x0], x1 != m[x1]))
Формула не выполняется.
При f0() >= 0
единственным выходом является (0, 0)
.
Я хочу получить f0() > 0
и ограничить (x0, x1) != (0, 0)
.
Что-то, что я ожидал бы, например: p0, p1 = 1, 1
или 2, 2
, но я не знаю, как удалить 0, 0
из возможных значений для x0, x1
.