为什么*数字参数不能简化?

时间:2013-08-14 13:40:39

标签: z3 z3py

我希望simplify:flat一起评估3 * x * y * z(* 3 x y z)。相反,结果是(* 3 (* x y z))。为什么呢?

实施例

w = Int('w')
x = Int('x')
y = Int('y')
z = Int('z')
print simplify(w * x * y * z, flat=True).num_args()  # 4, which we expected
print simplify(3 * x * y * z, flat=True).num_args()  # 2, why not 4?

1 个答案:

答案 0 :(得分:2)

简化器/重写器将产品放在便于求解器和其他简化/重写规则的格式中。处理总和时格式(* 3 (* x y z))很方便。例如,简化器可以快速应用规则

(+ (* c t) (* d t)) --> (* (+ c d) t)

Z3使用最大共享术语,然后每个产品的内存中只有一个副本。 该表示对于可以处理产品的线性求解器也很有用。他们可以将产品(* x y z)视为新变量。