Скачиваний:
77
Добавлен:
02.05.2014
Размер:
2.54 Mб
Скачать

23.3. Исчисление высказываний

В этом и следующем разделах кратко и весьма упрощенно описываются некоторые основные идеи логики. Так, в данном разделе описывается исчисление высказываний (утверждений), а в следующем— исчисление предикатов (логических условий). Сразу же следует отметить, что описание исчисления высказываний приводится лишь для по­нимания более важной информации, изложенной ниже. Материал этих двух разделов яв­ляется основой для остальных разделов данной главы.

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

Дистрибутивные законы

£ AND ( g OR h ) = ( f AND g ) OR ( f AND h ) f OR ( g AND h ) = ( f OR g ) AND ( f OR h )

Законы Де Моргана

NOT ( f AND g ) = NOT f OR NOT g NOT ( f OR g ) = NOT f AND NOT g

Здесь f, g и h — произвольные булевы выражения.

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

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

Термы

Предположим для начала, что имеется набор объектов, называемых константами, о которых делаются различного рода утверждения (или заключения). Согласно языку, принятому в области баз данных, эти константы являются значениями из основных до­менов, а утверждением может быть, например, такое условное выражение, как "3 > 2". Тогда термом мы будем называть утверждение, которое содержит такие константы и обладает следующими свойствами.

  1. Утверждения либо не содержат логических связок (подробности приводятся ниже), либо заключены в скобки.

  2. Утверждения однозначно оцениваются либо как истинные, либо как ложные.

Например, утверждения "Поставщик с номером 'S1' находится в городе 'London'", "Поставщик с номером 'S2' находится в городе 'London'" и "Поставщик с номером 'S1' поставляет деталь с номером 'Р1'" являются термами (в рассматриваемом примере они оцениваются соответственно как истинное, ложное и истинное). И наоборот, ут­верждения "Поставщик с номером 'S1' поставляет некоторую деталь с номером р", где р— переменная, и "Поставщик с номером 'S5' когда-нибудь в будущем будет постав­лять деталь с номером 'Р1'" не являются термами, поскольку их нельзя однозначно оце­нить как истинные или ложные.

Формулы

Формула исчисления высказываний или, в более общем смысле, исчисления преди­катов используется в СУБД, помимо всего прочего, и для представления запросов.

<Формула>

::= <терМ>

NOT <терМ>

<терИ> AND <формула> <терМ> OR <формула> <тери> => <формула>

<терм>

::= <атомарная формула> | ( <формула> )

Формулы вычисляются исходя из истинности значений входящих в них термов с ис­пользованием обычных таблиц истинности для связок. Здесь следует отметить некото­рые важные особенности.

1. Параметр <атомарная формула>— это логическое выражение, которое не содер­жит связок и не заключено в скобки.

2. Символом "=>" обозначается связка типа логической импликации. По определению выражение f => g логически эквивалентно выражению NOT f OR g.

Замечание. В главе 7 и других главах для этой связки использовалась конструкция "IF ... THEN

  1. К связкам применяются обычные правила приоритета выполнения (NOT, за­тем AND, затем OR, затем =>), что позволяет избежать многократного исполь­зования скобок.

  2. Высказывание — это просто элемент типа <формула>, как он определен выше. Термин "формула" употребляется просто для согласования с материалом следую­щего раздела.

Правила вывода

Правила вывода для исчисления высказываний имеют следующий вид.

(= f => g

Здесь символом " f=" обозначена фраза "Всегда верно, что". Обратите внимание, что такие символы необходимы для составления метаутверждений, т.е. утверждений об ут­верждениях. Ниже приведено несколько примеров правил вывода.

  1. И f AND g ) => f

  2. |= f => ( f OR g )

  3. f= ( { f => g ) A№ { g => h ) ) => ( f => л )

  4. |= ( f AND ( f => g ) ) => g

Замечание. Это чрезвычайно важное правило называется правилом отделения (modus ponens). Неформально оно интерпретируется так: если f истинно и из f следует д, то д также должно быть истинным. Допустим, например, что каждый из приведенных ниже фактов является истинным.

а) У меня нет денег.

б) Если у меня нет денег, я должен мыть посуду.

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

в) Я должен мыть посуду. Вот еще примеры правил вывода.

  1. (i ( f => ( дг => л ) ) => ( ( f AND д ) я )

  2. |= ( j f OR д ) AND ( NOT д OR л ) ) => ( f OR h )

Замечание. Также очень важным является правило, которое называется правилом резолюции. Более подробно оно описывается ниже, а затем мы вернемся к нему в разделе 23.4.

Доказательства

