Написал программку, качественно раскрывающую скобки (не как в прошлый раз).
Четыре основные арифметические операции (+, -, *, /) работают весьма неплохо (только вот пока на многочлен делить нельзя, только на одночлен). Кроме того, есть тормозящая степень (значок ^, только натуральная, разумеется) и корень (значок @, правильно работает только корень рациональной положительной степени одночлена, при условии, что из коэффициента корень извлекается). Многочлен - список упорядоченных пар, первым компонентом которых является числовой коэффициент, а вторым - список упорядоченных пар, первым компонентом которых является название переменной, а вторым - её степень, причём все числа являются рациональными и выражаются упорядоченными парами. Таким образом, тип многочлена - ((int * int) * (string * (int * int)) list) list. Именно с этим связаны введённые мной ограничения.
Прошу всех, кому не лень, потестировать эту программу. У меня есть большое подозрение, что я выловил не все баги.