6.1 Формальная Система Опровержения 37
множеств {L
~
i
} и
n
L
0
~
j
o
позволяет избавиться от не унифицируемых литералов, вхо-
дящих в одну формулу в положительном, а в другую—в отрицательном виде. Замена
переменных позволяет избежать неунифицируемых множеств вида {x, f (x)}. Напри-
мер, {¬x, f (x)} |=
R
⊥, так как в процессе редукции (удаления литералов, ведущих к
лжи) остается пустое множество, которое семантически эквивалентно лжи.
Теорема 6.2 Пусть множество фраз S невыполнимо, тогда S выводит пустую фра-
зу в этой формальной системе опровержения (S |=
R
¤).
Эту теорему можно назвать теоремой о “полноте наоборот”: тогда как полнота в
обычном понимании означает, что, если некое выражение семантически истинно, то
оно истинно и синтаксически, эта теорема утверждает о том, что семантическая ложь
выводит пустой литерал.
Рассмотрим алгоритм проверки выполнимости множества фраз:
REPEAT {S := Res (S)} UNTIL {¤ ∈ S} : PRINT ’S невыполнимо’
Здесь Res (S)—множество резольвентов, то есть всех возможных выводов из пар фраз,
принадлежащих S. Если множество выполнимо, данный алгоритм будет работать бес-
конечно.
Пример 6.5 Запишем формулировку Парадокса Брадобрея:
∀x∀y (B (x) ∧ ¬S (y, y) → S (x, y)) ∧ ∀x∀y (B (x) ∧ S (y, y) → ¬S (x, y))
Мы хотим доказать, что ¬∃xB (x), или, что то же самое, что ∃B (x) |= ⊥, то
есть, существование семантического противоречия.
Представим данную формулу (а также цель) в виде множества фраз в нормаль-
ной форме Скулема: {¬B (x) , S (y, y) , ¬S (x, y)}, {¬B (x) , ¬S (y, y) , ¬S (x, y)}, {B (c)}.
Выведем из двух первых фраз новую: {¬B (x)}, и получим новую систему: {¬B (x)},
{B (c)}, из которой выводится пустое множество ¤.
Алгоритм представляет каждую формулу в виде набора фраз и, совмещая каждую
с каждой, пытается сократить результат с учетом унификации до получения пустой
фразы на выходе.
Можно оптимизировать алгоритм путем ввода правил, ограничивающих полный пе-
ребор. Таким образом, получаем два класса стратегий, которых придерживаются алго-
ритмы: полные стратегии, которые для противоречивого набора входных фраз всегда
рано или поздно получают на выходе ложь, и неполные, позволяющие оптимально об-
рабатывать некоторый класс задач, но допускающие невозможность найти ответ для
других (грубо говоря, алгоритм зацикливается при некоторых корректных входных
данных).