Estoy tratando de comprender cómo las variables vinculadas están indexadas en z3
. Aquí en un fragmento en z3py
y la salida correspondiente. (http://rise4fun.com/Z3Py/plVw1)Comprender la indexación de las variables enlazadas en Z3
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()
de salida:.
ν0 = 0 ∧ (∃y : ν1 = y)
y : ν1 = 0 ∧ ν1 = y
En f1
, ¿por qué es la misma variable ligada x
tiene índice diferente (0
y 1
). Si modifico el f1
y saco el Exists
, entonces x
tiene el mismo índice (0
).
razón quiero entender el mecanismo de indexación:
tengo una fórmula FOL representado en un DSL en Scala que quiero enviar a z3
. Ahora ScalaZ3
tiene una api mkBound
para crear variables enlazadas que toma index
y sort
como argumentos. No estoy seguro de qué valor debo pasar al argumento index
. Por lo tanto, me gustaría saber lo siguiente:
Si tengo dos fórmulas phi1
y phi2
con índices variables máximo consolidado n1
y n2
, ¿cuál sería el índice de x
en ForAll(x, And(phi1, phi2))
Además, hay una manera de para mostrar todas las variables en una forma indexada? f1.body()
me muestra x
en forma indexada y no y
. (Creo que el motivo es que y
sigue vinculado en f1.body()
)