如何在 Z3 中使用替代方法将变量替换为 True 它不起作用并且它替换为 ζ1 并且简化方法也不起作用?
How to use substitute method in Z3 to replace a variable to True its not working and it replaces with ζ1 and also simplify method doesn't work?
这是下面的代码。我也尝试将其转换为 Bool 和 BoolRef 但在这里它也不起作用:-
print(A)
substitute(A, (Var[0], Bool(True) )) # where Var[0] = x_0_2
Output:-
And(And(And(And(x_0_3, Not(x_0_2)), Not(x_0_1)), Not(x_0_0)),
And(And(And(x_1_3 == x_0_0, x_1_2 == x_0_3),
x_1_1 == x_0_2),
x_1_0 == x_0_1))
x_0_3 ∧ ¬ζ1 ∧ ¬x_0_1 ∧ ¬x_0_0 ∧ x_1_3 = x_0_0 ∧ x_1_2 = x_0_3 ∧ x_1_1 = ζ1 ∧ x_1_0 = x_0_1
如果您 post 编写人们可以自己 运行 的代码,那么 Stack-overflow 的效果最好;如果看不到您正在做的事情的其他部分,其他人就不可能弄清楚还有什么可能导致您的代码出现问题。
话虽如此,下面是用 True
代替变量的方法:
from z3 import *
x, y = Bools('x y')
expr = And(x, Or(y, And(x, y)))
print expr
expr2 = substitute(expr, (x, BoolVal(True)))
print expr2
print simplify(expr2)
当我 运行 这个时,我得到:
And(x, Or(y, And(x, y)))
And(True, Or(y, And(True, y)))
y
这显示了替换的效果和表达式的进一步简化。请注意使用术语 BoolVal(True)
来访问常量值 True
作为布尔表达式。
这是下面的代码。我也尝试将其转换为 Bool 和 BoolRef 但在这里它也不起作用:-
print(A)
substitute(A, (Var[0], Bool(True) )) # where Var[0] = x_0_2
Output:-
And(And(And(And(x_0_3, Not(x_0_2)), Not(x_0_1)), Not(x_0_0)),
And(And(And(x_1_3 == x_0_0, x_1_2 == x_0_3),
x_1_1 == x_0_2),
x_1_0 == x_0_1))
x_0_3 ∧ ¬ζ1 ∧ ¬x_0_1 ∧ ¬x_0_0 ∧ x_1_3 = x_0_0 ∧ x_1_2 = x_0_3 ∧ x_1_1 = ζ1 ∧ x_1_0 = x_0_1
如果您 post 编写人们可以自己 运行 的代码,那么 Stack-overflow 的效果最好;如果看不到您正在做的事情的其他部分,其他人就不可能弄清楚还有什么可能导致您的代码出现问题。
话虽如此,下面是用 True
代替变量的方法:
from z3 import *
x, y = Bools('x y')
expr = And(x, Or(y, And(x, y)))
print expr
expr2 = substitute(expr, (x, BoolVal(True)))
print expr2
print simplify(expr2)
当我 运行 这个时,我得到:
And(x, Or(y, And(x, y)))
And(True, Or(y, And(True, y)))
y
这显示了替换的效果和表达式的进一步简化。请注意使用术语 BoolVal(True)
来访问常量值 True
作为布尔表达式。