Симпи Матч имеет трудности с модулем - PullRequest
0 голосов
/ 14 ноября 2018

После этого вопроса StackOverflow и исправления , предоставленного @ 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 голосов
/ 16 ноября 2018

(Копирование того же, что я написал на выпуск SymPy )

матч имеет очень ограниченные математические знания. Он не знает, что 2*k в Mod можно заменить на 7*k.

Я не уверен, что это легко исправить. сопоставление уже довольно сложное с ограниченным математическим сопоставлением. Вероятно, для решения таких проблем потребуется лучший дизайн. На самом деле это выглядит как проблема, для решения которой вам понадобится SMT-решатель, но, возможно, существуют более простые алгоритмы, которые могут это сделать.

Извините, это не дает прямого ответа на вопрос, как решить проблему.

...