- •20.7. Средства sql
- •20.8. Резюме
- •21.1. Введение
- •21.2. Некоторые аспекты технологам поддержки принятия решений
- •21.3. Проектирование базы данных поддержки принятия решений
- •21.5. Хранилища данных и магазины данных
- •21.6. Оперативная аналитическая обработка
- •21.7. Разработка данных
- •21.8. Резюме
- •22.1. Введение
- •22.2. Хронологические данные
- •22.3. Основная проблема хронологических баз данных
- •22.4. Интервалы
- •22.5. Интервальные типы
- •22.6. Скалярные операторы для интервалов
- •22.7. Операторы обобщения для интервалов
- •22.8. Реляционные операторы для обработки интервалов
- •22.9. Ограничения, включающие интервалы
- •22.10. Операторы обновления, включающие интервалы
- •22.11. Проектирование базы данных
- •22.12. Резюме
- •23.1. Введение
- •23.2. Обзор основных концепций
- •23.3. Исчисление высказываний
- •23.4. Исчисление предикатов
- •23.5. Базы данных с точки зрения доказательно-теоретического подхода
- •23.6. Дедуктивные субд
- •23.7. Обработка рекурсивных запросов
- •23.8. Резюме
- •Часть VI
- •24.1. Введение
- •24.2. Объекты, классы, методы и сообщения
- •24.3. Еще раз об объектах и объектных классах
- •Cdo для класса set (ref(emp))
- •24.4. Простой пример
- •1 | Course с001 , с001 0ffs , с001 ny offs |
- •24.5. Дополнительные аспекты
- •24.6. Резюме
- •25.1. Введение
- •X2 rational, y2 rational ) ... ;
- •25.2. Первая грубейшая ошибка
- •25.3. Вторая грубейшая ошибка
- •25.4. Вопросы реализации
- •25.5. Преимущества реального сближения двух технологий
- •25.6. Резюме
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". Тогда термом мы будем называть утверждение, которое содержит такие константы и обладает следующими свойствами.
Утверждения либо не содержат логических связок (подробности приводятся ниже), либо заключены в скобки.
Утверждения однозначно оцениваются либо как истинные, либо как ложные.
Например, утверждения "Поставщик с номером 'S1' находится в городе 'London'", "Поставщик с номером 'S2' находится в городе 'London'" и "Поставщик с номером 'S1' поставляет деталь с номером 'Р1'" являются термами (в рассматриваемом примере они оцениваются соответственно как истинное, ложное и истинное). И наоборот, утверждения "Поставщик с номером 'S1' поставляет некоторую деталь с номером р", где р— переменная, и "Поставщик с номером 'S5' когда-нибудь в будущем будет поставлять деталь с номером 'Р1'" не являются термами, поскольку их нельзя однозначно оценить как истинные или ложные.
Формулы
Формула исчисления высказываний или, в более общем смысле, исчисления предикатов используется в СУБД, помимо всего прочего, и для представления запросов.
<Формула>
::= <терМ>
NOT <терМ>
<терИ> AND <формула> <терМ> OR <формула> <тери> => <формула>
<терм>
::= <атомарная формула> | ( <формула> )
Формулы вычисляются исходя из истинности значений входящих в них термов с использованием обычных таблиц истинности для связок. Здесь следует отметить некоторые важные особенности.
1. Параметр <атомарная формула>— это логическое выражение, которое не содержит связок и не заключено в скобки.
2. Символом "=>" обозначается связка типа логической импликации. По определению выражение f => g логически эквивалентно выражению NOT f OR g.
Замечание. В главе 7 и других главах для этой связки использовалась конструкция "IF ... THEN
К связкам применяются обычные правила приоритета выполнения (NOT, затем AND, затем OR, затем =>), что позволяет избежать многократного использования скобок.
Высказывание — это просто элемент типа <формула>, как он определен выше. Термин "формула" употребляется просто для согласования с материалом следующего раздела.
Правила вывода
Правила вывода для исчисления высказываний имеют следующий вид.
(= f => g
Здесь символом " f=" обозначена фраза "Всегда верно, что". Обратите внимание, что такие символы необходимы для составления метаутверждений, т.е. утверждений об утверждениях. Ниже приведено несколько примеров правил вывода.
И f AND g ) => f
|= f => ( f OR g )
f= ( { f => g ) A№ { g => h ) ) => ( f => л )
|= ( f AND ( f => g ) ) => g
Замечание. Это чрезвычайно важное правило называется правилом отделения (modus ponens). Неформально оно интерпретируется так: если f истинно и из f следует д, то д также должно быть истинным. Допустим, например, что каждый из приведенных ниже фактов является истинным.
а) У меня нет денег.
б) Если у меня нет денег, я должен мыть посуду.
Исходя из этих фактов можно заключить, что истинным является и следующий факт.
в) Я должен мыть посуду. Вот еще примеры правил вывода.
(i ( f => ( дг => л ) ) => ( ( f AND д ) я )
|= ( j f OR д ) AND ( NOT д OR л ) ) => ( f OR h )
Замечание. Также очень важным является правило, которое называется правилом резолюции. Более подробно оно описывается ниже, а затем мы вернемся к нему в разделе 23.4.
Доказательства
Теперь нам известно все, что необходимо для создания формальных доказательств в контексте исчисления высказываний. Задача доказательства состоит в определении, будет ли некоторая данная формула д, т.е. заключение, логическим следствием (выводом) некоторого набора формул fl, f2,fn, т.е. предпосылок. Ниже дано символическое представление доказательства.
fl, f2, fn \ д
Такая форма записи с использованием символа метаутверждения " [■" интерпретируется как "д следует из fl, f2, fn". Подобный способ выполнения называется прямым формированием цепочки и заключается в последовательном применении правил вывода к предпосылкам, затем — к формулам, выведенным из этих предпосылок, затем — к формулам, выведенным из этих формул, и т.д. до тех пор, пока не будет выведено заключение. Иначе говоря, процесс "последовательного связывания" состоит в переходе от предпосылок к заключению. Однако существует несколько вариантов этой основной схемы.
Принятие предпосылки. Если заключение д имеет вид р => д, то р принимается как дополнительная предпосылка, a g выводится из заданных предпосылок и предпосылки р.
Обратное формирование цепочки. Вместо доказательства утверждения р => g доказывается его контрапозиция (утверждение, обратное противоположному), т.е. NOT q => NOT p.
Приведение к противоречию. Вместо доказательства прямого утверждения р => q полагают, что р и NOT q являются истинными, и затем приходят к противоречию.
Резолюция. В этом методе вывода используется правило резолюции (п. 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 С) будет получено пустое множество заключений, которое обычно обозначается как "[ ]" и представляет собой противоречие. Таким образом, путем приведения к противоречию получен нужный результат. |