Вот есть ряд некоммутативных произведений например pd x px py y z pz и дополнительные данные, что к примеру произведения функций x y z здесь будут коммутативны, при этом есть операторы px py pz которые действуют на соответствующую из функций и с ними произведения коммутативными не будут. Произведения операторов между собой - коммутативны за исключением оператора pd у которого коммутативно только произведение с pz. Оператор pd на функции x y z не действует.
Таким образом ряд [pd x px py y z pz] должен преобразоваться в ([z pz][(x pd) (px [py y])]). Здесь произведения [a b] - некоммутативные, а (a b) - коммутативные.
У меня трудности с созданием алгоритма. Есть идеи?