如何使用Sympy自动简化二值有限域上的表达式?

时间:2019-06-21 15:26:44

标签: python sympy symbolic-math polynomials boolean-polynomials

我正在尝试在二值有限字段{0,1}上构造多项式,并且我希望它们使用此设置中存在的某些标识自动简化。

我尝试了以下方法:

    from sympy import *
    from sympy.polys.domains.finitefield import FiniteField
    x, y, z, t = symbols('x y z t')

    k = Poly(x+y * z*z + (x + y) + y + 1, domain=FiniteField(2))

这已经简化为:

Poly(y*z**2 + 1, x, y, z, modulus=2)

但是,z ** 2实际上与我要使用的字段中的z相同。似乎确实会自动识别出y + y =0。我如何实现另一个标识z * z = z(幂等)?

1 个答案:

答案 0 :(得分:0)

您想要的东西似乎并没有实现,但是也许您可以模拟效果:

In [54]: normalise = lambda p: Poly(ratsimpmodprime(p, [n**2-n for n in p.free_symbols]), modulus=2)                                                                                                               

In [55]: e = x+y * z*z + (x + y) + y + 1                                                                                                                                                                           

In [56]: normalise(e)                                                                                                                                                                                              
Out[56]: Poly(y*z + 1, x, y, z, modulus=2)