У меня такой вопрос. Связан с компиляторами, так что, думаю, по теме.
Вот есть формальные грамматики, в них есть терминалы и нетерминалы. Там через правила задаются преобразования изначального нетерминала.
А что если всё что у нас имеется - это терминалы и правила их преобразования? Как это называется?
Пример, собственно ради которого я и спрашиваю - это преобразование математических выражений. Вот есть у нас формула, или можно сказать "двустороннее правило": sin(2*x) <-> 2*sin(x)*cos(x), мы по этим формулам делаем допустимые преобразования из одного вида в другой, приходя к результату.
Просто интересно как такое может называться и насколько это исследовали. Может есть уже какие-то математические и программистские правила для описания подобных преобразований (ну как с формальными грамматиками).
в общем виде, это просто система переписывания? но они канонически недетерминистичны, что вряд ли на практике встречается. Пригодилась бы информация о том по какому правилу такие преобразования происходят