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

标签 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(幂等性)?

最佳答案

你想要的似乎没有为poly实现,但也许你可以模拟效果:

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)

关于python - 如何使用 Sympy 自动简化二值有限域上的表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56706342/

相关文章:

python - 为什么要采用这种递归方式?这意味着什么?

python - Where 子句 Python 中的未知列

python - paramiko 导入错误 : DLL load failed: The operating system cannot run %1

python - "PolynomialError: only univariate polynomials are allowed"求解不等式系统时

python - 如何使用 sympy 求快速 sigmoid 函数的反函数?

python - 如何简化 sympy 中的 sqrt 表达式

python - 从字典中减去元素

python - 用三角函数求解非线性方程组

matlab - 符号表达式的最大数值简化

python - 矩阵和标量符号的混合