Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Инстр сред разр ИС.docx
Скачиваний:
11
Добавлен:
18.09.2019
Размер:
219.09 Кб
Скачать

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

Рассмотрим особенности алгоритма унификации в MLL:

1. Термы в MLL унифицируются при выполнении условий унификации, которые являются одинаковыми для   предков и доменов: XY и XY  0.

2. Пусть х является термом уровня i, и в тоже время, он является   предком терма следующего нижележащего уровня. Терм х унифицируется и автоматически унифицируются- предок терма следующего нижележащего уровня.

Приведем разработанный алгоритм унификации для модифицированного синтаксиса MLL.

Шаг 1. Установить k=0, Wk =W, Sk =, где W – унифицируемые выражения, Sk – наиболее общий унификатор и  – пустая подстановка.

Шаг 2. Если Wk является одноэлементным множеством, то W унифицируемо, S=Sk и стоп. В противном случае переход к шагу З.

Шаг 3. Каждая из литер в Wk рассматривается, как цепочка символов и выделяются первые подвыражения литер, не являющихся одинаковыми у всех элементов Wk, т.е. образуется так называемое множество рассогласований типа { (vk/Vk)//V, (tk/Tk)//T }.

Если vk – переменная, а tk – терм, или vk­ – функция, а tk переменная или функция, то перейти к шагу 4.

В противном случае стоп: W не унифицируемо.

Шаг 4. Проверка условий унификации предков.

Если V  T или V  T = Z () (условия унификации выполняются), то перейти к шагу 5.

В противном случае стоп: W не унифицируемо.

Если предками являются термы и они совпадают, то перейти к шагу 5.

В противном случае стоп: W не унифицируемо.

Шаг 5. Проверка условий унификации доменов:

а) если vk – переменная, определенная на домене Vk, а tk константа, определенная на домене T, и T  V, то перейти к шагу 6. В противном случае стоп: W не унифицируемо.

б) если vk – переменная, определенная на домене Vk, а tk переменная, определенная на домене Tk, и TkVk=Zk (), то перейти к шагу 6. В противном случае стоп: W не унифицируемо.

в) если vk - переменная, определенная на домене Vk, а tk – функция, определенная на домене Tk, и Tk  Vk=Zk () , то перейти к шагу 6. В противном случае стоп: W не унифицируемо.

г) если vk - функция, определенная на домене Vk, а tk функция, определенная на домене Tk, и Tk  Vk или Vk  Tk ,то перейти к шагу 6. В противном случае стоп: W не унифицируемо.

Шаг 6. Если vk - переменная, а tk - константа или функция, то Sk+1 = Sk  {tk / vk } и Wk+1 = Wk{ tk / vk }, где  - композиция подстановок, а запись Wk{ tk / vk } обозначает замену vk на tk в Wk (см. замечание).

Если vk - переменная, а tk - переменная, то Sk+1 = Sk  {zk/tk, zk/vk } и Wk+1 = Wk{zk / tk, zk / vk }, где zk -переменная, отличная от vk и tk .

Если vk и tk - функции, то в унифицируемое выражение подставляется функция, область значений которой является подмножеством области значений другой функции.

Замечание. Запись {tk /vk } означает замену (vk/Vk)//V на (tk/Tk)//T во всех вхождениях vk как терм и замену vk на tk во всех вхождениях vk как-предка. Аналогично, когда vk и tk определены на термах.

Шаг 7. k=k+1, перейти к шагу 2.

В случае, когда объекты состоят из одной компоненты, сортность термов не указывается в префиксе и шаг проверки унификации доменов термов в формулах пропускается, поскольку области определения термов однозначно задаются их -предками.

Рассмотрим пример использования разработанного алгоритма унификации. Пример приведен для случая, когда объекты в качестве компонент имеют несколько объектов. Иерархические структуры приведены на рис. 22, 23.

Пример 3. W={ P( (a1/A1)//X, (x0/X0)//a1, (y1/Y1)//Y, (f((x0/X0)//a1)/W0)//y1),

P((v1/V1)//V,(g((w1/W1)//W)/X0)//v1,(w1/W1)//W, (w0/W0)//w1) }

1. W0=W; S0=

2. { (a1/A1)//X, (v1/V1)//V} – множество рассогласований

3. Полагаем, что X  V и A1  V1,

4. S1=S0  {a1/v1}

W1= { P( (a1/A1)//X, (x0/X0)//a1, (y1/Y1)//Y, (f((x0/X0)//a1)/W0)//y1),

P( (a1/A1)//X, (g((w1/W1)//W)/X0)//a1, (w1/W1)//W, (w0/W0)//w1) }

5. {(x0/X0)//a1, (g((w1/W1)//W)/X0)//a1} – множество рассогласований.

S2=S1 { g((w1/W1)//W)/x0 }

W2= { P( (a1/A1)//X, (g((w1/W1)//W)/X0)//a1, (y1/Y1)//Y,(f((g((w1/W1)//W)/X0)//a1)/W0)//y1 ),

P( (a1/A1)//X, (g((w1/W1)//W)/X0)//a1, (w1/W1)//W, (w0/W0)//w1) }

7. { (y1/Y1)//Y, (w1/W1)//W} – множество рассогласований

8. Полагаем, что WY=Z () и W1Y1=Z1 ().

9. S3=S2{z/y1, z/w1}

W3= { P( (a1/A1)//X, (g((z/Z1)//Z)/X0)//a1, (z/Z1)//Z,

(f((g((z/Z1)//Z)/X0)//a1)/W0)//z ),

P( (a1/A1)//X, (g((z/Z1)//Z)/X0)//a1, (z/Z1)//Z,

(w0/W0)//z) }

10. { (f((g((z/Z1)//Z)/X0)//a1)/W0)//z, (w0/W0)//z } – множество рассогласований

11. S4=S3  { f((g((z/Z1)//Z)/X0)//a1)/w0}

W4= { P( (a1/A1)//X, (g((z/Z1)//Z)/X0)//a1, (z/Z1)//Z,

(f((g((z/Z1)//Z)/X0)//a1)/W0)//z ),

P( (a1/A1)//X, (g((z/Z1)//Z)/X0)//a1, (z/Z1)//Z,

(f((g((z/Z1)//Z)/X0)//a1)/W0)//z ) } =

{ P( (a1/A1)//X, (g((z/Z1)//Z)/X0)//a1, (z/Z1)//Z, (f((g((z/Z1)//Z)/X0)//a1)/W0)//z ) }

12. W4 - одноэлементное множество; S=Sk

Стоп.

В качестве процедуры вывода используется линейная входная резолюция, которая является полной для хорновских дизъюнктов и обладает большей эффективностью по сравнению с разработанными модификациями принципа резолюции.

Рис. 22. Иерархические структуры для примера 3

Рис. 23. Иерархические структуры для примера 3