Теперь нам известно все, что необходимо для создания формальных доказательств в контексте исчисления высказываний. Задача доказательства состоит в определении, бу­дет ли некоторая данная формула д, т.е. заключение, логическим следствием (выводом) некоторого набора формул fl, f2,fn, т.е. предпосылок. Ниже дано символическое представление доказательства.

fl, f2, fn \ д

Такая форма записи с использованием символа метаутверждения " [■" интерпрети­руется как "д следует из fl, f2, fn". Подобный способ выполнения называется прямым формированием цепочки и заключается в последовательном применении правил вывода к предпосылкам, затем — к формулам, выведенным из этих предпосы­лок, затем — к формулам, выведенным из этих формул, и т.д. до тех пор, пока не бу­дет выведено заключение. Иначе говоря, процесс "последовательного связывания" со­стоит в переходе от предпосылок к заключению. Однако существует несколько вари­антов этой основной схемы.

  1. Принятие предпосылки. Если заключение д имеет вид р => д, то р принимается как дополнительная предпосылка, a g выводится из заданных предпосылок и пред­посылки р.

  2. Обратное формирование цепочки. Вместо доказательства утверждения р => g доказывается его контрапозиция (утверждение, обратное противоположному), т.е. NOT q => NOT p.

  3. Приведение к противоречию. Вместо доказательства прямого утверждения р => q полагают, что р и NOT q являются истинными, и затем приходят к проти­воречию.

  4. Резолюция. В этом методе вывода используется правило резолюции (п. 6 преды­дущего перечня).

Методику использования правила резолюции следует рассмотреть подробнее, по­скольку она широко применяется на практике и, в частности, обобщается для исчисления предикатов, в чем мы убедимся в разделе 23.4.

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

f OR g NOT g OR л

В этом случае g и NOT g по правилу резолюции можно сократить до упрощенной формулы, f OR я

В частности, на основе заданных формул f OR g и NOT g (т.е. допуская, что h являет­ся истинным) можно вывести f.

Таким образом, можно отметить, что в общем случае данное правило применяется к конъюнкции (AND) двух формул, каждая из которых является дизъюнкцией (OR) двух фор­мул. Для применения правила резолюции нужно поступить следующим образом. (Чтобы обсуждение этого вопроса было более конкретным, рассмотрим его на примере.) Допус­тим, что необходимо определить, будет ли верным следующее предполагаемое доказа­тельство (где Л, В, С и D являются формулами).

Л => ( В => С ), NOT D OR А, В [ D => С

Сначала следует принять отрицание заключения в качестве дополнительной предпо­сылки, а затем записать каждую предпосылку в отдельной строке.

л => ( В => С ) NOT D OR А В

NOT ( D => С )

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

Теперь нужно конвертировать каждую отдельную строку в конъюнктивную нормаль­ную форму, т.е. в форму, состоящую из нескольких объединенных связками AND формул, каждая из которых может содержать связки NOT и OR, но не связку AND (подробнее это опи­сано в главе 17). В рассматриваемом примере вторая и третья строки уже имеют требуемый вид. В двух других строках следует исключить все вхождения связки "=>", используя для этого ее определение на основе связок NOT и OR. В случае необходимости можно применить упомянутые выше дистрибутивные законы и законы Де Моргана. Кроме того, необходимо убрать лишние скобки и пары смежных связок NOT, которые образуют двойное отрицание. После выполнения всех этих действий строки примут следующий вид.

NOT Л OR NOT В OR С

NOT D OR A

В

D AND NOT С

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

NOT Л OR NOT В OR С

NOT D OR Л

В

D

NOT С

Далее для объединения строк начнем применять правило резолюции. Для этого выбе­рем пару "совмещаемых" строк, одна из которых содержит часть формулы, а другая — ее отрицание. Например, выберем первые две строки, содержащие NOT Л и Л соответст­венно. После их совмещения получится следующий результат.

NOT D OR NOT В OR С

В

D

NOT С

(Замечание. В общем случае необходимо также сохранить две исходные строки, од­нако в данной ситуации они больше не нужны.) Теперь можно снова применить правило резолюции для первых двух строк (совмещая NOT В и В), в результате чего будет получе­но следующее.

NOT U OR С D

NOT С

После еще одного совмещения первых двух строк (NOT D и D) получится приведенный ниже результат.

С

NOT С

Наконец после заключительного совмещения (С и NOT С) будет получено пустое множе­ство заключений, которое обычно обозначается как "[ ]" и представляет собой противоре­чие. Таким образом, путем приведения к противоречию получен нужный результат. |

Соседние файлы в папке Дейт К. Дж. Введение в системы баз данных [7 издание]