Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Логика предикатов кратко.doc
Скачиваний:
53
Добавлен:
09.02.2015
Размер:
143.87 Кб
Скачать
      1. Резолюция и логический вывод в Прологе

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

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

Таким образом, принцип резолюции заключается в том, чтобы исходя из фактов, правил и отрицания цели, получить противоречие (пустой дизъюнкт).

Логика работы компьютера состоит в том, что он путём подбора контрпримеров пытается опровергнуть отрицание. Основанием для такого рода “умозаключения” служит закон противоречия, который гласит: “Не могут быть одновременно истинны утверждение и его отрицание”.

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

цель отец ( X, пётр )

компьютер фактически переводит в отрицание, которое соответствует предложению естественного языка:

нет такого X, где бы встречалось «X отец петра»

Затем компьютер находит факт отец ( иван, пётр ), и этот факт является контрпримером для указанного отрицания, а следовательно решение X = иван становится ответом-опровержением.

Логический вывод в Прологе состоит из отдельных шагов вывода, на каждом из которых применяется резолюция.

Резолюцию проще всего ввести, рассмотрев сначала одну из наиболее простых её форм. Допустим, что имеются отрицание и импликация:

отрицание B1: A

импликация B2: A B

В результате одного шага вывода из B1 и B2 получается новое предложение

B: B

Пояснение: есть два дизъюнкта A и B A; так как формула A A общезначима, то она может быть опущена.

Предложения B1 и B2 на шаге вывода называются родительскими предложениями, а предложение B называется резольвентой, которая получается в результате применения резолюции к родительским предложениям.

Например,

B1: Змея НЕ млекопитающее. % 1-ое родительское предложение

B2: ЕСЛИ кто-то кормит детёныша молоком,

ТО этот кто-то млекопитающее. % 2-ое родительское предложение

B: Змея НЕ кормит детёныша молоком. % резолюция

Рассмотрим теперь ещё более простой случай, в котором B1 является отрицанием, а B2 является фактом:

отрицание B1: A

факт B2: A

Получаем противоречие A и A

резольвента B:

Проиллюстрируем принцип резолюции на примере. Пусть необходимо доказать формулу: если из A следует B и из B следует C, то из A следует C.

Исходная формула: ( A B ) & ( B C ) ( A C )

Её отрицание: ( ( A B ) & ( B C ) ( A C ) )

Вспомним формулы:

P Q P Q % 1

( P Q ) P & Q % 2

( P ) P % 3

Получим КНФ для отрицания:

( ( A B ) & ( B C ) ( A C ) ) % 1

( ( ( A B ) & ( B C ) ) ( A C ) )

( ( ( A B ) & ( B C ) ) ( A C ) ) % 2, 3

( A B ) & ( B C ) & ( A C )

( A B ) & ( B C ) & ( A C ) % 1 (3 раза)

( A B ) & ( B C ) & ( A C )

( A B ) & ( B C ) & ( A C ) % 2

( A B ) & ( B C ) & A & C

КНФ состоит из четырёх дизъюнктов. Теперь будем выполнять резолюционный процесс.

Элементарный шаг резолюции выполняется всегда, когда имеется два дизъюнкта, в одном из которых встретилось элементарное утверждение, а в другом – его отрицание. Например, есть два дизъюнкта: P Y и P Z. Шаг резолюции порождает третий дизъюнкт: Y Z. При добавлении выражения ( Y Z ) к формуле её истинность не меняется. Резолюционный процесс порождает новые дизъюнкты. Появление пустого дизъюнкта сигнализирует о противоречии, что в свою очередь означает завершение процесса.

A B

B C

A

C

A C

C

На основании вышеизложенного можно сформулировать два вывода:

  1. Резолюция соответствует стандартному правилу вывода modus tollens, суть которого выражается следующим образом:

допуская, что не А и А если В,

выводим не В.

  1. Последовательно применяя резолюцию к родительским предложениям выводим в качестве резольвенты пустое отрицание:

допуская, что не А и А,

выводим противоречие.

Пример. Для того чтобы понять назначение выводов в контексте решения задачи, рассмотрим простой пример, связанный с логикой понятий давать и получать.

Пусть предикат даёт ( X, Y, Z ) означает

X даёт Y некоторому объекту Z.

Другой предикат получает ( Z, Y ) означает

некоторый объект Z получает Y.

Допустим, что некоторые знания об этих отношениях выражаются двумя предложениями:

В2: получает ( вы, сила ) даёт ( логика, сила, вы )

В3: даёт ( логика, сила, вы )

Задача, которую нужно решить, состоит в том, чтобы ответить на вопрос “получаете ли вы силу”?

В логическом программировании такой вопрос представляется в виде отрицания:

В1: получает ( вы, сила )

Система должна опровергнуть это отрицание при помощи других предложений. Опровержение отрицания происходит путём демонстрации того, что его допущение ведёт к противоречию.

1 шаг вывода: Система применит правило резолюции к В1 и В2 и

получит резольвенту В: даёт ( логика, сила, вы )

2 шаг вывода: Система применит резолюцию к В и В3 и

получит противоречие: В’:

Для доказательства противоречивости входных предложений В1, В2, В3 оказалось достаточно, таким образом, двух шагов вывода. Следовательно, ответом для исходной задачи является да.

Реальные программы содержат, как правило, значительно более сложные предложения, чем рассмотренное здесь. Отрицания, например, могут иметь несколько предикатов, а импликации – несколько посылок (а не одну, как в последнем примере). Поэтому, более общим является случай, когда родительские предложения имеют вид

S1: (A1, …, Ak, …, An)

S2: Ak B1, …, Bm

, где 1  k  n

Здесь некоторый предикат Ak из отрицания S1 совпадает с заключением из импликации S2.

В этой ситуации шаг вывода заменяет Ak в S1 на посылки из S2, и в качестве резольвенты получает отрицание

S: ( A1, …, Ak-1, B1, …, Bm, Ak+1, …, An )

Детали вывода, которого достаточно для выполнения общей резолюции сверху вниз, можно суммировать следующим образом:

Шаг 1. Во избежание путаницы переименовываются переменные, чтобы отрицание S1 и импликация S2 не содержали общих переменных; при этом смысл родительских предложений никак не меняется.

Шаг 2. В отрицании S1 выбирается предикат, у которого имя предиката совпадает с именем заключения в импликации S2. Если такого предиката нет, то шаг вывода становится невозможным.

Шаг 3. Для выбранного предиката из S1 и выбранного заключения из S2 ищется наиболее общий унификатор Θ. Если унификатора не существует, то шаг вывода невозможен. Вспомним, что в логике предикатов используются переменные, которые связываются в процессе унификации. Конкретное значение, полученное переменной в результате подстановки, называют унификатором.

Шаг 4. Выбранный в S1 предикат заменяется посылками из импликации S2 (если S2 является фактом, он просто вычёркивается). В результате получается новое (возможно пустое) отрицание.

Шаг 5. Унификатор Θ применяется к новому отрицанию. В результате получается резольвента S предложений S1 и S2.