我试图了解绑定变量如何在z3
. 这里有一个片段z3py
和相应的输出。( http://rise4fun.com/Z3Py/plVw1 )
x, y = Ints('x y')
f1 = ForAll(x, And(x == 0, Exists(y, x == y)))
f2 = ForAll(x, Exists(y, And(x == 0, x == y)))
print f1.body()
print f2.body()
输出:
ν0 = 0 ∧ (∃y : ν1 = y)
y : ν1 = 0 ∧ ν1 = y
在f1
中,为什么同一个绑定变量x
有不同的索引。(0
和1
)。如果我修改f1
并带出Exists
,则x
具有相同的索引(0
)。
我想了解索引机制的原因:
我有一个 FOL 公式,用 scala 中的 DSL 表示,我想发送到z3
. 现在ScalaZ3
有一个mkBound
用于创建将index
和sort
作为参数的绑定变量的 api。我不确定应该将什么值传递给index
参数。所以,我想知道以下几点:
如果我有两个公式phi1
并且phi2
具有最大绑定变量索引n1
和n2
,那么 in 的索引是x
多少ForAll(x, And(phi1, phi2))
另外,有没有办法以索引形式显示所有变量?f1.body()
只是x
以索引形式显示我,而不是y
. (我认为原因是y
仍然绑定在f1.body()
)