sympy匹配有模数困难

时间:2018-11-14 17:04:01

标签: python match sympy modulo

this StackOverflow questionfix provided by @smichr之后,我尝试了以下操作:

>>> from sympy import *
>>> k,m,n = symbols("k m n", integer=True)
>>> (3*k+4)%2 - k%2
0                   # it works with the fix above. Thank you!
>>> p = Wild('p')
>>> q = Wild('q')
>>> e = (2*k+7)%5 + 7*k+7
>>> e
7*k + Mod(2*k + 2, 5) + 7
>>> e.match(p%5+p)
>>> e.match((p+5*q)%5+p)
>>> e.match(p%5+p+5*q)
{q_: k + 1, p_: 2*k + 2}

我希望第一个或第二个e.match为我工作(第一个{p:7*k+7}和第二个{p:7*k+7,q:-k}),但没有。这是错误吗?如果是,是否有修复/解决方法?

1 个答案:

答案 0 :(得分:1)

(复制我在the SymPy issue上写的相同内容)

比赛具有非常有限的数学知识。不知道2*k中的Mod是否可以替换为7*k

我不确定这是否容易解决。使用有限的数学匹配,匹配已经相当复杂。解决此类问题可能需要更好的设计。实际上,这让我感到震惊,这是您需要SMT求解器解决的问题,但是也许有更简单的算法可以解决。

对不起,这无法直接解决问题。