带有存在量词 return 错误结果的 Z3 查询

Z3 query with existential quantifier return wrong result

我构建了以下

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)))))

上面的查询 return 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)))))

上面的查询 return unsat 哪个好像不正确?

请帮我理解上面的查询有什么问题?

你的存在本身已经无法满足,如果你用 if-then-else 替换蕴涵,这可能会更明显:

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

因此,对于任何 n < 1,您假设

not exists n :: true

这显然不是真的。