具有存在性量词的Z3查询返回错误结果

时间:2018-07-04 08:02:11

标签: z3 z3py

我构造了以下

s=Solver()
s.add(ForAll([n],Implies(n>=0,x(n + 1) == If((x(n)==0),0,1))))
s.add(x(0) == 0)
s.add(Not(Exists([n],Implies(n>=1,(x(n)!=0)))))

上述查询返回unsat似乎不正确?

类似地

s=Solver()
s.add(ForAll([n],Implies(n>=0,x(n + 1) == If((x(n)==0),1,1))))
s.add(x(0) == 0)
s.add(Not(Exists([n],Implies(n>=1,(x(n)!=0)))))

上述查询返回unsat似乎不正确?

请帮助我了解上述查询中有什么问题吗?

1 个答案:

答案 0 :(得分:2)

仅您的存在性就已无法满足,如果用if-then-else代替含义,则可能更明显:

not exists n :: 1 <= n ? x(n) != 0 : true

因此,对于任何n < 1,您都认为

not exists n :: true

那显然不是真的。