sympy match 难以取模

sympy match has difficulty with modulo

this Whosebug question, and a fix 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}),但事实并非如此。这是一个错误吗?如果有,有没有fix/workaround?

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

match 的数学知识非常有限。不知道Mod中的2*k可以换成7*k.

我不确定这是否容易解决。 match 已经非常复杂,因为它所做的数学匹配有限。可能需要更好的设计来解决此类问题。实际上,这让我觉得是那种需要 SMT 求解器才能解决的问题,但也许有更简单的算法可以解决。

抱歉,这并没有给出解决问题的直接答案。