Z3:无效的有界变量

Z3: Invalid bounded variables

我试图在 Z3 (Python) 中查看句子的有效性,但我收到以下消息:Invalid bounded variable(s)

我将我遵循的步骤复制到这里:

v, a, b, c, d, e = Ints('v a b c d e') 

lt_1 = (v == 4)
lt_2 = (v == 2)
lt_3 = (v == 3)
lt_4 = (v == 5)
lt_5 = (v == 0)
lt_6 = (v >= 0)
lt_7 = (v <= 4)

s_vars = [v]
e_vars = [a, b, c, d]
pos_lts = [lt_1, lt_2, lt_3, lt_4, lt_5, lt_6, lt_7]
neg_lts = []
posNeg_Conjunction = And(And(pos_lts), And(neg_lts))
universal = ForAll([e_vars], (posNeg_Conjunction))

pol_phi = Exists([s_vars], universal)
solve(pol_phi)

注意有一个空列表 neg_lts(故意做的)。

由于公式中没有出现全称量化变量(也是故意的),我测试修改了最后一部分代码,以防万一:

...
posNeg_Conjunction = And(And(pos_lts), And(neg_lts))
universal = posNeg_Conjunction

pol_phi = Exists([s_vars], universal)
solve(pol_phi)

但仍然得到相同的错误(但现在在 Exists 部分)。如果我将变量设置为 Reals,也没有任何变化。所以我不知道错误在说什么边界。

有什么想法吗?

你这里那里有几个错别字,很难复制。但最重要的是,你需要一个单变量或一个变量列表在量化的位置,它们都需要事先声明。还要修复您的其他拼写错误,以下内容将通过:

from z3 import *

v, a, b, c, d, e = Ints('v a b c d e').

lt_1 = (v == 4)
lt_2 = (v == 2)
lt_3 = (v == 3)
lt_4 = (v == 5)
lt_5 = (v == 0)
lt_6 = (v >= 0)
lt_7 = (v <= 4)

s_vars = [v]
e_vars = [a, b, c, d]
pos_lts = [lt_1, lt_2, lt_3, lt_4, lt_5, lt_6, lt_7]
neg_lts = []
posNeg_Conjunction = And(And(pos_lts), And(neg_lts))
universal = ForAll(e_vars, (posNeg_Conjunction))

pol_phi = Exists(s_vars, universal)
solve(pol_phi)

当运行时,它打印no solution。我没有试图理解您的表述,所以我猜这是意料之中的;您的问题似乎主要是关于如何在 z3py 中正确编写量化公式。