Перш ніж вирішувати актуальні питання, одне зауваження щодо вашої роботи досі: ліве скасування в 2.а. не є правильним в цілому, критичною парою буде просто . Отже, ви не отримуєте критичної пари 2.b. Проблема цього скасування полягає в тому, що отримане рівняння взагалі не випливає з аксіом, з яких ви почали; Наприклад, якщо ви працюєте мовою кілець, ви можете в якийсь момент отримати критичну пару , але вивести ( було б неправильно) (це означає, що у вас є лише тривіальна модель). Жодна процедура перезапису звуку, включаючи Хьюет, не повинна допускати цього зменшення.0 ∗ x ≈ 0 ∗ y x ≈ yx ∘ ( e ∘ z) ≈ x ∘ z0 ∗ x ≈ 0 ∗ yx ≈ y
З іншого боку, вам не вистачає критичних пар, які ви отримуєте, об'єднуючи (перейменовані версії) або з усіма (тобто використовуючи другий ). Отримані критичні пари єx ∘ i ( x ) ( x ∘ y ) ∘ z ∘x ∘ ex ∘ i ( x )( x ∘ y) ∘ z∘
- x ∘ ( у∘ е ) ← ( x ∘ y) ∘ e → x ∘ y , яке після зменшення стає тривіальним рівнянням , іx ∘ y≈ x ∘ y
- x ∘ ( у∘ i ( x ∘ y) ) ← ( x ∘ y) ∘ i ( x ∘ y) → е , яке не може бути зменшено далі і дає правило (якщо припустити, що в пріоритеті прямо використовується для визначення LPO, так само, як ви робили при орієнтуванні ).x ∘ ( у∘ i ( x ∘ y) ) → е∘ ▹ е▹x ∘ i ( x ) ≈e
Основна процедура завершення:
- Щоразу, коли ви створюєте критичну пару, ви зменшуєте обидві сторони, наскільки це можливо, використовуючи поточний набір правил. Якщо отримані нормальні форми не рівні, ви створюєте нове правило. Наприклад, ваш 2.c. дає нове правило . З іншого боку, об'єднання з дає критичну пару , яке можна звести до тривіального і відкидається.x ∘ ( i ( x ) ∘ z) → e ∘ z( x ∘ y) ∘ zх1∘ у1 x ∘ ( y ∘ ( z ∘ z 1 ) ) ≈ x ∘ ( y ∘ ( z ∘ z 1 ) )( x ∘ y) ∘ ( z∘ z1) ← ( ( x ∘ y)) ∘ z) ∘ z1→ ( x ∘ ( y∘ z) ) ∘ z1x ∘ ( у∘ ( z∘ z1) ) ≈ x ∘ ( y∘ ( z∘ z1) )
- Кожного разу, коли ви створюєте нове правило , ви повинні враховувати всі критичні пари між ним та існуючими правилами , перевіряючи наявність уніфікованості з кожною незмінною та навпаки. Також не забудьте перевірити наявність власних перекриттів, тобто об'єднаності з власними підтермінами, як ми це робили вище для асоціативності. Ви зупиняєтесь лише тоді, коли всі критичні пари існуючих правил були перевірені та або вироблені нові правила, або були відкинуті.l 1 → r 1 , … , l n → r n l l i ll → rл1→ r1, … , Лн→ rнллiл
Цю процедуру можна досить вдосконалити. Зокрема, ви можете використовувати нові правила для спрощення старих (і, можливо, відкидання їх, якщо вони стануть тривіальними, тобто новим правилом вони підпадають під дію), і хороший евристик для вибору наступної критичної пари для дослідження може кардинально скоротити кількість правил.