Поискал в интернете по поводу упрощения выражений. Вообще, общий алгоритм для упрощения относится к term rewriting system, но детальное описание со структурами данных я не нашел. Во многих случаях для term rewriting используются функциональные языки, типа Lisp, видимо там это делается достоточно просто.
А так похоже надо будет реализовывать Ad hoc алгоритм.