我想找到一个表达式的最大间隔e
对所有人来说都是如此x
。编写这样的公式的方法应该是:Exists d : ForAll x in (-d,d) . e and ForAll x not in (-d,d) . !e
.
为了得到这样一个d
, 公式f
在 Z3 中(看上面的)可能是以下内容:
from z3 import *
x = Real('x')
delta = Real('d')
s = Solver()
e = And(1/10000*x**2 > 0, 1/5000*x**3 + -1/5000*x**2 < 0)
f = ForAll(x,
And(Implies(And(delta > 0,
-delta < x, x < delta,
x != 0),
e),
Implies(And(delta > 0,
Or(x > delta, x < -delta),
x != 0),
Not(e))
)
)
s.add(Not(f))
s.check()
print s.model()
它打印:[d = 2]
。这肯定不是真的(采取x = 1
)。怎么了?
另外:通过指定delta = RealVal('1')
,一个反例是x = 0
,即使当x = 0
应该避免。