Прежде чем обратиться к актуальным вопросам, сделайте одно замечание о вашей работе: отмена слева в 2.a. в общем случае неверно, критической парой будет просто . Следовательно, вы не получите критическую пару 2.b. Проблема с этой отменой состоит в том, что полученное вами уравнение в общем случае не следует из аксиом, с которых вы начали; например, если вы работаете на языке колец, в какой-то момент вы можете получить критическую пару , но было бы неправильно вывести (что означало бы, что у вас есть только тривиальная модель). Никакая процедура перезаписи звука, включая процедуру Хьюта, не должна допускать такого сокращения.х ∘ ( э ∘ z) ≈ x ∘ z0 ∗ x ≈ 0 ∗ yх ≈ у
С другой стороны, вам не хватает критических пар, которые вы получаете, объединяя (переменные с переименованными версиями) или со всеми (т.е. используя второй ). Результирующие критические парыx ∘ ex ∘ i ( x )( х ∘ у) ∘ z∘
- х ∘ ( у∘ д ) ← ( х ∘ у) ∘ e → x ∘ y , которое после редукции становится тривиальным уравнением , их ∘ у≈ х ∘ у
- х ∘ ( у∘ я ( х ∘ у) ) ← ( x ∘ y) ∘ я ( х ∘ y) → е , который не может быть уменьшен далее и дает правило (при условии, что в старшине используется для определения LPO, так же, как вы это делали, ориентируя ).х ∘ ( у∘ я ( х ∘ у) ) → е∘▹e▹x∘i(x)≈e
Для основной процедуры завершения:
- Всякий раз, когда вы создаете критическую пару, вы максимально сокращаете обе стороны, используя текущий набор правил. Если полученные нормальные формы не равны, вы создаете новое правило. Например, ваш 2.c. дает новое правило . С другой стороны, объединение с дает критическую пару , который можно уменьшить до тривиального и отбрасывается.( x ∘ y ) ∘ z x 1 ∘ y 1 ( x ∘ y ) ∘ ( z ∘ z 1x∘(i(x)∘z)→e∘z(x∘y)∘zx1∘y1 x ∘ ( y ∘ ( z z ∘ z 1 ) )(x∘y)∘(z∘z1)←((x∘y)∘z)∘z1→(x∘(y∘z))∘z1x∘(y∘(z∘z1))≈x∘(y∘(z∘z1))
- Всякий раз, когда вы создаете новое правило , вы должны учитывать все критические пары между ним и существующими правилами , проверяя унифицируемость с каждым не переменным и наоборот. Также не забудьте проверить, не перекрываются ли они сами, то есть неуязвимость со своими собственными подтермами, как мы делали выше для ассоциативности. Вы останавливаетесь только тогда, когда все критические пары существующих правил были изучены и либо создали новые правила, либо были отброшены.l 1 → r 1 , … , l n → r n l l i ll→rl1→r1,…,ln→rnllil
Эту процедуру можно немного улучшить. В частности, вы можете использовать новые правила, чтобы упростить старые (и, возможно, отбросить их, если они станут тривиальными, что означает, что они включены в новое правило), а хорошая эвристика для выбора следующей критической пары для анализа может резко сократить количество правил.