可以使用Z3py计算考夫曼括号吗?
我试图用Z3py计算三叶结的考夫曼括号。到目前为止,我有以下代码:可以使用Z3py计算考夫曼括号吗?,z3,z3py,Z3,Z3py,我试图用Z3py计算三叶结的考夫曼括号。到目前为止,我有以下代码: a, b, c, d, e, f, A, B = Ints('a b c d e f A B') delta = Function('delta', IntSort(), IntSort(), IntSort()) def X(a,b,c,d): return A*delta(a,d)*delta(b,c)+B*delta(a,b)*delta(c,d) Trefoil = X(a,d,b,e)*X(e,b,f,c)*
a, b, c, d, e, f, A, B = Ints('a b c d e f A B')
delta = Function('delta', IntSort(), IntSort(), IntSort())
def X(a,b,c,d):
return A*delta(a,d)*delta(b,c)+B*delta(a,b)*delta(c,d)
Trefoil = X(a,d,b,e)*X(e,b,f,c)*X(c,f,d,a)
print simplify(simplify(Trefoil, som= True),mul_to_power=True)
使用此代码,我获得以下输出:
A**3·
delta(a, e)·
delta(b, f)·
delta(c, a)·
delta(d, b)·
delta(e, c)·
delta(f, d) +
A**2·
B·
delta(a, d)·
delta(b, e)·
delta(b, f)·
delta(c, a)·
delta(e, c)·
delta(f, d) +
A**2·
B·
delta(a, e)·
delta(c, a)·
delta(d, b)·
delta(e, b)·
delta(f, c)·
delta(f, d) +
A·
B**2·
delta(a, d)·
delta(b, e)·
delta(c, a)·
delta(e, b)·
delta(f, c)·
delta(f, d) +
A**2·
B·
delta(a, e)·
delta(b, f)·
delta(c, f)·
delta(d, a)·
delta(d, b)·
delta(e, c) +
A·
B**2·
delta(a, d)·
delta(b, e)·
delta(b, f)·
delta(c, f)·
delta(d, a)·
delta(e, c) +
A·
B**2·
delta(a, e)·
delta(c, f)·
delta(d, a)·
delta(d, b)·
delta(e, b)·
delta(f, c) +
B**3·
delta(a, d)·
delta(b, e)·
delta(c, f)·
delta(d, a)·
delta(e, b)·
delta(f, c)
现在我需要应用规则:
delta(a,b)*delta(b,c) = delta(a,c)
并使用此规则简化输出。请问,你能告诉我怎么做吗。非常感谢。您可以使用函数“替换”将子项替换为其他项。
但是,在您的示例中,没有子项delta(a,b)或delta(a,c)
因此,替代将没有效果。请记住,Z3确实如此
不在运算符的结合性或交换性下执行替换。
所以代换(x*y*z,(x*z,u))不能简化为u*y 使用Reduce的解决方案:
如果可以使用Z3PY做同样的事情,请告诉我。非常感谢您的回答。使用Mathematica可以写:delta(_a,_b)*delta(_b,_c)=delta(_a,_c)。请让我知道,如果有可能写同样的东西使用Z3Py。