Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Zadachnik_11.doc
Скачиваний:
100
Добавлен:
10.09.2019
Размер:
3.19 Mб
Скачать

3.6. Принцип резолюции для логики предикатов

Если в логике высказываний нахождение контрарных пар не вызывает трудностей, то для логики предикатов это не так. Действительно, если мы имеем дизъюнкты типа C1: P(x)  R(x),

C2: P(g(y))  Q(y), то резольвента может быть получена только после применения к С1 подстановки g(y) вместо х.

Имеем C1: P(g(y))  R(g(y)),

C2: P(g(y))  Q(y),

C: R(g(y))  Q(y).

Однако для случая

C1: P(a)  R(x),

C2: P(g(y))  Q(y), очевидно, никакая подстановка в контрарную пару неприменима и никакая резольвента не образуется. Дадим определение того, что является подстановкой.

Подстановкой будем называть конечное множество вида {t1/x1, t2/x2, …, tn/xn}, где любой ti – терм, а любая xi – переменная (1  i  n), отличная от ti.

Подстановка называется фундаментальной, если все ti (1  i  n), являются фундаментальными термами. Подстановка, не имеющая элементов, называется пустой подстановкой и обозначается через .

Пусть  = {t1/x1, t2/x2, …, tn/xn} – подстановка и W – выражение. Тогда W будем называть примером выражения W, полученного заменой всех вхождений в W переменной xi (1  i  n), на вхождение терма ti. W будет называться фундаментальным примером выражения W, если  – фундаментальная подстановка.

Например, применив к W = {P(x, f(y))  Q(z)} фундаментальную подстановку  = {a/x, g(b)/y, f(a)/z}, получим фундаментальный пример W = {P(a, f(g(b)))  Q(f(a))}.

Пусть  = { t1/x1, t2/x2, …, tn/xn} и  = {u1/y1, u2/y2, …, um/ym} – две подстановки. Тогда композицией ◦ двух подстановок  и  называется подстановка, состоящая из множества { t1/x1, t2/x2, …, tn/xn, u1/y1, u2/y2, …, um/ym}, в котором вычеркиваются все ti/xi в случае ti = xi и uj/yj, если yj находится среди x1, x2, …, xn.

Пример 3.19.  = {g(xy)/x, z/y} и  = {a/x, b/y, c/w, y/z}. ◦ = {g(ab)/x, y/y, a/x, b/y, c/w, y/z} = {g(ab)/x, c/w, y/z}.

Можно показать, что композиция подстановок ассоциативна, т.е. (◦)◦ = ◦(◦).

Подстановку  будем называть унификатором для множества выражений {W1, W2, …, Wk}, если W1 = W2 = … = Wk. Будем говорить, что множество выражений {W1, W2, …, Wk} унифицируемо, если для него имеется унификатор. Унификатор  для множества выражений {W1, W2, …, Wk} называется наиболее общим унификатором (НОУ) тогда и только тогда, когда для каждого унификатора  для этого множества выражений найдется подстановка  такая, что  = ◦.

Пример 3.20. W = {P(xa, f(g(w))), P(zy, f(u))}. Тогда  = {z/x, a/y, g(w)/u} есть НОУ, а  = {b/x, a/y, g(c)/u, b/z, c/w} есть унификатор, т.е. {b/x, a/y, g(c)/u, b/z, c/w} = {z/x, a/y, g(w)/u} ◦ {b/z, c/w}.

Опишем теперь алгоритм унификации, который находит НОУ, если множество выражений W унифицируемо, и сообщает о неудаче, если это не так.

  1. Установить k = 0, Wk = W, k = . Перейти к пункту 2.

  2. Если Wk не является одноэлементным множеством, то перейти к пункту 3. В противном случае положить  = k и окончить работу.

  3. Каждая из литер в Wk рассматривается как цепочка символов, и выделяются первые подвыражения литер, не являющиеся одинаковыми у всех элементов Wk, т.е. образуется так называемое множество рассогласований типа {xk, tk}. Если в этом множестве xk – переменная, а tk – терм, отличный от xk, то перейти к пункту 4. В противном случае окончить работу: Wk не унифицируемо.

  4. Пусть k+1 = k◦{tk/xk} и Wk+1 = Wk {tk/xk}.

  5. Установить k := k + 1 и перейти к пункту 2.

Пример 3.21. Найти НОУ для W = {P(y, g(z), f(x)), P(ax, f(g(y)))}.

  1. k = 0, 0 =  и W0 = W.

  2. Так как W0 не является одноэлементным множеством, то перейти к пункту 3.

  3. {y, a}, т.е. {a/y}.

  4. 1 = 0 ◦ {a/y} =  ◦ {a/y} = {a/y}. W1 = W0 {a/y} = {P(a, g(z), f(x)), P(ax, f(g(a)))}.

  5. Так как W1 опять неодноэлементно, то множество рассогласований будет {g(z), x}, т.е. {g(z)/x}.

  6. 2 = 1 ◦ {g(z)/x} = {a/y, g(z)/x}. W2 = W1 {g(z)/x} = {P(a, g(z), f(g(z))), P(a, g(z), f(g(a)))}.

  7. Имеем {z, a}, т.е. {a/z}.

  8. 3 = 2 ◦ {a/z} = {a/y, g(a)/xa/z}. W3 = W2 {a/z} = {P(a, g(a), f(g(a))), P(a, g(a), f(g(a)))} = {P(a, g(a), f(g(a)))}.

3 = {a/y, g(a)/xa/z} есть НОУ для W.

