Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Системы искусственного интеллекта (старые лекци....doc
Скачиваний:
14
Добавлен:
14.04.2019
Размер:
683.01 Кб
Скачать

Алгоритм унификации для нахождения наиболее общего унификатора.

Пусть E – множество дизъюнктов, D – множество рассогласований, k – номер итерации, sk наиболее общий унификатор на k-ой итерации.

Шаг 1. Присвоим k=0, sk=e (пустой унификатор), Ek=E.

Шаг 2. Если для Ek не существует множества рассогласований Dk, то остановка: sk – наиболее общий унификатор для E. Иначе найдем множество рассогласований Dk.

Шаг 3. Если существуют такие элементы vk и tk в Dk, что vk переменная, не входящая в терм tk, то перейдем к шагу 4. В противном случае остановка: E не унифицируемо.

Шаг 4. Пусть sk+1=sk { tk / vk}, заменим во всех дизъюнктах Ek tk на vk.

Шаг5. K=k+1. Перейти к шагу 2.

Пример 16. Рассмотрим дизъюнкты:

E={P(f(a), g(x)), P(y, y)}.

  1. E0=E, k=0, s0=e.

  2. D0={f(a),y}, v0=y, t0=f(a).

  3. s1=={f(a)/y}, E1={P(f(a), g(x)), P(f(a), f(a))}.

  4. D1={g(x),f(a)}.

  5. Нет переменной в множестве рассогласований D1.

Следовательно, алгоритм унификации завершается, множество E – не унифицируемо.

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

Определение 34: Если два или более литерала (с одиниковым знаком) дизъюнкта C имеют наиболее общий унификатор s, то Cs - называется склейкой C.

Пример 16. Рассмотрим дизъюнкты:

Пусть C= P(x)Ú P(f(y))Ú ØQ(x).

Тогда 1 и 2 литералы имеют наиболее общий унификатор s = {f(y)/x}. Следовательно, Cs=P(f(y))Ú ØQ(f(y)) есть склейка C.

Определение 35: Пусть C1 и C2 – два дизъюнкта, которые не имеют никаких общих переменных. Пусть L1 и L2 - два литерала в C1 и C2 соответственно. Если L1 и ØL2 имеют наиболее общий унификатор s, то дизъюнкт (C1s - L1s) È (C2s - L2s) называется резольвентой C1 и C2.

Пример 17:Пусть C1= P(x)Ú Q(x) и C2= ØP(a)Ú R(x). Так как x входит в C1 и C2, то мы заменим переменную в C2 и пусть C2= ØP(a)Ú R(y). Выбираем L1= P(x) и L2=ØP(a). L1 и L2 имеют наиболее общий унификатор s={a/x}. Следовательно, Q(a)Ú R(y) – резольвента C1 и C2.

Алгоритм метода резолюций.

Шаг 1. Если в S есть пустой дизъюнкт, то множество невыполнимо, иначе перейти к шагу 2.

Шаг 2. Найти в исходном множестве S такие дизъюнкты или склейки дизъюнктов C1 и C2, которые содержат унифицируемые литералы L1 Î C1 и L2 Î C2. Если таких дизъюнктов нет, то исходное множество выполнимо, иначе перейти к шагу 3.

Шаг 3. Вычислить резольвенту C1 и C2 и добавить ее в множество S. Перейти к шагу 1.

Язык логического программирования ПРОЛОГ.

Проиллюстрируем принцип логического программирования на простом примере: запишем известный метод вычисления наибольшего общего делителя двух натуральных чисел – алгоритм Евклида в виде Хорновских дизъюнктов. При этом примем новую форму записи фразы Хорна, например ØPÙØQÙØRÙS будем записывать как S: - P, Q, R. Тогда алгоритм Евклида можно записать в виде трех фраз Хорна:

  1. NOD (x, x, x): -.

  2. NOD (x, y, z): - B (x, y), NOD (f (x, y), y, z).

  3. NOD (x, y, z): -B (y, x), NOD (x, f (y, x), z).

Предикат NOD – определяет наибольший общий делитель z для натуральных чисел x и y, предикат B – определяет отношение «больше», функция f – определяет операцию вычитания. Если мы заменим предикат B и функцию f обычными символами, то фразы примут вид:

  1. NOD (x, x, x): -.

  2. NOD (x, y, z): - x>y), NOD (x- y), y, z).

  3. NOD (x, y, z): -y>x), NOD (x, y- x), z).

Для вычисления наибольшего общего делителя двух натуральных чисел, например 4 и 6, добавим к описанию алгоритма четвертый дизъюнкт:

  1. ÿ: - NOD (4, 6, z).

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