- •Основные направления ии.
- •Классификация сии.
- •Характеристики знаний.
- •Модели представления знаний.
- •Исчисление высказываний.
- •Интерпретация формул в логике предикатов первого порядка.
- •Системы аксиом логики предикатов.
- •Правила вывода в исчислении предикатов.
- •Автоматизация доказательства в логике предикатов.
- •Скулемовские стандартные формы.
- •Алгоритм преобразования пнф в ссф.
- •Метод резолюций.
- •Метод резолюций в исчислении высказываний.
- •Метод резолюций в исчислении предикатов. Правило унификации в логике предикатов.
- •Алгоритм унификации для нахождения наиболее общего унификатора.
- •Алгоритм метода резолюций.
- •Основы языка программирования Пролог.
- •Структура программ Турбо-Пролога.
- •Представление бинарных деревьев
- •Формирование ответа на вопрос «почему».
- •Работа с неопределенностью.
Алгоритм унификации для нахождения наиболее общего унификатора.
Пусть 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)}.
E0=E, k=0, s0=e.
D0={f(a),y}, v0=y, t0=f(a).
s1=={f(a)/y}, E1={P(f(a), g(x)), P(f(a), f(a))}.
D1={g(x),f(a)}.
Нет переменной в множестве рассогласований 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. Тогда алгоритм Евклида можно записать в виде трех фраз Хорна:
NOD (x, x, x): -.
NOD (x, y, z): - B (x, y), NOD (f (x, y), y, z).
NOD (x, y, z): -B (y, x), NOD (x, f (y, x), z).
Предикат NOD – определяет наибольший общий делитель z для натуральных чисел x и y, предикат B – определяет отношение «больше», функция f – определяет операцию вычитания. Если мы заменим предикат B и функцию f обычными символами, то фразы примут вид:
NOD (x, x, x): -.
NOD (x, y, z): - x>y), NOD (x- y), y, z).
NOD (x, y, z): -y>x), NOD (x, y- x), z).
Для вычисления наибольшего общего делителя двух натуральных чисел, например 4 и 6, добавим к описанию алгоритма четвертый дизъюнкт:
ÿ: - NOD (4, 6, z).
Последний дизъюнкт – это цель, которую мы будем пытаться вывести из первых трех дизъюнктов.