似乎Z3Py中的substitute(f,t)
函数在进行替换之前首先在f
上执行简化。有没有办法不允许这个?
我希望发生以下行为:
f = And(x,Not(x))
result = substitute(f,*[(Not(x),BoolVal(True))]) #sub Not(x) => True
#if we simplify f first then the result = False, but if we do the substitution first then result = x
答案 0 :(得分:2)
不幸的是,使用简化器实现substitute
过程,该简化器可以在简化期间应用替换。 substitute
Python过程调用文件api_ast.cpp中的Z3 C API Z3_substitute
。在内部,简化器称为th_rewriter
(理论重写器)。
话虽如此,我同意这不好,在某些情况下可能会非常不方便。我将在下一个版本中更改它。