带有存在量词 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
这显然不是真的。
我构建了以下
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
这显然不是真的。