如何使用Z3-Py进行量化消除?

时间:2013-06-24 02:21:07

标签: z3 z3py

我正在尝试使用以下代码获取无量词的公式:

S, E, I, R = Reals('S E I R')
b, n, s, g, m = Reals('b n s g m')
SS = Then('qe', 'smt').solver()
SS.add(Exists([S,E,I,R], And(m+g*R-m*S-b*I*S == 0,
   b*I*S-(m+s)*E==0, s*E-(n+m)*I==0, n*I-(m+g)*R==0,
   S > 0, I > 0, E > 0, R >0)))
SS.add(b > 0, n > 0, s >0 , g >0, m>0)
print SS
print SS.check()

但我正在获得输出:

unknown

请告诉我我的代码会怎么样?非常感谢。

1 个答案:

答案 0 :(得分:1)

量词消除只适用于加法算术。它不会从变量与其他变量相乘的公式中消除量词。这就是为什么量词消除不能为您的问题产生减少的公式。

但请注意,公式存在x。 phi [x]对于形式的公式是完全可满足的 phi [x],所以不应该要求在你的公式上加上一个存在量词。 nlsat策略通过乘法处理实数上的无量词公式。