Как использовать sympy.physics.quantum Commutator?
Я хочу выработать некоторые манипуляции с коммутатором и нашел этот инструмент в симпати. Кажется, что он работает как ожидалось (но документации практически не существует, или, по крайней мере, я нашел немного, но см. Комментарий Далтона Бентли ниже), но я столкнулся со следующей проблемой.
from sympy.physics.quantum import Commutator as Comm
from sympy.physics.quantum import Operator
A = Operator('A')
B = Operator('B')
C = Comm(Comm(Comm(A,B),A),B)
D = Comm(Comm(Comm(A,B),B),A)
E = (C-D).expand(commutator=true)
E
>>> [[[A,B],A],B] - [[[A,B],B],A]
вместо ожидаемого более простого результата 0
(поскольку [[[A,B],A],B] = [[[A,B],B],A]). Итак, как я могу форсировать более простой результат без оценки коммутаторов (т.е. без вызова doit()
функция)? Обратите внимание, что
simplify(E.doit())
>>> 0
дает желаемый результат.
1 ответ
В настоящее время в SymPy Commutator._eval_expand_commutator не знает об этой идентичности, поэтому он должен расширить коммутаторы (в .doit
метод, как вы определили), чтобы иметь возможность упростить выражение.
Чтобы это работало, нужно было бы добавить особый случай (ы) к Commutator._eval_expand_commutator
метод, когда аргументы коммутатора содержат коммутаторы, а затем проверяют известные тождества.
Я открыл вопрос для этого здесь: https://github.com/sympy/sympy/issues/10892