Алгоритм унификации

Рассмотрим множество выражений Е ={E 1, E 2,..., E k }.

ШАГ 1. Введём индекс j 0 = 1. Присвоим Е¢ =E, q =e.

ШАГ 2. Определяем множество рассогласований Dj1 (j1 – наи-меньший из индексов несовпадающих подвыражений, j1 ³ j0). Возможны две ситуации:

а) Dj1 = Æ (для всех индексов унификация подвыражений завершена). Следовательно, исходное множество Е - уни-фицируемо, а q - его наиболее общий унификатор. Выход из алгоритма.

б) Dj1 ¹ Æ (для индекса j1 подвыражения не совпадают (j1 – минимальный из всех таких индексов). Переходим на следующий ШАГ 3.

ШАГ 3. В случае наличия ненулевого множества рассо-гласований Dj1 возможны также две ситуации:

а) существует подстановка l, унифицирующая Dj1. Тогда присваиваем q:= q ° l, Е¢:= Е¢ l,

j 0 := j1. Переход на ШАГ 2 (Продолжение выполнения алго-ритма).

б) не существует подстановки l, унифицирующей Dj1. В этом случае исходное множество Е - не унифицируемо. Вы-полнение алгоритма прекращается.

Пример 6. Определить унифицируемость множества выражений Е ={E 1, E 2, E 3 , E4} = {P(x, y, z, u), Р(f(u, z), g(a), z), Р(y, y, z), Р(f(a,z), y, z) }.

Решение.

1. Индекс j 0 = 1. Присвоим Е¢ =E, q =e.

2. Поскольку подвыражения на первых местах не совпада-


ют, то j1 =1 и множество рассогласований D1 = { x, f (u, z), y, f (a, z)}. Подстановка l, унифицирующая D1, может быть

построена. Она имеет вид: l = {f(a,z)/x, f(a,z)/y, a/u}. При-сваиваем q: = q ° l = l, Е¢:= Е¢ l = { P(f(a, z), f(a, z), z), Р(f(a, z), g(a), z), Р(f(a, z), f(a, z), z), Р(f(a, z), f(a, z), z)}.

3. Подвыражения на вторых позициях не совпадают, следо-вательно, j1 =2 и множество рассогласований D2 = {f(a, z)}, g(a)}. Подстановка, унифицирующая D2, не существует, по-скольку путем замены переменных невозможно унифици-ровать подвыражения f(a,z) и g(a). Таким образом, рассмот-ренное множество выражений не унифицируемо.

За счет применения унификации можно также доби-ваться идентичности литер внутри дизъюнктов. Дублиру-ющие литеры при этом можно устранять. Соответствующая операция называется склейкой. Рассмотрим её строгое определение.

Определение. Пусть некоторый дизъюнкт Di, содер-жащий множество литер {L}, имеет одинаковые литеры L(E1), L(E2),..., L(Ek), обладающие одинаковой положитель-ностью (все одновременно без отрицания либо - с отрица-нием). Если для множества выражений Е={E1,E2,...,Ek} cу-ществует наибольший общий унификатор s, то множество литер {L s } называется склейкой для Di.

Пример 7. Построить склейку для дизъюнкта Di = Р(х) Ú Р(f(y)) Ú Р(f(a)) Ú Q(y).

Решение. Одинаковыми являются первая, вторая и третья литеры. Е= {х, f(y), f(a)}. Наиболее общий унификатор s = {a/y, f(a)/x}. Di s = Р(f(a)) Ú Р(f(a)) Ú Р(f(a)) Ú Q(a) = Р(f(a)) Ú Q(a).

Если в результате склейки в Di s осталась одна литера, то она называется единичной.



Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: