Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Spec_Mov_3k_4k_Lect.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
1.46 Mб
Скачать

Унификация и подстановка

Термы t1 и t2 унифицируемы, если существует такая подстановка s, что s[t1] = s[t2]. В данном случае подстановка s называется унификатором, а результат этой подстановки – общей унификацией термов t1 и t2. В данном случае подстановка это отображение s: V ® T, где V – множество переменных, T – множество термов.

Выражение Е1 есть конкретизация выражения Е, если найдется такая подстановка s, что Е1 = s[Е], где s[Е] – обозначает результат замены каждой переменной Х в Е термом s(Х).

Пример

Подстановка s = {Х = вк, Y = W, U = вк, V = W, E = вк}унифицирует термы:

книга(X, Y, издат(X, 1985)), книга(U, V, издат(X, 1985)).

Общая унификация термов следующая: книга(вк, W, издат(вк, 1985)).

Наиболее общим унификатором (НОУ) для двух унифицируемых термов t1 и t2 называется такой унификатор s, что каков бы ни был другой унификатор s1, для тех же термов существует подстановка s2, удовлетворяющая условию:

s1 = s2 ° s, где ° - композиция подстановок.

Любой унификатор получается из НОУ путем воздействия на него подходящей подстановкой. Вычисление НОУ эквивалентно успеху или неудаче унификации.

Композиция подстановок

Композиция подстановок определяется следующим образом. Пусть даны подстановки:

s = {y1 = u1, y2 = u2,…, ym = um}, s2 = {x1 = t1, x2 = t2,…, xn = tn}.

Их композиция: s2 ° s это подстановка s1 следующего вида:

s1 = { x1 = s[t1], x2 = s[t2],…, xn = s[tn], y1 = u1, y2 = u2,…, ym = um},

в которой вычеркивается xi = s[ti] в случае равенства xi и s[ti] и вычеркивается yj = uj, если yj находится среди x1, x2,…, xn.

Вычисление резольвенты

В процессе построения вывода интерпретатор Пролога выполняет унификацию, определяет НОУ и вычисляет резольвенту. В самом начале вычислений исходный вопрос в программе можно считать резольвентой 0-го шага. Если найден подходящий факт, который позволяет выполнить унификацию и вычислить резольвенту, то количество подцелей в резольвенте сокращается, если для унификации и вычисления резольвенты выбрано правило, то количество подцелей в резольвенте как правило возрастает. Рассмотрим следующий небольшой пример. Пусть логическая программа выглядит следующим образом:

a:- b, c.

b.

c.

d.

?- a, d.

Фактически имеем следующее множество дизъюнктов в программе: {avØbvØc, b, c, d, ØavØd}. Процесс построения вывода выполняется от цели, т.е. от дизъюнкта ØavØd. Более того, имеет значение и порядок расположения литералов в промежуточной цели (резольвенте) и в правилах. Так, на первом шаге построения вывода формируется следующая промежуточная цель (резольвента) - ØbvØcvØd и множество дизъюнктов для построения вывода приобретает следующий вид: {avØbvØc, b, c, d, ØbvØcvØd}. Далее для построения вывода используется резольвента ØbvØcvØd и дизъюнкт b, что дает следующую промежуточную цель: ØcvØd. Для продолжения вывода формируется следующее множество дизъюнктов: {avØbvØc, b, c, d, ØcvØd}. Процесс продолжается до формирования множества {avØbvØc, b, c, d, ð}.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]