- •Построение доказательств в логике высказываний
- •Аксиоматический метод
- •Принцип резолюций
- •Метод Вонга
- •Метод натурального исчисления
- •Задания на практическую работу по логике высказываний
- •Решения
- •Примеры решения задач
- •С помощью средств предыдущего примера доказать клаузу:
- •Составить легенды для приведенных ниже четырех клауз.
- •Операции над предикатами и кванторами
- •Построение доказательств в логике предикатов
- •Задания на практическую работу по логике предикатов
- •Разбор решений задач по логике предикатов
Построение доказательств в логике предикатов
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 =
zP3
=C(z);
[A(a) & А(b)]v([В(с )vB(d)] & [С(е) & С(f)]) =
= ([А(a) & А(b)]v[В(с)vB(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
uP(w,u)
&
&
y
xР(х, у)) =
х
yP(y,x)
&
u
wР(u,w) .
Здесь можно ввести следующие обозначения:
А =
x
у
Р(x, у) =
w
uР(w,u) =
u
wP(u,w)
B =
u
w
P(w, u) =
y
x
P(x, y) =
x
y
P(y, x)
В этих обозначениях тождество выглядит следующим образом:
(-AvВ) & (А & В) = В & А .
Производя элементарные преобразования, мы можем убедиться в справедливости последнего равенства. Следовательно, и исходное тождество составлено верно.
Пример 2. Пусть дана предикатная клауза:
x
у
Р(х, у) ->
wР(a,w),
xР(а, х) ->
->
х
yР(у, х) =>
u
wР(u,w) ->
w
uP(u,w).
Введем обозначения:
А =
х
у
Р(х, у) =
u
wP(u,w)
, В =
wP(a,w)
=
xР(а,x) ,
С =
х
yР(у, х) =
w
uР(u,w) .
Получим:
А -> В, В -> С => А -> С.
Как известно, формула транзитивности верна, следовательно, и предикатная клауза тоже верна.
Итак, доказательство справедливости первых двух предикатных выражений свелось к простой процедуре идентификации их с соответствующими выражениями, существующими в логике Буля и логике высказываний. Рассмотрим более сложные примеры.
Пример 3.Доказать истинность клаузы:
w
uР(u,w) ->
u
wP(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
wB(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 =
х
yB(x,y);
В2 -> -В3, -А1 -> B1, -А2 => -B1 & -A1; -В2v-В3,A1vВ1, -А2 => 0.
A1, -А2 => 0,
x
у
А(х, у), -(
у
А(k, у) => 0,
В1, -В2 => 0,
x
yВ(х, у), -(
xВ(х,x)) => О,
B1, -В3 => 0,
x
yB(х, у), -(
x
у
В(х, у)) => 0.
Отсюда следует истинность исходной клаузы.
Пример 5.Докажем справедливость клаузы:
x
yА(х, у)v
y
xВ(х, у)v
u
r
wС(u,r,w),
y
xA(y,x)
->
->
x
y
C(x, y, b),
x
y
B(y, x) ->
u
r
С(u, r, a) =>
=>
x
y
zC(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).
AvВvC3,AvC2, -ВvC1 => С' & С" .
Воспользуемся свойством булеана:
С =
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)
=
xA(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, с),
zC(b,z)
=> С(b,d),
xA(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, и), А(г, Ь), А(/, с), Т(в), Т(с), А(р, *)vA(i,x)vvТ(х)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 протокола трассировки также производились склейки, но они привели к «неуспеху». Скорейшее достижение цели зависит от правильного выбора стратегии поиска и искусства программирования.

