- •Построение доказательств в логике высказываний
- •Аксиоматический метод
- •Принцип резолюций
- •Метод Вонга
- •Метод натурального исчисления
- •Задания на практическую работу по логике высказываний
- •Доказать аксиоматическим методом истинность клаузы:
- •Доказать методом Вонга истинность следующей клаузы:
- •Доказать методом резолюций истинность следующей клаузы:
- •Пусть задана система аксиом :
- •Решения
- •Примеры решения задач
- •Доказать методом натурального исчисления истинность следующей клаузы:
- •С помощью средств предыдущего примера доказать клаузу:
- •Составить легенды для приведенных ниже четырех клауз.
- •Операции над предикатами и кванторами
- •Построение доказательств в логике предикатов
- •Задания на практическую работу по логике предикатов
- •Разбор решений задач по логике предикатов
Построение доказательств в логике предикатов
1.
Основной задачей логики предикатов является установление истинности предикатных тождеств и клауз. Обозначим через Рi какой-либо предикат с произвольным числом аргументов, а через qi соответствующую ему кванторную группу. Тогда, например, закон дистрибутивности примет вид:
q1P1 v (q2 Р2 & q3 Р3) = (q1 P1 v q2 P2) & (q1 P1 v q3 P3).
В том, что он выполняется для одноместных предикатов, можно убедиться через процедуру конкретизации:
x = a, b ; q1 = x, Р1 = A(x);
y = с, d ; q2 = y, P2 = B(y);
z = e, f ; q3 = z P3 = C(z);
[A(a) & А(b)] v ([В(с ) v B(d )] & [С(е) & С(f)]) =
= ([А(a) & А(b)] v [В(с) v B(d)]) & ([А(a) & А(b)] v [С(e) & С(f)])
От того, что в квадратных скобках появится вместо дизъюнкции конъюнкция и наоборот, а также вместо одноместных предикатов будут фигурировать различные многоместные предикаты — суть тождества не изменится. Оно останется истинным в силу справедливости законов логики множеств и принципа суперпозиции, который гласит: замена какой-либо константы другой константой даже группой констант не может повлиять на истинность тождества. Именно отсюда проистекает наша уверенность в справедливости законов логики множеств и по отношению к предикатам.
Те же самые рассуждения могут быть проведены и в отношении логики высказываний. Она отличается от логики Буля аксиомой порядка -
q1P1, q2 Р2 => q1P1
Процедура конкретизации сводит предикатную аксиому порядка к npocтому высказыванию, так что если клауза верна для высказываний, она будет справедлива и для предикатов.
Как показывает практика, много ошибок приходится на неправильное обозначение предикатов при их, в принципе, правильной идентификации. Следует помнить, что положительный предикат должен иметь больше единиц, чем отрицателъный. Будет допущена ошибка, если противоречие
А1, -А2 => 0 записать как А2, -А1 => 0 .
Перейдем к анализу конкретных предикатных выражений.
Пример 1. Пусть дано следующее тождество:
( х y Р(х, у) v u w Р(w, u)) & ( w u P(w, u) &
& y x Р(х, у)) = х y P(y, x) & u w Р(u, w) .
Здесь можно ввести следующие обозначения:
А = x у Р(x, у) = w u Р(w, u) = u w P(u, w)
B = u w P(w, u) = y x P(x, y) = x y P(y, x)
В этих обозначениях тождество выглядит следующим образом:
(-A v В) & (А & В) = В & А .
Производя элементарные преобразования, мы можем убедиться в справедливости последнего равенства. Следовательно, и исходное тождество составлено верно.
Пример 2. Пусть дана предикатная клауза:
x у Р(х, у) -> w Р(a, w), x Р(а, х) ->
-> х y Р(у, х) => u w Р(u, w) -> w u P(u, w).
Введем обозначения:
А = х у Р(х, у) = u w P(u, w) , В = w P(a, w) = x Р(а, x) ,
С = х y Р(у, х) = w u Р(u, w) .
Получим:
А -> В, В -> С => А -> С.
Как известно, формула транзитивности верна, следовательно, и предикатная клауза тоже верна.
Итак, доказательство справедливости первых двух предикатных выражений свелось к простой процедуре идентификации их с соответствующими выражениями, существующими в логике Буля и логике высказываний. Рассмотрим более сложные примеры.
Пример 3. Доказать истинность клаузы:
w u Р(u, w) -> u w P(u, w), х у Р(х, у) => u Р(u, u).
ведем обозначения:
A1 = х y Р(x, у), А2 = w u Р(u, w),
B1 = u w Р(u, w), B2 = u Р(u, u)
В этих обозначениях клауза будет иметь вид:
А2 -> В1, А1 => В2 или -А2 v В1, А1, -В2 => 0.
По методу резолюций противоречие возможно, если возможны два других противоречия -
А1, -А2 => 0 , B1, -В2 => 0 .
Список из восемнадцати клауз (см. п. 1.9), который мы вывели из табл. 1.26, предоставляет нам две истинных клаузы под номерами 6 и 7. Если их представить в форме противоречия, то они будут полностью отвечать последним двум выражениям:
х y Р(х, у), - y х Р(х, у) => 0, x y Р(х, у), - x Р(x, х) => 0 .
Таким образом, истинность исходной клаузы можно считать установленной.
Пример 4. Доказать истинность клаузы:
z В(z, z) -> х –( у В(х, у)), z y -А(z, у) -> u w B(w, u), х A(b, х)=>
z x -В(x, z) & z у -А(z, y)
Процедура идентификации приводит к следующим выкладкам:
A1 = z y A(z, y), A2 = x A(b, x),
B1 = u w B(w, u) = z x B(x, z)
В2 = z В(z, z), В3 = х y B(x, y);
В2 -> -В3, -А1 -> B1, -А2 => -B1 & -A1; -В2 v -В3, A1 v В1, -А2 => 0.
A1, -А2 => 0, x у А(х, у), -( у А(k, у) => 0,
В1, -В2 => 0, x y В(х, у), -( x В(х, x)) => О,
B1, -В3 => 0, x y B(х, у), -( x у В(х, у)) => 0.
Отсюда следует истинность исходной клаузы.
Пример 5. Докажем справедливость клаузы:
x y А(х, у) v y x В(х, у) v u r w С(u, r, w), y x A(y, x) ->
-> x y C(x, y, b), x y B(y, x) -> u r С(u, r, a) =>
=> x y z C(x, z, у) & u r w С(u, r, w).
Доказательство:
A = x y A(x, у) = y x A(y, x), В = y x В(x, у) = x y B(y, x),
C' = x y z C(x, z, y),
C" = u r w C(u, r, w),
C1 = u r C(u, r, a),
C2 = x y C(x, y, b),
C3 = u r w С(u, r, w).
A v В v C3, A v C2, -В v C1 => С' & С" .
Воспользуемся свойством булеана:
С = x y z С(х, у, z) = inf (С', С") => С' & С" .
Тогда соответствующие противоречия для компенсации С1, С2 и С3 будут удовлетворены элементом С:
С1, -С => 0 , С2, -С => 0, С3, -С => 0.
После использования этого математического приема доказательство исходной клаузы становится очевидным.
Пример 6. Доказать истинность клаузы:
x y А(х, у, с) v y z А(a, у, z), у А(a, у, с) v z -A(b, a, z),
x z A(x, a, z) v y z A(b, y, z) => x z A(x, b, z).
Доказательство:
-A' = x y A(x, y, c), B' = x z A(x, a, z),
-A" = y z -A(a, у, z), В" = y z A(b, y, z),
A = у А(a, у, с) = inf(А', А"), В = z -А(b, а, z) = -sup (В', В"),
С = x z A(x, b, z); -A' v -A", inf(A',A") v -sup(В', В"), В' v В" => С .
Инфимум, супремум, верхняя и нижняя грани здесь частично конкретизированы; элемент С не влияет на истинность исходной клаузы. Продолжить доказательство клаузы далее уже не составит большого труда.
Пример 7. Любая семантика логики высказываний может быть выражена в предикатной форме. В качестве примера возьмем легенду из п. 1.6. Для нее введем следующие предикаты:
А(х) — х говорит правду,
B(x, y) – x находится внутри помещения y,
C(x, z) — x способен слышать звуки z.
Область определения переменных:
x = {a, b}, где a — кассир, b — водитель;
у= {с, ...}, где с — комната отдыха;
z = {d, ...}, где d — звуки выстрелов.
Содержание посылок и заключений следователя раскрыто в п. 1.6; здесь же приведем только их предикатную запись и необходимые разъяснения:
P1 = А(a) -> B(b, с), Р2 = В(b, с) -> z С(b, z),
Р3 = z С(Ъ, z) -> С(b, d), Р4 = А(b) -> -С(b, d).
В предикатной форме посылка Р3 является тавтологией, так как квантор существования можно расписать:
Р3 = z -C(b, z) v C(b, d) = -C(b, d) v ... v C(b, d) = l.
Тавтология не влияет на процедуру установления истинности клаузы и поэтомy может быть удалена из перечня посылок, что мы и сделаем. Использование канторов позволяет также несколько иначе проинтерпретировать заключение C1: «не все х говорят правду» или «существует х, который говорит ложь» —
C1 = А(a) -> -А(b) = -A(a) v -А(b) = x -А(x) = - x A(x) .
ложное второе следствие С2 тоже может быть записано через кванторы двумя квивалентными способами: «все х говорят правду» или «нет ни одного х, который бы обманывал» —
С2 = А(a) & А(b) = x A(x) = х А(х) .
Формальная запись всей легенды без Р3 и с заключением С1 будет:
А(a) -> В(b, с), В(b, с) -> z С(b, z), А(b) -> -C(b, d) => x -А(x).
Истинность ее установим методом резолюций:
-А(a) v В(b, с), -B(b, с) v z С(b, z), -А(b) v -C(b, d), х А(х) => 0.
Это противоречие имеет место, так как все клаузы, отвечающие необходимым склейкам, истинны:
B(b, с) => В(b, с), z C(b, z) => С(b, d), x A(x) => А(а), x А(x) => А(b).
Пример 8. Дана следующая простая легенда:
-Если лво« повсюду ходит за Петром, а Петр находится в институте, то где же удет находиться Иван?
Р(*, у) — « х находится там, где у » 'оставим клаузу:
Уг (Р(Петр, z) -> Р(Иван, z)),. Р(Петр, институт) => 3z (Р(Иван, z).
[о существу, здесь доказывается следующее предложение: существует ли такое есто z, где находился бы Иван. Преобразуем исходную клаузу в противоречие:
Р(Петр, z) v Р(Иван, z), Ґ(летр, институт), Р(Иван, z) => 0. десь и ниже кванторы общности мы будем опускать, поскольку кванторы суще-
Р(Петр, z) v Р(Иван, z) Р(Иван, г)
Рис. 1.26
При конкретизации г - институт, доказывается, что действительно существуе! такое место г, в котором мот бы находиться Иван.
Однако метод резолюций можно модифицировать так, чтобы итогом доказательства был бы не ноль, а непосредственно ответ в предикатной форме: Heat находится в институте. Этого можно достичь, если к тому, что требуется доказать, прибавить через дизъюнкцию противоположное утверждение, образова! таким образом тавтологию:
Р(Яе?йн, г) v Р(Иван, г).
Тогда дерево логического вывода будет выглядеть так, как это показано ш рис. 1.27.
Р(летр, z) v Р(Ивон,
Р(Иван, г) v Р(Иван, г)
Р(летр, г) v Р(Иван, z) Р(Петр, институт)
Р(Иван, институт)
Рис. 1.27
Большинство задач с использованием предикатов носит поисковый характер Поисковые задачи реализуются средствами языка логического программирова ния — ПРОлОГ. Остановимся на основных структурных и функциональны элементах этого языка.
Поскольку логика высказываний имеет дело с любыми правильно построен ными предложениями, существует серьезная опасность смешения объектных \ субъектных предложений, а также предложений, взятых с различных иерархиче ских уровней предметной области логики высказываний. Чтобы избежать ука занной опасности, доказываемую задачу оформляют в виде отчетливой струк туры древовидной формы. В качестве корня дерева выбирается некая цель С, ис тшшость которой необходимо установить. Она всегда фигурирует в качестве за головка правила, которое представляет собой хорновскую клаузу. Эти клаузы данном случае удобно записать в обратном порядке:
С ^ Bj, В2,
Каждая из посылок В, представляет собой подцель основной цели С и зависит, в свою очередь, от других правил^-.
В] с= Аи, А!2, ... , В2 с= А21, А22, ...
Впрочем, в роли посылок В, могут выступать не клаузы, а элементарные высказывания — факты. Далее посылки А,-, опять могут быть либо заголовками новых правил, либо фактами. Так образуется иерархическая структура древовидной формы. В логических деревьях уже не возникает описанных выше парадоксов.
В ПРОл ОГе реализована процедура унификации, с помощью которой производится сравнение цели с правилами, а правила сопоставляются с фактами. В результате унификации переменным присваиваются конкретные значения так, что предикат нели становится истинным фактом в случае положительного исхода. Чтобы понять, как осуществляется унификация, разберем конкретный пример программы.
Пример 9. Имеется следующая легенда:
Ивана интересуют компьютеры, книги и автомобили. Петра интересует нечто, что интересует Ивана, но если это нечто является техникой и если это произведено в России. Известно, что компьютеры и автомобили — это техника. Кроме того, известно, что компьютеры производятся в Америке, а автомобили — в Америке и России. Вопрос: «Что интересует Петра?»
Для удобства пользования программой все предикаты и конкретные значения переменных не кодируются отдельными буквами, а приводятся непосредственно в словах, передающих их семантику. Мы, однако, слева от текста программы приведем символьные выражения, чтобы далее у нас была возможность продемонстрировать в аналитической форме метод резолюций, который лежит в основе функционирования ПРОлОГа. Будем помнить также, что все склейки осуществляются с квантором общности, хотя сам квантор не указывается.
Программа:
1) интерес (Иван, компьютеры). A(i, a)
2) интерес (Иван, книги). A(i, b)
3) интерес (Иван, автомобили). A(i, с)
4) интерес (Петр, х) <= А(р, х)
5) <= интерес (Иван, х), А(«, ле)
6) техника (х), Т(х)
7) произведено (х, Россия). Р(*, г)
8) техника (компьютеры). Т(а)
9) техника (автомобили). Т(с)
10) произведено (компьютеры, Америка). Р(я, s)
11) произведено (автомобили, Америка). Р(с, s)
12) произведено (автомобили, Россия). Р(с, г) Цель: 13) интерес (Петр, х). А(р, х)
A(i, и), А(г, Ь), А(/, с), Т(в), Т(с), А(р, *) v A(i, x) v v Т(х) v Р(х, г), Р(д, 5), Р(с, s), Р(с, г), Afc», х) => О, Ноль можно получить только в том случае, если х = с . Тогда
нейтрализуется предикатами под номерами 3, 9, 12 и 13. Поискнужного знамени х как раз и осуществляется через процедуру унификации, которую можно отеле дить путем трассировки программы. Трассировка — это пошаговое лротоколирс вание процесса выполнения программы. Приведем трассировку нашей nporpaiv мы:
1. В: цель ()- 13,
2. Б: интерес (Петр, _ ) — 1,
3. П: интерес (Петр, _ ) — 2,
4. П: интерес (Петр, _ ) — 3,
5. У: интерес (Петр, _ ) — 4,
6. В: интерес (Иван, _ ) — 5,
7. У: интерес (Иван, компьютеры} — 1 у,
8. В: техника (компьютеры} — 6,
9. У: техника (компьютеры] — 8,
10. В: произведено (компьютеры, Россия) — 7,
11. П: произведено (компьютеры, Россия) — 10,
12. П: произведено (компьютеры, Россия) — 11,
13. Н: произведено (компьютеры, Россия) — 12,
14. П: интерес (Иван, _ ) — 5,
15. У: интерес (Иван, книги) — 2 у,
16. В: техника (книги) — 6,
17. П: техника (книги) — 8,
18. Н: техника (книги) — 9,
19. П: интерес (Иван, _) — 5,
20. У: интерес (Иван, автомобили) — 3,
21. В: техника (автомобили) — 6,
22. П: техника (автомобили) — 8,
23. У: техника (автомобили) — 9,
24. В: произведено (автомобили, Россия) — 7,
25. П: произведено (автомобили, Россия) — 10,
26. П: произведено (автомобили, Россия} — 11,
27. У: произведено (автомобили, Россия} — 12,
28. У: цель ( ) ~ 13.
Здесь использованы следующие обозначения: В — вызов нового предиката; П — повторный вызов предиката; У — успешное завершение процедуры унификации, т.е. вызванный предикат отвечает какому-либо факту; Н — неуспешное завершение унификации; у — указатель, который говорит о том, что существует по крайней мере еще один факт с подходящей унификацией. Символ подчеркивания на месте х называется анонимной переменной и полностью заменяет х при трассировке программы. Строка трассировки заканчивается числом, отвечающим номеру листинга программы.
Для того чтобы ответить на вопрос «Что интересует Петра?» или в предикатной форме — интерес (Петр, х), ПРОлОГ-система ищет факты и заголовки правил, сопоставимые с целью. Поиск всегда начинается с первой строки программы. Первые три факта несопоставимы с целью; далее следует правило, заголовок которого заменяется на три подцели. В строке 6 вызывается первая подцель. Затем ПРОлОГ-система возвращается в начало программы, где ее ожидает «успех». Выставляется указатель «у», к которому система вернется в случае «неуспеха», который может появиться в другом месте программы. В строке 8 производится вызов второй подцели — техника (компьютеры), для которой тут же находится подходящий факт (строка 9). Однако для третьей подцели — произведено (компьютеры, Россия) — нужного факта не находится (строка 13). Тогда переменная х освобождается от своей прежней конкретизации (компьютеры) и принимает новое значение — книги. Эта конкретизация не удовлетворяет вторую подцель (строка 18). Переменная вновь освобождается и принимает значение автомобили. При этой конкретизации удовлетворены все три подцели, следовательно, и поиск ответа на основной вопрос заканчивается «успехом»: Петра интересуют автомобили, т.е. интерес (Петр, автомобили} является тем конкретизированным предикатом, при котором обеспечена истинность всей клаузы,
Граф поиска ответа, сформулированного в виде цели интерес (Петр, х), представлен рис. 1.28. Бинарное дерево получилось в итоге подстановок предметных констант на место переменных, правила заменялись фактами, а цель — подцелями. Трассировка показывает, что ПРОлОГ-система не сразу вышла на это дерево склеек. В пунктах 7, 9 и 15 протокола трассировки также производились склейки, но они привели к «неуспеху». Скорейшее достижение цели зависит от правильного выбора стратегии поиска и искусства программирования.