Можно показать, что алгоритм унификации всегда завершается на шаге 2, если множество W унифицируемо, и на шаге 3 – в противном случае.

Если две или более одинаковые литеры (одного и того же знака) дизъюнкта С имеют НОУ , то С называется фактором дизъюнкта С.

Пример 3.22. Пусть C = P(x)  P(g(y))  R(x). Тогда НОУ  = {g(y)/x} и фактор дизъюнкта С = P(g(y))  R(g(y)).

Пусть С1 и С2 – два дизъюнкта, не имеющие общих переменных (это всегда можно получить переименованием переменных). И пусть L1 и L2 = L1 – литеры в дизъюнктах С1 и С2 соответственно, имеющие НОУ . Тогда бинарной резольвентой для С1 и С2 является дизъюнкт вида C = (C1 - L1)  (C2 - L2). Бинарная резольвента может быть получена одним из четырех способов:

  1. резольвента для С1 и С2;

  2. резольвента для С1 и фактора дизъюнкта С2;

  3. резольвента для фактора дизъюнкта С1 и С2;

  4. резольвента для фактора дизъюнкта С1 и фактора дизъюнкта С2.

Пример 3.23. Пусть C1= P(f(g(a)))  R(b), C2 = P(x)  P(f(y))  Q(y). Тогда C2 = C2 = P(f(y))  Q(y) и резольвентой для С1 и С2 будет С = R(b)  Q(g(a)) ( = g(a)/y).

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

Теорема 3.7. (Теорема о полноте Дж. Робинсона). Множество дизъюнктов S невыполнимо тогда и только тогда, когда существует вывод принципом резолюции из S пустого дизъюнкта.

Так как исчисление предикатов первого порядка полуразрешимо, то для выполнимого множества дизъюнктов S в общем случае процедура, основанная на принципе резолюции, будет работать бесконечно долго.

Приведем два примера, иллюстрирующих принцип резолюции для логики предикатов.

Вернемся опять к примеру 3.4. Посылку и отрицание заключения представим в виде следующего набора дизъюнктов:

  1. S(y)  C(y),

  2. S(b),

  3. V(a, b),

  4. C(z)   V(az).

Дерево вывода имеет следующий вид (Рис.3.4.)

.

Группа 227

Рис. 3.4.

Пример 3.24. Существуют студенты, которые любят всех преподавателей. Ни один из студентов не любит невежд. Следовательно, ни один из преподавателей не является невеждой.

Запишем эти утверждения на языке логики предикатов и приведем их к виду дизъюнктов:

x (C(x) & y (P(y)  L(x, y)))

x (C(x)  y(H(y)  L(x, y)))

y (P(y)  L(y))

Здесь C(x) – x есть студент;

P(x) – x есть преподаватель;

H(x) – x есть невежда;

L(x, y) – x любит у.

ССФ первой посылки имеет вид: y (C(a) & (P(y)  L(a, y))).

ССФ второй посылки имеет вид: xy (C(x)  H(y)  L(x, y)).

ССФ отрицания заключения имеет вид: y (P(y)  H(y)) =

y (P(y)  H(y)) = y (P(y) & H(y)) = P(b) & H(b).

Таким образом, имеем следующий набор дизъюнктов:

  1. C(a),

  2. P(y)  L(a, y),

  3. C(x)  H(y)  L(x, y),

  4. P(b),

  5. H(b).

Дерево вывода представлено на Рис. 3.5.

Рис. 3.5Группа 200 .

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

Отметим, что основными способами устранения причин «экспоненциального взрыва», имеющего место при доказательстве теорем практической сложности, являются использование семантики, различных эвристик и встраивание в правила вывода и алгоритмы унификации специфики конкретной предметной области.

Как правило, будем удалять из рассмотрения порождаемые дизъюнкты типа тавтологий, так как невыполнимое множество дизъюнктов, содержащее дизъюнкт-тавтологию, остается снова невыполнимым после его удаления.

Аналогично будем вычеркивать поглощенные дизъюнкты, которые также не меняют невыполнимость множества дизъюнктов. Дизъюнкт С1 поглощает дизъюнкт С2 тогда и только тогда, когда имеется подстановка , такая, что С1  С2. Дизъюнкт С2 называется поглощенным дизъюнктом. Например, пусть C1 = P(x) и C2 = P(а)  R(y). Если  = {a/x}, то С1 = P(a). Тогда P(a)  P(a)  R(y), и С1 поглощает С2, т.е. С2 можно без ущерба для вывода вычеркнуть.

Также будем удалять так называемые чистые (pure) дизъюнкты. Литера, чье отрицание отсутствует во множестве дизъюнктов, называется чистой. Дизъюнкт, содержащий чистую литеру, естественно, не может участвовать в выводе пустого дизъюнкта и поэтому он может быть удален из множества дизъюнктов.

В настоящее время известно огромное число модификаций принципа резолюции. Приведем некоторые из них:

  • семантическая резолюция (положительная гиперрезолюция, отрицательная гиперрезолюция, стратегия множества поддержки);

  • линейная резолюция (её частный случай : входная резолюция для хорновских дизъюнктов);

  • OL-резолюция;

  • резолюция Connection-Graph (граф соединений)

и т. д.

Все модификации принципа резолюции направлены на уменьшение числа порождаемых лишних дизъюнктов в процессе получения пустого дизъюнкта и на нахождение более эффективных стратегий поиска нужных дизъюнктов.

Задачи. Доказать утверждения п.2.3.(II), используя принцип резолюции для логики предикатов. Построить деревья вывода.