我希望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?
答案 0 :(得分:2)
简化器/重写器将产品放在便于求解器和其他简化/重写规则的格式中。处理总和时格式(* 3 (* x y z))
很方便。例如,简化器可以快速应用规则
(+ (* c t) (* d t)) --> (* (+ c d) t)
Z3使用最大共享术语,然后每个产品的内存中只有一个副本。
该表示对于可以处理产品的线性求解器也很有用。他们可以将产品(* x y z)
视为新变量。