Text
                    STUDIES IN COMPUTER SCIENCE 1
AND ARTIFICIAL INTELLIGENCE ¦
PRINCIPLES OF LOGIC
AND LOGIC PROGRAMMING
G. METAKIDES
European Commission
Brussels, Belgium
A. NERODE
Mathematical Sciences Institute
Cornell University
Ithaca, NY, USA
With the cooperation of
A. SINACHOPOULOS
Universite Libre de Bruxelles
Belgium
1996
ELSEVIER
AMSTERDAM - LAUSANNE - NEW YORK - OXFORD - SHANNON - TOKYO
ПМЕТАКИДЕС
А. НЕРОУД
к ¦. '"ft, ¦-¦ ¦ >-r- <•¦*&•;<
-. tir V«V; ¦('
ПРИНЦИПЫ ЛОГИКИ
И ЛОГИЧЕСКОГО
ПРОГРАММИРОВАНИЯ
Перевод с английского
л ,; В. А. Захарова, '-*.
С:Щт Селезневой и В. В. Спанупол^
)¦¦-¦¦ ' *.
под редакцией
В. А» Садовничего и В. А. Захарова
ИЗДАТЕЛЬСТВО «ФАКТОРИАЛ»
^^ МОСКВА, 1998
„¦¦ ¦ •.{.,*»*¦¦.••**.'¦«'•


ББК 22.19 М 54 УДК 519.68 *• Издание осуществлено по инициа- инициативе и при поддержке Московско- Московского государственного университе- университета им. М. В. Ломоносова М 54 Метакидес Г., Нероуд А. Принципы логики и логическое программирование / Пер. с англ. под ред. к.ф.м.н В. А. Захаро- Захарова и акад. В. А. Садовничего. — М.: Изд-во «Факториал». 1998.— 288 с —ISBN 5-88688-037-2. Книга известных специалистов в области математической логики и логического программирования (Греция, США). Излагаются основные понятия и принципы ма- математической логики. Основное внимание уделяется вопросам применения языка математической логики для представления знаний и формальным методам доказа- доказательства теорем с использованием семантических таблиц и резолютивного вывода. На примере языка ПРОЛОГ рассматриваются принципы логического программи- программирования. Подробно анализируется механизм вычислений и методика проектиро- проектирования логических программ. Изложение отличается методическими достоинства- достоинствами — книга написана в хорошем стиле, не требует специальных предварительных знаний, содержит большое количество примеров и задач. Может быть рекомендована в качестве учебного пособия для программистов разной квалификации, специалистов по искусственному интеллекту и для всех интересующихся математической логикой, а также теорией и практикой логиче- логического программирования. Научное издание , , , < < Р 't\ Метакидес Г., Нероуд А. Принципы логики и логического программирования - '•- Формат 60 х 90/16. Гарнитура литературная. Усл. печ. л. 18. Подписано к печа- печати 12.9.1998. Тираж 1000 экз. Издательство «Факториал», 117449, Москва, а/я 331; ЛР № 063537 от 22.07.1994. Оригинал-макет подготовлен с использованием макропакета АР-Т^Х. Отпечатано с готовых диапочитивов в ППП «Типография «Наука» 121009 Москва, Шубинский пер., 6. Заказ 31 ISBN 0-444-81644-5 Copyright © 1996 by © Изд-во Элсивер, (англ.) Elsiver Science 1996 ISBN 5-88688-037-2 Translation Copyright © 1998 МГУ, пер. (русск.) ©1998 by Moscow на русск. яз., 1998 St. University. All rights reserved. Все права защищены. ПРЕДИСЛОВИЕ К РУССКОМУ ИЗДАНИЮ Мне доставляет удовольствие представить российским читателям новый учебник, написанный всемирно известными американскими математиками, профессором Корнельского университета, Анилом Нероудом совместно с признанным специалистом в области логиче- логического программирования, профессором Георгием Метакидесом. Соз- Созданная ими книга весьма необычна, и поэтому нуждается в кратком предисловии, поясняющем некоторые ее замечательные особенно- особенности. До недавнего времени математическая логика не выходила за пре- пределы «чистой» математики и обеспечивала только корректность по- построения математических теорий. Традиционно считалось, что пол- полноценное изучение этой математической дисциплины целесообраз- целесообразно начинать лишь тогда, когда объем и разнообразие математиче- математических знаний учащихся потребуют их упорядочения для того, что- чтобы осмыслить структуру и принципы устройства всей математики. Поэтому значительная часть учебников по математической логики изначально ориентированы на круг читателей, имеющих достаточно высокую математическую подготовку и свободно владеющих фор- формальным аппаратом современной математики. Вполне естественно, что при таких условиях круг людей, знакомых с методами мате- математической логики, ограничивался выпускниками математических факультетов. Но с течением лет положение дел сильно изменилось. По ме- мере развития информатики, математическая логика раскрыла свой огромным потенциал практического применения. Совершенствова- Совершенствование вычислительной техники и ее математического обеспечения привело к тому, что круг задач, для решения которых можно исполь- использовать компьютеры, существенно расширился. Стало ясно, что вы- вычислительные машины можно применять не только для численных расчетов и чисто математических или статистических исследова- исследований, но и для обработки информации и знаний самого разного рода. Возникла потребность в разработке такого языка общения с компь- компьютером, который позволял бы человеку наиболее естественным и удобным способом представлять знания, относящиеся к произволь- произвольным областям деятельности, и в создании таких методов обработки данных, которые позволяли бы компьютеру извлекать новые сведе- сведения и давать ответы на вопросы исходя из имеющихся знаний. Проведенные исследования показали, что для этой цели лучше всего подходит язык математической логики. Подобно тому, как но- новые математические теоремы доказываются на основе изначальных аксиом и ранее доказанных теорем, новые знания о предметной об- области могут быть извлечены из накопленных знаний чисто автомати- автоматически при помощи логических методов вывода. Совершенствование аппарата логического вывода привело к созданию нового направле- направления в программировании — логического программирования. Логи- Логическое программирование изменило устоявшиеся представления о
ПРЕДИСЛОВИЕ технологии проектирования компьютерных программ. В самом об- общем виде логическая программа представляет собой собрание све- сведений о предметной области решаемой задачи, записанных на язы- языке, приближенным к естественному языку человеческого общения. Обращаясь к программе с запросами, пользователь может получать все возможные ответы, логически вытекающие из той совокупности знаний, которыми располагает логическая программа. Чем полнее и детальнее будет описание области знаний, к которой относится решаемая задача, тем точнее будут ответы на поставленные вопро- вопросы. Диалог программы с пользователем теперь становится похожим на обычную беседу учителя с послушным и аккуратным учеником: учитель наделяет ученика знаниями, а ученик, опираясь на эти зна- знания, безошибочно решает задачи и отвечает на вопросы. Поэтому в логическом программировании для решения поставленной зада- задачи нужно всего лишь как можно точнее и детальнее описать, что именно требуется решить. Если решение задачи существует, то в этом случае компьютер самостоятельно «догадается», как достичь искомого решения. Логическое программирование открывает новые возможности использования компьютера. Теперь мы можем общать- общаться с ним как с интеллектуальным, хотя и несколько своеобразным, собеседником, который берет на себя значительную часть работы, связанную с организацией вычислений программы. Поэтому основ- основное внимание программиста может быть сосредоточено на самой задаче как таковой, на формировании тех знаний, которые могут оказаться полезными при ее решении. В чем секрет таких необыч- необычных свойств логического программирования? Каким образом логи- логика дает возможность компьютеру решать задачи даже тогда, когда человек не указывает алгоритмов их решения? В какой форме че- человеку нужно представить свои знания об окружающем мире для того, чтобы компьютер мог их понять и сделать из них выводы, т. е. получить новые знания? Ответы на многие возникающие вопросы такого рода можно получить, прочитав эту книгу. Ее авторам удалось преодолеть самую большую трудность, воз- возникающую при написании учебников по математической логике: они сумели изложить основные принципы и методы этой необы- необычайно формальной и абстрактной науки на очень простом и обще- общедоступном уровне, не поступившись при этом строгостью и пол- полнотой картины. Основная цель книги — объяснить читателям, как можно использовать аппарат математической логики для решения прикладных задач в самых разнообразных областях знаний. Поэто- Поэтому наибольшее внимание авторы уделяют изучению выразительных возможностей языка математической логики и эффективных мето- методов доказательства теорем. Один из таких методов — метод резо- резолюций — позволяет реализовать на практике концепцию логическо- логического программирования, согласно которой вычислительная программа может быть записана при помощи логических формул, играющих роль аксиом, а ее вычисление представлено в виде доказательства ПРЕДИСЛОВИЕ формулы-запроса. Ознакомившись в первых двух главах с основны- основными понятиями классической логики, с устройством и организаци- организацией логического вывода, читатель сможет в третьей главе без труда разобраться в технологии проектирования логических программ и механизме их функционирования. Для понимания книги не требуется никаких специальных знаний, выходящих за рамки школьной программы, и она вполне доступ- доступна большинству учащихся выпускных классов российских средних школ. В то же время в ней в той или иной мере рассмотрены основ- основные понятия классической логики, подробно описаны принципы и наиболее существенные особенности логического программирова- программирования. Поэтому эту же книгу можно рекомендовать в качестве учеб- учебного пособия по математической логике и логическому программи- программированию всем тем, кто хочет получить предварительные сведения об этих разделах математики и информатики. Читатель, освоивший эту замечательную книгу, конечно же, не должен пребывать в праздной уверенности, что он получил исчер- исчерпывающее представление о математической логике и может напи- написать сколь угодно сложные логические программы. Он овладел лишь ключиком, открывающим доступ к одному из разделов современной математики, в котором ему еще предстоит отыскать немало ценных и полезных знаний. И я надеюсь, что для многих из вас этот ключик окажется поистине золотым. .*. ;.¦¦ .¦%¦ ¦ 4- д.. ;и ;° ,Г '« .• Академик РАН В. А. Садовничий 4' .4.С.' .' •&»¦ .:.*(. S
'Л ¦'?!:? ,. Будущему информатике как мате- математической науке*. >'> *' Время покажет, в какой мере будет справед- справедливо обратное. ВВЕДЕНИЕ ВВЕДЕНИЕ и- Логика — это наука, которая изучает, каким образом мы выра- выражаем мысли, делаем умозаключения, и как все это можно предста- представить формально. К логическими высказываниями относятся прос- простые предложения и элементарные умозаключения; они подвергают- подвергаются анализу как с позиции их формы, то есть синтаксиса так и с позиции их интерпретации, иначе говоря, семантики. Изучается также и взаимосвязь синтаксиса и семантики. Первые упоминания о логике содержатся в произведениях ионий- ионийских и эллинских философов и софистов. Однако основателем на- настоящей логики как науки считается Аристотель. Первоначальный интерес к логике постепенно утрачивался по мере распространения римского владычества над Средиземноморьем. В средние века боль- большинство трудов античных философов — за исключением Платона и Аристотеля — было утеряно или уничтожено, и силлогистика Ари- Аристотеля была доступна лишь немногим избранным монахам. С открытием неевклидовых геометрий и возникновением потреб- потребности в теоретическом обосновании математического анализа ин- интерес к логике возродился. В 1879 г. Фреге впервые разработал формальный язык для математики и логики. Однако наибольший стимул к развитию логика получила в связи обнаружением пара- парадоксов теории множеств и последующим широким обсуждением их в математическом сообществе. В 1895 и 1897 годах Кантор опубликовал первую и вторую ча- части своих исследований по кардинальным и ординальным числам В этих исследованиях, составивших первоначальное обоснование теории множеств, каждая совокупность объектов рассматривалась как особая сущность, называемая множеством. Но уже в 1897 году Ьуралли-Форти обнаружил парадокс в канторовской теории мно- множеств. А в 1899 году сам Кантор опубликовал сообщение о па- парадоксе, затрагивающем его теорию кардинальных чисел. Рассел опубликовал в 1902 году упрощенную форму того же парадокса во- вошедшего в историю математики под названием «парадокс Рассела» Ьго сущность такова. В канторовской теории множеств каждое множество определяет- определяется характеристическим свойством его элементов. Пусть А — мно- множество всех множеств X; обладающих свойством X $ X, А = {X \Х i Но тогда '¦¦''"¦' yi А 6 А тогда и только тогда, когда А ? А -- что, очевидно, образует противоречие. Парадоксы теории множеств вызвали у математиков того вре- времени большие сомнения и неуверенность относительно хорошего обоснования математики. Стало понятно также, что создавать по- настоящему непротиворечивые математические теории, лишенные антиномий, можно только путем использования строгой формали- формализации математических понятий и методов. И вот тогда, благодаря настойчивым усилиям Гильберта (см. Замечание 1.4.1B)), началось развитие аксиоматического подхода, и логика приобрела свой со- современный вид. Использование и совершенствование вычислительной техники в начале 1950-ых годов привело к пониманию того, что компьютеры можно применять не только для арифметических вычислений, но также и для символьных преобразований. Таким образом, первые арифметические вычислительные программы и первые программы, призванные давать ответы на простейшие вопросы и доказывать простые теоремы, были написаны почти одновременно. Основные этапы создания общего метода, основанного на логике и позволяю- позволяющего проводить как обработку предложений, так и символьную ма- манипуляцию, были впервые осуществлены в 1965 году Робинсоном, разработавшим метод резолюций, а позднее Ковальским и Колме- роэ, которые предложили использовать логику непосредственно как язык логического программирования. В этой книге раскрываются элементарные понятия математи- математической логики, рассматриваются взаимоотношения и взаимосвязи между логикой и логическим программированием. В первой главе описана логика высказываний (PL). Вначале в ней изучается язык высказываний, а также синтаксис и семанти- семантика формул PL. Далее рассматриваются методы доказательства: ме- метод аксиоматического доказательства, представленный, главным об- образом, по причинам исторического характера, затем метод таблиц Бета, в котором доказательства сводятся к математическому ана- анализу высказываний, и, наконец, метод резолюций. В последнем из указанных методов доказательства представляются в простой, но чрезвычайно эффективной форме, которая может быть легко реа- реализована в виде программы. Перечисленные методы доказательств обоснованы соответствующими теоремами корректности и полноты. Во второй главе изучается логика предикатов (PrL). В логике предикатов более подробно изучается структура высказываний, по- поскольку язык логики предикатов существенно разнообразнее, неже- нежели язык логики высказываний. Этот язык содержит кванторы и кон- константы, предикаты и функции, и поэтому семантика PrL значитель- значительно сложнее. Среди прочих разновидностей семантики языка логи- логики предикатов особо выделяются эрбрановские интерпретации, по- поскольку они позволяют проверять выполнимость предложений PrL,
10 ВВЕДЕНИЕ используя методы PL. Далее изучаются аксиоматический метод до- доказательства, метод таблиц Бета и метод резолюций. Метод резолю- резолюций вместе с алгоритмом унификации положен в основу логического программирования. Для обоснования этих методов приводятся со- соответствующие теоремы корректности и полноты. В третьей главе речь идет о логическом программировании во- вообще и о языке ПРОЛОГ в частности. Здесь рассматривается также механизм построения вывода в ПРОЛОГе. Логика обеспечивает логи- логическое программирование и ПРОЛОГ выразительным языком и предо- предоставляет теоретическое обоснование, гарантирующее правильность полученных результатов. Каждая глава содержит примеры и задачи, предназначенные для лучшего усвоения соответствующих тем. Примеры демонстрируют методику решения задач, а сами задачи призваны стимулировать личную инициативу читателя. Книга является самодостаточной, т. е. в ней подробно раскрываются все основные понятия математиче- математической логики, и от читателя требуются лишь элементарные знания алгебры и анализа. В связи с этим ее можно рекомендовать сту- студентам любого курса как для самостоятельного изучения, так и для использования в качестве учебного пособия, подкрепляющего соот- соответствующий курс лекций. Книга может также оказаться полезной тем программистам, кто уже имел практический опыт работы с си- системами логического программирования, не обладая при этом спе- специальной теоретической подготовкой по логике, а также всем тем, кто просто интересуется логикой и логическим программированием. Все темы, затронутые в этой книге, рассматриваются в перспекти- перспективе перехода от логики к логическому программированию. Поэтому доказательства некоторых теорем, связанных, как правило, с обос- обоснованием полноты аксиоматического метода, опущены. В тех случа- случаях, когда те или иные понятия и доказательства выходят за рамки книги и обсуждаются в ней лишь поверхностно, мы указываем биб- библиографические источники, где они изложены более полно. В основу настоящего пособия положена книга, опубликованная первым автором в Греции в 1992 году; эта книга была написана по материалам семинаров, посвященным основам логического програм- программирования, проведенных в Корнелле и Рочестере, США, и Универ- Университете Патраса, Греция. Пользуясь случаем, авторы отмечают значительный вклад, кото- который внесла Анета Синахопулос-Сварна в разделы 1.1, 1.8, 2.3, 2.11, 3.2, 3.3, 3.6, 3.8, 3.9, в размещение и расположение общего содер- содержания книги, а также помощь, которую оказал Георгий Потамиас при написании разделов 3.4, 3.5 и 3.7. Содействие при подготовке всего материала книги оказали также аспиранты университета Па- Патраса Костас Контогианнис, Спирос Пападакис и Петрос Петропу- лос. Все программы, включенные в книгу, равно как и упражнения, были проверены Георгием Потамиасом в системе программирования TURBO-PROLOG, V.2.0. ...4H,W, чж ¦ V ;•'».'(№•'•(¦• ¦ jttr v , . Глава 1 ЛОГИКА ВЫСКАЗЫВАНИЙ ". - , v.ii u»-* |"Ь<* л.1 ! '•. i i ,J. V, .'•' ' Mirpov twv \iev ovtwv u>C, естС, tuiv Se y.v ovtwv u>C, ovx ecrri. Человек — мера всех вещей; сущест вующих — что они существуют, несу ществующих — что они не существу ют. Протагор fc 'XJ § 1.1. Введение До 1850 года математические доказательства основывались на эксперименте и интуиции. В 1666 году Лейбниц впервые отметил необходимость создания формального языка, названного им «уни- «универсальной характеристикой», который можно было бы использо- использовать в математических формулировках и методологии. Однако его идеи опережали свое время. Начало развития формализма в мате- математике связывается с публикациями Булем, два века спустя, своих трудов «Математический анализ логики» A847) и «Законы мыш- мышления» A854). Свой вклад в создание логического формализма в математике внесли работы Де Моргана A847, 1864), Пирса A867) и фреге A879, 1893, 1903). Публикация же трехтомника Рассела и Уайтхеда «Principia Mathematica» стала кульминацией этих уси- усилий, так как в нем была представлена формализующая математику логическая система, в которой теоремы выводились при помощи ло- логических аксиом и правил. Расцвет логики как самостоятельной науки пришелся на 20-е годы XX века и связан с такими именами, как Лукашевич A878-1956), Леви A883-1964), Гёдель A906-1978), Тарский A901-1983), Черч A903-1995) и Клини A909-1994). Начиная с 50-х годов нашего века компьютерная технология столкнулась с проблемой использования компьютера для символь- символьных преобразований. Одно из решений этой задачи предлагает функциональное программирование. Этот стиль программирования был разработан Мак-Карти и получил широкое распространение в
12 Глава 1. ЛОГИКА ВЫСКАЗЫВАНИЙ США. Другое решение обеспечивает логическое программирование, созданное, преимущественно, европейскими учеными, в том числе, Колмероэ и Ковальским. Логическое программирование придало ло- логике новый импульс. Оно решило многие проблемы, касающиеся строения логических высказываний, при помощи которых компью- компьютер может выполнять процедуры вывода заключений и суждений. Логическое программирование также раскрывает природу и меха- механизмы логических процедур, выполняемых компьютером. В первую очередь нам необходимо рассмотреть, каким образом формализуются логические и математические высказывания. Как мы увидим в следующих примерах, логические связки являются ос- основными элементами формализации. 1. Конъюнкция формализуется при помощи символа Л. Предпо- Предположим, нам известны два свойства некоторого х: А: х>3, В: х<10. § 1.1. ВВЕДЕНИЕ То есть мы знаем, что х больше трех и меньше десяти. Другими словами, нам известно высказывание А А В, V где логическая связка Л соответствует соединительному союзу «и». Таким образом, высказывание А А В утверждает, что х > 3 и х < 10, т. е. 3<х< 10. 2. Отрицание формализуется при помощи символа ->. Например, рассмотрим высказывание С: 50 делится на 7П ,-<; ->С обозначает, что 50 не делится на 7. "~* " а 3. Дизъюнкция обозначается при помощи символа V. Ееди D и Е — высказывания ,, D: 60 делится на 6, .«,??: 60 делится на 5, м то высказывание DWE утверждает, что «60 делится на 6 или 60 делится на 5». Символ V не является исключающе разделительным, так как 60 является крат- кратным 6 и 5 также, как и 20, не упомянутого в высказываниях D и Е. 4. Импликация «если ..., то ...» обозначается в логике симво- символом —>. Если F и G есть высказывания F: число а кратно 10, r G: число а кратно 5, то высказывание F -> G утверждает, что «если число а кратно 10, то оно кратно 5». \ 5. Равносильность «...тогда и только тогда, когда ...» обозначается символом «->. Например, если Н я I есть высказывания Н: 16 кратно 2, /: 16 является четным числом, то формально мы записываем Н «-> /. Свойства логических связок не одинаковы. В примере о высказы- высказываниях А и В запись А А В по существу не отличается от записи В А А. Интуитивно понятно, что логическая связка V (равно как и Л) должна быть коммутативной. Однако ответ на вопрос о комму- коммутативности связки —> будет отрицательным: высказывание G —> F, «если а кратно 5, то а кратно 10» неверно, так как 15 кратно 5, но не кратно 10. Поэтому нам необходимо изучить свойства логических связок. Существуют также различные типы высказываний. Например, вы- высказывания it ft 'iT. * с ЯК «6 кратно 6», ?..,t#4 «7 — простое число», :н юг, ' 1 «рациональное число есть либо 0, либо не равно 0» являются «верными», «правильными», в то время, как высказывания «50 — нечетное число», , . «50 делится на 7», «если х = 3, то х = 5», относятся к числУ*«неверных», «ошибочных». Наконец, такие вы- высказывания, как ъ; . . л _., ¦¦ «идет дождь», •;;• ,,'f «я голоден», *х равно своему абсолютному значению», иногда являются «правильными», а иногда — «ошибочными». Интуитивно понятно, что каждое высказывание имеет некоторую интерпретацию: оно может выражать истину или ложь, иначе го- говоря, может быть истинным или ложным. Но что делает выска- высказывание истинным? Какова связь между интерпретацией составно- составного высказывания и интерпретациями высказываний, составляющих его? И какую роль играют логические связки в интерпретациях? Нам необходимо изучить интерпретации высказываний и опреде- определить роль логических связок в этих интерпретациях. Наша собственная логика позволяет нам принимать решения и де- делать выводы. Например, мы говорим «если х > 3, то х > 0», или, формально, ...,» ,-1 <,,:>,-,, >..¦ >,е ,.,... (X > 3) —> (Х > 0). ., : „4..rt.*vw..-
14 Глава 1. ЛОГИКА ВЫСКАЗЫВАНИЙ Давайте предположим, что х > 3. Тогда х > 0. Какое правило позво- позволяет нам заключать, что х > 0 в случае, когда высказывание х > 3 истинно? И обладает ли это правило всеобщностью, другими слова- словами, если М —> N истинно и М истинно, то всегда ли истинно N? Обратимся к другому примеру. Мы знаем, что для того, чтобы пойти в кино, нужно иметь деньги на билет. Таким образом, иду в кино —> имею деньги на билет. A) Давайте предположим, что мы не имеем достаточно денег на <Йшет, т. е. -1 (имею деньги на билет). B) Можем ли мы пойти в кино? Каково влияние отрицания? Какой вид будет иметь A) с отрицанием? < ¦ ;¦> п *»(•»¦ ч -1 (иду в кико) —> -1 (имею деньги на билет)? ><• ¦ыф,щт Или-> (иду в кино —> имею деньги на билет)? j.vsV Или -1 (имею деньги на билет) —> -i (иду в кино)? EV- И какое заключение истинно, если истинны A) и B)? Для того, чтобы ответить на эти вопросы, нам нужно изучить син- синтаксис высказываний и правила, которые определяют, когда и как мы можем выводить истинные заключения, располагая в качестве посылок имеющимися в распоряжении данными. Логика высказыва- высказываний, равно как и более сложная логика предикатов, исследует эти вопросы. В главе 1, посвященной логике высказываний (PL), мы изучим высказывания PL с точки зрения их синтаксиса и семантики. Мы также исследуем методы получения заключений из посылок и опре- определим^ формы высказываний PL, необходимые для представления знаний, разрешающих процедур и автоматического доказательства теорем в логическом программировании. ;('\. ;,.^''*"'.'', fl, § 1-2. Язык логики высказываний '"Щ1Щ <::!F Алфавит, синтаксис и семантика ^ J ^.t, Язык логики высказываний (PL) является весьма строгим языком. В терминах этого языка мы формализуем те части повседневной ре- речи, которые необходимы для представления логических и матема- математических понятий. Имея .формализованные в этом языке высказы- высказывания, мы затем исследуем их в соответствии с их структурой и истинностью. „,, ,,л.. ._»,„., ..;..и, и-, , , 4 § 1.2. ЯЗЫК ЛОГИКИ ВЫСКАЗЫВАНИЙ 15 Каждый формальный язык задается: а) алфавитом, содержащим все символы языка; б) синтаксисом, определяющим, каким образом из символов фор- формируются высказывания; в) семантикой, при помощи которой интерпретируется элементы языка путем приписывания значений символам алфавита. Алфавит языка логики высказываний состоит: 1) из пропозициональных символов: А, Ах, А2,..., В, Ви В2,... ; 2) из логических связок: V, Л, ->, —>, <->; 3) из запятой и скобок: «,» и «(», «)». Логические связки интуитивно соответствуют частицам и союзам, которые мы используем в повседневной речи. Соответствие между ними таково: V, дизъюнкция — или; Л, конъюнкция — и; —>, импликация — если ..., то ...; <->, эквивалентность— ...тогда и только тогда, когда ...; -1, отрицание — не. Произвольная последовательность символов, принадлежащих ал- алфавиту языка, называется выражением. Например, А У У А, А У В, *-*А — выражения языка логики высказываний. Некоторые пра- правильно построенные выражения рассматриваются синтаксисом как высказывания. В следующем определении 1.2.1 вводится понятие высказывания и, тем самым, описываются законы синтаксиса языка логики высказываний. Определение 1.2.1 (индуктивное определение высказыва- высказывания). 1. Пропозициональные символы являются высказываниями и называются атомарными высказываниями или атомами. 2. Если (гит — высказывания, то выражения (ст Л т), (<т V т), (G_>тI (оч-jT-), (-кг) — также высказывания; их называют состав- составными высказываниями. 3. Выражения, построенные в соответствии с пунктами 1 и 2, и только они являются высказываниями. D 1.2.1 Выражения У А У В я *-*А, таким образом, не являются выска- высказываниями, так как они построены вопреки пунктам 1 и 2. А вот выражения (А У В) и ((->А) V (В *-* (~>С)) в самом деле являются высказываниями. Приведенное выше определение 1.2.1 использует метод индук- индукции для определения составного высказывания: пункт 1 есть ба- базис индукции, пункт 2 есть индуктивный переход. Индукция про- проводится по логической длине, структуре высказывания. Под «ло- «логической длиной» высказывания А мы подразумеваем натуральное
16 Глава 1. ЛОГИКА ВЫСКАЗЫВАНИЙ число, обозначающее число, тип и порядок появления логических связок, используемых при построении А, начиная с атомарных вы- высказываний, составляющих А. Нам известно, что принцип мате- математической индукции справедлив для натуральных чисел. Определение 1.2.2 (математическая индукция). Если Р(а) обозначает свойство натурального числа а и нам известно, что а) Р@) справедливо, б) для любого натурального п из истинности Р(п) вытекает истин- истинность Р(п + 1), то мы можем заключить, что для всех натуральных чисел п истинно Р(п). D 1.2.2 Тот факт, что множество натуральных чисел вполне упорядоче- упорядочено (под этим подразумевается, что каждое непустое подмножество натуральных чисел имеет наименьший элемент), вместе с принци- принципом математической индукции приводят ко второй форме индукции, называемой полной. Определение 1.2.3 (полная индукция). Если Р(а) есть свойство натурального числа а, и нам известно, что а) Р@) справедливо, б) для всех натуральных чисел тип, таких, что т < п, из Р(т) можно вывести Р(п), то для всех натуральных чисел п истинно Р(п). О 1.2.3 Мы использовали полную индукцию в индуктивном определении высказываний (определение 1.2.1). Теперь применим ее в следую- следующем определении 1.2.4. Определение 1.2.4 (общая схема индукции для высказы- высказываний). Пусть Р — пропозициональное свойство. Мы будем пи- писать Р(а), чтобы обозначить, что высказывание а имеет свойст- свойство Р. Если мы докажем, что а) Р(А) — истинно для любого атома А языка, б) если <т, и а2 — высказывания и Р(ах), -Р(<72), то Р((<7, Л а2)), P((at V а2)), Р({а, -+ <т2)), Р{{а{ ~ <т2)), Р((-а,)) и Р(Ы2)), то мы можем заключить, что свойство -Р(ст) справедливо для любого высказывания а нашего языка. D 1.2.4 Пример 1.2.5. 1. Свойство Р «число левых скобок совпадает с числом правых скобок» истинно для всех высказываний PL. В самом деле, согласно общей схеме индукции мы имеем: а) в пропозициональных символах число левых и правых скобок равно 0; б) если в высказываниях ст, и ст2 число левых и правых скобок совпадает и равно для <т, и ст2 соответственно п и т, то в высказы- высказываниях (<7, Л <72), (G, V <72), (<7| —* <72)> (а\ *~* аг)' (~lCrl) И С""^) ЧИСЛО § 1.2. ЯЗЫК ЛОГИКИ ВЫСКАЗЫВАНИЙ 17 левых и правых скобок совпадает и равно п + m + 1 в первых че- четырех, п+1 и т+1 соответственно — в двух последних. 2. Выражение ((~<(А ЛВ))-» С) является высказыванием. Доказательство основано на определении 1.2.1: \) А, В являются высказываниями по определению 1.2.1A); 2) (А А В) является высказыванием по определению 1.2.1B); 3) (-<(А А В)) является высказыванием по определению 1.2.1B); 4) С является высказыванием по определению 1.2.1B); 5) ((->(А А В) —» С) является высказыванием по определению 1.2.1B). 3. Выражения, приведенные ниже, не являются высказываниями: -1 — символ -1 не является атомом; Л —> А — символ Л не является высказыванием; (А А В —нет правой скобки, соответствующей левой. D 1.2.5 Пример 1.2.6. Рассмотрим повествовательное предложение обыденной речи: F: «Если нет дождя, то я пойду на прогулку». Для того, чтобы формализовать его в логике высказываний, можно ввести вспомогательные пропозициональные символы: А: «Идет дождь»; В: «Я иду на прогулку». Тогда предложение F соответствует высказыванию ((->А) —» В). Если не возникает путаницы, то скобки можно опустить: F: В. П 1.2.6 Каждый атом, который встречается в правильно построенной фор- формуле1) D рассматривается как подформула D. Например, А и В — подформулы F в примере 1.2.6. Более того, каждая правильно по- построенная составная часть D является также подформулой D. Рас- Рассмотрим в качестве примера формулу D: (А А -.В) -> ((С V -.А) -> В). Тогда -*А, С V -<А, А А ->В равно, как и (С V ->А) —» В, являются подформулами D. Наконец, сама формула D, т. е. (А Л->!?)—>((CV V-iA)—> В), также рассматривается как подформула D. Множество subform(G) всех подформул правильно построенной формулы а определяется индуктивно: Определение 1.2.7. 1) Если а — атом А, то subform(cr) = ') Высказывания логики высказываний называются также формулами. — Прим.
18 Глава 1. ЛОГИКА ВЫСКАЗЫВАНИЙ 2) если а имеет вид ->т, то subform(a) = subform(r) и {а}; 3) если а имеет вид то ip, где о б {V, Л, —>, ¦-»}, то subform(<7) = = subform(r)Usubform(^>)u{(r}. D 1.2.7 Замечание 1.2.8. Чтобы избежать неоднозначностей при использовании связок в формулах без скобок, мы будем считать, что -1 связывает сильнее, чем все остальные связки, Л и V связывают сильнее, чем *-» и —*,*-* связывает сильнее, чем —». Таким образом, высказывания •С, А -> В *-> С ->A -> В V С, АлВ обозначают соответственно /.-¦»'.•'' ((ij4)-»(BvC)), РЛ5)-+С), (А-*(В«С)). П 1.2.8 Замечание -1.2.9. Следуя сложившейся традиции, символ <— мы будем также рассматривать как логическую связку, В <— А обозначает то же, что и А —> В. О 1.2.9 § 1.3. Понятие семантики в логике высказываний Означивания и истинностные означивания Согласно определению 1.2.1 высказывания являются общим и аб- абстрактным объектом. Мы хотим интерпретировать эти абстрактные объекты при помощи семантики. Это означает, что нас интересует определение условий, при которых высказывание является истин- истинным или ложным. Поэтому мы создадим структуру, область опреде- определения которой — {?, /}, где t, f обозначают истинностные значения «истина» и «ложь» соответственно, и попытаемся приписать одно из этих значений каждому высказыванию. Используемый метод при- приписывания истинностных значений, подкрепленный необходимыми определениями, и составляет семантику логики высказываний. Определение 1.3.1. Означиванием назовем произвольную функцию F:Q~{t,f}, где Q — множество атомов языка. D 1.3.1 Таким образом, означивание приписывает истинностные значения атомам языка. Теперь мы введем на множестве {t, /} внутренние алгебраиче- алгебраические операции для того, чтобы преобразовать его в алгебраическую структуру. Внутренние операторы над t, f, которые мы определим, а именно, ~, LJ, П, ~> и <—>, будут соответствовать логическим связкам -1, Л, V, —» и *-*. Сходство соответствующих символов не случайна, § 1.3. ПОНЯТИЕ СЕМАНТИКИ В ЛОГИКЕ ВЫСКАЗЫВАНИЙ 19 она отражает их соответствие. Рассмотрим, например, высказыва- высказывание АУВ. Приписав некоторые истинностные значения А и В, мы интерпретируем АУ В, используя интерпретации А и В и применяя операцию U, на основании определения 1.3.2. Определение 1.3.2. Внутренние операции ~, U, П, ~» и <—> над {?, /} определяются следующими таблицами. <¦№ •п.» t f f t LJ t f t t t f t f П t f t t f f f f t f t t t f f t t f t t f f f t В приведенных таблицах в первом столбце перечислены значения ,. первого аргумента и в первой строке — значения второго аргумента соответствующих операций. П 1.3.2 Структура ({?, /}, ~, U, П), в которой операции ~, U, П определе- определены описанными таблицами, является двузначной булевой алгеброй. Булевы алгебры важны как для семантики логики высказываний (см. [RaSi70, СштбЗ, Rasi74, Raut79]), так и для изучения теорети-h ческих основ информатики вообще. t Определение 1.3.3. Пусть 5 — множество высказываний нашего языка. Истинностным означиванием, или булевым озна- означиванием назовем такую функцию что для произвольных G, т G S верно: , ;; а) если а — атом, то V(a) G {t, /}; б) V(-.G)=~ V(ct); ' в) V(<tVt) = V(<t)uV(t); -'Г,,?* г) V{a Л т) = V{a) П V(t); >''л,ЦЛ д) V(a^>T) = V(a)~>V(T); 'ч е) V{a <-> т) = V{a)«~» V(t). ..^..rt: ,„!,._... ? 1.3.3
20 Глава 1. ЛОГИКА ВЫСКАЗЫВАНИЙ Согласно этому определению истинностные значения атомов некоторого высказывания преобразуются алгебраическими операци- операциями ~, U, П, ~», *~* и определяют тем самым истинностное означи- означивание рассматриваемого высказывания (см. [Smul68]). Означивание приписывает истинностное значение, t или /, ато- атомам языка. Истинностное означивание является расширением озна- означивания на множество высказываний языка. В последующей теоре- теореме 1.3.4 будет доказано, что каждое означивание может быть одно- однозначно расширено до истинностного означивания. Теорема 1.3.4. Для каждого означивания F существует одно и только одно истинностное означивание V, являющееся расширением F. Доказательство. Проведем доказательство индукцией по длине высказывания. Пусть F — означивание, Q — множество атомов. Индуктивно определим истинностное означивание V, полагая a) V(А) = F(A) для каждого А е Q. Пусть a, ip — высказывания. Если V{a) и V(ip) уже определены, то положим 6)VH=~V(ff); „,, ., ... ....... в) V(a V <р) = V(a) r)V(<TA<p) = V(a)\..y4,t. ж; •¦¦..,. , tlT д) V(<t-»?>)= V». - Очевидно, что V является истинностным означиванием, расши- расширяющим F. Остается доказать, что если истинностные означивания VJ и V2 являются расширениями F, то равенство Vl(tp) = V2(ip) выполняет- выполняется для любого высказывания tp. Докажем по индукции свойство Р: Базис индукции. Для каждого пропозиционального символа А верно, что VX(A)~ = ^(А), так как VUV2 — расширения F. Индуктивный переход. Предположим, что Vi(a) = V2(a) и Vt(tp)— V2(tp). Тогда справед- справедливы соотношения: ЧЫ) =~ V{{a) =~ Vt(<p) = Щ-чр); Vl(aV<p)=Vi(a)UVl(<p) = V2(a)UV2(<p) = V2(oV<p); , „ ¦{ Vx(a Л<р)= Vx(a) П VJ(>) = V2(a) П V2(<p) = V2{a A <p); [ ¦ 4w V( = V2{a) ~> V2(<p) = V2(a -> <p); 4 f* § 1.3. ПОНЯТИЕ СЕМАНТИКИ В ЛОГИКЕ ВЫСКАЗЫВАНИЙ 21 Vx(a ~<p) = Vx(a) «w Ц(<р) = V2(a) *~> V2(<p) = V2(a ~ <p). Таким образом, VJ и V2 имеют одинаковые значения для каждого высказывания, и поэтому совпадают. ? 1.3.4 Следствие 1.3.5 непосредственно вытекает из теоремы 1.3.4. Следствие 1.3.5. Пусть а — высказывание, все атомы ко- которого содержатся в списке Аи ..., Ак. Если два истинностных означивания Vj, V2 имеют одни и те же значения на множестве {Ai,...,Ak},moVl(a) = V2(a). ? 1.3.5 Пример 1.3.6. Вычисление истинностного означивания по заданному означиванию. Пусть S — множество атомарных высказываний, S = {Аи А2}, F —такое означивание, что F(Ax)=t, F(A2) = f. По теореме 1.3.4 искомое истинностное означивание VF, расширя- расширяющее F, определено однозначно. Положим, что VAA^-t, VF(A2):=f, где := обозначает «равно по определению». Теперь мы можем вычислить значения истинностного означива- означивания VF для каждого множества высказываний, которые содержат только атомы Ах и А2: VF(AX A A2) = VF(Ax) n VF(A2) = t П / = /; VF(AlVA2) = VF{Al)UVF(Ai)=tUf = t; УГ((АХ А А2) -> А2) = VF(Al V A2) ~» VF(A2) = t~>f = f; и т. д. D 1.3.6 Мы можем классифицировать высказывания логики высказыва- высказываний в соответствии с истинностными значениями, которые они при- приобретают. Определение 1.3.7. Высказывание а называется логически истинным, или тавтологией, если для каждого истинностного означивания V верно, что V{a) = t. Мы будем пользоваться за- записью (= а для обозначения тавтологии. В свою очередь, запись \fc будет обозначать, что а не является тавтологией, т. е. существует истинностное означивание V, такое, что V(a) = /. Высказывание а называется выполнимым или подтверждае- подтверждаемым, если существует такое истинностное означивание V, что V(a\ = t. При этом про истинностное означивание V, для которого Via) = t, говорят, что оно подтверждает высказывание а. Высказывание а, такое, что для каждого истинностного озна- означивания V верно V(a) = /, называется логически ложным, или невыполнимым, или противоречием. м D 1.3.7
22 Замечание множество Глава 1. ЛОГИКА ВЫСКАЗЫВАНИЙ 1.3.8. Пусть V — истинностное означивание, и Sv = {a: V{a)=t} состоит из всех высказываний языка, выполнимых при означива- означивании V. Если высказывание \р принадлежит множеству Sv для каж- каждого истинностного означивания V, то ip является тавтологией. Каждое множество Sv, где V — истинностное означивание, состав- составляет возможный мир (см. [Fitt69, Chel8O]) множества высказываний PL. Каждый возможный мир является аристотелевым в том смыс- смысле, что для каждого высказывания а только одно из двух высказы- высказываний а и -1 а может быть истинно в этом мире. И в самом деле, мы имеем либо V{o) = t, либо V(o) = f, что равносильно V(->a) = t, сообразно аристотелеву принципу исключенного третьего, заме- замечание 1.4.4). Возможные миры — основное понятие семантики Крипке. Се- Семантика Крипке используется при изучении модальной логики. В модальной логике кроме логических связок содержатся специаль- специальные символы, как, например, о, называемые модальными операто- операторами, что расширяет выразительные возможности языка. Поэтому в модальном языке кроме выражения А встречается выражение оА, которое может интерпретироваться как «иногда А истинно», или *А будет истинно в будущем». Модальная логика позволяет нам выражать особые свойства, за- затрагивающие расположение и порядок выполнения операторов про- программы. Рассмотрим, например, программу на языке ФОРТРАН, предназна- предназначенную для вычисления га! для всех целых чисел п от 1 до 10. ,. * = 1 . ,... ..¦.-¦;-.ii' do 10 i = 1,..., 10 '¦:;;•*.. -'? v.. »' *Ф1 ¦ ' k=k*i !^r"^:i';:.' "г 10 write(*, *)k ' " .';' end (,и, .у. '..'.j3v.,.,i/ Пусть А и В — высказывания модальной логики, * ичЩ'('*' •*'"'¦' , п Ц ,:• .-у\ А := write(*, *)k и В := end. ' '"Л>"''Д^' v ' :.iHi-. ./Ui\,:w. В тот момент, когда программа начинает выполняться, высказы- высказывания оА и оВ истинны. Это означает, что программа когда-то в будущем вычислит га! и когда-то в будущем она остановится. D 1.3.8 Определение 1.3.9. Два высказывания, о и г, такие, что V(a) = V(t) для каждого "истинностного означивания V, называ- называются логически эквивалентными. Для обозначения эквивалентных высказываний будем использовать запись а = т. ? 1.3.9 •Чф1 Ь'НО ¦}&-'¦' Yi)t.. § 1.3. ПОНЯТИЕ СЕМАНТИКИ В ЛОГИКЕ ВЫСКАЗЫВАНИЙ 23 Пример 1.3.10. Высказывания А V ->А и ({А —> В) —> А) —> —> А — тавтологии. Доказательство. Сначала докажем, что А V ->А — тавтоло- тавтология. Пусть VJ и V2 — два таких истинностных означивания, что VJ(A)=t, V2(A) = f. Заметим, что VJ(AV-A) = V;(A)UV;(-A) = V1(A)U(~V2(A))=tU(~t) = = tuf = t. 2 = fUt = t. Произвольное истинностное означивание V на А совпадает либо с V, либо с V2. Таким образом, согласно следствию 1.3.5 выполняется одно из двух: V(A = t или V{A V ->A) = V2(A V ->A) = t. То есть высказывание истинно для любого истинностного означива- означивания V. Следовательно, оно является тавтологией. Теперь докажем, что ((А —> В) —> А) —> А —тавтология. На Q = = {А, В} имеется четыре различных означивания F,, F2, F3, FA: FJA) = t, ^¦Щ:'Щ-л(,^. / F2(A) = t, i: -r *..'t*tyi(!f i; F<(B) = f. Для каждого из этих означиваний существует единственное истин- истинностное означивание Vk, k € {1, 2, 3,4}, расширяющее его. Неслож- Несложно проверить, что Vk(((A-+B)-4A)->A)=t для каждого А; € {1, 2, 3,4}. Произвольное истинностное означивание V на пропозициональных символах А и В совпадает с Vk для некоторого к е {1,2, 3,4}. В силу следствия 1.3.5 справедливо равенство V(((A = Vk(((A Следовательно, высказывание ((А —* В)—* А) —* А истинно для любого истинностного означивания и поэтому является тавтологи- еИ- |\ « i M С 1.3.10
24 Глава 1. ЛОГИКА ВЫСКАЗЫВАНИЙ Пример 1.3.11. Высказывание ((->Л Л Б)—> С) VZ?) (обозна- (обозначим его К) выполнимо. В самом деле, пусть F — такое означивание пропозициональных символов К, что F(A)=t, F(B)=t, F(C) = f, F{D) = f. Истинностное означивание V, расширяющее F, приписывает сле- следующие значения: '* ' Тогда ; 1 Л В) -* С) = V(^A ЛВ)- V(C) = f'Z>f = t, А А В) -» С) V D) = V((->A А В) -+ С) LJ V(D) = t U / = t, следовательно, V(K)=t. Высказывание К не является тавтологией. И в самом деле, пусть G — такое означивание, что , ,, . G(A)=t, G(B)=t, G(C) = f, G(D) = f. ' <f-- Предположим, что G" — истинностное означивание, расширяю- расширяющее G. Применяя метод, аналогичный используемому при доказа- доказательстве того, что V(K)= t, мы можем доказать, что G'(K) — /. Тогда, по определению 1.3.7, высказывание К не является тавтоло- тавтологией. D 1.3.11 -Ж':». § 1.4. Таблицы истинности Ьа' 'ч В предыдущем параграфе мы определили означивание атомов язы- языка и, затем, распространив означивание атомов на составные вы- высказывания, определили истинностные означивания. При помощи этого метода мы можем установить, является ли высказывание тав- тавтологией, противоречием, или оно выполнимо. Однако, чем больше составляющих содержит высказывание, тем более сложным стано- становится этот метод. Чтобы сделать его несколько проще, мы соберем все возможные означивания атомов высказывания в таблицу, называемую табли- таблицей истинности высказывания. Итак, для составных высказываний ~>А, AVВ, А ЛВ, А —>В иА<-»Вмы имеем следующие таблицы: § 1.4. ТАБЛИЦЫ ИСТИННОСТИ 25 А t f ^А f t А t f t f В t t f f AW В t t t f A t f t f В t t f f AAB t f f f A t f t f В t t f f A-+B t t f t A t f t f В t t f f A*-*B t f f t Каждая строка в этих таблицах соответствует означиванию и его однозначному расширению до истинностного означивания. Напри- Например, вторая строка в таблице А А В имеет вид t, f, f. Она означа- означает, что А принимает значение t (это первый элемент строки), В принимает значение / (это второй элемент строки). На основании определения 1.3.2 и определения 1.3.3 мы знаем, что соответству- соответствующее истинностное значение А А В есть t П/, а именно /. Таким образом, мы находим / (это третий элемент строки). В дальнейшем мы будем использовать описанные выше таблицы истинности как определения результирующих значений при исполь- использовании логических связок, не ссылаясь на означивания и истин- истинностные означивания. Замечание 1.4.1. 1. Дизъюнкция логики высказываний не является разделительной, т. е. А У В принимает значение t и тогда, когда и А, и В принимают значение t. В повседневной речи, напро- напротив, чаще всего фигурирует разделительная дизъюнкция. Например, мы говорим: «Я останусь дома или пойду в кино», подразумевая при этом выбор только одного варианта, но никак не обоих. 2. Высказывание А —> В принимает значение / только тогда, ко- когда А принимает значение t, а В принимает значение /. Таким образом, если А есть /, то А —> В есть t, независимо от того ка- какое значение принимает В. Эти свойства —> и, как следствие, та часть логики высказываний, которая основывается на этих свойст- свойствах, принимаются не всеми логическими школами.
26 Глава 1. ЛОГИКА ВЫСКАЗЫВАНИЙ § 1.4. ТАБЛИЦЫ ИСТИННОСТИ 27 В 1910-1920 гг. в области прикладных наук в Европе преобладала концепция школы Гильберта (Гильберт, 1862-1943) (см. [Воуе68, Heij67]): «Математика и логика должны иметь аксиоматическое ос- основание, и используемые этими науками методы должны быть максимально формальными*. Но в 1918 г. Брауэр A881-1966) опубликовал суровую критику ло- логики высказывании. Представленная в его работе альтернативная система была названа интуиционистской логикой. Это название происходит из утверждаемого Брауэром факта, основанного на мне- мнении Канта, что мы ощущаем натуральные числа (и, соответствен- соответственно, логику, которая характеризует науку) только интуитивно (см. [Dumm77, Brou75]). Интуиционистская логика никогда целиком не замещала логику, основанную на концепции Гильберта, однако, се- сегодня она имеет некоторые приложения в информатике. С другой стороны, логика высказываний предлагает эффективный инструмент (в аристотелевом смысле) для изучения и решения раз- различных задач и составляет основу современной науки и техники. ? 1.4.1 ; Резюмируем: опираясь на индуктивное определение высказываний и на определение значений логических связок, мы можем построить таблицу истинности для любого высказывания, приписав зна- значения всем атомам, составляющим его. Пример 1.4.2. Таблица истинности высказывания А А В —> С ш ¦.Ч\ 1 51 4ft ; ч> :¦,' ";¦¦... А t t t t f f f f В t t f f t t f . / С t f t f t f t f АЛВ t t f f f f f f АЛВ-+С t f t t t t t t I' Для тройки атомов (А, В, С) тройка истинностных значений (/, t, f) обращает А А В —> С в истину, тогда как тройка (?, t, f) обращает его в ложь. П 1.4.2 Сокращенной таблицей истинности высказывания А А В —> С называется его таблица истинности, в которой вспомогательный четвертый столбец пропущен. Сокращенная таблица истинности высказывания, содержащего п атомов, состоит из 2" строк и п + 1 столбца. При помощи таблицы истинности мы можем устанавливать, когда высказывание истинно, а когда — ложно. В силу следствия 1.3.5, ес- если в таблицах истинности для двух высказываний столбцы значений атомов и последние столбцы совпадают, то эти два высказывания логически эквивалентны. Пример 1.4.3. 1. Высказывание ((А —>!?)—* А) —>А является тавтологией. А t t f f В t f t f A^B t f t t (A-*B)-+A t t f f t t t t 2. Высказывание (P —> Q) A (P A ->Q) невыполнимо. P t t f f Q t f t f / t f t P-+Q еч. / t t PA^Q f t f f (P-*Q)A(PA^Q) f f f f Замечание 1.4.4. Основываясь на определении 1.3.7 мы имеем: 1) высказывание является тавтологией тогда и только тогда, когда его отрицание невыполнимо; . .• 4iw , „•, ., . «-.и м ,;ft ^нч,. »' .«,
28 Глава 1. ЛОГИКА ВЫСКАЗЫВАНИЙ 2) высказывание невыполнимо тогда и только тогда, когда его отрицание является тавтологией; 3) высказывание, являющееся тавтологией, выполнимо, тогда как выполнимое высказывание не обязательно является тавтологией; 4) некоторые часто используемые тавтологии: S|,i -,t. ,, tili ' • * 1) ->(А А В) = (-<А V--B) — закон де Моргана; * 2) -,(А V В) = (-, А А -.В) — закон де Моргана; • , ". 3)->(->А) = А—закон двойного отрицания; ' 4) (А —> В) = (->В —> ->А) — закон контрапозиции; 5) (В —> С) -* ((А —>В) —> (А -> С)) — первый закон силлогисти- силлогистики; 6) (А—>??)—>((В—>С) —>(А —>С)) — второй закон силлогистики; 7) (А -> (В -» С)) = ((А ЛВ)-»С)-закон транспозиции; 8) А V ->А — закон исключенного третьего. Высказывания 5 и б называются аристотелевыми законами сил- силлогистики. ? 1.4.4 Метод нахождения значения составного высказывания при помо- помощи таблицы истинности достаточно прост, если высказывание со- содержит небольшое число атомов. В том случае, когда высказывание имеет три атома, соответствующая таблица истинности состоит из 23 = 8 строк. Таблица истинности высказывания, имеющего четыре атома, состоит уже из 24 = 16 строк, а имеющего десять атомов, — из 210=1024 строк! Кроме того, нужно иметь ввиду, что мы не можем использовать таблицы истинности в логике предикатов. Поэтому в следующих па- параграфах мы изучим более совершенные и более экономные методы определения истинностных значений высказываний и множеств вы- высказываний. Эти методы будут составлять основу логического про- программирования. Ь ~.j ' § 1.5. Логические следствия и интерпретации ' ; Из таблицы истинности высказывания (А А В) —> С в приме- примере 1.4.2 можно видеть, что это высказывание принимает значение t, если все три атома А, В, С принимают значения t. В этом случае говорят, что истинность (ААВ)-+С следует из того факта, что каж- каждое высказывание из S = {А, В, С} имеет значение t (см. [Chur56]). Таким образом, введем следующее понятие. Определение 1.5.1. Пусть S — множество высказываний. Высказывание а называется логическим следствием S (этот факт ¦ § 1.5. ЛОГИЧЕСКИЕ СЛЕДСТВИЯ И ИНТЕРПРЕТАЦИИ 29 будет обозначаться S \= а), если для каждого истинностного озна- означивания V, обладающего свойством V{tp) — t для любого ip? S, мы можем заключить, что V(o) = t. Обозначим Con(S) = {cr: S\=a} множество всех логических след- следствий S. Формальное определение этого множества таково: а ? СопE')^(для каждого истинностного означивания V) (для каждого ip e S верно V(tp) = t) => (V(a) — t). В дальнейшем вместо выражения «для каждого (f e S верно V(ip) = = t* мы будем использовать запись F[S] = {?}, или даже еще менее формально V[S] = t. ? 1.5.1 Замечание 1.5.2. Символы <?> и =*>, используемые в данном выше определении в значениях «тогда и только тогда» и «влечет», являются символами метаязыка. Метаязык — это язык, исполь- используемый для рассуждений о формулах логики высказываний и для исследования их свойств. Когда, например, мы говорим, что (= <р, т. е. высказывание ip — тавтология, мы выражаем суждение о ip. Поэтому |= <р является метавысказыванием для PL , а именно вы- высказыванием метаязыка PL. Как и язык логики высказываний, метаязык может быть форма- формализован. Но для того, чтобы избежать чрезмерного и педантичного использования символов, например, —> в языке и => в метаязыке, в качестве метаязыка мы будем использовать тщательно и точно сформулированные предложения разговорного языка. Завершим комментарий о метаязыке следующим примером. Пусть А — высказывание PL. Тогда выражение *А —> А* — это высказы- высказывание PL, а выражение «если А является высказыванием PL, то А является высказыванием PL» — это высказывание метаязыка PL. ? 1.5.2 Пример 1.5.3. Пусть S = {А А В, В -» С} — множество вы- высказываний. Тогда С — логическое следствие S, т. е. S (= С. Доказательство. Допустим, что V — истинностное озна- означивание, которое обращает все высказывания S в истину: V(AAB) = t, V(B-*C)=t. K Тогда по определению 1.3.3 мы имеем: г V(A)nV(B)=t, V(B)~+V(C)=t. Затем, из A) и определения 1.3.2 следует, что --„^ „, »':'¦*¦. A) B) „ C)
30 Глава 1. ЛОГИКА ВЫСКАЗЫВАНИЙ § 1.5. ЛОГИЧЕСКИЕ СЛЕДСТВИЯ И ИНТЕРПРЕТАЦИИ 31 и, следовательно, B) преобразуется к виду t~>V(C)=t. D) Из определения 1.3.2 и D) мы можем заключить, что V(C)= t. Это означает, что каждое истинностное означивание, подтверждающее все высказывания из S, подтверждает также С. Таким образом, С является логическим следствием S, т. е. S (= С. D 1.5.3 Обозначив Taut множество всех тавтологий, докажем следствие. Следствие 1.5.4. Соп{0) — Taut, где 0 обозначает пустое множество. Доказательство. Рассмотрим ае Taut. Тогда для каждого истинностного означивания V имеем V(a) = t, т. е. справедливо соотношение Следовательно, a G Соп@). "'1 " Верно и обратное. Рассмотрим а е Соп@). Тогда ДЛЯ 'ЙЬкдого истинностного означивания V имеем: если для каждого у€0 справедливо V(ip) = t, то V(/tLet't A) Но в 0 нет элементов. Поэтому мы можем записать: ! если для каждого ю е 0 верно, ' • •' 4, что V(tp)= t или V(ip) — j,io V(a)= t.<: ,- B) To есть V(a) = t независимо от значения ip ? 0. Это означает, что для всех истинностных означиваний V верно, что V(a) = t. Следо- Следовательно, а является тавтологией. ? 1.5.4 Таким образом, тавтологии не являются следствием какого-либо специального множества высказываний1), они не зависимы ни от ка- какого множества высказываний и связаны только с таблицами истин- истинности, определенными в § 1.3. Подчеркнутые части в доказательстве следствия 1.5.4 отмечают технические моменты доказательства. В пустом множестве нет эле- элементов. Как же мы можем записать импликацию с подчеркнутой частью? Давайте вспомним третью и четвертую строки определе- определения таблицы истинности высказывания А —* В (см. стр. 25). Если А принимает значение / и В принимает значение t или /, то А —* В равно t. Это значит, что если А есть ложь, то импликация А -л В всегда истинна! Именно этим свойством мы и воспользовались в ме- метаязыке, в котором доказываются наши теоремы. В A), например, ') Это означает, что тавтологии логически следуют из любого множества выска-j зываний S вне зависимости от его состава. — Прим.. перев. утверждение <ip G 0» не может быть истинно, так как в 0 нет эле- элементов. Независимо от того, является ли утверждение <V(ip) = t» истинным или нет, A) истинно! Как упоминалось выше, PL изучает множества высказываний. Следующие два определения касаются выполнимости множества вы- высказываний. Определение Л .5.5. Множество высказываний S (семанти- (семантически) непротиворечиво, если существует истинностное означива- означивание, которое подтверждает каждое высказывание из S. Формально: непротиворечиво(.?)ФЦсуществует означивание V) [(для каждого а ? S) (V(a) — t)]. Тот факт, что S непротиворечиво, обозначается V(S)= t. Непротиворечивое множество S мы будем называть также под- подтверждаемым, или выполнимым. Про истинностное означивание V, которое подтверждает каждое высказывание непротиворечивого множества S, говорят, что оно подтверждает S. Соответственно, S противоречиво, неподтверждаемо, или невыполнимо, если каждое истинностное означивание не подтвер- подтверждает по меньшей мере одно высказывание из S. Формально: противоречиво (S) =Ф- (для каждого означивания V) [(существует a G S) (V(a) = /)]. ? 1.5.5 Пример 1.5.6. Множество высказываний S = {АЛ->Д А -+В} противоречиво. Доказательство. Предположим, существует такое истин- истинностное означивание V, что для каждого С € S верно V(C) — t. Тогда V(AA->B)=t, V(A-+B)=t, что означает V(A)nV(^B)=t, A) ^ v(A)~>v(B)=t. ::. B) Из A) и определения 1.3.2 следует, что V(A)= V(->B)= t, и V(A)=t, V(B) = f. Тогда из B) следует, что t ~-> / = t, что противоречит определе- определению 1.3.2, в котором t ~ч/ = /. Следовательно, никакое истинност- истинностное означивание не может подтвердить все высказывания S, т. е. S противоречиво. ? 1.5.6 Определение 1.5.7. Истинностное означивание, подтвер- подтверждающее множество высказываний S, называется интерпретаци- интерпретацией S. Множество всех интерпретаций S обозначается Int(S).
32 Глава 1. ЛОГИКА ВЫСКАЗЫВАНИЙ § 1.5. ЛОГИЧЕСКИЕ СЛЕДСТВИЯ И ИНТЕРПРЕТАЦИИ 33 Int(S) = {V: V — истинностное означивание и для каждого а Е S верно V(a) = t}. D 1.5.7 Докажем некоторые полезные свойства логических следствий и интерпретаций. Следствие 1.5.8. Для любых множеств высказываний S, Su S2 верно: -й 1) SlCS2=>Con(Sl)CCon(S2); •*<¦;*.• .»¦>:. - , -^ •• чг^ (•¦*- ¦ - 2) 5 С CbnE); "*У "Ц"*'; ;гЕ*' '"; **" ''*'*'; ' : 3) Taut С 0071E) (Эля любого S;-o)<->' >'i. »;-¦«нгьп ятто-л-,;-" 4) ConE) = Con(ConE)); tf! '.' !": .: -, g 5M,^52^/71^E2)^/71^E,); \:,.''..!/Л,„... > 0,Л! ,. Й . е 6) СопE) = {ст: F(a) = t 5ля каждого Velnt(S)}; | 7) а € Сотг({<7„ ..., ап» «¦ а, -»(а2 -» (.. .(ап -* а)...)) € 2btxt. Доказательство. 1. Предположим, что a G СопE,). Пусть V — такое истинностное означивание, что для каждого ip e 52 справедливо V(y3)= t. Таким образом, верно, что V{ip)— t для каж- каждого ip G 5, (так как 5, С 52). Тогда F(ct)= t, поскольку a G Con(Sx). Следовательно, СопE,) С СопE2). 2. Если ст G 5, то каждое истинностное означивание V, подтвер- подтверждающее все высказывания 5, также подтверждает а. Таким обра- образом, a G Con(S). Но тогда 5 С СотгE). 3. Предположим, что a G Taut. Пусть V — такое истинностное означивание, что для каждого ipeS верно V(ip)— t. Тогда V(a) = t, и поэтому а е Con(S). Следовательно, Taut С Con(S). 4. Согласно пункту 2 мы имеем 5 С Con(S), а согласно пунк- пункту 1 — Con(S) С Con(Con(S)). Остается только доказать, что Con(ConE)) С Con(S). *мгь it Предположим, что creCon(Con(S)). Пусть V — истинностное озна- означивание, такое, что для каждого ip e 5 имеет место V{ip) = t. То- Тогда для каждого т G Con(S) верно, что V(t)= t. Из определения Con(S) следует, что V(a)= t. Это означает, что a G Con(S). Сле- Следовательно, Cbn(ConE)) С Con(S). 5. Если К G/nf E2), то для каждого а € 52 справедливо V(ct)= f. Ввиду того, что 5, С 52, для каждого a G 5, верно, что V(a) = t и, следовательно, V 6. Если а б 0071E), то для каждого V elnt(S) верно, что V(a) = — t. Тогда ~ f К] ст е {ip: V(ip) = t для казщого V е Int(S)}. Более того, если ip G {a: V(a) = t для каждого V G t - то, очевидно, у G ConE). ^ t! 7. (=*>) Предположим, что ^ € Соп({ст,,..., a^-fj истинностное означивание. Возможны два случая: ., а) для каждого а{, 1 < г < n, V(a{) = t и б) хотя бы для одного о-у, 1 ^ i ^ тг, У(^) = /. ^ на Проанализируем каждый случай в отдельности. Щ - а) Для каждого а{, где 1 ^ г < п, верно, что V(«7,.) = t и ^ поэтому F(v?) = f. Следовательно, ЕСЛИ V(ak -* (ok +, •{,. не )...)) = t, то -* К +. Следовательно, (по индукции) ст, —> (ст2 —» (.. .(стп —» ст). ..))=*. б) Пусть г — наименьшее натуральное число, для которого верно v(ar) = f- Тогда = *, где - 1, то А Следовательно, ст, 2 Г. Метакиденс, А. Нероуд (.. .(стп —»• а). ..))=*.
34 Глава 1. ЛОГИКА ВЫСКАЗЫВАНИЙ Как в случае а), так и в случае б) для любого истинностного озна- означивания V справедливо соотношение ах —> (а2 —> (.. .(ап —> а)...)) = = t. Следовательно, сг, —> (сг2 —> (.. .(сгп —> сг)...)) — тавтология. (<$=) Предположим, что «г, —> (ст2 —>(.. .(<тп —> ст)...)) — тавтология. Пусть V — истинностное означивание, такое, что V(at) = t для каждого г € {1, 2,..., п}. Если мы предположим, что V(ip) — /, то V(an Поэтому, если (a 4 +, = t ~> f = f. )...)) = t, то К -* К +1 а)...)) — тав (о» -* (• • К -* CT)- • •))) = / вопреки тому, ))) тавтология. ? 1.5.8 Следовательно, V(ct, что <т, — (а2 —(.. .(<тп Следствие 1.5.8 дает нам метод, позволяющий для любой задан- заданной формулы f установить, является ли она логическим следствием заданного конечного множества высказываний S: мы проверим за 2" шагов, является ли правая часть пункта 7 тавтологией. Однако для бесконечного множества высказываний S этот метод потребует бесконечного числа шагов. В этом случае более уместно воспользо- воспользоваться семантическими таблицами. ¦>j.w, ¦¦;¦> ; ),- g iq Полнота множеств логических •i'^fSbvL-'h связок и нормальные формы **-':;\4ЩЧ?**> Нахождение истинностного значения высказывания, доказатель- доказательство противоречивости или непротиворечивости множества выска- высказываний в большинстве случаев зависит от числа и типа связок, содержащихся в высказываниях. Используемые нами пять логиче- логических связок наиболее часто встречаются в математических текстах. В этом разделе мы докажем, что произвольное множество логиче- логических связок выразимо через множество {->, Л, V}, и, следовательно, множества логических связок {->, Л, V} достаточно, чтобы выразить каждое высказывание логики высказываний (см. [Smu68, Mend64, Schm60]). Определение 1.6.1. Множество логических связок Q на- называется полным, если для каждого высказывания логики выска- высказываний существует логически эквивалентное ему высказывание, содержащее только связки из Q. ? 1.6.1 Теорема 1.6.2. Множество {->, Л, V} является полным. Доказательство. Пусть а — сг(Аи А2,..., Ак) — высказы- высказывание, в котором встречаются только атомы А,, А2,..., Ак. Постро- Построим сокращенную таблицу истинности а: § 1.6. ПОЛНОТА МНОЖЕСТВ ЛОГИЧЕСКИХ СВЯЗОК 35 А, А, Ак ак а(А{,А2,...,Ак) °\ О2к В этой таблице а обозначает соответствующее истинностное значение в строке п и столбце I, а ап обозначает истинностное значение высказывания <?(Аи ..., Ак) в строке п. 1. Предположим, что в последнем столбце найдется хотя бы од- одно значение t. Докажем, что существует высказывание, содержа- содержащее только связки -1, Л, V, последний столбец сокращенной табли- таблицы истинности которого совпадает с последним столбцом указанной выше таблицы. Для произвольного атома А обозначим А* сам атом А и А! — его отрицание ->А. По строке п построим конъюнкцию которая содержит только связки -> и Л. Тогда высказывание является искомым, так как его сокращенная таблица истинности содержит t в точности в.тех же строках, что и сокращенная таблица истинности ст(Аи ..., Ак). 2. Если последний столбец не содержит t, то высказывание ложно и, следовательно, логически эквивалентно А Л ->А, где А — произ- произвольный пропозициональный символ. ? 1.6.2 Используя технику доказательства теоремы 1.6.2, мы можем вы- выразить произвольное высказывание через связки ->, Л и V. Полу- Полученное в результате эквивалентное высказывание называется дизъ- дизъюнктивной нормальной формой (ДНФ). Пусть F — высказывание, содержащее атомы А,,..., А„. В об- общем случае ДНФ формулы F имеет вид ): (Alt Л ... Л Ак) V (А2[ Л ... Л А2) V ... V (А^ Л ... Л Ак), где At е {Аи ..., А„} или А,- € {-<Ai,..., -<Ап}, т. е. уЦ — атомы или отрицание атомов F, и в каждой конъюнктивной компоненте J! ;Л г.-
36 Глава 1. ЛОГИКА ВЫСКАЗЫВАНИЙ встречается каждый атом F либо с отрицанием, либо без § 1.6. ПОЛНОТА МНОЖЕСТВ ЛОГИЧЕСКИХ СВЯЗОК 37 него1). К ) Конъюнктивная нормальная форма (КНФ), двойственная к ДНФ, имеет вид KHO(F): (А, V ... V А, ) Л (А2 V ... V А2 ) Л ... Л (А, V ... V Ак ). Пример 1.6.3. Найдем ДНФ высказывания F, заданного сокращенной таблицей истинности: ».iT 4 Г ЛП ft*.С- '*•..• 1 •*• , [ > 't , ¦" г { Чк »' А t t t f f f f В t t f f t t f f С t f еч. / t f t f F t f f f t f f t tf, н if* Применим метод, описанный в доказательстве теоремы 1.6.2. Шаг 1. Находим все строки, содержащие t в последнем столбце. В нашем случае это строки с номерами 1, 5, 8. Шаг 2. Л-.ВЛ-.С). ? 1.6.3 Теперь докажем два следствия, устанавливающих полноту кон- конкретных множеств логических связок. Следствие 1.6.4. Множества связок Кх — {->, V} и К2 — = {->, Л} являются полными. ) Дизъюнктивная нормальная форма, каждый конъюнктивный сомножитель кото- рои содержит все пропозициональные символы, называется совершенной ДНФ. Как будет видно в дальнейшем, в общем случае ие требуется, чтобы каждый атом входил в состав конъюнктивного сомножителя ДНФ. Аналогичное замечание относится и к устройству конъюнктивной нормальной формы (КНФ) — Прим. перев. Доказательство. Используя таблицы истинности, мы мо- можем доказать, что В, А^В =(А-> В)Л(В A ABe-,(-.Av-.B). А), Следовательно, каждое высказывание логики высказываний может быть выражено при помощи связок из множества {-i, V}. Таким образом, Кх полно. Аналогично мы можем доказать, что К2 полно. А —> В = ->А V В, А<-^В=(А—* В) /\(В —* А), A VB=-.(-.AA-.B). D 1.6.4 Пример 1.6.5. Наряду со связками ->, Л, V, —> и <-» мы можем ввести другие связки, например, | и : , определенные следующими таблицами истинности: щ - ш • ¦¦ а -•у it S 1 I. «• А / / / еч. / А\В f t t t A t t f f В t f t f A :B f f f t D 1.6.5 Следствие 1.6.6. Множества связок Е,={|} и Е2 = {:} полны. Доказательство. 1. Докажем полноту Е,. В сущности, А\В обозначает, что А и В не могут быть одновременно истинными. То- Тогда А\В = ->(А А В). (Эту эквивалентность легко проверить при помощи таблиц истинности.) Соотношения А|А = -<(А Л А) = ->А показывают, что отрицание может быть выражено при помощи связ- связки |. Для конъюнкции верно, что А Л В = -<->(А Л В) = -<(А\В) = = (А\В)\(А\В). 2. Докажем полноту Е2. Мы можем выразить отрицание: ->А = = ЫА У А) = А : А, и конъюнкцию: А Л В = ->(->А V ->В) = = (А:А):(В:В). D 1.6.6 Заметим, что множествами {|} и {: } исчерпываются все одно- одноэлементные полные множества связок (см. упражнение 20). Кро- Кроме того, каждое множество логических связок с двумя элементами, один из которых 1, а другой — Л, V или —>, является полным (см. [Schm60, Smul68, Mend64]). , -i* fw-
38 Глава 1. ЛОГИКА ВЫСКАЗЫВАНИЙ Замечание 1.6.7. Преобразование высказывания о в выска- высказывание ip, логически эквивалентное ему, но содержащее другие связки, часто бывает полезным. Например, в методе резолюций, ко- который исследуется в следующих параграфах, мы выражаем импли- импликации, т. е. высказывания вида а —> <р, через связки ->, Л и V. При этом мы используем эквивалентность A->B = -.AVB, ,,,. iV. я ,. ,,..v ^ „,..,;¦. проверить которую можно при помощи таблиц истинности. ? 1.6.7 В последующих параграфах мы опишем используемые в логике высказываний методы доказательств. Их описание упростит даль- дальнейший переход к логическому программированию. § 1.7. Семантические таблицы Методы доказательства — это алгоритмические процедуры, сле- следуя которым мы можем устанавливать, является ли высказывание тавтологией, и выполнимо ли множество высказываний. Эти методы разрабатываются в теории автоматического доказательства теорем и составляют основу логического программирования. Первый из описанных методов алгоритмического доказательства использует семантические таблицы. Генцен A909-1945) в 1934 г. впервые доказал, что все тавтологии могут быть получены приме- применением некоторых правил, то есть существует некоторая процедура проверки тавтологичности формул (см. [Юее52, Rault79]). Исполь- Используя теорию доказательств Бет и Хинтикка в 1955 г. построили ал- алгоритм, устанавливающий, является высказывание тавтологией или нет. При помощи семантических таблиц Бета (далее мы будем их на- называть просто семантическими таблицами) можно исследовать воз- возможность того, что данное высказывание принимает значение t или значение /. Семантическая таблица составного высказывания К строится ин- индуктивно, исходя из семантических таблиц высказываний, составля- составляющих К. Таким образом, мы определим атомарные семантические таблицы (см. [Smul68, Fitt90]). Определение 1.7.1. 1. Пусть о — высказывание. Обозна- Обозначим через fo утверждение *о ложно», а через to — утверждение *о истинно». При этом to и fo называются помеченными формулами. 2. Атомарные семантические таблицы для высказываний А, ох, о2 и высказываний, составленных из А, ох и о2, представлены в Следующей Таблице. ,.,.;(,.vll) ,,.,¦,¦,„,,,-., ,-, »,,.¦.;,;-.¦ ;-..Г #; <,, v-;y /< § 1.7. СЕМАНТИЧЕСКИЕ ТАБЛИЦЫ lip. i' V- - я*- la и ' - * 3a t^a) fo 5a t(a\ —? a2) / \ / \ fa\ tO2 ,v: , - 4'':fA .'. .» 3tf 1 :*.¦ f(-,a) . ч ta i.-i Ъб f(p\ -* 02) ti Ti '\ fa2 2a t{ax Л а2) tax ta2 4a / \ / \ 6a t{a\ +4 CT2) / \ ¦* 1 to, fa* 25 / 45 f(px f 65 f(px tC f<?2 Aa2) \ /<T2 Va2) <?2 <+O2) \ ta2 'i Интуитивно, tA (или /А) можно рассматривать как утверждение о том, что А истинно (ложно). Как следует из атомарной семантиче- семантической таблицы 4а, истинность утверждения ах V ст2 требует истинно- истинности ст, или истинности о2 (т. е. имеет место ветвление), в то время как из атомарной семантической таблицы 56 следует, что ложность утверждения сг, —> а2 требует истинности ох и ложности о2 (т. е. в данном случае мы имеем последовательное соединение). Таким образом, в семантических таблицах ветвление обозначает дизъюнк- дизъюнкцию, а последовательное соединение — конъюнкцию утверждений. Построение семантической таблицы составного высказывания К мы начинаем с того, что записываем помеченную формулу tK или fK в корень семантической таблицы. Затем мы разворачива- разворачиваем семантическую таблицу К в соответствии с определением 1.7.1. Прежде, чем определить общие правила построения семантиче- семантических таблиц, рассмотрим пример.
40 Глава 1. ЛОГИКА ВЫСКАЗЫВАНИЙ § 1.7. СЕМАНТИЧЕСКИЕ ТАБЛИЦЫ 41 Пример 1.7.2. Пусть К = (АА^А)У(В\/(С AD)). В К при- присутствуют атомы А, В, С и D. Построим семантическую таблицу с корнем tK. t((А А -.Л) V (В V (С Л D))) 4а, 2а t{A A -iA) t(BV(CAD)) 4a/ .:. i,., ' \4a t{C A «2 Taj fA Г!) ¦'i&ilr.i -'.i.y, I i tC tD ,: ¦ «3 tV ¦ «1 ¦ ?«' '-¦ -:.^ -,.:¦ i,: • ¦ ¦ . i" :• -'.(к. Это замкнутая семантическая таблица, содержащая три ветви, а именно, три последовательности х,, «j и Zj. Ветви произраста- произрастают из корня. Левая ветвь ж,, противоречива, так как она содержит противоречащие друг другу помеченные формулы tA и /Л. Проти- Противоречивая ветвь помечается внизу символом <g>. Две другие ветви не являются противоречивыми. Из семантической таблицы К мы можем заключить, что гипотеза tK правильна при некоторых условиях, например, при выполнении tB (ветвь Zj) или выполнении tC и W (ветвь г^). Однако иногда она ложна. Несложно выделить из семантической таблицы К составляющие ее атомарные семантические табли- таблицы. Например, ограниченная прямоугольником из то- I чек семантическая таблица является атомарной се- i(-u4) мантической таблицей 2а. П 1.7.2 Теперь мы сформулируем понятия, необходимые для построения семантических таблиц. Определение 1.7.3. 1. Вершинами семантической табли- таблицы называются все помеченные формулы, встречающиеся в этой таблице. t(A А -Л) tA 2. Вершина семантической таблицы называется особой, если она встречается как корень некоторой атомарной семантической табли- таблицы. В противном случае, вершина называется обычной. 3. Ветвь семантической таблицы называется противоречивой, ес- если для некоторого высказывания а помеченные формулы to и fa являются вершинами этой ветви. 4. Семантическая таблица называется замкнутой, если каждая непротиворечивая ее ветвь не содержит обычных вершин. В про- противном случае, семантическая таблица называется незамкнутой. 5. Семантическая таблица противоречива, если каждая ее ветвь противоречива. ? 1.7.3 Определение 1.7.4 (индуктивное определение семантиче- семантической таблицы). Построим семантическую таблицу высказыва- высказывания К следующим образом. Вначале помещаем помеченную формулу tK (или fK) в корень. Затем продолжаем построение по индукции. Шаг п . Пусть мы уже построили семантическую таблицу Тп, Шаг п + 1 . Расширим семантическую таблицу Тп до семантиче- семантической таблицы Tn + i. При этом мы пользуемся некоторой вершиной семантической таблицы Тп, которую в дальнейшем не будем исполь- использовать. Из всех обычных вершин Тп, ближайших к корню, выбираем самую левую. Обозначим выбранную вершину X. К концу каждой непротиворечивой ветви семантической таблицы Тп мы присоединяем атомарную семантическую таблицу, имеющую корнем X. (При этом вершина X становится особой вершиной.) В результате получаем семантическую таблицу Тп + 1 (как правило, мы не записываем саму вершину X, так как она уже присутствует в каждой из рассматриваемых непротиворечивых ветвей). Построение заканчивается, если каждая непротиворечивая ветвь не содержит обычных вершин. ? 1.7.4 Поясним описанную методику на примере построения противоре- противоречивой семантической таблицы. Пример 1.7.5. Рассмотрим закон Пирса ((Л —* В)—* А )—>>!. 1. В корень таблицы мы помещаем утверждение о том, что выска- высказывание ((Л —> В) —> Л) —* А ложно. (См. рис. 1.1) Предположение о ложности закона Пирса приводит нас к построению противоречивой семантической таблицы. Следовательно, соответствующая формула истинна. 2. Если бы мы поместили в корень семантической таблицы утвер- утверждения о том, что закон Пирса истинен, то заключение осталось бы таким же. (См. рис. 1.2.) Заметим, что в этой семантической таблице нет противоречивых ветвей. Для каждой из трех альтерна- альтернатив /Л, или tB и /Л, или tA утверждение ((Л —> В) —у А) —> Л)
42 Глава 1. ЛОГИКА ВЫСКАЗЫВАНИЙ § 1.7. СЕМАНТИЧЕСКИЕ ТАБЛИЦЫ f((A -4 В) -4 А) -4 А) ЩА -*В)->А) /А Рис. 1.1 Рис. 1.2 JO! истинно. Даже в случае /В одно из утверждений tA или /А имеет место. Следовательно, закон Пирса логически истинен. ? 1.7.5 Итак: если замкнутая семантическая таблица с /К в корне противоречива (а это означает, что мы пытались всеми воз- возможными способами сделать высказывание К ложным и не су- сумели), то К —тавтология. В следующем определении 1.7.6 этот замысел представлен более формально. Определение 1.7.6. Доказательством, или выводом по Бету высказывания К называется замкнутая противоречивая се- семантическая таблица, в корне которой помещена помеченная фор- формула /К. Замкнутая противоречивая таблица, имеющая в качестве корня tK называется опровержением по Бету высказывания К. Говорят, что высказывание К доказуемо, или выводимо по Бе- Бету, если оно имеет доказательство по Бету. Высказывание К называется опровержимым по Бету, если существует опроверже- опровержение К по Бету. Тот факт, что К доказуемо по Бету, обозначается \-вК. О 1.7.6 Как мы докажем в теореме 1.10.7 и теореме 1.10.9, каждая тав- тавтология доказуема по Бету (полнота доказательств по Бету) и, на- наоборот, каждое доказуемое по Бету высказывание есть тавтология (корректность доказательств по Бету). г..,*>л *,• *\- «ш, М -гц Пример 1.7.7. Предположим, что истинны высказывания: 1: Джордж любит Марию, или Джордж любит Екатерину; 2: Если Джордж любит Марию, то он любит Екатерину. Кого же Джордж любит? Обозначим символом М высказывание «Джордж любит Марию» и символом К высказывание «Джордж любит Екатерину». Тогда вы- высказывание 1 эквивалентно МУК, а высказывание 2 эквивалентно М —* К и, следовательно, ->М V К. Конъюнкцию высказываний 1 и 2, то есть (М V К) А (->М V К), обозначим А. По условию при- примера предполагается, что А истинно. Мы хотим узнать, любит ли Джордж Екатерину, или, говоря формально, верно ли tK. Предпо- Предположим, что он ее не любит, то есть верно /К. Мы можем построить семантическую таблицу с корнем /К. /к ЩМ V К) А (-М V К)) [ ' tK . '';¦,. tM tK :;.';"": На шаге 2 мы присоединили t((M w К) А{-^М У К)), так как 1 и 2 даны истинными. Начав построение таблицы с корнем /К, мы полу- получили противоречивую таблицу. Это означает, что высказывание К всегда истинно, другими словами, Джордж любит Екатерину! Если бы мы построили семантическую таблицу с помеченной фор- формулой /М в корне, то получили бы непротиворечивую таблицу, и, следовательно, не могли бы заключить, любит Джордж Марию или нет! ? 1.7.7
44 Глава 1. ЛОГИКА ВЫСКАЗЫВАНИЙ § 1.8. АКСИОМАТИЧЕСКАЯ СИСТЕМА ВЫВОДА 45 § 1.8. Аксиоматическая система вывода Логика высказываний, подобно другим математическим системам, может быть представлена как аксиоматическая система с логиче- логическими аксиомами и правилами вывода. Аксиомы — это некоторые тавтологии, правило вывода R выводит высказывание а из после- последовательности высказываний ст,, ст2,..., стп. Мы опишем вкратце ак- аксиоматическое представление логики высказываний (см. [Schm60, RaSi7O, Mend64]). Определение 1.8.1 (аксиомы). Каждое высказывание еле- \ дующего вида является аксиомой. . - 3. (-чр -> -it) -> (т -> <р). Заметим, что высказывания tp, t и ст могут быть произвольны- произвольными. Таким образом, мы описали схемы аксиом, из которых можно получить неограниченное число аксиом. Легко проверить, что все эти аксиомы являются правильно построенными формулами логики высказываний и, конечно, тавтологиями. ? 1.8.1 Определение 1.8.2 (правило вывода Modus Ponens). Мы будем использовать только одно правило вывода, правило Modus Ponens, которое утверждает, что высказывание т выводится из вы- высказываний tp и tp —> т. Правило Modus Ponens1) своим названием обязано Диогену Лаэртскому (Diogenes Laertius), см. [Zeno]. Оно обозначается следующим образом: • 1:'У- • . !.•¦ ;: tp —> т или . .""¦ ..;'4'i ¦1\у ' ** {.; ' < I, ,-¦", т h T (О B) В A), типичном определении логического правила, горизонталь- горизонтальная линия отделяет гипотезы от заключения. В B) символ Ь- обозна- обозначает выводимость в аксиоматической системе. Мы рассматриваем три аксиомы определения 1.8.1 как формулы, выводимые в аксио- аксиоматической системе. Новые высказывания получаются при помощи этих трех аксиом и правила Modus Ponens. В следующем примере 1.8.3 демонстрируется, как можно применить аксиомы и правило Modus Ponens для вывода формулы логики высказываний А —> А. ) В русской математической литературе это правило называют правилом заклю- заключения.— Прим. перев. Пример 1.8.3. Докажем, что Ь А —> А. ^ Доказательство. Сначала возьмем первую эддаому -г)) Из A) и B) по правилу Modus Ponens получаем, что Вторую аксиому запишем в виде A) B) >(А->А). C) Используя вновь первую аксиому А —> (В —> А), по правилу Modus Ponens заключаем, что ЬА—»А. Следовательно, высказывание А —> А выводимо в нашей аксиоматической системе. ? 1.8.3 Следующая теорема 1.8.4 позволяет производить в высказывани- высказываниях замену одних подформул на другие, логически им эквивалентные. Доказательство теоремы можно найти в упражнении 22. Теорема 1.8.4 (подстановка эквивалентных формул). Пусть высказывание о*-*ах выводимо в PL, a —подформула высказыва- высказывания (р, и высказывание <р{ получено в результате подстановки в высказывание tp вместо некоторых вхождений формулы а эк- эквивалентной ей формулы ах. Тогда высказывание <?+-> (/?, также выводимо в PL. Формально записываем: \- а ? 1.8.4 Теперь мы приведем формальное определение доказательства вы- высказывания аксиоматическим методом. О п ределение 1.8.5. Пусть 5 — множество высказываний. 1. Доказательством, или выводом из 5 называется такая конеч- конечная последовательность высказываний ст,, а2,..., ап, что для каждо- каждого 1 ^ г ^ п верно: а) at принадлежит 5, или б) at — аксиома, или в) о\ получено из ар ак, где 1 ^ к ^ *\ по правилу Modus Ponens. 2. Высказывание а называется доказуемым, или выводимым из множества высказываний S, если существует такое доказатель- доказательство ах, а2,..., ап из S, что ап совпадает с а. Для обозначения выводимости высказывания а из множества высказываний 5 будем использовать запись 5 h ст. 3. Высказывание ст называется доказуемым, или выводимым, ес- если Ь ст, то есть ст выводимо в аксиоматической системе определе- определения 1.8.1 при помощи правила Modus Ponens. Отметим, что если
46 Глава 1. ЛОГИКА ВЫСКАЗЫВАНИЙ § 1.8. АКСИОМАТИЧЕСКАЯ СИСТЕМА ВЫВОДА 47 S — 0, то понятие выводимого из множества 5 высказывания со- совпадает с понятием выводимого высказывания. ? 1.8.5 Пример 1.8.6. Выведем ->В —> (С —» А) из 5 = {А}. Имеем: 1) A —AeS; 2) А —>(С —* А) — аксиома 1; ', -л ¦-. ••¦ . .., -.^ж,; 3) С-> A —Modus Ponens к 1 и 2; < ,, ,:, ; , 4) (С -> А) ->(-.5-^ (С -»А)) — аксиома 1; •¦¦-'-• К-! <=*('., 5) -.Я->(С-+А) — Modus Ponens к 3 и 4. П 1.8.6 Заметим, что если а выводимо из 5 и 5 — бесконечное множе- множество, то а выводимо из некоторого конечного подмножества S, так как доказательство всегда конечно. Следующая теорема 1.8.7 является основной в теории доказа- доказательств. Теорема 1.8.7 (теорема дедукции). Пусть S —множество высказываний; К, L — высказывания. Тогда ¦'¦ < ¦ 5 и {К} Ы, «- S\-K->L. ,-:«*•;•*{.¦ Доказательство. (<$=) Предположим 5 Ь К —> L. Рассмо- Рассмотрим доказательство о-,, ст2,..., ап формулы К —> L, в котором сгп есть сама формула К" —> L, и для каждого ie{l,...,n} либо Ст; — аксиома, либо ст{ G 5, либо ст( выводится из двух предшествую- предшествующих высказываний с использованием правила Modus Ponens. То- Тогда последовательность ах, а2, ..., ап, ап + 1, ап + 2, где стп + 1 есть К, а ап + 2 есть L, является доказательством L, так как для каждого г ? {1,..., п, п+1} либо ст{ — аксиома, либо а{ ? 5и{К"}, либо ст{ вы- выводится из двух предшествующих высказываний с использованием правила Modus Ponens, стп+2 выводится из ап и <тп + 1 с использова- использованием правила Modus Ponens. (=Ф>) Мы знаем, что существует доказательство L из 5 U {.К"}. Обозначим его через L,, L2,..., Ln, где Ln есть L. Рассмотрим последовательность высказываний л—> ьх, п. —и>2, ..., л—»!>„• Эта последовательность не является доказательством. Однако, она превратится в доказательство, если мы дополним ее высказывания- высказываниями, полученными следующим индуктивным методом. Для L [ возможны три случая: L х — аксиома, либо L х принадле- принадлежит 5, либо Lx есть К. Высказывание LX—*(K—*LX) — аксиома 1. Поэтому в первых двух случаях мы запищем L, и L, —> (К —> Lx) перед К —> Lx. В последнем случае теорема верна (пример 1.8.3). Предположим, что мы дополнили последовательность вплоть до высказывания К —> Lm таким образом, что первые т элементов последовательности вместе с дополняющими ее элементами состав- составляют доказательство К —> L . Тогда мы запишем между К —> Lm и К —* Lm + X еще v высказы- высказываний так, что первые т + 1 элементов последовательности вместе дополняющими ее элементами составят доказательство К —» Lm + 1. Высказывание Lm + 1 либо аксиома, либо принадлежит S, л:;бо есть К, либо получено из L jt Lk (I < j, k ^ m) по правилу Modus Ponens. Другими словами, Lk имеет вид L}. —> Lm + l. В первых трех случаях мы поступаем аналогично тому, как посту- поступали выше, то есть записываем между К -+ Lm и К —* Lm + l выска- высказывания Lm + 1 и Lm + l —*(К —* Lm + l). В четвертом случае по индук- индуктивному предположению первые m элементов последовательности вместе с дополняющими ее элементами составляют доказательства К —> L} к К —> (Lj —> Lm + l). Дополним последовательность выска- высказыванием представляющим собой аксиому 2. Тогда К —* L т + [ можно вывести, если дважды последовательно применить правило Modus Ponens. Заметим, что при доказательст- доказательстве теоремы дедукции мы использовали только две из трех аксиом аксиоматической системы. D 1.8.7 Аксиомы логики высказываний часто называют логическими ак- аксиомами. Обычно мы определяем теорию, расширяя аксиоматиза- аксиоматизацию логики высказываний множеством S дополнительных аксиом, которые характеризуют теорию. Теоремы теории S являются эле- элементами множества {ip: S\- <p} (см. замечание 1.8.8). Замечание 1.8.8. 1. Аксиоматическая система. Аксиомы PL и правило Modus Ponens составляют аксиоматическую систему Фреге-Лукашевича (см. [Heij67, Boye68, Schm60]). Фреге (Frege, 1898 - 1925) стал первым, кто определил формальный язык, подхо- подходящий для логики. Лукашевич (Lukasiewicz, 1878 - 1926) разрабо- разработал аксиоматизацию логики высказываний. 2. Modus Ponens. Если а и а —у т доказуемы по Бету, то а и а —> г логически истинны, следовательно, т также логически истинно (по- (почему?). Известен алгоритмический метод, позволяющий строить до- доказательство по Бету высказывания т из доказательств по Бету вы- высказываний а и а —> т. Этот метод применяется в теореме Генцена, однако его доказательство выходит за рамки этой книги. 3. Теоремы. Теоремой является любое высказывание, присутству- присутствующее в доказательстве. Это означает, что теоремы теории 5 — это в точности элементы множества высказываний {a: S Ь- ст}. Обычно мы считаем заключением последнее высказывание доказательства, однако, фактически, каждый начальный фрагмент доказательства также является доказательством, уг.;„» .-7 ш,; л
48 Глава 1. ЛОГИКА ВЫСКАЗЫВАНИЙ § 1.9. МЕТОД РЕЗОЛЮИЙ 49 4. Выбор аксиом. В следующих параграфах мы покажем, что ме- методы аксиоматических доказательств корректны и полны. Таким об- образом, выбранная нами аксиоматическая система является полной. Это означает, что каждая тавтология может быть доказана из акси- аксиом последовательными применениями правила Modus Ponens. 5. Доказуемость по Бету. Наши аксиомы, будучи логически истинными высказываниями, доказуемы по Бету. Используя пра- правило Modus Ponens, мы из логически истинных высказываний по- получаем также логически истинное высказывание. Следовательно, каждая теорема доказуема по Бету. 6. Аксиомы и правила. Любую из аксиом аксиоматической си-j стемы можно заменить правилом. Например, -s ¦ >?•¦ (->V? —> -it) —»(т Можно было бц заменить правилом ш: Hofo.v еп,'Го Выбор между аксиомами и правилами — это обычно вопрос субъек- субъективной оценки характерных требований теории. 7. Вывод из аксиом. При доказательстве высказывания из ак- аксиом мы рассматриваем различные комбинации высказываний, пы- пытаясь определить такую, которая позволяет подходящим образом применить правило Modus Ponens и аксиомы. В результате, вывод некоторых высказываний, например, оказывается сложным и продолжительным, даже если бы нам было заранее известно, что и первая, и вторая аксиомы будут применять- применяться дважды. В отличие от этого, доказательства по Бету, введенные в опреде- определении 1.7.6, предоставляют систематический алгоритмический ме- метод, всегда приводящий к некоторому результату. По этой причине мы предпочитаем работать с доказательствами по Бету. ? 1.8.8 Л § 1.9. Метод резолюций - Терминология и обозначения в логическом программировании Метод резолюций — наиболее эффективный способ алгоритмиче- алгоритмического доказательства как в логике высказываний, так и в логике предикатов. Именно этот метод построения доказательств состав- составляет основу языка логического программирования ПРОЛОГ. Метод резолюций, как и метод семантических таблиц Бета, строит дока- доказательство путем опровержения, но при этом он более удобен для написания логических программ в языке программирования, кото- который устроен почти так же, как язык логики высказываний. Для того, что1бы ввести резолюцию, нам необходимо определить некоторые важные понятия современного логического программи- программирования. Определение 1.9.1. Литерал — это произвольный атом или его отрицание. ? 1.9.1 Например, ->А, В, ->С — литералы. Нам известно, что произвольную формулу логики высказываний можно привести к конъюнктивной нормальной форме (КНФ), экви- эквивалентной исходному высказыванию. КНФ — это по сути конъюнк- конъюнкция дизъюнкций литералов, причем в каждой дизъюнкции никакой литерал не встречается более одного раза. Теперь мы опишем алгоритм построения КНФ для заданного вы- высказывания, который работает немного быстрее, чем алгоритм, осно- основанный на построении таблицы истинности высказывания, выборе строк и т. д. „ т. Этот алгоритм состоит в применении: (flu;»N'.:>!* vi 1) законов де Моргана: f \_ , у"\ „,, % -.(А Л В) <-¦ -.А V Д -(А V В) ~ 7^Mfc ш Л: 2) свойств ассоциативности Л и V: (АлВ)ЛС<->Ал(ВлС), (A VB)V<3**JAV^ 3) свойств коммутативности Л и V: >^.гсш J»itnan А ЛВ *-* В ЛА, А V В <-+ В V А; 4) свойств дистрибутивности Л относительно V и V относительно 5) свойств: А/\А А, A; V-.B)«-> A, -.-.A«-+A ( и теоремы о подстановке эквивалентных формул. (В качестве упражнения докажите, что перечисленные высказывания являются тавтологиями.) ,, :,,4.i^<^fJ.,.,¦,.,,,., ., . ..... , .... . .
50 Глава 1 ЛОГИКА ВЫСКАЗЫВАНИЙ Продемонстрируем на примере описанный метод построения КНФ. Пример 1.9.2. Представим высказывание S в КНФ, где - § 1.9. МЕТОД РЕЗОЛЮИЙ 51 Шаг 1. Используя законы де Моргана, вносим отрицания внутрь скобок: S «-» ((-.(А V В) V ->(-,А V -.В)) А С, ,41 Шаг 2. Используя свойства коммутативности и ассоциативно- ассоциативности, собираем вместе литералы одного и того же атома. Затем, ис- используя теорему о подстановке эквивалентных формул, мы можем упростить двойные отрицания, выражения вида АчАнАлА, а также устранить излишние выражения вида А V ->А и А Л ->А: Шаг 3. По свойству дистрибутивности имеем: ,<гл 5 <-+ (((-А А ^В) V А) А (-.А А -.В) V В)) АС. ¦ '№"' Затем мы повторяем второй и третий шаги до тех пор, пока не определим окончательную КНФ. Шаг 4. S <-> ((-.А А -.5) V А) А (-А А -.?) V В) А С, Шаг 5. 5«(-.AVnA)A(nBvA)A(nAvB)A(n5VB)AC, Шаг 6. S«(-BVA)A(-A VB)aC. В результате получена искомая КНФ. ? 1.9.2 Последняя форма S в примере 1.9.2 есть конъюнкция дизъюнк- дизъюнкций литералов и эквивалентна исходной формуле. В общем случае описанный алгоритм заканчивает работу, когда получена следую- следующая форма высказывания S: ,й<, „ (A'VA'V...Ai)A...A(ArvA2'V...VAO, ^ „ " (*) где А,1, А2',..., А[,..., А", А2",..., А"к —литералы. В контексте построения доказательств методом резолюций ока- оказывается целесообразным формулировать высказывания как мно- множества литералов. Например, высказывание в первых скобках в (*) переходит в множество Мы считаем, что такое множество обозначает ДИЗЪЮНКЦИИ» литера- литералов, т. е. высказывание логики высказываний. ?„ i;. А .^й^.'ДШл'*;**» Теперь мы формально определим понятие теоретико-множествен- теоретико-множественной формы высказываний. Определение 1.9.3. Дизъюнкция конечного множества ли- литералов может быть представлена в теоретико-множественном виде как множество, элементами которого являются рассматривае- рассматриваемые литералы. Это множество называется дизъюнктом. Таким об- образом, дизъюнкт эквивалентен дизъюнктивному высказыванию ло- логики высказываний. Мы также введем понятие пустого дизъюнкта, то есть дизъ- дизъюнкта, который не содержит ни одного литерала и является всегда неподтверждаемым. Пустой дизъюнкт обозначается значком П. ? 1.9.3 Определение 1.9.4. Конъюнкция конечного мно- множества дизъюнктов может быть представлена в теоретико- множественном виде как множество, элементами которого являют- являются эти дизъюнкты. Это множество называется множеством дизъ- дизъюнктов. Таким образом, множество дизъюнктов представляет со- собой конъюнкцию дизъюнкций, то есть конъюнктивное высказывание логики высказываний. ? 1.9.4 Пример 1.9.5. Множество дизъюнктов представляет высказывание А V ;*"-'"hV. ' , ,, D 1.9.5 Замечание 1.9.6. 1. Очевидно, что истинностное озна- означивание подтверждает множество дизъюнктов, если оно подтвер- подтверждает каждый дизъюнкт этого множества. Например, пусть S = = {{А, В}, {-'С}} — множество дизъюнктов и V — такое истин- истинностное означивание, что ,-у> V(A)=V(B)=V{C) = t. Тогда V не подтверждает 5, так как оно не подтверждает один из элементов S, а именно, {~<С}. 2. Конечно, мы можем также рассматривать пустое множест- множество дизъюнктов {0}, которое не следует путать с пустым дизъюнк- дизъюнктом П. Формально каждое истинностное означивание подтверждает пустое множество дизъюнктов, так как оно подтверждает каждый из его элементов (в дизъюнктах {0} нет ни одного высказывания, см. доказательство следствия 1.5.4). «И'ч.,гЛ>>^«»яя? ,<..,,„,*,.,..*„»,.-
52 Глава 1. ЛОГИКА ВЫСКАЗЫВАНИЙ В отличие от этого, каждое множество дизъюнктов, содержащее пустой дизъюнкт, не может быть подтверждено никаким истинност- истинностным означиванием, так как ? неподтверждаем. В сущности, пустое множество дизъюнктов обозначает, что к «ми- «миру» (множеству высказываний) не предъявляются никакие «требо- «требования» (высказывания), в то время как пустой дизъюнкт П, обозна- обозначая противоречие, тем самым вносит это противоречие в наш мир, делая его противоречивым, то есть неподтверждаемым. ? 1.9.6 В логическом программировании, а также в большинстве версий ПРОЛОГа, преобладает следующая система обозначений. Пусть 5 — высказывание А, V... У Ak V (-.?,) V... V (--.8,), где А,,..., Ак, Вх,..., Bt — атомы. Тогда, согласно законам де Мор- Моргана и эквивалентности (-*В V А)«-+ (В —»А), мы имеем Л... Л (А, V... V Ак) и, в итоге, S**(AlV...VAk)*-{BlA...ABl). A) Относительно использования <— как логической связки см. так- также замечание 1.2.9. В дальнейшем вместо логических связок Л, V и <— мы будем использовать символы «,» (запятую), «;» (точку с запятой) и символьную комбинацию «: —» соответственно. В резуль- результате S может быть эквивалентно записано в виде А1;...;Ак:-Вх,...,В1. B) 'При к = 1 высказывание A) примет вид: ¦< ,ч.; ¦ Л,:-^,...,^. - C) Определение 1.9.7. Дизъюнкт S вида C) называется хор- новским дизъюнктом. Атом Ах называется заголовком, или целью S; конъюнктивные компоненты Вх,..., Bt называются хвостом, телом, или подцеля- подцелями S. О 1.9.7 Содержательное истолкование хорновского дизъюнкта таково: для того, чтобы цель А была истинна, достаточно, чтобы подцели Вх,..., В{ были также истинны. Определение 1.9.8. Если в дизъюнкте вида B) к =0, то дизъюнкт ":~ВХ,...,В, " <; ? D) Называется целью программы, или положительной целью. . .¦ § 1.9. МЕТОД РЕЗОЛЮИЙ 53 Если / = 0, то дизъюнкт Ах:~ E) называется унитарным дизъюнктом, или фактом ? 1.9.8 Замечание 1.9.9. 1. Множество дизъюнктов 5 может нефор- неформально рассматриваться как база данных (см. также раздел 3.1.1), так как дизъюнкты в S представляют информацию о взаимосвязи между атомами, из которых они состоят. 2. Подтверждение цели А в дизъюнкте А : — Вх,..., Bt вытекает из подтверждения подцелей Вх,..., Вх. В этом случае говорят, что цель А успешна, или что существует доказательство А. В против- противном случае говорят, что цель А неуспешна, или неудачна1). 3. Хорновский дизъюнкт D), обозначающий отсутствие цели, утверждает, что по меньшей мере одна из подцелей В{, i = 1,..., I, неуспешна. Хорновский дизъюнкт E) обозначает, что цель Ах все- всегда успешна. В этом случае А, составляет требование, факт нашей базы данных. ? 1.9.9 Вообще говоря, резолюция представляет собой дедуктивное пра- правило, позволяющее нам выводить дизъюнктивное высказывание из двух других дизъюнктивных высказываний. Прежде, чем описать формальный метод, рассмотрим пример. Пример 1.9.10. Рассмотрим следующие дизъюнкты: {->А, В}, {А, С}. Используя резолюцию, мы можем вывести дизъюнкт {В, С). Применение такого правила становится интуитивно понятным, если мы переформулируем вышеозначенные дизъюнкты в класси- классической формулировке логики высказываний: исходные высказывания: (-iA У В), (А V С); .;. ,-. .¦«.„¦... Л заключение: (В V С). * L В этом правиле применяется тавтология , ,„ (-А V В) V (А V С) -> (В V С). Как свидетельствует теорема о полноте (теорема 1.10.9), тавтологии выводимы из аксиом с использованием правила Modus Ponens: h (-.A V В) V (А V С) -»(В V С). По теореме дедукции (теорема 1.8.7) мы получаем, что Ми Таким, Фбразом, правило резолюции выводимо в лоийсе высказыва- " L ? 1910 НИИ. ? 1.9.10 ') Если нет других ютютпте^Лтола/шюшЛ^^Прш^трт»^
54 Глава 1. ЛОГИКА ВЫСКАЗЫВАНИЙ Обобщим предыдущий пример, рассматривая рассматривая в ка- качестве исходных данных следующие дизъюнкты: где АХ,А2,..., А*., В,,..., В,, Д, D2,..., ?>v F{,..., Fk — ато«м.« Предположим, что А1 совпадает с Fx. '¦. Мы можем переписать эти дизъюнкты следующим обра азом: t:ir С{ = { А,} и С/, где С[ = {А2,..., А,., , }, Тогда по правилу резолюции можно вывести дизъюнкт С = С[ и С2. Другими словами, исходные высказывания: С, = {А,} и С[, С2 = {^А,} U С2; заключение: С[ U С{ = (С, - {A,}) U (С2 - {--А,}). (*) Мы можем считать, что дизъюнкты С{ и С2 «вступают в проти- противоречие», так как С, содержит литерал А,, а С2—литерал -"А,. Устранение причины противоречия приводит к дизъюнкту (*), ко- который разрешает конфликт. Своим названием метод обязан этому разрешению1). Теперь мы формально определим метод резолюций. Определение 1.9.11 (резолюция, формальное описание). Пусть С, и С2 — дизъюнкты, L — такой литерал, что L е С, и ->L € C2. Тогда резольвентой дизъюнктов С, и С2 называется дизъ- дизъюнкт D 1.9.11 Пример 1.9.12. Исходные высказывания: Сх = {i?Q}, C2 = = {--J?-.<5}; заключение: ?> = {Q,-.Q}. D 1.9.12 Если мы имеем множество, содержащее более двух дизъюнктов, то можно ввести понятие множества резольвент. Определение 1.9.13. Пусть S = {С1;..., Сп}. Множество R(S) = S U {.D: ?) — резольвента дизъюнктов Со Ср 1 ^ i j ^ } называется резольвентой S. Пример 1.9.14. Пусть S — множество дизъюнктов, S = i, j ^ n} П 1.9.13 ') От английского to resolve (разрвамя*). — ПршШ. перев. § 1.9. МЕТОД РЕЗОЛЮИЙ 55 Применяя правило резолюции для пар дизъюнктов S, мы получим дизъюнкты 4, 5, 6: 1 {А,-В,-С} 2 {B,D} ' 3 ЬА,-?>} } } 1 4 {А.Д--С} ., 5 {В,-А} ' 6 И, в итоге, ДE) = { {А, ^В, -С}, {В, D}, {-А, ^ Г: .И"*"' 5 6 Мы можем продолжить применять этот метод, последоЦ^ельно по- получая множества: ;: R°(S) = S, R1(S) = R°(S)UR(S), >,y$\ R2(S) = ДE)иД(ДE)),..., Rn(S) = Д»~1E)и. И, затем, ¦! "' где C{ —дизъюнкт, содержащийся в j-й резольвенте S. Заметим, что R (S) конечно тогда и только тогда, когда 5 конеч- конечно. ? 1.9.14 Замечание 1.9.15. 1. В примере 1.9.12 мы применили ре- резолюцию по литералу Р. Мы могли бы применить резолюцию и по литералу Q, так как, очевидно, Q также является причиной проти- противоречия. 2. Содержательная подоплека метода резолюции такова: если истинностное означивание подтверждает Сх и С2, то оно также подтверждает их резольвенту D. Аналогично, если истинностное означивание подтверждает 5, то оно также подтверждает R(S). 3. Заметим, что резольвента D дизъюнктов С, и С2 содержит меньше информации, чем С, и С2. Это поясняет следующий при- пример 1.9.16. ? 1.9.15 Пример 1.9.16. Рассмотрим множество дизъюнктов S = {{АВ}{В}} {А,В},{-,В}}. сходные высказывания: С. = {А, В}, С2 = {->В}; заключение: {А}
56 Глава 1. ЛОГИКА ВЫСКАЗЫВАНИЙ Применяя резолюцию к S, мы получаем дизъюнкт D = {А}, ко- который не содержит никакой информации о литерале В. ? 1.9.16 Теперь мы дадим формальное определение доказательства мето- методом резолюций. Определение 1.9.17. Пусть 5 — множество дизъюнктов. Резолютивным выводом из S назовем такую конечную последова- последовательность дизъюнктов С,,.. ., С„, что для каждого С,., г = 1, ..., п, либо Сг е S, либо С; е Л({С*Я C"t})> 1 ^ Л & ^ п. Дизъюнкт С счи- считается резолютивно выводимым из множества дизъюнктов S, и этот факт обозначается S \-R С, если существует резолютивный вывод из S, последний дизъюнкт которого — С. Очевидно, что CeR'iS). а 1.9.17 Пример 1.9.18. Найдем резольвенту множества дизъюнктов S = {{A,B},{^A,^B}}. Перенумеруем дизъюнкты S: 1 — {А, В], 2 — {-'А, ->В}. Из дизъ- дизъюнктов 1 и 2 получаем дизъюнкты 3 — {Д -*В} и 4 — {А, ->А}. г Затем Rl(S)={{A,B}, {-A, В итоге получаем R-(S) = R°(S) U Rl(S) = {{А, В}, {^А, ^В}, {В, ^В}, {А, -А}}. Дизъюнкт вида {А, ->А}, а именно А V ->А, является тавтологией. ? 1.9.18 Пример 1.9.19. Дано высказывание S: ((А «-»(Д -> С)) Л (А «-¦ В) Л (А <¦+ -С)). * !¦;> .гл Докажем, что 51 неподтверждаемо. п^лг.г-. Доказательство. Шаг 1. Определим КНФ высказыва- высказывания 5: А)Л(-<А V B)A * •;*': л 2 3 v А) л (-.a v -с) л (с v -.а) -г, Шаг 2. Сформируем соответствующее множество дизъюнктов: Ч{Д А}, ^ ..?4-c},{q^A}}. ..> ¦¦i«H-.'. >$ § 1.9. МЕТОД РЕЗОЛЮИЙ 57 Шаг 3. Определим различные резольвенты: f*"' 8) {А} —резольвента 2 и 5; s>#t,., ,„„1з*! 9){-'А,-'В} — резольвента 1 и 6; ¦. ¦ •- 10) {->А} — резольвента 4 и 9; ¦' '''яцн^ыь ль ... 11) П — резольвента 8 и 10. (См. также определение 1.9.8. Литерал ->А уничтожается, дизъ- дизъюнкт 11 не содержит литералов.) Так как мы получили пустой дизъюнкт (резольвента 11), то мно- множество дизъюнктов S неподтверждаемо. Следовательно, высказы- высказывание 5 невыполнимо. ? 1.9.19 Пример 1.9.20. Доказать, что высказывание -*В резолютивно выводимо из множества S = {{А, , {-А, -,В, С». Доказательство. Построим резолютивный выводдизъюнк- та ^5^- 1) {А, ^В} -дизъюнкт из 5; Z'lt^iibwv 2) {-iA, -1Д -iC} — дизъюнкт из 5; .mi..„_,• •Дг.нж.кЙ.- 3) {->А, -пД С} — дизъюнкт из 5; 4) {->А, -iB} — резольвента 2 и 3; 5) {-5} — резольвента 4 и 1. f'^ ' ;'"Г"? ? 1.9.20 Замечание 1.9.21. Доказательство в примере 1.9.20 можно было провести следующим образом. Применяя резолюцию к множеству 1Д -С}, {-А, -.Д С7}, {5}} = S U с'*' ! I.'.' ial .'1 построим вывод 5) {А} — резольвента 1 и 4; " •?>.•. *. ;- 6){-'А,-'В} — резольвента 2 и 3; 7) {->А} — резольвента 4 и 6; 8) ? — резольвента 5 и 7. То есть, верно S U {В} Ьд П. Так как правило резолюции — вы- выводимое правило логики высказываний (как мы видели в приме- примере 1.9.10), то верно также и соотношение S U {В} Ь П. Но в этом случае, по теореме дедукции (теорема 1.8.6) мы имеем 5 Ь {В } —у П. Используя тавтологию (В —>П)*~>-'В, приходим к заключению о том, что 51—>В, или, другими словами, -*В выводимо из S. П 1.9.21
58 Глава 1. ЛОГИКА ВЫСКАЗЫВАНИЙ § 1.10. Корректность и полнота метода семантических таблиц /:¦ 'Л', В следующих параграфах мы докажем теоремы корректности и полноты описанных методов доказательств. Мы начнем с доказа- доказательств корректности и полноты системы вывода по Бету. Для всех последующих определений и теорем, включающих поня- понятия «доказательство по Бету» и «логически истинно», имеются со- соответствующие двойственные определения и теоремы, относящиеся к двойственным понятиям «опровержение по Бету» и «логически ложно». Формулировку этих определений и теорем мы оставляем читателю в качестве упражнения. Мы докажем, что все выводимые по Бету высказывания истинны (корректность) и, наоборот, каждое логически истинное высказы- высказывание выводимо по Бету (полнота) (см. [Smul68]). Доказательства проведем индукцией по длине высказывания или длине семантиче- семантической таблицы. Мы уже описали схему индукции для высказываний. Теперь опишем общую схему индукции для семантических таблиц. Определение 1.10.1 (схема индукции для семантических таблиц). Пусть R — некоторое свойство семантических таблиц. Тот факт, что таблица Г обладает свойством R, обозначим R(T). Как только мы докажем, что а) каждая атомарная семантическая таблица обладает свойст- свойством R, б) если Г обладает свойством R, и Т' — новая семантическая таблица, полученная присоединением некоторой атомарной семан- семантической таблицы к концу одной из ветвей Г, то Т' также обладает свойством R, то мы можем заключить, что R — свойство всех семантических таб- таблиц, то есть R(T) имеет место для каждой семантической таб- таблицы Т. ? 1.10.1 Для семантической таблицы Т индукция проводится по длине Т, то есть числу атомарных семантических таблиц в ней. Аналогия между схемой индукции для высказываний (определе- (определение 1.2.2) и схемой индукции для семантических таблиц очевидна. Пример 1.10.2. Пусть R—свойство «Число вершин в семан- семантической таблице не превосходит числа ветвей». Покажем, что все таблицы обладают этим свойством. Доказательство. 1. Во всех атомарных семантических таб- таблицах число вершин не превосходит числа ветвей. 2. Предположим, что в семантической таблице Г число вершин не превосходит числа ветвей.'Присоединим к концу одной из ветвей Т некоторую атомарную семантическую таблицу. Если присоединен- присоединенная вершина — это t(^a) или f{~^o), то число вершин увеличилось § 1.10. КОРРЕКТНОСТЬ И ПОЛНОТА СЕМАНТИЧЕСКИХ ТАБЛИЦ 59 на одну в то время, как число ветвей осталось без изменения. Если присоединенная вершина — это вершина любого другого типа, то, согласно определению 1.7.1, появятся не более двух новых ветвей и не менее двух новых вершин. Следовательно, в новой семантиче- семантической таблице Т" число вершин также не превосходит числа ветвей. ? 1.10.2 Теперь мы рассмотрим некоторые вспомогательные определения и леммы, относящиеся к теоремам корректности и полноты доказа- доказательств по Бету. Определение 1.10.3. Пусть х— непротиворечивая ветвь .в семантической таблице Т, и Р — {Р{,..., Рп} — множество вер- вершин х. Истинностное означивание V называется согласованным с ветвью х, если для каждой вершины Pi из Р выполняются соот- соотношения р = to => V(a) = t и P.=fa^V((r) = а 1.Ю.З Лемма 1.10.4. Пусть V—истинностное означивание, со- согласованное с корнем tcr (fa) семантической таблицы, то есть V(a)= t (V(a) = f ). Тогда V согласовано с некоторой ветвью семантической таблицы. Доказательство. Воспользуемся индукцией. 1. Лемма, очевидно, верна для атомарных семантических таблиц. 2. Предположим, что лемма верна для семантической таблицы Т. Пусть Т' — семантическая таблица, полученная из Г присоедине- присоединением атомарной семантической таблицы с корнем X к концу вет- ветви х. Мы докажем, что лемма верна для семантической таблицы Г'. Случай 1. Предположим, что V согласовано со всеми верши- вершинами ветви х. Тогда V согласовано с вершиной X и, следовательно, согласовано с одной из ветвей атомарной семантической таблицы с X в корне. Обозначим х1 ветвь атомарной семантической таблицы, с которой согласовано V. Ветвь хх{, полученная конкатенацией х и хх, является ветвью Г'. Следовательно, мы нашли ветвь ххх се- семантической таблицы Г', с которой согласовано V. Случай 2. Предположим теперь, что V не согласовано с х, но согласовано с корнем Г (иначе нам не нужно ничего доказы- доказывать). Тогда найдется другая ветвь х' семантической таблицы Г, с которой V согласовано. Но х' — также ветвь Г'. Следовательно, V согласовано с х'. ? 1.10.4 Лемма 1.10.5 (Хинтикки). Пусть х — непротиворечивая ветвь замкнутой семантической таблицы. Определим истин- истинностное означивание V, полагая для каждого атома А : JvV)
60 Глава 1. ЛОГИКА ВЫСКАЗЫВАНИЙ У (А) — t, если х содержит вершину tA, V(A) = f, если х не содержит вершину tA. Тогда истинностное означивание V согласовано с ветвью х. Доказательство. Проведем индукцию по длине высказыва- высказываний в вершинах этой ветви. 1, Если А —атом, и tA —вершина х, то V(A)=t и V согласова- согласовано с х. Если fA —вершина х, то наша ветвь не содержит вершину tA, так как х непротиворечива. Следовательно, V(A) = f. 2. Допустим х содержит вершину t(a{ Л<т2). Ввиду того, что се- семантическая таблица замкнута, эта вершина уже была однажды во- востребована, и, следовательно, соответствующий фрагмент iV .,.„,, был присоединен к концу ветви х. -. »< v i ;\ Поэтому вершины ttr, и ?<т2 также содержаться в ветви х. По предположению индукции V(a{) = t и V(a2) = t, то есть У(о-1Лст2) = = t. Предположим теперь, что ветвь х содержит вершину f(ax/\a2). Поскольку семантическая таблица замкнута, вершина f(axf\a2) уже была однажды рассмотрена, и, следовательно, фрагмент , был присоединен к концу ветви х. Но в этом случае либо /о-,, либо /ст2 является вершиной зс. Учитывая индуктивное предположение, это означает, что справедливо хотя бы одно из двух соотношений V(a]) = f или V(at) = f. Отсюда следует, что V(a1 Л ст2) = /. Остальные возможные случаи анализируются аналогично. Мы их оставляем читателю в качестве упражнения. ? 1.10.5 Лемма Хинтикки дает нам алгоритм построения контрпри- контрпримера, опровергающего предположение об истинности заданного высказывания. Предположим, что нам дано высказывание а. То- Тогда мы строим замкнутую семантическую таблицу с fa в кор- корне. Если семантическая таблица противоречива, то высказы- высказывание логически истинно. Если семантическая таблица непро- непротиворечива, то она содержит по меньшей мере одну непроти- непротиворечивую ветвь х. Лемма Хинтикки указывает нам, как, ос- основываясь на х, построить истинностное означивание, такое, 4moV(a) = f. ; , ¦...; ,., - : ¦ ¦¦¦-'.!-.,' )¦ § 1.10. КОРРЕКТНОСТЬ И ПОЛНОТА СЕМАНТИЧЕСКИХ ТАБЛИЦ 61 Рассмотрим описанные действия на примере. Пример 1.10.6. Найти такое истинностное означивание V, что У {{А —> В)«-+ (А V В)) = f. Построим семантическую таблицу с /((А -> В) <-»• (А V В)) в корне: Ветви «2 и Z4 этой семантической таблицы противоречивы. Од- Однако, мы можем применить лемму Хинтикки к непротиворечивым ветвям хх и х3. В результате получим, например, такие истинност- истинностные означивания Vj и V2: Vi(A) = f V{(B) = f V3(A)=t, V3(B) = f, что (A V 5)) = Таким образом, мы отыскали два истинностных означивания, при которых высказывание (А—> B)*->(AV В) принимает истинностное значение /. ? 1.10.6 Теорема 1.10.7 (корректности). Если высказывание а дока- доказуемо по Бету, то оно логически истинно. Формальная запись: а.
62 Глава 1. ЛОГИКА ВЫСКАЗЫВАНИЙ Доказательство. Если высказывание а не является логи-j чески истинным, то найдется истинностное означивание V, для ко-j торого V(a) — f. По лемме 1.10.4 каждая семантическая таблица с помеченной формулой fa в корне имеет хотя бы одну ветвь х, с ко-; торой согласовано с V, и поэтому, х непротиворечива (почему?). Следовательно, а не доказуемо по Бету. ? 1.10.7 Замечание 1.10.8. При доказательстве теоремы 1.10.7 мы воспользовались третьей аксиомой на уровне нашего метаязыка. Вместо того, чтобы доказывать V2 => =>Pi, т. е. что доказуемость а по Бету влечет логическую истин- истинность а, мы доказали, что -Фх => -Ф2. Другими словами, если а не является логически истинным, то а не доказуемо по Бету. Та- Такой метод доказательства используется довольно часто и называет- называется непрямым доказательством или доказательством от противно- противного. (Прямой метод доказательства подразумевает непосредственное обоснование следствия V2 =>VX). ? 1.10.8 Теорема 1.10.9 (полноты). Если высказывание а логически истинно, то оно доказуемо по Бету. Формальная запись: \=а=>\-ва. Доказательство. Если высказывание а логически истин- истинно, то для каждого истинностного означивания V верно V(a) = t. Предположим, что вывод по Бету для а не существует. Мы постро- построим замкнутую семантическую таблицу с помеченной формулой fa в корне. Эта семантическая таблица должна иметь непротиворечи- непротиворечивую ветвь. По лемме 1.10.4 найдется соответствующе определенное истинностное означивание V, которое согласовано с этой ветвью, а значит, и с корнем fa. Тогда V(a) = f, а это противоречит тому факту, что а — логически истинная формула. Следовательно, дока- доказательство по Бету для а обязано существовать. D 1.10.9 Из доказательства теоремы полноты можно заметить, что если мы не можем построить доказательство по Бету для высказывания а (а именно, замкнутую семантическую таблицу с fa в корне), то есть построенная замкнутая семантическая таблица имеет хотя бы одну непротиворечивую ветвь, то мы можем точно также, как в лем- лемме 1.10.5, определить истинностное означивание, которое будет кон- контрпримером, опровергающим утверждение о том, что а логически истинно. Другими словами, построение семантической таблицы для а гарантирует, что мы получим либо доказательство a,t либо контрпример для а-. > ... , ¦,. «к <-« лл« «.¦<<>*: ,,-. § 1.11. ДЕДУКТИВНЫЙ ВЫВОД ИЗ ГИПОТЕЗ 63 § 1.11. Дедуктивный вывод из гипотез Теорема компактности . '¦*• ' ^ • Автоматический вывод теорем из предположений и данных — од- одна из важных задач логического программирования. В параграфе 1.5 мы рассматривали логические следствия из множества выска- высказываний 5. Высказывание а было названо логическим следствием 5, то есть S \= а, если каждое истинностное означивание, делаю- делающее истинными все высказывания S, приписывает также значение t высказыванию а. Теперь мы определим, что означает вывод вы- высказывания из множества высказываний и предположений. Определение 1.11.1. Пусть Ч>\, Рп, — конечная или бесконечная последовательность высказываний. Высказывание а называется дедуктивно выводимым по Бету из высказываний <рх, tp2,..., tpn,..., если существует противоречивая семантическая таблица, построенная следующим образом. Шаг 0. Помещаем fa в корень. Шаг 52п. Присоединяем ttpn к концу каждой непротиворечивой ветви. Шаг S2n + l. Применяем правила расширения (см. определение 1.7.1) к семантической таблице предыдущего шага Т2п. О 1.11.1 Если последовательность высказываний бесконечна, то такое по- построение может никогда не завершиться. Высказывание а дедуктив- дедуктивно выводимо по Бету, только в том случае, если построение закан- заканчивается, и в результате получена противоречивая семантическая таблица. Тогда интуитивно понятно, что не существует истинност- истинностного означивания, которое приписывает истинностное значение t всем высказываниям <рп, участвовавшим в построении семантиче- семантической таблицы, и одновременно с этим приписывает истинностное значение / высказыванию а. Если исходная последовательность ко- конечна, то указанная процедура когда-нибудь завершится построени- построением замкнутой семантической таблицы. Проиллюстрируем описанное построение на примере. Пример 1.11.2. Докажем, что высказывание А дедуктивно выводимо по Бету из высказываний ->В и (А У В). Строим семан- семантическую таблицу с /А в корне, присоединяя утверждения t (—>.В) и t(A У В) (см. рис. 1.3). 34 ¦'*.-¦¦¦
64 Глава 1. ЛОГИКА ВЫСКАЗЫВАНИЙ /А *ЬВ) ''¦SO viVrs tA t{A V В) 1 '.) Vi t' • ¦>п .-.•¦у, V?'•*•?>:; . ' ¦ Рис. 1.3 .. . . Рассмотрим t(AVВ). Левая ветвь этой таблицы противоречива, и далее ее можно рассматривать. При анализе правой ветви нуж- нужно обратить внимание на вершину *(->#). Правая ветвь таблицы оказывается также противоречивой. Следовательно, А дедуктивно выводимо по Бету из -*В и (А V В). О 1.11.2 Две последующие теоремы 1.11.3 и 1.11.4, относящиеся к конеч- конечным множествам предположений, соответствуют теоремам коррект- корректности и полноты из предыдущего параграфа 1.10. Теорема 1.11.3 (теорема корректности дедуктивного вывода). Если высказывание а дедуктивно выводимо по Бету из высказы- высказываний </?,, </э2,..., ipn, то а является логическим следствием вы- высказываний tpu tp2,..., tpn. Формальная запись: {?>,, у>2,..., <pn}\-B<T=>{<Pi, <р2,...,<рп}\=<т. Доказательство. Докажем теорему от противного. Предположим, что высказывание а не является логическим след- следствием </?,, <р2,..., ipn. Тогда найдется такое истинностное означива- означивание V, что По лемме 1.10.4 каждая семантическая таблица с корнем fa содер- содержит хотя бы одну ветвь, с которой согласовано V, и, следовательно, непротиворечива. Это означает, что а не может быть доказуемым по Бету из {у»,, у>2,..., <д,}. ? 1.11.3 Теорема 1.11.4 (теорема полноты дедуктивного вывода). Ес- Если высказывание а является логическим следствием высказы- высказываний vv ip2,..., <рп, то а дедуктивно выводимо по Бету из вы-Л сказываний у>,, р2,..., у„Т Формальная запись: а. § 1.11. ДЕДУКТИВНЫЙ ВЫВОД ИЗ ГИПОТЕЗ 65 Доказательство. Предположим, что высказывание а не является дедуктивно выводимым по Бету из </?,, <р2,..., у>„. Тогда мы можем построить полную непротиворечивую семантическую таблицу с корнем fa, каждая ветвь которой содержит вершины tipx, tip2,..., tipn. В этой семантической таблице найдется непроти- непротиворечивая ветвь. По лемме 1.10.5 существует истинностное означи- означивание V, согласованное с этой ветвью. Следовательно, F(y>,) = ... ... = V(tpn) = t и V(a) = f. Однако это противоречит условию те- теоремы, согласно которому а — логическое следствие высказываний <pv <p2,..., (рп. а 1.П.4 Замечание 1.11.5. Теоремы 1.11.3 и 1.11.4 корректности и полноты остаются верны, если последовательность {ipk: k ? N} содержит бесконечное число элементов. ? 1.11.5 Теперь мы можем сформулировать и доказать теорему компакт- компактности для логики высказываний. Введем основное определение. Определение 1.11.6. Последовательность ах, а2,..., ап на- называется выполнимой, если существует такое истинностное озна- означивание V, что V(al) = V(a2) = ... — V(an) = t. При этом говорят, что V подтверждает последовательность <т,, а2,..., ап. ? 1.11.6 Пример 1.11.7. Если А,, А2,... — последовательность ато- атомов, то бесконечная последовательность 1' ^2' 1 ^^2' ^3' 1 3? 2 3' • • • — выполнима. Истинностное означивание V такое, что подтверждает эту последовательность. Напротив, конечная после- последовательность высказываний .¦¦*; А,, А2, может служить примером невыполнимой последовательности. В са- самом деле, если мы предположим, что она выполнима, то найдется такое истинностное означивание V, что V(Al)= V(A2) = V(Al -* А3) = = t. Отсюда следует, что справедливо соотношение V(A3) = /. Но в та- таком случае из равенства F(A,)~» F(A3) = t вытекает V(A,) = /, что противоречит предположению У(А{) — t. О 1.11.7 Прежде, чем сформулировать теорему компактности, приведем определение и лемму, необходимые для ее доказательства. Определение 1.11.8. 1. Пусть X и Y — две вершины се- семантической таблицы. Назовем Y последователем X, если суще- существует ветвь, проходящая через X и Y, в которой X расположена 3 Г. Метакиденс, А. Нероуд
66 Глава 1. ЛОГИКА ВЫСКАЗЫВАНИЙ ближе к корню, чем У. Назовем У непосредственным последо- последователем X, если X — последователь У, и в ветви, проходящей через X и У, между X и У нет ни одной вершины. Назовем X подходящей вершиной, если она имеет бесконечное число последо- последователей. 2. Мы говорим, что семантическая таблица имеет конечную сте- степень ветвления, если для каждой ее вершины найдется только ко- конечное число ее непосредственных последователей. ? 1.11.8 Лемма 1.11.9 (лемма Кенига). В семантической таблице, имеющей конечную степень ветвления и содержащей бесконеч- бесконечное число вершин, найдется хотя бы одна бесконечная ветвь. Доказательство. Заметим, что корень семантической таб- таблицы с бесконечным числом вершин является подходящей верши- вершиной. Более того, если X — подходящая вершина, то хотя бы один его непосредственный последователь также является подходящей вершиной, ибо семантическая таблица имеет конечную степень ветвления. Следовательно, если взять корень Хо, а затем в качест- качестве Хх того непосредственного последователя Хо, который является подходящей вершиной, а затем в качестве Х2 того непосредствен- непосредственного последователя Хх, который является подходящей вершиной, а затем... и т. д., то получим ветвь Х0ХхХ2..., имеющую бесконечное число вершин. ? 1.11.9 Теорема 1.11.10 (теорема компактности). Пусть ох, а2,...— такая бесконечная последовательность высказываний, что для каждого п конечная последовательность <т,, <т2,..., ап выполни- выполнима. Тогда бесконечная последовательность ст,, а2,... также вы- выполнима. Доказательство. Опишем индуктивное построение семан- семантической таблицы, которая, вообще говоря, может быть бесконеч- бесконечной. Шаг 1. Помещаем/(-«г,) в корень таблицы. Шаг 2 п . Присоединяя tan к концу каждой непротиворечивой ветви таблицы T2n_v получаем таблицу Т2п. Шаг 2 п + 1 . Выбираем в Т2п самую близкую к корню обыч- обычную вершину, расположенную как можно левее, и применим к ней правила развертывания определения 1.7.1. При этом будем полагать, что построение завершается, если на нечетном шаге 2п + 1 в семантической таблице все ветви проти- противоречивы. (Если они непротиворечивы, то мы можем продолжить построение на шаге 2п+ 1.) Если построение завершилось, то мы получили противоречивую семантическую таблицу с корнем /(->сг,) и гипотезами <т,, а2,.. .,*гп. По теореме 1.11.3 это означает, что является логическим следствием оу, ov, <7П, и, следователь- но, о-,, <т2,..., ап невыполнима вопреки условию теоремы.»„м § 1.13. КОРРЕКТНОСТЬ И ПОЛНОТА МЕТОДА РЕЗОЛЮЦИЙ 67 Таким образом, построение никогда не завершается, т. е. семанти- семантическая таблица содержит бесконечное число вершин. Построенная семантическая таблица имеет конечную степень ветвления, так как число непосредственных последователей у каждой ее вершины — конечно. Следовательно, по лемме Кенига в ней найдется бесконеч- бесконечная ветвь ж, в которой для каждого высказывания а{, i — 1,2..., содержится вершина ta{. Определим1) истинностное означивание V: V(A) = t <?> А — пропозициональный символ и tA — вершина ж. Тогда по лемме Хинтикки мы можем вывести, что V(a() — t для каждого г, и последовательность <т,, а2,..., ап выполнима. ? 1.11.10 ,v | ,; § 1.12. Корректность и полнота ¦^.н^.и.:) аксиоматической системы вывода Теперь мы сформулируем теоремы корректности, полноты и ком- компактности аксиоматических методов. Доказательства этих теорем читатель может найти в большинстве книг по классической логике. См., например, [Klee52, Rasi74, RaSi70]. Теорема 1.12.1 (корректности и полноты). Высказывание а выводимо из множества высказываний S тогда и только тогда, когда а—логическое следствие S. Формальная запись: S\-a<*S\=a. П 1.12.1 Следствие 1.12.2. Высказывание а выводимо из S — 0Ф> <?> а — логически истинно. ? 1.12.2 Теорема 1.12.3 (компактности). Множество высказыва- высказываний S выполнимо тогда и только тогда, когда выполнимо каж- каждое его конечное подмножество. ? 1.12.3 § 1.13. Корректность и полнота метода резолюций Следующие теоремы касаются корректности и полноты метода резолюций. Теорема 1.13.1 (корректности и полноты метода резолюций). Множество дизъюнктов S невыполнимо тогда и только тогда, когда R*(S) содержит пустой дизъюнкт. Формальная запись: OeR'(S) «• S невыполнимо. ? 1.13.1 Предпошлем доказательству корректности метода резолюций вспомогательную лемму 1.13.2. ) Используемая стратегия построения семантической таблицы гарантирует, что каждое высказывание ст; будет «разобрано» на атомы. — Прим. перев.
68 Глава 1 ЛОГИКА ВЫСКАЗЫВАНИЙ § 1.14. УПРАЖНЕНИЯ 69 Лемма 1.13.2. Если{С{, С2}— выполнимое множество дизъ- дизъюнктов, и С—резольвента С, и С2, то С выполнимо. Доказательство. По определению правила резолюции име-4 ем С, = {р} U С/, С2 = {-ф} U С2' и С = Q U С2 для некоторого ли-' терала р. Если V — истинностное означивание, подтверждающее {С,, С2}, то либо V(p)=t, либо V(-ip) — t. Предположим, что V(p) = t. Так как V(C2)=t и F(-,p) = /, то V(C2')=t. Поэто- Поэтому F(C)= t. Если V(-ip)= t, то V(C[)— t, и мы вновь приходим к заключению F(C)= t. D 1.13.2 Теорема 1.13.3 (корректности метода резолюций). Если R*(S) содержит пустой дизъюнкт, то то S — невыполнимое множество дизъюнктов. Формальная запись: О е R'(S) =>¦ S невыполнимо. Доказательство. Пусть С,,..., Ск — резолютивный вывод из S. Тогда, применяя предыдущую лемму, по индукции можно до- доказать, что любое истинностное означивание, подтверждающее S, подтверждает также Си. Если заключение — это пустой дизъюнкт, то Ск совпадает с П. Так как пустой дизъюнкт невыполним, то S невыполнимо. D 1.13.3 При доказательстве полноты метола резолюций воспользуемся следующей вспомогательной леммой 1.13.4. Лемма 1.13.4. Пусть S — невыполнимое множество дизъ- дизъюнктов, в котором встречаются только литералы А,, А2, ...j ..., Ak. Пусть Sk~l —конечное множество дизъюнктов, резолю-t тивно выводимое из S, в котором встречаются только атомар- \ ные высказывания А,, А2,..., Ak_r Тогда Sk~l невыполнимо. Доказательство. Предположим, что Sk~' выполнимо. То- Тогда найдется истинностное означивание V множества литералов {А[, А2,..., At_,}, подтверждающее Sk~l. Пусть Vx и V2 — два та-j кие расширения V, что Vj(A4)=«, Множество дизъюнктов S невыполнимо, поэтому найдется дизъ- дизъюнкт С, е S, который не подтверждается VJ. Тогда -<Ak e С,, ибо! в противном случае обе альтернативные возможности приводят к противоречию: а) Ак ф С,, и Vj подтверждает С,; б) Ак е Сх, и Vx подтверждает С,. Аналогично мы можем заключить, что найдется дизъюнкт С2 е S, который не подтверждается И, и содержит атом Ак. Рассмотрим D = (C, — {-^Ak})Ll(C2 — \Ak}). Дизъюнкт D является резольвентой С, и С2, и DeSk~l. Следовательно, V подтверждав ет D. Другими словами, имеет место один из следующих варианто! J а) V подтверждает С, — {-iAfc}. Но тогда VJ подтверждает С,. Получаем противоречие. б) V подтверждает С2 — {Ак}. Но тогда V2 подтверждает С2. По- Получаем противоречие. Следовательно, Sk~l невыполнимо. П 1.13.4 Теорема 1.13.5 (полноты метода резолюций). Если S — невыполнимое множество дизъюнктов, то из S резолютивно выводим пустой дизъюнкт. Формальная запись: S невыполнимо => De R*(S). Доказательство. По определению 1.9.3 множество S содер- содержит конечное число литералов. Обозначим их А,,..., Ак. Применяя лемму 1.13.5, можно заключить, что 5* невыполнимо. Применив эту же лемму к раз, мы заключим, что 5° невыполнимо. Так как никакое атомарное высказывание не содержится в дизъюнктах 5°, и 5° С R*(S), то DG 5° С R*(S). ? 1.13.5 Замечание 1.13.6. Если а — высказывание, резолютивно вы- выводимое из множества высказываний S, то а выводимо из S (опре- (определение 1.8.5). Тогда по теореме полноты (теорема 1.12.1) можно заключить, что S Ьл а & S Ь a <S> S \= а. A) По теоремам корректности и полноты (теоремы 1.10.6 и 1.10.8) со- соотношение A) может быть обобщено следующим образом: а 1.13.6 <Ч § 1.14. Упражнения f« : к- 1.14.1. Докажите, что согласно определению высказывания сле- следующие выражения являются высказываниями: а) р: (А V (В А С)«-»(А V В) Л (А V С)); б) д: ((А V В)-С)-(-.АЛ С)); в)г:((А,ЛА2)У(-Аз)). Решение, а) Мы докажем, что выражение р является выска- высказыванием, построив р индуктивно в соответствии с определением 1.2.1: 1) А, В, С — высказывания по определению 1.2.1, 1; 2) (В Л С) — высказывание по определению 1.2.1, 2 и п. 1; 3) А V (В Л С) — высказывание по определения 1.2.1, 2, а также пп. 1 и 2; Ц'^е u^'tWhW^в''-^'*--^ .',?'"*• И," !¦ ) •;¦«!?зшлг-иг Л> к
70 Глава 1. ЛОГИКА ВЫСКАЗЫВАНИЙ § 1.14. УПРАЖНЕНИЯ 71 4) (А V В) и (А V С) — высказывания по определению 1.2.1, 2 и п. 1; 5) (А V В) А (А V С) — высказывание по определению 1.2.1, 2 и п. 4; 6) р: (А V (В А С) <-> (А V В) А (А V С)) — высказывание по onpei делению 1.2.1, 2 и 5. Задания б) и в) решаются аналогично. ... 1.14.2. Определите, какие из следующих выражений являются высказываниями, а какие — нет: а) в) д) (А А В) У (AV5)V C; б) г) е) ((АлЯ)У(-.С))->?>; A~5)->(Av5); № (А, Л А2) <-> ->А3. ¦ ; Решение, а) Это не высказывание, так как за V следует логи- логическая связка, к которой не относится никакое высказывание. б) Это высказывание согласно определению 1.2.1 (этот факт обос- обосновывается точно также, как в упражнении 1). в) Это не высказывание, так как за V следует логическая связка, а не высказывание. г) Это не высказывание, неправильно расставлены скобки. д) Это высказывание согласно определению 1.2.1 (для обоснова- обоснования этого факта см. упражнение 1). е) Это высказывание согласно определению 1.2.1 (для обоснова- обоснования этого факта см. упражнение 1). 1.14.3. Представьте следующие высказывания атомарными сим- символами и постройте из них составные высказывания: а) «12 делится на 2», «9 делится на 3», «11 делится на 2»; i б) «все квадраты — параллелограммы», «все ромбы — параллело?? граммы», «во всяком параллелограмме диагонали точкой пересече^' ния делятся пополам»; в) «Джордж является отцом», «У Джорджа есть ребенок», «Мэр1| является отцом», «У Мэри есть ребенок». ' Решение, а) Введем следующие обозначения: -, ,, , ,. ,, А: «12 делится на 2», ¦ ' ¦ "HJ^hvi-, •# В: «9 делится на 3», ..,. , > ¦ С: «11 делится на 2». ' ' ! ' *' ' ' ' ¦'< Тогда АУВ, (ААВ)->С, (АуБ)Л(-.С) и A->(BA-iC) —приме- —примеры составных высказываний, в которых используются символы А, В и С. Выражение (А ЛВ)-» С, конечно, является высказыванием, однако, по всей видимости, соответствующее ему утверждение бу- будет неверным. Задания б) и в) решаются аналогично. у< ! 1.14.4. Даны атомарные высказывания: v. Ар «3 — простое число»; А3: «2 делится на 3»; А2: «15 делится на 3»; А4: «13 делится на 3». а) Определите некоторое означивание F этих высказываний. б) Пусть WF — истинностное означивание, являющееся расшире- расширением F. Вычислите WF((Al А А2) -> (А3 V А4)). Решение, а) Рассмотрим, например, означивание: = /, \ F{A2)=t, л "; = f, \ F(At) = t ...,! i)) F(l2 П WF(A2)\ - [WF(A3) U WF(A<)] = 1.14.5. Докажите, что следующие высказывания являются тавто- тавтологиями: а) (АА^А)-+ А; б) (А-> В) V (А в) А-+-.-.А; ,?); г) [(А V В) — С)«-»[А -> (В -+ С)]. Решение, а) Рассмотрим означивание W(A) = t, а также его расширение W. Тогда ys ,),,,,,,,.,,.. = [W'(A) П W'(^A)] -¦ W(A) = = [W(A) П (~ W(-A))] ^ ^ = [W(A) П (~ W(A))] ~> W(A) = [tn(~()H*= ! '¦ s = [tn/]-»*= t т ; Рассмотрим теперь означивание W(A) = f и Таким же способом мы можем заключить, что W[(Aa-.A)->A] = t. w
72 Глава 1. ЛОГИКА ВЫСКАЗЫВАНИЙ Итак, для любого истинностного означивания высказывание истинно. Значит оно является тавтологией. Задания б), в) и г) решаются аналогично. 1.14.6. Докажите, что следующие высказывания логически лои ны: а) (АА^А); в) (А^В)Л(В-»С)А(АЛ-.С);| б) (-,AV(BAnB))wA; г) -.(А Л В) Л (А -» В) А А. , Решение. .. г) Выпишем всевозможные означивания из г): 1) W(A)= t, W(B)= t; \'ш 2) W(A)= t, W(B)= /; ;<Ш!й '¦¦' '¦' '' 3) W(A)= f, W{B) = t; ' •'¦¦ 4) ЩЛ)= /, ЩВ)= /. Затем для каждого из указанных означиваний W найдем^ вующие истинностные означивания W, расширяющие мер, для 1) имеем i;.(. W'[->(A AB)A(A^B)AA] = = №"НАЛВ)]П№"[(А-»В)ЛА] = § 1.14. УПРАЖНЕНИЯ 73 = (~(W'(A)nW'(B))\l(W'(A)->W'(B))nW'(A) \Л /, ([])[ / ' .-.jV|'..= ~tntnt = fnt = f. fr Аналогично вычисляются истинностные означивания для случаев 2), 3) и 4). В каждом из этих случаев мы получаем W'[-i(A А В) А Л (А —>В)ЛА] = /. Таким образом, формула г) противоречива. Пункты а), б) и в) решаются аналогично. 1.14.7. Заполните следующую таблицу истинности: А * * / / В t f t f -A ->B A->B -.A VB (A-»B)h(-,AV5) 1.14.8. Докажите, что следующие высказывания логически экви- эквивалентны: а) -п(АлВ) и -iAV-iB; rti : б) AV(BAC) и (AVB)A(AVC); ' в) AVB и В У А; г) А -> В и -.В -> -.А. Решение, б) Построим таблицы истинности для обоих выска- высказываний и убедимся, что последние колонки этих таблиц совпадают: А t t t t f f f f В t t f f t t f f С t f t f t f t f ВАС t f f f t f f f АУ В t t t t t t f f АУ С t t t t t f t f А У(В AC) t t t t t f f f (АУ В)А(АУС) t t t t t f f f .кг Итак, А V (В А С) и (А V В) А (А V С) логически эквивалентны. Пункты а), в) и г) решаются аналогично. 1.14.9. С использованием таблиц истинности докажите, что сле- следующие высказывания являются тавтологиями: а) (А У В)УС^АУ(ВУС); >л 4тих<- б) (А АВ)аС*->Аа(В AC); *^«U г) А «-»-.-.А; д) А У (В А-*В)<-> А; ж) AA(BVC)«(AAB)V(AAC); з) AV(BAC)«(AvB)A(AvC);
74 Глава 1. ЛОГИКА ВЫСКАЗЫВАНИЙ 1.14.10. Пусть S = {AV В,А-*С}. Докажите, что S (= В V С. Решение. Построим таблицу истинности высказываний из множества S: Ц> А t t t t f f f f В t t f f t t f f С t f t f t f t f АУ В t t t t t t f f A-^C t f t f t t t t •\ 1 it \i 11 i i 1i Из таблицы видно, что существуют четыре означивания, при кото- которых все высказывания из S становятся истинными. Проверим, что в каждом из этих случаев высказывание В У С также обращается в истину. Имеем W(A) = t, W(B) = t, W(C) = t, C) = W(B)\JW(C)=t[Jt = t. Точно так же можно обнаружить, что W(B V C)=t справедливо и для трех других означиваний, при которых одновременно выполня- выполняются W(AAB)=t и W(A-+C) = t. Таким образом, S \= В V С. 1.14.11. Пусть S = {A*->C, В <-*Ц (А V В) Л (С VD)}. Докажите, что S^{AAB)V(C AD). Решение. Постройте таблицу истинности для высказываний из множества S и определите означивания, при которых эти выска- высказывания обращаются в истину. Далее докажите, что имеются в ности три таких истинностных означивания. Затем надлежит вычис лить соответствующие истинностные значения для (AAB)V(CAD) В двух из этих трех случаев (AaB)V(CAD) становится ложныл 1.14.12. Докажите, что если {А, -*В} (= С Л -.С, то {А} |= В. Решение. Предположим, что {А} ^ В. Тогда существует т$-| кое истинностное означивание W, что W(A)—t и W(B) = , § 1.14. УПРАЖНЕНИЯ 75 и, следовательно, W(~^B) = f. Таким образом, W позволяет об- обратить в истину как А, так и В. Значит высказывание С А ->С тоже должно быть истинным при означивании W. Другими слова- словами, W(CA->C) = t. Но тогда W(C)UW(-^C)- t. Следовательно, W(C) = W(->C) = t и W(^C)=~W(C)=~t=f, что является про- противоречием. Поэтому исходное предположение неверно, и {А}\=В. 1.14.13. Пусть 5, и S2 — два множества высказываний. Выясните, какие из следующих утверждений верны: а) Con(Sx U 52) = Con(Si) U СопE2); б) Con(Sl П 52) = ConE,) П Con(S2). Верные утверждения докажите, неверные — соответственно опро- опровергните контрпримером. Решение, а) Докажем, что Con(S^) U Con(S2) С Con(Sx U S2). Предположим, a? Con(Si)UCon(S2). Тогда либо а? Con^S^, ли- либо aeCon(S2). Поскольку 5, С 5,U52, мы имеем СопE,)С ConE,U U S2) (см. следствие 1.5.8). Аналогично, из S2 С 5, U S2 вытекает Con(S2) С Con(Sl U S2). Таким образом, а ? Con{Sl U 52), или, дру- другими словами, ConE,) U Con(S2) С Con(Sl U S2). Однако обратное включение Con(S[ U S2) С Соп^^ U Con(S2), во- вообще говоря, несправедливо. Рассмотрим 5, = {A}, S2 = {А —> В}. Легко заметить, что для каждого означивания W, подтверждающего одновременную выполнимость А я А—*В, высказывание В также обращается в истину. Значит, В е Con(Sl U S2). A) Однако, В ? Con^t). Чтобы убедиться в этом, достаточно рассмо- рассмотреть означивание Wu при которой Wl(A)= t и W,(B) = /. С дру- другой стороны, В $. Con(S2). Подтверждением тому может служить истинностное означивание W2, при котором W2(A) = f, W2(B) = f. Очевидно, при этом И^2(А —> B)=t. Следовательно В (? ConE,U52). Учитывая A), мы получаем ConE, U 52) Ч ConE,) U Con(S2). Таким образом, утверждение а) в общем случае неверно. б) Приведем контрпример. Предположим S{ n S2 = 0. Согласно следствию 1.5.4 мы имеем ConE,n52) = Con@). Последнее множе- множество формул образовано всевозможными тавтологиями. Рассмотрим далее случай 5, = {А} и S2 — {В}. Тогда А У В принадлежит как 0071C^), так и Con(S2), поскольку каждое означивание, обращаю- обращающее в истину элементы 5, или элементы S2, также делает истинным и высказывание А V В. Однако А V В не является тавтологией (по- (почему?). Значит утверждение б) неверно.
76 Глава 1. ЛОГИКА ВЫСКАЗЫВАНИЙ § 1.14. УПРАЖНЕНИЯ 77 1.14.14. Докажите, что из S U {А} (= В следует S \= А-+В. Решение. Допустим S И {А} \= В. Тогда каждое означива- означивание W, подтверждающее все элементарные высказывания из 5 и и{А}, также обращает в истину и В. Иными словами, для каждого означивания W, при котором W(C) — t для каждого С 6 S, равен- равенство W(A) = t неизбежно влечет W(B) = t. Тогда W(A —> В) — = W(A) ~» W(B) = t-^t-t. Значит, S (= А -» В. 1.14.15. Для произвольного непротиворечивого множества выска^] зьшаний S докажите, что S U {tp} противоречиво Ф> S (= -пр. Решение. (=») Предположим, S U {<р} — противоречивое мно- множество. Поскольку S непротиворечиво, существует по крайней мере одно означивание W, такое, что для всякого высказывания а € S вы- выполняется W(a)—t. Если W(tp)—t, то Slt{tp} — непротиворечи- непротиворечивое множество вопреки предположению. Значит W(ip) — f, что вле- влечет W(-<(p)= t для всякого означивания W, при котором W(ct) = t для каждого а е S. Таким образом, S (= -чр. (<=) Верно и обратное. Предположим, что S (= -пр. Тогда для каж- каждого истинностного означивания W такого, что W(a) — t для лю- любого высказывания а из S, будет справедливо W(->(p)= t, а сле- следовательно и W(tp) = /. Это означает, что всякий раз, когда все элементы из S принимают значение t, высказывание <р имеет зна- значение /. Значит множество Sl){<p} противоречиво. 1.14.16. Представьте приведенные ниже утверждения как множе- множества высказываний PL и определите, какие из получившихся мно- множеств являются непротиворечивыми. St: Свидетель был испуган, или в том случае, если Джон со- совершил самоубийство, записка была обнаружена. Если свидетель испуган, то Джон убил себя сам. S2: Любовь слепа, но счастье нам доступно, или любовь слепа, а женщины гораздо умнее мужчин. Если счастье нам доступно, то любовь совсем не слепа. Женщины не более умны, чем мужчины. Решение. Выразите утверждения из 5, и S2 формулами и по- постройте для них таблицы истинности. Далее воспользуйтесь опре- определением 1.5.5. 1.14.17. Докажите, что если 5, С Con(S2), то Con(Sl U S2) = = Con(S2). 1.14.18. Пусть Q — множество высказываний1), a S — непро- непротиворечивое подмножество Q. Назовем S максимальным непро-j 1) Содержащее вместе с каждым высказываем а и его отрицание ->а. — При перев. '1,Л тиворечивым множеством, если всякое множество S' такое, что S С 5' С Q, является противоречивым. Докажите, что непротиворечивое подмножество 5 является мак- максимальным непротиворечивым множеством тогда и только тогда, ко- когда для каждого высказывания а 6 Q справедливо в точности одно из следующих утверждений: а 6 S, -кг е S. Решение. (=$¦) Допустим, что S — максимальное непротиворе- непротиворечивое множество высказываний. Рассмотрим <т€ Q такое, что а$ S. Тогда 5 — это собственное подмножество множества S' = S U {а}, которое противоречиво по определению S. Таким образом, если означивание W подтверждает все высказывания из S, оно опро- опровергнет а. Так как W(a) = f, мы имеем W(-i<t) = t. Следовательно, -кг принадлежит S; иначе S было бы собственным подмножеством 5" = 5u{-kj}, и мы получили бы, что W(tp)= t для каждого <рeS", в том числе и W(->a) = t. Другими словами, 5" было бы непроти- непротиворечивым, вопреки предположению о том, что S — максимальное непротиворечивое множество. Точно так же мы можем доказать, что если -ю ? S , то а е S. (<=) Предположим, что 5 непротиворечиво, и для каждого а е Q справедливо только одно из двух включений (<т е S) и (-кг ? S). Мы докажем, что S — максимальное непротиворечивое множество высказываний. Пусть S' — такое множество, что S С S' С Q. Рассмотрим у> е € (S1— S). Тогда ip ? 5", tp ^ S и -чр € S (почему?). Напомним, что S непротиворечиво. Следовательно, для любого означивания W, при котором истинны все высказывания из S, мы получим \У(-чр)= t, или W(<p) = / . Но в таком случае не существует означивания, при котором истинны все высказывания из S', поскольку -чр е S С С S' и v? € S'. Следовательно, ввиду того, что противоречиво любое множество S' такое, что S С S' С Q, приходим к заключению, что S — максимальное непротиворечивое множество. 1.14.19. Даны высказывания: A: «KLMN — параллелограмм»; В: «диагонали KLMN делятся точкой пересечения пополам»; С: «противоположные углы KLMN равны»; D: «противоположные стороны KLMN равны». Определите, является ли множество S = {А, А +-> В, А +-> С, А —> —> (В Л D)} непротиворечивым. 1.14.20. Доказать, что не существует логической связки о, сое- соединяющей два высказывания языка PL, отличающейся от | и : (см. пример 1.6.5), и такой, что множество связок {о} образует полную систему. Решение. Пусть о — такая логическая связка, что А о В син- синтаксически корректная формула языка логики высказываний. Суще- Существует столько различных возможностей для определения таблицы
78 Глава 1. ЛОГИКА ВЫСКАЗЫВАНИЙ § 1.14. УПРАЖНЕНИЯ 79 истинности А о В, сколько существует четырехместных наборов, образованных истинностными значениями t и /, т. е. 16. А t t f f В t f t f t t t t f t t t °3 t f t t / / t t °5 t t f t °6 / t f t °7 t f f t °8 / / / t ч # t : 'f % '¦SI 11 ^^Содержательный смысл oit 1 ^ i ^ 16, станет более ясным, если tin воспользуемся следующими равносильными формулами A t t f f В t f t f °9 t t t f °10 / t t f °I! * / t f °12 / / t f °13 t t f f °!4 / t f f °15 t f f f °16 / / / / 'Л A A A 'a A A <A A A A A A A 'a -,A A °! °3 °5 °6 °7 °8 °10 °11 °13 °14 °!6 °!6 В .в в в в в = -.А ^— —i/ Л — '1 л = А- = -.А; = Б- = -iB; = А«- = ^(А — "Ч-^ = А; = (А — -•А VA, У В) >В; > А; >В; VB) L —>Б А В); А А, (истина); ' ' , (а\в т ntfmiPiJtAt \ -.41) < о i , (.4: Б из Примера 1Л 5): \. .*¦>¦' ); -.,.. • . • -д Г, ч*\ • * -' (противоречие). - ¦ > j \ - »| ! . И ¦ ! 1 1 1 1 j- Ш 11 Указанная таблица истинности содержит логические связки, в том числе, относящиеся только к одному высказыванию, напри- например о4 и о6. Эта задача, таким образом, позволит нам сделать более общее заключение, касающееся множества всех связок. Для каждой связки о б {ои ..., о16} можно отметить следующее: если А о В принимает значение t в случае, когда оба высказы- высказывания А и В истинны, то множества {о} недостаточно для на- нашей цели. Дело в том, что отрицание -> не может быть выраже- выражено посредством о: сколько бы раз не встречался символ о в фор- формуле, выражающей отрицание, значение формулы всегда будет t и никогда не будет /, если и А и В имеют значение t. Значит ° ? {°И °3> °5> °7) °9> °П' °13) °15i }• По той же причине если А о В принимает значение / в случае, когда оба высказывания А и В означены /, то множества {о} так- также недостаточно для полноты: отрицание -> нельзя выразить при помощи о. Значит о ^ {о9, о10, о,., о12, о13, о14, о15, о16, }. Если о = о4, то множества {о} недостаточно, так как -i-iA = А. Мы всегда будем иметь либо А, либо -<А, сколько раз бы ни встре- встречалось отрицание, так что нам не удастся выразить Л или V. Сле- Следовательно, о ф о4, и по аналогичной причине о ф о6. Если же о = oj или о = о8, то {о} достаточно, как мы уже видели в примере 1.6.5. 1.14.21. При помощи метода семанических таблиц докажите истинность следующих высказываний: \ . . . _ ' W> С- '"ч)\ б) в) г) д) ((А-»С)Л(Б->-С))-((АУБ)->С);* ''*«' е) (AA(BVC))«((AAB)V(AAC)); . / ж) (А-»(Б^С))^(Б-(А^С)); з) (А +-* В) <-» ((А Л В) V (-iA Л-iB)). Л\ ,<*"'•» Решение, в) Построим семантическую таблицу с /[(А ЛВ)-» -¦ С) +-> (А -> (В -> С)] в корне (см. рис. 1.4). е) Построим семантическую таблицу с /[(А А (В У С)) <-* ((А Л Л В) V (А Л С))] в корне (см. рис. 1.5). 1.14.22. Докажите теорему 1.8.4 о подстановке эквивалентных формул. Решение. Проведем доказательство теоремы по индукции. 1. Базис индукции. Пусть количество логических свя- связок, встречающихся в формуле <р, равно нулю. Следовательно, <р —
80 Глава I. ЛОГИКА ВЫСКАЗЫВАНИЙ А (В У С)) f+ ((А А В) V (А л С))] л с) tB *[(Л л Я) V (Ал С)] / ¦ it* /Л fl !> > V*'.- AC) 3), ;., t;;,, > tC ¦»"»¦*¦ /Л . JB <8> *® /Л fC'X^Xу'';,!; /c /Р. •Л . к) К' ' • >T ЭТ«>1' v ч.г § 1.14. УПРАЖНЕНИЯ 81 С] Рис. 1.5 Я ! r-v- атомарное высказывание, и ц> и о должны совпадать. Тогда форму- формула ip' — это ip или а1. Итак, мы получили I- tp *-* ц>'. 2. Индуктивный переход. Предположим, что теорема верна, если ц> содержит п логических связок. Докажем, что из это-
82 Глава 1. ЛОГИКА ВЫСКАЗЫВАНИЙ го предположения можно заключить, что теорема верна, если в у> содержится п ¦+ 1 логическая связка. Рассмотрим отдельно два случая. а) Пусть формула ip имеет вид -чрг По индуктивному предполо- предположению верно, что Ь у>, <-> <p'lt где формула tp[ получена из <р путем замены некоторых вхождений подформулы а на формулу а'. По тео- теореме полноты тавтология (С <->/?)—> (->С<->->!?) выводима в нашей аксиоматической системе, то есть I—чрх <-> ~чр[, f «-> у?'. б) Пусть формула ip имеет вид tpx о ip2, где символом о обозначе- обозначена одна из логических связок Л, V, —>, <->. Тогда по индуктивному предположению верно, что Ь у?, *-*-><р[ и 1~ (Р2<~>~1</Э2> гДе формулы у># и у>" получены из у> заменой некоторых вхождений подформулы а на формулу а'. Используя тавтологию С —>(D —>(Cf\D)) и теорему полноты, мы получаем § 1.14. УПРАЖНЕНИЯ 83 Результат следует из тавтологии (С <-> Д) Л (С2 <-> Д) -> (С, о С2 <-> Д о Д). 1.14.23. Предполагая, что К (А Л В )<->->(А —> ->В) и Ь (А V <-> (->А —» В), выведите формулы: а) h(-.B->-.A)<->(A->B); б) h (-.А -> В) <-> (-.В -»А) и h (А -» ->В) <-> (В -> ->А); в) К(АЛВ)->А; г) h(AA-A) — B; д) HAV-.A. Решение, а) и б) Воспользуемся аксиомой 3, законом отрих ния и теоремой о подстановке эквивалентных формул, в) По аксиоме 1 верно, что h-.А-»(?-»-.А);;? * V по A), б) и теореме 1.8.4 получим hM->(A-»-B); .,.. ( по B), б) и теореме 1.8.4 имеем h -.(A -» -В) -> A. «Ki^res^v , •< Л- №<-< «; Но согласно нашим предположениям это-*^Й,';чтд ^мы искали,^ а именно (А Л В) —> А. Обычно мы определяем шаги вывода аналитическим путем: снача- сначала следует попытаться определить C), затем определить B), и про- продолжать до тех пор, пока не будет найдено высказывание, о котором известно, что оно выводимо, например A). 1.14.24. Используя метод резолюции, докажите, что следующие множества формул противоречивы: DA аM = { б) 5 = {--А V B,-^BV C,->CV A,AV С, ^А V ->С}; , .. в) 5 = {А V В V С, А V В V -.С, А V ->В, ->А V ->С, ->А V С}. Решение, в) Рассмотрим резолютивный вывод: 1)AVBVC; Д* 2) А V В V -.С; ¦ -ал с« ^;> 4) 6) А V В — резольвента 1 и 2; 1,, Л й 1^ 7) А — резольвента 3 и 6; «ЙкН'Ч 8) ->А —резольвента 4 и 5; :jg г; ¦ 9) D — резольвента 7 и 8. Следовательно, множество 5 противоречиво. ' 1.14.25. Используя метод резолюции, докажите, что: >'.,'< а) {А ->В, С-* Д D-+B, В VCvD}b А А В; ;г б) {А Л В -* С, А -> В} h A -¦ С. Решение, б) Нам достаточно доказать, что множество {А Л Л В —> С, А —> В, -i(A —> С)} противоречиво. Представим высказы- высказывания множества {А Л В —> С, А -> В, ->(А —> С)} в КНФ: А Л В -» С <-> -.(А Л В) V С <-> -.А V -.В V С, А-+В <->-.А V В, Н ' ' ( Применим метод резолю C, -iAvB, А, -С}: 1)-.AV-.BVC; ций'кмвож^ству дизъюнктов {->А V->B V s/, 3) A; r: sa >.> 4)-C; 5) -A V -.В — резольвента 1 и 4; 6) -iB — резольвента из 3 и 5; ^ 7) В — резольвента 3 и 2; м ,,пщ- '" l '"'''
84 Глава 1. ЛОГИКА ВЫСКАЗЫВАНИЙ 8) D — резольвента 3 и 2. 1.14.26. Представьте следующие высказывания как множества дизъюнктов: а) -.(ЛЛ5Л-.С); б) А «->(-.? Л->С). Решение, а) Определим КНФ высказывания ->(А ABA ->C): [~>(А Л 5 Л --С)] <-> [-.A V-.S V-.-.C] «-> [-.AV-.5VC] В результате получаем состоящее из одного дизъюнкта множество 1.14.27. Какие из следующих множеств дизъюнктов выполнимы и почему? Для каждого непротиворечивого множества определите означивание, которое подтверждает его выполнимость. а) {{А, В], {^А,В}}, в) {{А}, П}, ... {l j; б) {{-.А}, {А,^В}, {В}}, г) {П}. ч@J Решение, б) Соответствующая КНФ имеет вид ->АЛ(А V->i?)A Л В. Это высказывание логически ложно. Если бы оно было выпол- выполнимо, то существовало бы такое означивание W, что W(B) = t (чтобы подтверждалось высказывание В) и W(A) — f (чтобы под- подтверждалось высказывание А). Но это означивание высказывание А V ->5 не подтверждает. г) Пустой дизъюнкт D по определению невыполним. ' ! ! 1.14.28. Определите резольвенты R(S) множества 1 тов 5, если a)S = {{A,^B}, {А, В}, ЬА}}; * ; б) S = {{А}, {В}, {А, В}}. >*;v; Решение, а) Для множества дизъюнктов револьвент , . 1,2 1,3 2,3 б) В данном случае R(S) = S. Резольвент нет. 1.14.29. Дано высказывание Q: (А Л В -» С) Л А а) Представьте Q в теоретико-множественном виде.*' § 1.14. УПРАЖНЕНИЯ 85 б) Докажите, что Q Ья С в) Предположим, что высказывания Q и А —> -*С истинны. Что можно сказать об истинностном значении В? Решение. а)[ЛЛВ-^С]« [-.(AAB)VC [-В -¦ С] «-> [-i-iB V С] <^ [В V С]. Следовательно, Q = {{->А, ->В, С}, {А}, {Д С}}, б) Рассмотрим резолютивный вывод: 1)ЬАДС}; [-.AV-.5VC]; 2) {А};' 3) {Д С}; 4) {->Д С} — резольвента 1 и 2; 5) {С} — резольвента 3 и 4. j^ .3 в)Пусть<2' = {{-А,-ДС}, {А}, {В, С}, ЬА,^С}, {^В}}. Множество Q' противоречиво (почему?). Таким образом, любое означивание, которое подтверждает все высказывания из Q и вы- высказывание А —>->С, приписывает истинностное значение / выска- высказыванию ~>В. Другими словами, оно подтверждает В. 1.14.30. Найдите означивания, опровергающие высказывания: a) (A->B)«(AVB); б) (AV-.B)h(AAB). Решение, а) Построим семантическую таблицу с /[(А —> В)*-* «-> (А V В)] в корне (см. рис. 1.6). л -j fB i% t(AVB) '^, tA fB tB on- PNc. 1.6 i л -'О ¦; \>A)fA *'Ч. ;' a f,1 !a .- tB
86 Глава 1, ЛОГИКА ВЫСКАЗЫВАНИЙ Каждая непротиворечивая ветвь дает означивание W, которое q гласуется с корнем семантической таблицы по лемме 1.10.5. Тогл для каждого W такого, что W(A) = f и W(B) = /, мы имеем: = t~f = f- 1.14.31. Доказать, что если А и А также выводимо по Бету. f? выводимы по Бету, то Решение. Поскольку А доказуемо по Бету, А тождественнд истинно. Тогда для любого означивания W мы имеем W(A) = t. Высказывание А —у В также тождественно истинно и для любог означивания W мы имеем W(A —> В) = t. Тогда ш> t = W{A-*B)=W{A)~>W{B) = t~>W(B). : 1 Но это означает, что W(B) = t для любого означивания W. Следе вательно, В доказуемо по Бету. *'",' 1.14.32. Доказать: а) {iVB,A-.C, б) {А->(?-> С), '?'•-?№%> 4 'A,B}\-D-^C:f Решение, а) Рассмотрим 5 = {A V Д A оремам корректности и полноты мы имеем ¦ D}. По т*|: Таким образом, нам достаточно доказать S ^ С У D, или, другими словами, что всякое означивание, подтверждающее S, подтвержда- подтверждает также СЛ/ D. Итак, мы построили семантическую таблицу с /(CV D) в кор- корне (см. рис. 1.7), последовательно присоединив вершины t(A V В), t(A —» С1)) и t(B -^ D). Так как построенная семантическая табли- таблица противоречива, то С V Z> подтверждается всеми означиваниями, подтверждающими 5 (см. рис. 1.7). 1.14.33. Проверьте, верно ли, что: а) {(А->?)-> Д А-Л б) {А-»Д СУД D § 1.14. УПРАЖНЕНИЯ /(CVD) /С 87 ¦^ ' ¦ :.:л<-,'.-. ,/; >ц Рис_ {7 Решение, а) Построим семантическую таблицу с /(А —¦ В) в корне, последовательно присоединив гипотезы [(А -*В)->В] и (А Л-.В) (см. рис. 1.8). Заметим, что S \? А —> В, поскольку в приведенной семантиче- семантической таблице ветвь % непротиворечива. Следовательно, существует такое означивание W, что W(A) = t и W(B) = f, которое все вы- высказывания из 5 подтверждает, в то время как высказывание А —> В опровергает. 1.14.34. Докажите, что если Sli{A}\- В, то S\- А->В. Решение. По теоремам корректности и полноты Предположим, что 5 U{А} (= В. Тогда для любого означивания W, подтверждающего все высказывания из 5, верно W(B) = t, если
88 Глава 1. ЛОГИКА ВЫСКАЗЫВАНИЙ § 1.14. УПРАЖНЕНИЯ 89 Рис. ( + В) = Щ А)-¦ W(B) = t. Это следует из того, что W(A -> В) может быть ложным только в том случае, если W(A) = f и W(B) = f. Поэтому 5 f= A -»В. Значит, 5и{Л}(-В => 5и{А} f= 5. По теореме полноты 5и{А} Ц5 =*> 5 u{A}hB. 1.14.35. Пусть аиа2,... — бесконечная последовательность вы- высказываний. Докажите, что если для любого г высказывание cri+l—* —> о, доказуемо по Бету, а <т,- —» ст; +, не является доказуемым по Бету, то не существует высказывания т, для которого справедливы одновременно следующие утверждения: а) Для каждого г высказывание т —> cri выводимо по Бету; б) {alta2,...}\=T. Решение, а) Докажем, что если для всякого г высказывание т—> о\ доказуемо по Бету, то {ст,, ст2! • • •} И т- То есть множество высказываний {->т, <т,, <т2,...} непротиворечиво. Другими словами, существует такое означивание И^, что: Поскольку для любого г высказывание cri—*(Ti + l не является дока- доказуемым по Бету, для каждого натурального числа п существует такое означивание W, что: Тогда мы можем заключить, что ^Ю = *. Щ*„+,) = /'л;*'^ A) Поскольку для каждого г € N высказывание ai + l —> a{ доказуемо по Бету, для любого означивания W и для любого п € N справед- справедливо W(an + l —> ап) — t, что равносильно W'(an + l) ~* W'(an) — t. Следовательно, W'(an+.) = f или PT'(Gn Подобным же образом можно показать, что ¦а,...- ^'Ю = / или W'K-i 5 Ж МКИ6• ¦г^1-' ;,«-,{Н**"" B) tt"(<72) = / ИЛИ W(ffl) = f- >J П " Если W' = W, то из A) вытекает, что W(an) = t и W"(<7n + 1) = /. Тогда на основании B) мы получим W(an)=W(an_l) = ...= t. C) Для каждого г высказывание т —> <т,. доказуемо по Бету. Тогда t = W(r - an+,) = W(T) - ^K +,) = W(t) -» /, то есть W(r) = /. Тогда r) =~ W(t) = t. D) Поэтому существует такое означивание W, что A), C) и D) верны. Следовательно, для всех п € N множество {-it, а,, а2,..., ап} непро- непротиворечиво. Согласно теореме компактности 1.11.10 это означает, что множество {->т, <т,, а2,...} также непротиворечиво. б) Предположим {ст,, а2, ...}(= т. Покажем, что существует озна- означивание W и натуральное число к, такие, что W{r—><rk) = f или, что то же самое, W(t) = i и W(ak) = f.rs:t >¦:
90 Глава 1. ЛОГИКА ВЫСКАЗЫВАНИЙ Так как {ах, а2,...} f= т, множество высказываний {-it, <т,, <т2, ...} противоречиво. По теореме компактности существует такое на- j туральное число п, что конечное подмножество {->т, аи <т2,.. .ап} невыполнимо. При этом, однако, найдется такое означивание W, что Тогда И^(а„) ~~» И^(а-П +,) = /, то есть W{an) = t, W(an+l) = Поскольку ап —> ап _ , доказуемо по Бету, !' Л '. E) что означает W(an) — f или W(crn_l) = t. Согласно E) мы по- получим W(°n-i)=t. F) Таким же образом, опираясь на тот факт, что все высказывания ai¦ —* ai _,, 1 < г < п — 1, доказуемы по Бету, мы получим W(an_2) = ... = W(al) = t. G) Аналогично, из E), F) и G) следует, что означивание W обращает в истину все высказывания ait 1 < г < п. Но множество высказы- высказываний {-it, «г,, а2,.. .ап} противоречиво. Значит W(->T) = f. Отсюда следует W(t) = t. Но в этом случае, согласно E) получим Это означает, что т —> <тп + 1 не является доказуемым по Бету^ р,(| Ж'Л*:* «. tnu:r.r I ; ъ 1 ¦ Глава 2 ЛОГИКА ПРЕДИКАТОВ u^^^v^^oi 6Xa xal ov\ 6Xa, _-r.r_r^r бьсирероtievov, avvaibov SiauSov, xal ex ШШЧ'< '-i :"-t.i* -KO.VTWV ev xal e? evoi; жаита. Связи: целое и не целое, соединяюще- соединяющееся и разнообразящееся, мелодичное и немелодичное, и из всего — единое, и из единого — все. ,, *' Гераклит. §2.1. Введение , ! В главе 1 мы дали аналитическое описание формального языка PL, с помощью которого можно выражать как простые, так и состав- составные утверждения. Далее мы изучали методы вывода заключений из некоторых совокупностей высказываний языка PL. Хотя язык PL довольно богат, его возможности в формулировке утверждений и отношений ограничены. Возьмем в качестве примера следующее утверждение на русском языке: S: «Если Джордж — человек, то Джордж смертен.» Если символом А обозначить утверждение «Джордж — человек», н^*н* ¦•*.:' а символом В — утверждение »»г!з&ид.''.ю «Джордж смертен», тогда в контексте языка логики высказываний S будет иметь вид S:A-*B. Утверждение 5 выражает некоторые качества отдельного лица, а именно, Джорджа. Возникает следующий вопрос: как выразить подобные свойства других людей, например, Сократа или Питера? Можно было бы решить эту проблему путем введения такого коли- количества пропозициональных символов, сколько существует различ- различных людей. Однако, на практике это невозможно. V -- • 'V.
92 Глава 2. ЛОГИКА ПРЕДИКАТОВ В этой главе мы опишем язык логики предикатов, который по- позволяет решать такие проблемы. Новыми элементами в этом языке будут переменные и кванторы. Переменные Рассмотрим утверждение 5 и предположим, что х — переменная, принимающая значение на множестве имен всех людей, например, х = Джордж, или х = Джон, или х = ..., а слова «человек» и «смертен» обозначают свойства. Тогда мы мо- можем выразить общую связь между этими свойствами следующим образом: Р: человек (х) —> смертен (х). Выражения человек (х) и смертен (х), обозначающие свойства, называются предикатами. Выражение Р есть пример формулы, которая состоит из предикатов, соединенных логическими связками. Подстановка вместо переменной х константы «Джордж» преоб- преобразует Р в формулу 5': человек (Джордж) —> смертен (Джордж). Щ Далее, если переменная х примет значение «Сократ», результат будет представлять собой новую формулу, описывающую связь меж- между Сократом и свойством быть смертным. Слова «Джон», «Джордж» и «Питер» являются константами в нашем новом формальном язы- языке. Вообще говоря, соответствие между переменными и константами с одной стороны и словами русского языка с другой можно предста- представить неформальной схемой: "'¦' '"- (> Русский язык Л\ Формальный язык }V/n;v: местоимение о; '—> переменная собственное имя i—> константа пг^мй Специальные слова «Человек» и «Смертен» называются преди- предикатными символами. Предикаты могут зависеть более чем от од- одного аргумента, выражая таким образом не только свойства, но и отношения между несколькими объектами. Например, если пере- переменные х и у принимают значения на множестве целых чисел, и введен предикат / — «больше», мы можем выразить одно из фунда- фундаментальных отношений между целыми числами: ф л., .. 1(хгу): больше(х, у), щщ ыд пшЬ которое интерпретируется как «х больше, чекань: /> йед .»¦• § 2.2. ЯЗЫК ЛОГИКИ ПРЕДИКАТОВ 93 Если в предыдущем выражении мы заменим х на 5 и у на 3, мы, очевидно, получим частный вид предиката /: /E,3): большеE,3), который является истинным для данных чисел. .,р, , , , Кванторы '^:А ' ' ' Jit.;') Введение переменных приводит к изменению истинности форму- формулы. Рассмотрим в качестве примера формулу Q(x, у): авиалиния(х, у), которая интерпретируется как «авиалиния соединяет города х и у». Истинность этой формулы является частичной, посколь- поскольку может, например, отсутствовать авиалиния, соединяющая Нью- Йорка и Нью-Дели. Напротив, формула Р(х): человек (х)—> смертен (х) имеет универсальную истинность, будучи истинной для любого значения переменной х. В логике предикатов (краткое обозначение PrL) всеобщая или частичная истинность обозначается двумя специальными символа- символами — кванторами. Мы будем использовать квантор всеобщности и квантор существования, которые изображаются символами V и Э соответственно. Таким образом, из формулы Р(х) получаем Р: (Vx) (человек (х) —» смертен (х)), а из формулы Q(x, у) получаем Q: (Э(ж, у)) авиалиния (х, у). В следующем параграфе мы введем язык логики предикатов фор- формально. :' 1ТТ § 2.2. Язык логики предикатов Теперь мы дадим формальное описание языка PrL. См. [Chur56, СиггбЗ, Dela87, Hami78, Klee52, Mend64, Meta85, Smul68]. Определение 2.2.1. Язык PrL состоит из следующих ос- основных символов: I. Логические символы: i) переменные х, у, z,..., Xq, %, Zq, ..., xit...;
94 Глава 2. ЛОГИКА ПРЕДИКАТОВ "O I -M ) • • • i ii) логические связки Л, V, -i, —>, <->; -^ iii) запятая, скобки, (); iv) кванторы V, 3. с . II. Специальные символы: i) предикатные символы P,Q,R,..., Po, Q, ii) константы а,Ь,..., а„, Ьо,..., а,,..., %, iii) функциональные символы /, #, /0, %, /,, Число аргументов предиката называется степенью или мест- местностью предиката. Например, Q(x, у, z) — предикат степени 3 или трехместный предикат. Кванторы всеобщности и существования двойственны друг дру- другу: квантор V эквивалентен последовательности символов -> 3 ->, а квантор 3 эквивалентен последовательности ->V->. Например, для формулы (Vx)Q(x) мы имеем: § 2.2. ЯЗЫК ЛОГИКИ ПРЕДИКАТОВ 95 ? 2.2.1 Мы будем полагать, что каждый конкретный язык логики преди- предикатов содержит все логические символы. Таким образом, для опре- определения языка достаточно описать его специальные символы. Пример 2.2.2. Язык арифметики имеет вид ?* = (=> <.+.*» О, 1), где: = и ^ — двухместные предикатные символы: — (х, у) понимается как «z = у», и ^ (z, у) обозначает *х ^ у»; + и * — трехместные предикаты: +(z, у, z) понимается как «z + + у = z», и *(z, у, z) понимается как *х*у — гь\ О и 1 —символы констант. ? 2.2.5 Определение 2.2.3. Терм определяется индуктивно: i) константа есть терм; ii) переменная есть терм; iii) если / — n-местный функциональный символ, и ?,,...,?„ — термы, тогда /(?,,..., tn) —терм. ? 2.2.3 Определение 2.2.4. Элементарной формулой или ато- атомом называется всякое выражение вида P{tlf..., tn), где Р — п- местный предикатный символ, a t. —терм для каждого i = 1, 2,... ..., п. D 2.2.4 Определение 2.2.5. Формула определяется индуктивно: i) каждый атом является формулой; ii) если аи а2 — формулы, тогда (alAa2), (o",V<t2)i (ai~*a2)i (.~>CTi) и (ст, <-» а2) также являются формулами; iii) если v — переменная, а <р —- формула, тогда ((Е I — формулы; ¦¦¦•*> -'¦•¦* -.а- чч.«: b«i, , 4)(Vz) (z ^ z) iv) только выражения, полученные согласно пунктам i), ii) и iii), являются формулами. П 2.2.5 Пример 2.2.6. Следующие выражения являются формулами: i)p,: (Vy)Cz)[P(z,/(y)VQ(z)]; ii) <p2: (Vz) (Зу) \Р{х) V Q(x, у) - -.(Л(х))]. D 2.2.6 Замечание 2.2.7. Отметим, что в определении формулы нашего языка разрешается тривиальное использование кванторов, например: Cz)[y = 3], что эквивалентно формуле у = 3. Хотя такое использование кванторов допустимо, обычно оно бывает нужным только в технических доказательствах. П 2.2.7 Пример 2.2.8. Приведем несколько формул языка СА, опре- определенного в примере 2.2.2. 1 )(Vz) (х — х) *! ¦'> *«*'«*<!! рефлексивность —> у = х) симметричность '¦ = yAy = v)~*x = v] транзитивность рефлексивность &" П 2.2.8 Приведем еще несколько определений, необходимых для полного описания языка PrL и логического программирования. Определение 2.2.9. 1) Выражение ?,, входящее в состав терма t, которое в свою очередь является термом, называется под- подтермом t. 2) Выражение tplt входящее в состав формулы tp, которое в свою очередь является формулой, называется подформулой tp. D 2.2.9 Пример 2.2.10. 1. Если /(z, у) — терм, то х, у и /(z, у) — его подтермы. 2. Р(х), ->Я(х), Р(х) VQ(z, у) являются подформулами форму- формулы ip2 из примера 2.2.6. ? 2.2.10 Замечание 2.2.11. В главе, посвященной PL, мы изуча- изучали высказывания только в соответствии с их структурой, в основу которой были положены элементарные высказывания и логические связки. Тем самым, мы предполагали, что элементарные высказыва- высказывания не нуждаются в дальнейшем анализе. Логика предикатов, одна- однако, имеет дело с более общим понятием — элементарной формулой. Здесь мы предполагаем, что элементарные формулы представляют собой предикаты, и что каждый n-местный предикат Р(?,,..., t ) выражает отношение между термами ?,,..., tn. П 2.2.11 Определение 2.2.12 (связанное и свободное вхождение пе- переменных). 1. Вхождение переменной v в формулу ip называется связанным, если существует подформула ¦ф формулы ip, которая содержит это вхождение и имеет вид ((Vv)ip') или {Cv)ip').
96 Глава 2. ЛОГИКА ПРЕДИКАТОВ 2. Вхождение переменной v в формулу называется свободным, если оно не является связанным. D 2.2.12 Определение 2.2.13 (свободные и связанные переменные). Переменная v, входящая в формулу р называется свободной, если она имеет по крайней мере одно свободное вхождение в формулу (р. Переменная v называется связанной, если она не является свобод- свободной. D 2.2.13 Пример 2.2.14. В примере 2.2.6 переменная х имеет свобод- свободное вхождение в подформулу § 2.2. ЯЗЫК ЛОГИКИ ПРЕДИКАТОВ 97 формулы <р2, однако, в самой формуле <р2 это вхождение связан- связанное. Следовательно, переменная х свободна в формуле <р' (так как она имеет по крайней мере одно свободное вхождение), но связана в формуле ip2. ? 2.2.14 Определение 2.2.15. Терм, в который не входит ни одна переменная, называется основным термом. ? 2.2.15 Пример 2.2.16. Если а и 6 — константы, а /—функцио- /—функциональный символ, тогда а, 6, /(а, 6), /(/(а, Ь), Ь),... — основные термы. D 2.2.16 Определение 2.2.17. Предложение или замкнутая фор- формула есть формула, не содержащая ни одной свободной переменной. ? 2.2.17 В соответствии с этим определением, для того, чтобы из задан- заданной формулы получить замкнутую формулу, нужно связать все ее свободные переменные с помощью кванторов. Пример 2.2.18. Из формулы ip(x, у): (х + у = х*у) мы можем получить замкнутую формулу <г(х, у): (Ух)Cу)(х + у = D 2.2.18 Другой способ, позволяющий получать предложения, состоит в подстановке констант на места свободных вхождений переменных. В общем случае, мы имеем следующее определение подстановки [F1U90]. Определение 2.2.19. Подстановочное множество или просто подстановка есть множество 9 = {xl/tl> xj/tj,..., xn/tn}, где ijH tjp Ui^n, являются соответственно переменными и тер- термами, причем равенство х, = xi влечет t{ = tp 1 ^ г ^ j ^ п. Если ip есть какое-либо выражение (атом, терм или формула), то ipd обозначает выражение, полученное путем подстановки на ме- места свободных вхождений переменных х,,..., хп соответствующих термов ?,,..., tn. Пустая подстановка обозначается символом Е, другими слова- словами, Е = {}. П 2.2.19 Пример 2.2.20. Если мы применим подстановку 0 = {х/2, у/2} к формуле К: ip(x, у) из предыдущего примера, то получим фор- формулу Кв: B + 2 = 2*2). ? 2.2.20 Пример 2.2.21. Рассмотрим формулу 4>(х, у, z): (Зу)Я(х, у) А (Vz) (-Q(x, z)) и основной терм /(а, 6). Применяя подстановку {х//(а, 6)} к фор- формуле ip(x, у, z), получим предложение >p(f(a,b),y,z): Cy)R(f(a,b),y)A(Vz)(^Q(f(a,b),z). D 2.2.21 Основной операцией на множестве подстановок является компо- композиция. Определение 2.2.22. Пусть яг e = {ul/sl,...,um/sm} и Ф = {у1/11,...,у„/г„}. Композицией в и ф называется подстановка ?,0ф = {«,/*, ф,..., ип/зпф, «,/*„ ..., vn/tn} i*. - ({щ/з,ф | щ = з,ф} U {vjt, | vt ? {щ,..., ит}}). П 2.2.22 Другими словами, мы сначала применяем подстановку ф к тер- термам я,,.,., sm подстановки в, заменяя в этих термах переменные v( на термы tt (определение 2.2.19), а затем дополняем полученную подстановку элементами множества ф. При этом мы отбрасываем элементы вида ujs^, если терм s^ совпадает с ut, и элементы вида vi/ti, если v( содержится среди переменных «,,..., ит подста- подстановки в. Пример 2.2.23. 1. Рассмотрим две подстановки: в = = ix/f(y), У/2) (в качестве {щ/з{}) и ф = {х/а, у/Ъ, z/y} (в качест- качестве {vjti)). Согласно определению 2.2.23 композиция в и ф имеет вид &Ф = {x/f(y)i/>, у/гф, х/а, у/Ь, z/y} , - (К/* \щ = з^}и {vjt, | Vi е {и^}}) \ ={x/f(b), у/у, х/а, у/Ъ, z/y}-({у/у} U {х/а, у/Ъ}) ? ={x/f(b),z/y}. 4 Г. Метакиденс, А. Нероуд
98 Глава 2. ЛОГИКА ПРЕДИКАТОВ 2. Рассмотрим терм t: w(f(vx), h(x), f(v2), v3) и подстановки s = ivi/f(9(x)), v2/h(vx), v3/h(v3)}, ф = {x/z, vx/v2, v3/vx}. Имеем :,,; вф = {ьх//(д(х))ф, У2/Цьх)ф, у3Щу3)ф, x/z, vx/v2, v3/vx}: C -@U{vx/v2,v3/vx}) r,9"-' ={vi/f(9(z)),v2/h(v2),v3/h(vx),x/z,vx/v2,v3/vx} = {vi/f(g(z)),v2/h(v2),v3/h(vx), x/Zy <w ''Jl !i '*' Следовательно, : Цвф): w(f(f(g(z))),h(z)J(h(v2)),h(vx)). 0 ': , Отметим также, что ^ D 2.2.23 Таким образом, мы можем заключить, что для композиции под- подстановок из примера 2.2.23 выполняется свойство ассоциативности. В общем случае, верна следующая теорема. Теорема 2.2.24. Для произвольных подстановок 9,ф,^ и для произвольного терма t выполняются равенства: \NЕ = Ев = в; 2)(гв)ф = г(&ф); 3) FtyO - 6>(-0т)- ? 2.2.24 Определение 2.2.25. Пусть р — некоторая формула без кванторов, и в — подстановка. Запись ip6 обозначает результат за- замены каждого терма t в формуле <р на td. Соответственно, если 3 — {С,,..., Ск} — множество формул PrL без кванторов, то множество S6 = {Cl6,..., Скв} есть результат за- замены формул С;, 1 ^ г ^ к, на формулы С{в. П 2.2.25 Определение 2.2.26. Два множества формул без кванторов 5, и S2 называются вариантами, если можно подобрать такие две подстановки 0 и т/j, что = S29, a S2 = П 2.2.26 Пример 2.2.27. Множества 5, = {P(f(x, у)), Q(h(z), Ъ)} и -52 = {P(f(y, x), Q(h(u), b)}, где 6 — константа, являются вариан- вариантами. Действительно, если в = {х/у, у/х, z/u} яф = {х/у, у/х, u/z}, то , Q(h(z), Ь)9} = {P(f(y, x)), Q(h(u), Ъ)} = S2, \ , Q(h(u), b)9} = {P(f(x, y)), Q(h(z), b)} = Sv П 2.2.27] § 2.3. АКСИОМАТИЧЕСКОЕ ОСНОВАНИЕ ЛОГИКИ ПРЕДИКАТОВ 99 Определение 2.2.28. Переименованием называется под- подстановка вида {vjul,...,vn/un}, .,*<л., где все ип 1 ^ г ^ п, являются переменными. № П 2.2.28 § 2.3. Аксиоматическое основание логики предикатов В § 1.7 гл. 1 мы аксиоматизировали логику высказываний посред- посредством системы, состоящей из трех аксиом и одного правила вывода. Подобным образом можно аксиоматизировать и логику предикатов [Dela87, Hami78, Klee52, Mend64, Rasi74, RaSi70]. Сначала введем вспомогательное определение. Определение 2.3.1. Переменная х свободна для тер- терма t в формуле а (формальная запись /гее(х, t, а)), если никакая из переменных терма t не становится связанной после подстановки терма t на все места свободных вхождений переменной х в форму- формуле а. ? 2.3.1 Пример 2.3.2. Предположим, что а — (Vy)P(x, у). Тогда пе- переменная х не свободна для терма у в формуле а, поскольку после подстановки терма у на места свободных вхождений переменной х переменная у становится связанной. С другой стороны, переменная х свободна для терма z в формуле а, если z есть переменная отличная от у, так как после замены переменной х на терм z в формуле а переменная z, единственная переменная терма z, не становится связанной. Более того, у свобод- свободна для у в формуле а (так как а не содержит свободных вхождений переменной у). ? 2.3.2 Определение 2.3.3. Для произвольных формул PrL <р, т, а следующие формулы являются аксиомами: 8--г ,• 1) \р —»(т —> <р); . г; ут 2) (<р->(т-><7))-> 3) (-тр ~* -it) -> (т 4) если free(x, t, ip), то аксиомой является формула ;ч;с..и (Ух)<р -»<p(x/t); 5) если переменная х не свободна в формуле ip, аксиомой явля- является формула ( Точно так же, как и в PL, символ Ь обозначает выводимость фор- формул в аксиоматической системе. Данная система аксиом содержит два правила: 1) Modus Ponens: tp, tp —> т Ь т; вжг; 2) обобщение: tph(\/x)<p. -¦•¦>«у~ ' ¦¦ "• ? 2.3.3
100 щ- Глава 2. ЛОГИКА ПРЕДИКАТОВ Замечание 2.3.4. 1. Согласно правилу обобщения, если формула ^р выводима из аксиом с помощью правил PrL, то формула (\/x)tp также выводима в этой аксиоматической системе. В качестве примера предположим, что выводима следующая фор- формула: человек (х) —> смертен (ж). Тогда формула (Vx) ( Человек (х) —> Смертен (х)) .,',к<^ м ,. > также выводима. Другими словами, мы всегда можем обосновать обобщенную фор- формулу (Vx)<p, опираясь на истинность формулы tp. Некорректное при- применение правила обобщения в обычных спорах часто вызывает мно- множество ошибок. Например, мы часто утверждаем, что чэмзт; «все политики — обманщики», потому что мы знаем, что политики а и b — обманщики. Однако, это утверждение логически неверно: чтобы обобщить утверждение на всех политиков, а не только на а и 6, мы должны быть уверены, что следующая формула выводима в нашей системе аксиом: «ф политик (х) —> обманщик (х), , ''•' что (хочется надеяться) неверно. ''' 2. Сравнивая аксиоматические системы для PL и PrL, можно за- заметить, что аксиомы и правило для PL содержатся среди аксиом и правил для PrL. Однако, логика высказываний имеет дело с вы- высказываниями, тогда как логика предикатов рассматривает более сложные объекты — формулы логики предикатов. 3. Квантор 3 не включен в систему аксиом, так как он выражается посредством ->V->, как было сказано в разделе 2.1. 4. Опираясь на пункт 2) следствия 1.12.2, мы можем заключить, что все тавтологии PL выводимы в логике предикатов, если вместо высказываний в них подставить формулы PrL. Например, выска- высказыванию А <-> -1-1 А, выводимому в PL, соответствует формула PrL <р <-> ->-нр, которая выводима в аксиоматической системе, описан- описанной в определении 2.3.3. Таким образом, мы можем применить все тавтологии PL к формулам PrL (в соответствии с теоремой о полно- полноте 1.12.1) и получить формулы PrL, выводимые в аксиоматической системе для PrL. ? 2.3.4 В PrL справедлива теорема об эквивалентной замене, подобная теореме для PL. Ее доказательство аналогично доказательству со- соответствующей теоремы в PL. ,ч ( ., , , , ., • .¦ -,..,...>, ( , ,., § 2.3. АКСИОМАТИЧЕСКОЕ ОСНОВАНИЕ ЛОГИКИ ПРЕДИКАТОВ 101 Теорема 2.3.5 (теорема об эквивалентной замене для PrL). Если формула А, получена из формулы А путем замены неко- гпорых вхождений подформулы В на формулу Ви и выполняется где х,,..., хп — свободные переменные формщф и В„ являющи- являющиеся в то же время связанными в А, тогда -J ' ЬА<->АГ •> ? 2.3.5 В контексте PrL мы можем работать только с теми «правильны- «правильными» формулами, которые выводимы в аксиоматической системе PrL. Следующая теорема дает нам список наиболее часто используемых формул. Эти формулы выражают коммутативность кванторов и ди- дистрибутивность кванторов относительно логических связок. Как по- показано в теореме, эти свойства выполняются не всегда. Теорема 2.3.6. Пусть <р и а — произвольные формулы PrL. Тогда следующие формулы выводимы в PrL: ^ _'* (Vs)(?>-><r)->((Vz)?>-(Vs)<7); , -.-ч^,, <*¦ utv V (Vx)ct) -»(Vx) (<p V а); Л<т) Л ,ог ) '"^ (Vx)v <-> v?, если х не входит свободно в f! rnh .н (Зх)<р <-> <Р) если х не входит свободно в <р. гп 2 3 6 Одной из ошибок, часто встречающихся в формальных научных Доказательствах, является неправильное использование дистрибу- дистрибутивности кванторов относительно логических связок. Например,
102 Глава 2. ЛОГИКА ПРЕДИКАТОВ формулы ((Ух)<р V (Ух)а) -> (Ух) (<р V сг) (Эх) (<р А а) -»(Cx)v? Л (Зх)ст), взятые из списка предыдущей теоремы, выводимы в PrL. Но форму- формулы .^ ((Ух)<р V (Ух)а) *-* (Ух) (<р V а) (Зх) (<рЛа)<-* ((Зх)<р Л (Зх)а), выражающие полную дистрибутивность кванторов V и 3 относитель- относительно связок V и Л соответственно, не являются истинными. Действи- Действительно, формулы ..-•, .. (Ух) (<pV ст) -> ((Ух)<р V (Ух)а) • ' ' f '¦'' ((Зх)<р Л (Зх)а) -> (Зх) (<р Л а) НЕ ВЫВОДИМЫ в аксиоматической системе PrL и Н Например, формула J ! : Ч \\ истинна (см. определение 2.4.2). ?:, Однако, формула [(Ух) (х = 2х)] V [(Vx) (x ф 2х)] НЕВЕРНА. Если бы она была истинной, по крайней мере одна из формул [(Ух)(х = 2х)], [(Ух)(хф2х)] была бы истинной. Но это не так: при х = 1 неверно х = 2х, а при х = 0 неверно х ^ 2х. Таким образом, нужно проявлять осто- осторожность при использовании коммутативности и дистрибутивности кванторов, иначе это может легко привести к неверным заключени- заключениям. Замечание 2.3.7. Если бы мы захотели расширить язык PrL особым двухместным логическим символом равенства «=», то некоторые свойства равенства мы бы не смогли выразить посред- посредством системы аксиом из определения 2.3.3. Эта аксиоматизация выражает общие свойства предикатов и не может описать свой- свойства отдельных предикатов, таких как «=». Например, отношение равенства должно быть рефлексивным, симметричным и транзитив- транзитивным. Для того, чтобы аксиоматически описать эти свойства, нужно расширить систему аксиом из определения 2.3.3 двумя аксиомами^ [Dela87, Hami78, Mend64, Schw71]. § 2.3. АКСИОМАТИЧЕСКОЕ ОСНОВАНИЕ ЛОГИКИ ПРЕДИКАТОВ 103 6) Для произвольного терма х формула X = X является аксиомой. 7) Если формула А, получена из формулы А заменой одного или нескольких вхождении терма х на терм у, тогда формула ¦'. является аксиомой. Таким образом, мы аксиоматизировали рефлексивность равенст- равенства и правило замены равных термов. Свойства симметричности и транзитивности равенства выводимы из аксиом 1)~7) с помощью правил обобщения и Modus Ponens. ? 2.3.7 Доказательство теоремы 2.3.6, а также теорем корректности и полноты аксиоматической системы из определения 2.3.3, с равен- равенством или без равенства, выходит за рамки этой книги. Читатель может их найти, например, в [Klee52, Mend64, RaSi70]. Определение 2.3.8. i) Для некоторого, возможно пустого, множества формул S и произвольной формулы А выводом А из S называется конечная последовательность формул логики предика- предика1 / б ф тов Вх,..., Вк, где каждая формула Bt, 1 й б S б р /г, либо является х,, к, д д фру t, , аксиомой, либо принадлежит S, либо получена из некоторых фор- формул Bj, Bn I ^ j, I ^ г по одному из правил — Modus Ponens или обобщения. ii) Формула А выводима из множества S (обозначение S Ь А), если существует вывод А из S. ш) Формула А выводима, если существует вывод А из пустого множества. • ? 2.3.8 В логике предикатов большой интерес вызывает теорема дедук- дедукции. Применение соответствующей теоремы для логики высказыва- высказываний, т. е. теоремы 1.8.7, к формулам PrL может привести к неожи- неожиданным результатам. Пусть мы знаем, что в мире есть богатые люди: 1 ; , ¦„ богатый (х). . , Тогда по правилу обобщения мы имеем: '' ' '' '•'' богатый (х) Ь (Ух) богатый (х), ,}^А . =, з | и по «СЙВтШ^Ствующей» теореме дедукции для PrL заключаем: д богатый (х) —> (Vx) богатый (х). \ tu
104 Глава 2. ЛОГИКА ПРЕДИКАТОВ Иначе говоря, если есть богатые люди, то все люди богаты, что, ко- конечно, не соответствует действительности. Поэтому для того, чтобы теорема дедукции порождала правильные заключения, она должна содержать ограничения на использование правила обобщения. Теорема 2.3.9 (теорема дедукции). Пусть S —множество формул PrL; А, В —такие формулы PrL, что Sl){A}\~ В, и правило обобщения не применялось в процессе вывода В из S U U {А} к свободным переменным формулы А. Тогда S Ь А —> В. О 2.3.9 Доказательство теоремы дедукции для PrL аналогично доказатель- доказательству соответствующей теоремы для PL. Так как наша аксиоматическая система содержит правило Modus j Ponens, верно утверждение, обратное теореме дедукции. Отсюда 1'"С'Л ''' 5(-Л-»В«51 -и Mbq -j K.? ^ к- § 2.4. Система обозначений логического программирования В параграфе 1.9 мы определили некоторые основные понятия ло-1 гического программирования в рамках логики высказываний. Теперь мы обобщим эти определения на случай логики предикатов [ChLe73, \ De!a87]. Определение 2.4.1. i) Литералом называется произволь-j ный атом (определение 2.2.4) или его отрицание, ii) Выражение вида (Vx1)(Vx2)...(Vxi)(C1VC2V...VCJ, где С{, г = 1,..., п — литералы, и х,,..., хк — все переменные, встречающиеся в С,., 1 ^ г '^ п, называется дизъюнктом. При п =Г мы имеем пустой дизъюнкт, который будем обозначать символом D 2.4.1 Мы будем опускать скобки, если расположение в формуле nepej ценных и кванторов не вызывает сомнения. Дизъюнкт может быть представлен в одном из следующих видов| б) Vx, ... Vx,(A, V .. .Ат «- В, Л ... Л В,); :, в) Vx, ...Vxk(Al,...,Am*-B1,...,Bl); г) {С,, С2,..., CJ — теоретико-множественадв^^федставлен1 где для всех г, 1 < г < п, С( = А^ 1 < j? m, или ' " д) Al,...,Am<-Bl,...,Bl. ¦) ¦¦ ::•; . § 2.4. СИСТЕМА ОБОЗНАЧЕНИЙ ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ 105 По определению 2.2.17 каждый дизъюнкт является предложени- предложением. А вот обратное неверно из-за возможного вхождения в пред- предложение квантора 3. Однако, логическое программирование имеет дело со всеми возможными предложениями PrL. Решение этой проб- проблемы будет описано в параграфе 2.7, где мы будем изучать сколе- Мовские формы. Пример 2.4.2. Следующие выражения являются дизъюнкта- дизъюнктами: i) Ух VyVz (Р(х) V -.QC, у) V R(x, у, z)); ii) Vx Vy (^P(f(x, у), а) V Q(x, у)). П 2.4.2 Определение 2.4.З. Предложение, полученное из дизъюнк- дизъюнкта <р путем удаления кванторов и подстановки вместо всех перемен- переменных констант, называется основным примером ц>. D 2.4.3 Например, предложение тяиттл мьц •?¦•} адп P(a)V является основным примером дизъюнкта ;;к! Vx Vy (P(x) V Q(y) V -Д(х, у)). Определение 2.4.4. Хорновским дизъюнктом называется дизъюнкт вида: Vz,..^ (А «-?„...,?,), где А, Вх,..., В1 — атомы и I ^ 1. Атомы Bt, г = 1,...,/, называ- называются предпосылками хорновского дизъюнкта, а А — заключением. ? 2.4.4 Определение 2.4.5. Целевым утверждением или целью называется хорновский дизъюнкт, не содержащий заключения, т. е., дизъюнкт вида: Vz1...Vz,(-S1,...,5(), Атомы Bi называются подцелями данной цели. ? 2.4.5 Интуитивный смысл понятия цели станет ясным, если мы запи- запишем это утверждение в виде формулы PrL и используем двойствен- двойственность кванторов V и 3, а также правило де Моргана (см. замеча- замечание 2.3.4 C)): ш Vx, ... Vxfc (->Bf V ... V Vx, ... -. (В, Л ... Л В,) z, ...3xk)(Bl Л... Л В,) Другими словами, здесь утверЖДЙется, что нельзя подобрать такие значения х,,.,,,, хк, чтобы всс:1^вЯП0СЬ1лки В{,..., Bt стали истин- истинными. ' : ¦¦?¦, ..,- 'и.^!'., • Г. J« m
106 Глава 2. ЛОГИКА ПРЕДИКАТОВ Определение 2.4.6. Фактом называется хорновский дизъ- [ юнкт, не содержащий ни одной предпосылки, т. е. дизъюнкт вида: (А <-). П 2.4.6 Замечание 2.4.7. В следующем разделе мы будем изучать предложения логики предикатов, т. е. формулы без свободных пе- переменных (определения 2.2.13 и 2.2.17). Наш интерес к предложениям вызван двумя причинами. 1. Дизъюнкты (определения 2.4.1, 2.4.4, 2.4.4 и 2.4.6), исполь- используемые в логическом программировании, являются предложениями PrL, в которых все переменные связаны кванторами всеобщности. 2. Для каждой формулы <р логики предикатов с множеством сво- свободных переменных {а;,,..., хк} мы имеем: (где (=$•) выполняется в соответствии с правилом обобщения, а (<=) получаем, применяя аксиому 4) и правило Modus Ponens). Таким образом, мы можем изучать предложение (Vx,)... (Ухк) <р вместо формулы <р. О 2.4.7 Определение 2.4.8. Программой называется конечное мно- множество хорновских дизъюнктов. ? 2.4.8 Проиллюстрируем это определение на примере. Пример 2.4.9. Пусть даны следующие утверждения на рус- русском языке: < j 5,: Питер — вор. :. - • . ¦;-• .. nм;":¦;<f.и>- ,ч -'Щ? : 52: Мэри любит шоколад. J S3: Мэри любит вино. "'• . ¦+'U •• ¦-; ¦'• ''¦*¦• ' - ::-'- >'¦ " Ч ' ''¦•¦ ¦ 54: Питер любит деньги. -..•».«'-,< "i ;'";' S5: Питер любит х, если х любит вино. ' "..,, 56: х может украсть у, если х — вор и х любит у. Введя константы «Питер», «Мэри», «вино», «шоколад» и «день- «деньги», переменные х, у и предикаты «вор» (одноместный), «любит» (двуместный) и «может.украсть» (двуместный), мы можем соста- составить следующую программу: ,¦>.. -ffl;-;; {, Y <J Ч С{. вор(Питер) <—; :. . *• С2: любит(Мэри, шоколад) <—; • V^-J^V , f? ' С3: любит(Мэри, вино) <—; С4: любит(Питер, деньги) <—; s • ^ ,.}т С5: любит(Питер, х) <—любит(ж, вино); , С6: может_украсть(х, у) <— вор(х), любит(х, у). § 2.5. ИНТЕРПРЕТАЦИЯ В ЛОГИКЕ ПРЕДИКАТОВ 107 Хорновские дизъюнкты СиС2, С3 и С4 являются фактами. Хор- новские дизъюнкты С5 и С6 образуют процедурную часть програм- программы. Пусть мы хотим узнать, что именно Питер может украсть (если он вообще может что-то украсть). Мы должны записать следующую цель: G: <— может.украсть (Питер, у) Ответ мы найдем в примере 2.10.12. ? 2.4.9 Позже мы подробно обсудим способы выведения заключений из множеств дизъюнктов, подобных множеству из предыдущего при- примера. В параграфе 2.5 мы разовьем теорию интерпретаций и опишем, как с помощью интерпретаций можно приписывать истинностные значения предложениям логики предикатов, то есть формулам без свободных переменных. § 2.5. Интерпретация в логике предикатов В рамках логики высказываний при нахождении истинностных значений составных высказываний мы использовали понятие функ- функции означивания. Мы приписывали некоторые значения атомар- атомарным формулам данного высказывания А и по индукции определяли истинностное значение всего высказывания А. В этом параграфе мы введем понятие интерпретации, на котором основаны методы нахождения истинностных значений предложений PrL. Интерпретация: неформальное описание 7а ¦XI ¦¦ж Мы хотим проинтерпретировать предложения PrL, т. е. припи- приписать им истинностные значения. Основными элементами этих пред- предложений являются термы, состоящие из переменных и констант. Поэтому для интерпретации термов мы должны сначала выбрать множество объектов, на котором термы будут интерпретироваться. Затем мы сможем определить истинностное значение предикатов и предложений языка. Итак, мы видим, что семантика PrL сложнее, чем семантика PL. Для лучшего понимания последующих определений, приведем несколько примеров. Пример 2.5.1. Рассмотрим язык С — {Q, а}, где Q — преди- предикат, а — константа, и предложение этого языка C< ^ S:Cx)(Vy)Q(x,y). ^ Для каждой интерпретации этого языка на!| нужно определить Множество объектов, элементы которого должны соответствовать
108 Глава 2. ЛОГИКА ПРЕДИКАТОВ § 2.5. ИНТЕРПРЕТАЦИЯ В ЛОГИКЕ ПРЕДИКАТОВ 109 символам С, и приписать истинностные значения предложения! языка. Возьмем множество натуральных чисел N в качестве мн<Г жества объектов. Тогда мы можем определить интерпретацию структуру вида: . < ;* .«t ¦ .•:•-. .•¦ v;: A=(N, <, 1), >:-¦>, ., ;-я, где N: множество натуральных чисел, ' ^: отношение «меньше или равно» на N, "¦"'• " 1: натуральное число 1. Установим следующее соответствие между элементами А и си» волами языка С: символ Q соответствует отношению < на множестве символ а соответствует натуральному числу 1. Пусть переменные х и у формулы S принимают значения на мне жестве N. Тогда формула S в интерпретации А имеет следующи смысл: S: существует такое натуральное число х, ц№ .<?; что для каждого натурального числа у " выполняется отношение х ^ у. Таким образом, S утверждает, что в А существует минимально элемент. Это, конечно, верно для А, так как 1 является минималь! ным элементом А. Теперь определим другую интерпретацию того же самого языка A' = (N, >, 1), где предикат Q соответствует отношению «>» — «больше» на мно- множестве натуральных чисел, а константа а соответствует числу 1. В этой интерпретации формула S имеет следующий смысл: S: существует такое натуральное число х, что ', для каждого натурального числа у ч выполняется отношение х > у. В данном случае S утверждает, что в А существует максимальный^ элемент, а это, очевидно, неверно, так как Л не имеет максималь-J ного элемента. В итоге, мы видим, что можно определять различные интерпрета ции для одного и того же языка, приписывая при этом различно истинностные значения предложениям. ? 2.5. | Интерпретация и истинность: формальное описание Теперь мы перейдем к формальному описанию интерпретаций и определим понятие истинности предложения в контексте Prl [ChLe73, Dela87, Hami78, Meta85, RaSi7O]. Определение 2.5.2. Пусть мы имеем язык PrL L = \Rq, й|, . . ., /q, /j, . . ., <\), С,, . . ./, где Ri — предикатные символы, /, — функциональные символы и с, — константы, г = 0, 1,... Интерпретация языка С А=(А, e(R0), ?(#,), • •., е(/0), e(/i), • ¦ -, е(со), Фг), ¦ ¦ •) включает в себя: i) множество А ^0 — область интерпретации; И) n-местное отношение е(Лг)С Ап для каждого n-местного пре- предикатного символа R(; ш) функцию e(/i): Am >-> А для каждого функционального симво- символа /;,- iv) элемент е(с{) 6 А для каждой константы с{. Элементы e{R{), e(/,) и е{с{) называются интерпретациями символов Д(, /; и с( в Л. -yi ? 2.5.2 Пример 2.5.3. Рассмотрим язык %т; из примера 2.2.2. Интерпретация этого языка имеет вид: .4 = (N, =,«:,+,*, 0, 1), где N — множество натуральных чисел, «=» — отношение равенства на множестве N, «<» — отношение «меньше или равно», «+», «*» — сложение и умножение на множестве N. Отметим здесь, что символ «+» языка С является трехместным предикатным символом, например, +B, 3, 5) означает 2 + 3 = 5. В интерпретации А этот символ интерпретируется как е(+) — сим- символ функции сложения натуральных чисел. Мы, как правило, будем обозначать выражением е(@) объект, являющийся интерпретацией символа «@» языка С в интерпретации А. Таким образом, мы имеем следующие интерпретации символов ?: e(=)CNxN; ,,„,-, Н :-' е(+) С N х N х N; р? С, ¦ е(*) С N х N х N; *" s Cv s@) € N; ;»ф >.№Л'$п$?. ым- - D 2.5.3
по Глава 2. ЛОГИКА ПРЕДИКАТОВ Как мы видели, язык PrL и его интерпретация — разные понятия. Однако, в дальнейшем для простоты изложения мы часто будем использовать символы языка для обозначения интерпретаций этих символов. Например, символ ^ будет использоваться и в качестве предикатного символа языка, и в качестве его интерпретации вместо е(^) — подмножества N х N. Как мы видели в примере 2.5.1, один и тот же язык может иметь несколько интерпретаций. Пример 2.5.4. Рассмотрим интерпретацию языка С, отличную от интерпретации, изучаемой в примере 2.5.3: Л = ({2п | п 6 No}, =', *', +', (У) _ С (четные натуральные числа), где '"" ^ е(—) есть =' — равенство на множестве {2п | п € No}, , е(*) есть *' — умножение на множестве {2п | п б No}, * е(+) есть +' — сложение на множестве {2п | п 6 N0},-itmm- е@) есть (У — нулевой элемент операции +'. ' ' !* Как отмечалось ранее, предложение языка может быть «истин- «истинным» в одной интерпретации и «ложно» в другой. Например, пред- предложение (Эу) (Vx) (я * у = я), утверждающее о существовании единичного элемента операции *', истинно в Л и ложно в Л'. О 2.5.4 Теперь мы дадим индуктивное определение истинности предло- предложения в интерпретации Л. Определение 2.5.5 (индуктивное определение истинности предложения в данной интерпретации). Пусть = 1-^0' -*М» • • •) /0> /li ¦ • •' — некоторый язык, и Л — некоторая его интерпретация. ' а) Интерпретацией основного терма t называется такой элемент e(t) E А, что если t есть константа с, то e(t) — е(с); если t имеет вид /(?,,..., tn), где ?,,...,*„ — основные термы, тогда e(t) = e(/)(e(*i), •••,?(*„))• б) Атомарное предложение Rt(tu . .»., tn) истинно в интерпрета- интерпретации Л тогда и только тогда, когда ¦"""¦¦••• ¦¦' (s(t)),...,e(tn))ee(Ri). (••-*¦, «•,.¦ В этом случае мы записываем формально .иг •: - § 2.5. ИНТЕРПРЕТАЦИЯ В ЛОГИКЕ ПРЕДИКАТОВ 111 Пусть <р, в) А\ ) <р{ и <р2 — некоторые предложения языка С. Тогда ) \р?р г) Л f= v?i V tp2 «• Л [= <р{ или Л \= <р2; д) Л = щ л <р2 & Л \= v?, и Л \= <р2; е) Л \= V?, -> <р2 & -А И1 <Р\ ИЛИ A F 4>г< ж) Л \= ^ <-> <р2 <& (Л \= <рг и Л \= <р2) или (Л И= <Pi и Л И= <р2); з) Л(=(\/и)(/?(и)ф> существует элемент аЕА такой, что A'f=ip(c), где с ^ ?, и Л' получена из Л путем добавления элемента е(с) = а; и) А \= (Уи)<р(и)& для любого элемента а € А выполняется Л' (= f= v(c), где с $• ?, и Л' получена из Л путем добавления ? 2.5.5 Замечание 2.5.6. 1. Согласно определению 2.5.5 и замеча- замечанию 2.3.7 мы имеем Л \= с, = е(с,) совпадает с 2. Если атомарное предложение R{(c{,..., с, ) является истинным в Л, то R( принимает значение t, если предложение не является истинным, то R( принимает значение / (упражнение 12). D 2.5.6 В определении истинности формулы в данной интерпретации ин- индукция проводится по сложности предложения. Например, согласно пункту в), дизъюнкция (</?) V <р2) истинна в Л тогда и только тогда, когда по крайней мере одно из предложений <р1У <р2 истинно в Л. Все аксиомы из определения 2.3.3 и замечания 2.3.7 являются формулами, истинными во всякой интерпретации Л. Более того, по правилам обобщения и Modus Ponens из истинных формул полу- получаются также истинные формулы в любой интерпретации PrL (что означает корректность аксиоматической системы PrL). Пример 2.5.7. Пусть ? = {Q,g} — язык арифметики, и . . A=(Q+,=,g), Л'= (R+, =, <7) \ — две интерпретации языка ?, где , . Q+: множество положительных рациональных чисел, R+: множество положительных вещественных чисел, д: д(х) = х2, e'(Q): = — равенство на множестве R+, e(Q): — — равенство на множестве Q+, ' е'(д): функция д, определенная на множестве R+, е(д): функция д, определенная на множестве Q+. ¦ Тогда предложение S: (Ух) Cy)Q(x, д(у)), т. е. (Vx) (Зу) (х = у2), истинно в интерпретации Л', но ложно в интерпретации А, так как ^ Уравнение х — у2 для заданного положительного х всегда имеет ре- ' Щение на множестве R+, но не всегда на множестве Q+. О 2.5.7
112 Глава 2. ЛОГИКА ПРЕДИКАТОВ Пример 2.5.8. Для языка ? = {Q, /, а, 6} мы можем опреде- определить следующую интерпретацию: = (А, ребенок, мать, Джон, Мэри, Наполеон), где = pe6eHOK(xiioc2) = А: множество всей людей, е(<5): отношение «ребенок», т. е. = «х, является ребенком а^», U. е(/): функция «мать», т. е. е(/) (х) = мать(х) = «мать х*, " е(а): Мэри, v ( е(Ь): Джон, »<n ^ е(с): Наполеон. Отметим, что в интерпретации А один символ, а именно с, не яв- является элементом языка, тем не менее, он тоже проинтерпретиро- проинтерпретирован. Ниже (см. теорему 2.5.14) мы увидим, что такая интерпретация символа, не принадлежащего языку, не вызывает трудностей. Рассмотрим предложение S: Q(b, f(b))VCx) (Q(a, x)). В интер- интерпретации А оно имеет вид: S: «Джон является ребенком матери Джона V 0 или ' .' существует некто х, чьим ребенком является Мэри» j,. Очевидно, Джон является ребенком матери Джона, поэтому предло- предложение S истинно в интерпретации А (пункт в) определения 2.5.5). ? 2.5.8 Определение 2.5.9. Интерпретация А языка ? называется моделью предложения а тогда и только тогда, когда А\=сг. О 2.5.9 Определение 2.5.10. Для интерпретации Л языка ? мно- множество в(А) = {а\А\=а} называется теорией интерпретации. ? 2.5.10 Другими словами, теория интерпретации есть множество всех предложений, истинных в этой интерпретации. В примере 2.5.8 мы видели, что возможно проинтерпретировать символы, не являющиеся элементами языка. Дадим определение, которое будет полезным в таких случаях. Определение 2.5.11. Пусть мы имеем такую интерпрета- интерпретацию А языка ?, что элементы аи а^,... из области интерпретации не являются интерпретациями констант языка ?. 1. Сформируем новый^язык: С* = С и {с,, С2,..;}, Я '»|<оя1 § 2.5. ИНТЕРПРЕТАЦИЯ В ЛОГИКЕ ПРЕДИКАТОВ 113 где символы с,,^,... являются новыми символами констант, не принадлежащими ?. Язык С называется элементарным расшире- расширением языка С. 2. Для произвольной интерпретации 1 A = (A,Ri,R2,...,fx,f2,...,dud2,:..) ; " мы построим новую интерпретацию: К A* = (A,Rl,R2,.. .,/,,/2,.. .,<*], dj,..., a,, Oj,...) языка ?* = ?U{c,, Cj,...}, где с,, Cj, ...$??, фиксируя при этом сле- следующую интерпретацию символов с,, Cj,...: е(с,) = а,, е(с2) = а2,... Интерпретация А' называется элементарным расширением интер- интерA D 25 И рр претации A. Пример р D 2.5. И 2.5.12. Предположим, что ,6, Тогда мы можем построить язык ?* = {=, ^,+,*, 0,1, с„ с,,. и его интерпретацию А* = (N, =, <, +, *, 0, 1, 2, 3, .} .). ом...и кпд D 2.5.12 Замечание 2.5.13. Кроме констант в язык ? могут быть до- добавлены также новые символы функций и предикатов. Расширение языка ? новыми символами функций и предикатов ?* называется неэлементарным расширением ?. Соответствующее расширение А* интерпретации А называется неэлементарным расширением А. О 2.5.13 Сформулируем теорему об истинности предложения в контексте PrL. Теорема 2.5.14. Пусть А есть интерпретация языка С. Предположим, что А* и ?* — такие элементарные расширения А и С, что каждый элемент области интерпретации А* является интерпретацией некоторого символа языка С. Тогда предло- предложение а языка ? истинно в интерпретации А тогда и только тогда, когда оно истинно в интерпретации А*. Формально, Доказательство. Индукция по сложности предложения а. Вначале следует отметить, что при элементарном расширении значения всех основных термов языка ? остаются в интерпретации
114 Глава 2. ЛОГИКА ПРЕДИКАТОВ А* такими же, как и в исходной интерпретации А. В этом легко убедиться, воспользовавшись математической индукцией по струк- структуре основного терма и принимая во внимание то обстоятельство, что все элементы языка С имеют в интерпретации А* то же самое значение, что и в интерпретации А. Если о имеет вид P(tv ..., tk), где tu ..., tk — основные термы, то А* >'¦¦¦'¦: v t,), • ¦., Фк)) е е(Р) e(tl),...,e(tk)eAt, e{P)CAk и и ?(«,),..., s(tk)eA, e(P)CAk, так как ст — предложение языка С -чр, a: tpVtp',cr: tpAip'ucr: ip —> ц>' рассматриваются Случаи ст: аналогично. Пусть предложение ст имеет вид (Bx)tp(x), где х — единственная свободная переменная формулы <р. Тогда Л* МЭМ*) для некоторого элемента а еА* и константы с ^ С, е(с) = а ' ~" л Л согласно предположению индукции, равенству областей интерпре- интерпретаций Л* и Л, а также тому факту, что <р — предложение языка С , А\=<р(с). [ Случай <т: (Ух)<р(х) рассматривается аналогично. D 2.5.14 . Согласно теореме 2.5.14, истинность предложения в интерпрета- интерпретации А* не зависит от выбора новых символов констант и их интер- интерпретации. Определение 2.5.15. Предложение а языка С выполнимо или непротиворечиво тогда и только тогда, когда существует ин- интерпретация А языка С в которой это предложение истинно, т. е. А\=а. ? 2.5.15 Определение 2.5.16. Множество предложений S вы- выполнимо или непротиворечиво, если существует интерпретация в которой все предложения 5 истинны. В противном случае, множе- множество S невыполнимо или противоречиво. О 2.5.16 Пример 2.5.17. Пусть Л = (N, =,<,+,», О; 1). § 2.5. ИНТЕРПРЕТАЦИЯ В ЛОГИКЕ ПРЕДИКАТОВ 115 Тогда выполняется А\=а, где а — одно из предложений A)-B) примера 2.2.8. Докажем, что А (= (Ух) (Уу) (х = у —> у — х). j v. » Предположим, А \= (Ух) (Уу) (х = у -» у = х) щ>Щ$цо. Тогда по Докажем, что А [= (Ух) (Vy) (х Предположим, А |= (Vx) (Уу) ( у у ) дода определению 2.5.5 з) и б) существуют си с% таки% дао Следовательно^ или и по оп редедавию 2.5.5 г) а = Сг) ->:¦>- <;?-чр.: .. клшёч k A) '""¦'Л ^^=4ЙЙ" ¦ B) По седьмой аксиоме замечания 2.3.7, т. е. аксиоме подстановки рав- равных термов, мы, используя A), подставляем Cj вместо с, в B). Тогда или, по определению 2.5.5 ж), А\=Cх)^(х = х). V, Используя двойственность V и 3, получаем !•' .- •- что противоречит рефлексивности отношения равенств^4 D 2.5.17 Пример 2.5.18. Стандартная интерпретация языка С = = {=) ^> +? *>0, 1} имеет вид: ,,.[.,. ^ = (N,=, ^,+,*,0, 1). " ^?',г^11т э Рассмотрим другую интерпретацию языка С B = (Q>=,^,+,*,O,1). >;;;.;f; где Q — множество рациональных чисел. Пусть предложение а имеет следующий вид (формальное опреде- определение плотного порядка): (Ух) (Уу)Ь(х - у) -»(Эг)[-.(г = х) Л ^(z = y)A(x ф) A(z^ у)]]. Тогда А И= о-, но В f= ст. • •¦< ' . D 2.5.18
116 Глава 2. ЛОГИКА ПРЕДИКАТОВ § 2.6. НОРМАЛЬНЫЕ ФОРМЫ В ЛОГИКЕ ПРЕДИКАТОВ 117 Точно также, как в PL, в каждом языке PrL существуют предло- предложения, истинные во всех интерпретациях этого языка. ¦ Определение 2.5.19 (Общезначимая формула). Если фор-| мула а языка С истинна во всех интерпретациях Д то она называ-| ется общезначимой или логически истинной. ? 2.5.191 Пример 2.5.20. Пусть ip — произвольное предложение язы- языка С, и ф — произвольная формула С Тогда предложение ;,. ,"¦{;?< истинно во всех интерпретациях С. <ш Доказательство. Допустим, что предложение S не истин-1 но во всех интерпретациях языка С. Тогда существует интерпрета- интерпретация А языка С такая, что п , - И Отсюда, по определению 2.5.5 мы имеем неверно [А?=(Уь)((р —> ф) или А\=<р-+(\ по правилу де Моргана неверно [A ?=(Vv) (<p -^Ф)] и неверно [А \= <р - По закону двойного отрицания получаем А\=(Уу)(<р^ф) A) и А?=<р^(Уь)ф B). Из B) следует .4^=-k/?V(W)^, и по определению 2.5.5 б) мы имеем: А\=<р и А\Ь(\/у)ф. C) Из C) и определения 2.5.5 з) следует, что существует константа с е? такая, что ' А\=^ф(ь/с), ;л...^ч и из А \= ^ и определения 2.5.5 г) получаем А\=<рЛ^ф(ь/с), ••-•?¦• '. М очередь, эквивалентно -4 о К к Из A) и определения 2.5.5 з) для всякой константы с € ? выполня- выполняется А\=(<р^ф)(ь/с). E) Однако, tp является предложением и не имеет свободных перемен- переменных. Следовательно, в формуле <р невозможно сделать ни одну под- подстановку. Отсюда, E) имеет вид А \= <р —> ф(ь/с) для всех с е С, что вступает в противоречие с D). Следовательно, предложение S истинно во всех интерпретациях языка ?. ? 2.5.20 Определение 2.5.21. Пусть ? — язык PrL, и 5 — множе- множество предложений PrL. Предложение а называется следствием S (краткая запись 5 |= а) тогда и только тогда, когда во всякой ин- интерпретации А языка С, в которой истинны все предложения из 5, истинно также и предложение а. Это можно записать следующим образом: aeCon(S) Ф> (VA)[A\= S => А\= а] ? 2.5.21 § 2.6. Нормальные формы в логике предикатов Изучая логику высказываний, мы рассматривали две эквивалент- эквивалентные нормальные формы высказываний: КНФ (конъюктивная нор- нормальная форма) и ДНФ (дизъюнктивная нормальная форма). Анало- Аналогичные формы можно найти также и в логике предикатов. В контек- контексте PrL, однако, существуют две дополнительные нормальные фор- формы: предваренная нормальная форма (ПНФ) и сколемовская нор- нормальная форма (СНФ), которые различаются типом кванторов, вхо- входящих в предложение [Chur56, ChLe73, Hami78, Klee52, Thay88]. Преобразуя каждое из двух заданных предложений в одну из этих форм, мы можем легко их сравнить и определить, эквивалентны ли они, является ли одно из них отрицанием другого, или просто, обла- обладают ли они какими-либо особенностями. Сколемовская нормальная форма играет важную роль в логическом программировании. Мы рассмотрим эти формы в следующих пунктах. Предваренная нормальная форма -q Определение 2.6.1. Формула ip находится в предваренной нормальной форме (сокращенно ПНФ), если она имеет вид: <p:(Q1x1)(Q2x2)...(Qnxn)a, где Qo г = 1,..., п обозначает один из кванторов V, 3, и а — фор- формула без кванторов. Выражение {Q\XX)... (Qnxn) называется пре- префиксом формулы <р, а а называется матрицей ц>. ' D 2.6.1
118 Глава 2. ЛОГИКА ПРЕДИКАТОВ ь" н-| ;.!RT • Пример 2.6.2. Следующие предложения находятся в ПНФ: a)(Vx)(Vy)[P(x,y)^<?(x)]; б) (Vx) Cy)[Q(x, у) V Р(х, у)] ? 2.6.2 Чтобы привести формулу или предложение к ПНФ, кроме экви- валентностей логики высказываний мы также будем использовать следующие тождества: 1) (<2x)P(x)VG*-+(<3x)[P(x)vG], где х не входит свободно в G; 2) (<3x)P(x)aG«->(<3x)[P(x)aG], где х не входит свободно в G; 3) -.(Vx)P(x) <-> (Зх) (-iP(x)); 4)-Cx)P(x)~(Vx)(-P(x)); 5) (Vx) Р(х) Л (Vx) G(x) <-* (Vx) (P(x) Л G(x)); 6) Cx)P(x)V Cx)G(x)<->Cx)(P(x)VG(x)); ''1'™ где (Qx) обозначает либо (Vx), либо (Зх). Представленные выше формулы выводимы в аксиоматической си- системе PrL (теорема 2.3.6). Формулы 1) и 2) утверждают, что зо- зону действия квантора можно распространить на конъюнкцию или дизъюнкцию, если переменная под квантором не входит свободно в соответствующую подформулу. Формулы 3) и 4) очевидны ввиду двойственности кванторов V и 3. Формулы 5) и 6) утверждают о ди- дистрибутивности квантора всеобщности относительно конъюнкции и квантора существования относительно дизъюнкции. Обратное, од- однако, неверно: 7) (Зх)Р(х) Л Cx)G(x) *4 (Зх) (Р(х) Л G(x)); л^,^!/ -1м 8) (Vx)P(x) V (Vx)G(x) *4 (Vx) (P(x) V G(x)). >'4'И) <«ымль>.- Чтобы получить эквивалентности в случаях, подобных 7) и 8), мы сначала переименуем все вхождения переменной х в форму- формулах (Vx)G(x) и Cx)G(x). Это делать разрешено, поскольку х — связанная переменная. Затем по теореме 2.3.6, используя 5) и 6), получаем (как?) следующие эквивалентности: 9) (Q,х)Р(х) Л (Q2x)G(x)«- (QlX) (Q2z)[P(x) A G(z)\, 10) (Q,x)P(x) V (Q2x)G(x) <-> (QlX) (Q2z)[P(x) V G(z)], где Qx, Q2e. {V, 3}, и переменная z не входит в G(x) вообще и не входит свободно в Р(х). Теперь опишем формальную процедуру для приведения предло- предложения к ПНФ. ;JJ/-.i\^- .. -I ЛЦО'.1 П о с т р о е н и е 2. 6. 3. .•. v Шаг 1. Избавляемся от символов <-> и '*¦ с помощью формул: -Па) (А<-*В)*-*((А-+Вул(В^А));-; ^ « - (:^ § 2.6. НОРМАЛЬНЫЕ ФОРМЫ В ЛОГИКЕ ПРЕДИКАТОВ 119 Шаг 2. Проносим отрицания вглубь формулы до атомов с по- помощью формул: 2а) -.(A VB)^-,AA->B; ,- ; ,.i;«,,: '%,-, 26) -.(А Л5)<-»-пЛ V-iB; *¦ >, s ч *" 2в) -.(-.Л)^А; ' v ; *'• " 2г) -.(Vx)A^Cx)-.A; ...,.-.. 2д) ->(Зх)А *-*(\/х)->А. Шаг 3. Выносим кванторы наружу с помощью формул: За) (Vx)A(x) Л (Vx)B(x) *-* (Vx) (Л(х) Л В(х)); C)(A()V5()); 36) (Qx)A(x) Л В <-> (С, (Qx)A(x) VB« (Qx)[A(x) V В]; в формулах C6) В не содержит свободных вхождений х; Зв) (Qxx)A(x) V (Q2x)B(x) <-> (Q,x) (Q2z)[A(x) V B(z)]; (Qlx)A(x)A(Q2x)B(x)^(Qlx)(Q2z)[A(x)AB(z)); в формулах Зв) В не содержит свободных вхождений х, перемен- переменная z не входит в В и не входит свободно в А, и B(z) есть результат замены свободных вхождений х на z. D 2.6.3 Пример 2.6.4. -ц; ; ус -(Vx)P(x)VCx)P,(x) A6) Br) v ( •;?,; rt5l,ta<»Cx)[()()] Ca) •.;(x>V;,^' vr -^ .-. d 2.6.4 Пример 2.6.5. ' yp: (Vx) (V3/)[Cz) (P(x, г) Л Р(у, г)) - (Зи)Щх, у, и)} ^(Vx) (Vy)bCz) (P(x, z) Л Р(у, г)) V Cu)i?(x, у, п)] A6) ~(Vx) (Vy)[(Vz) (-P(x, z) V -пР(№ z)) V (Эи)Д(х, у, «)] B6) w(Vx)(Vy)(Vz)hP(x,z)V-P(y,z)VCu)i2(x,y,u)] C6) ^(Vx) (Vy) (Vz) Cu)[-P(x, z) V -^P(y, z) VR(x, y, u)] C6) П 2.6.5 Теперь мы можем перейти к преобразованию предложения <р в универсальное предложение <р', которое содержит только кванторы всеобщности, находится в предваренной форме и выполнимо тогда и только тогда, когда выполнимо <р.
120 Глава 2. ЛОГИКА ПРЕДИКАТОВ Сколемовская нормальная форма Теорема 2.6.6 (Лёвенгейм, Сколем). Для каждого предло- предложения tp логики предикатов мы можем построить универсаль- универсальное предложение tp* такое, что tp выполнимо ф> tp* выполнимо. ? 2.6.6 Опишем, как построить tp* для произвольного предложения <р. Построение 2.6.7. Пусть tp — предложение языка PrL. Шаг 1. Строим ПНФ предложения tp. Шаг 2. Последовательно (слева направо) вычеркиваем каждый квантор существования (Зу), заменяя все вхождения переменной у на новый, еще не использованный функциональный символ /, в качестве аргументов / берем все переменные, связанные предшест- предшествующими (Зу) кванторами всеобщности. Функциональный символ / называется сколемовской функцией. Предложение tp*, полученное после выполнения шагов 1 и 2 называется сколемовской нормаль- нормальной формой, коротко СНФ. D 2.6.7 ^Пример 2.6.8. Рассмотрим предложение ; tp: (Vx) (Зу) (Vz) Cv)P(x, у, z, v), ; , W * ^ jf которое находится в ПНФ. *'* (*v) ' •< 1. Вычеркиваем (Зу) и заменяем у на сколемовскую функцию /(х). Таким образом, получаем предложение ,: (Vx)(Vz)Cv)P(x,f(x),z,v). ' ¦¦ ¦ *; v. 2. Вычеркиваем Cv) в^,и заменяем v на сколемовскую функцию ; g(x, z), так как кванторы (Vx), (Vz) предшествуют квантору Cv). В ' итоге, получаем ,р*: (Vx)O/z)P(x,f(x),z,g(x,z)). D 2.6.8 \ Говоря неформально, в предыдущем примере /(х) указывает на существование переменной у, которая зависит от х (по определе- определению 2.5.5 з) и ж) для каждого х существует константа, которую можно подставить вместо у). Значит, переменная у должна быть i связана квантором существования. Следовательно, из <рх и tp* сле- следует <р, если принять во внимание /(х) и д(х, z). Пример 2.6.9. СНФ предложения . ^ . . , .. ,,., o».iks tp: •¦jtlj- i.'T Ы § 2.6. НОРМАЛЬНЫЕ ФОРМЫ В ЛОГИКЕ ПРЕДИКАТОВ 121 имеет вид tp*: (Vx)(Vz)i>(x,c,z), где с — константа, поскольку соответствующая сколемовская функ- функция / не имеет аргументов ((Зу) — первый квантор предложения tp, следовательно, у не зависит ни от одной переменной, и функция / превращается в константу с). ? 2.6.9 Приведение предложения к СНФ имеет большое значение в логи- логическом программировании, это станет еще более очевидным, когда мы представим метод резолюций для вывода формул в PrL. В определении 1.9.4 для логики высказываний мы видели, что предложение вида то есть, конъюнкция дизъюнкций, может быть представлена в тео- теоретико-множественном виде: Вспоминая определение 2.4.1 и учитывая кванторы, мы вводим определение теоретико-множественного представления предложе- предложений PrL. Определение 2.6.10. Пусть предложение <р PrL находится в СНФ: tp: (Vx,)... (Vx,)A(x,,..., х,), (l! 4^tti"...f.,oiiJn где А(х,,..., x() есть конъюнкция <•¦ ¦• ."¦,"ч\''"О Cl(xl,...,xl)A...ACk(xl,...,xl), и каждое Со 1 ^ i ^ k есть дизъюнкция атомов PrL или их отрица- отрицаний Р(,..., Pi. Тогда теоретико-множественным представлением <р называется множество. S = Pv ..., Рк}} или 5 = {Си . .д CJ. Каждое Сг является дизъюнктом, a S — множеством дМъюнктов. г* ? 2.6.10 Пример 2.6.11. Предложение '#'¦ (Vx) (Vz)[P,(x, у) Л (Р2(х) V P3(z)) Л P,(z, x)] "' |,; имеет следующее теоретико-множественное представление: ! {{РЛх>У)}Л(Рг(*),Ц(*)}ЛР4(*,х)}} ? 2.6.11 В следующих разделах мы рассмотрим эрбрановские интерпре- интерпретации, а также методы доказательства выполнимости предложения или множества дизъюнктов PrL.
122 Глава 2. ЛОГИКА ПРЕДИКАТОВ § 2.7. Эрбрановские интерпретации В этом разделе мы опишем особый вид интерпретаций — эрбра- эрбрановские интерпретации [ChLe73, Dela87, Klee52, Thay88], которые играют важную роль в теоретическом основании логического про- программирования. Эрбрановские интерпретации были темой докторской диссерта- диссертации Эрбрана в 1930 г.. Пожалуй, не будет преувеличением сказать, что без вклада Эрбрана логическое программирование было бы и до сих пор несбыточной мечтой. Основная проблема автоматического доказательства теорем состоит в построении универсальной проце- процедуры, с помощью которой мы могли бы проверить, общезначимо предложение логики предикатов или нет [ChLe73]. В 1936 г. Тью- Тьюринг и Чёрч независимо друг от друга доказали, что такой универ- универсальной процедуры не существует. Однако, Эрбран к тому времени уже решил косвенно эту проблему, представив алгоритм для по- построения интерпретации, опровергающей данную формулу ip. Если tp общезначима, опровергающей ее интерпретации не существует, и алгоритм останавливается за конечное число шагов. Первые попытки применить идеи Эрбрана в логическом про- программировании предприняли в 1960 г. Гилмор, а также Дэвис и Путнэм; эти попытки, однако, нельзя назвать удачными. Успех при- пришел в 1965 г., когда Робинсон, применяя метод Эрбрана, ввел и использовал понятие резолюции. v,. Описание эрбрановского универсума Д t Для данного предложения PrL tp мы хотим определить, выполни- выполнимо tp или нет. Мы будем решать вопрос о выполнимости предло- предложения, должным образом исследуя соответствующее <р множество дизъюнктов 5. Однако, проверка выполнимости или невыполнимости всех основ- основных термов, входящих в дизъюнкт, практически невозможна. Поэто- Поэтому, мы построим множество интерпретации, на котором будут при- принимать значения термы предложения tp. Это множество называется эрбрановским универсумом. Эрбрановский универсум строится ин- индуктивно следующим образом. Построение 2. 7. 1. (Построение эрбрановского универсума.) Пусть 5 — множество дизъюнктов, соответствующее предложе- предложению tp. Шаг 1. К>--Я KHjitttvrг;-г.э ¦¦ Н0={с | константа с встречается в 5}; •> - м: ¦ >ы?:л , если 5 не содержит ни одной константы, § 2.7. ЭРБРАНОВСКИЕ ИНТЕРПРЕТАЦИИ 123 где (^ — новая константа («новая» означает, что она не встречается в 5), которую мы выбираем произвольным образом. Шаг г + 1 . Я< + , = Я<и{/(а1>...,<О|ая 1 О'<»Ъ —термы из Яо / — функция, входящая в 5} И наконец, полагаем Я = Ц?„Я... Множество Я всех термов, построенных из констант Яо и функ- функциональных символов, встречающихся в S, называется эрбранов- эрбрановским универсумом для 5. Множества Я,., i =0, 1,2,... называются эрбрановскими множествами S. ? 2.7.1 Пример 2.7.2. Пусть задано множество дизъюнктов (а)}, ЬР(а), Р(/(а;))}}, N. т -тэт ,ao.j >j /- - . ,.i где а-!-константа. Тогда '.~У>•>.-:¦.*:>. i. - ¦ !л Г. V и наконец, .M ;','"'...л4; Я = {о>/(а),/(/(а)),/(/(/(а))),.ч:.}. ' 1: * ¦¦¦•^••¦-•¦"•- ^ ^ p 2.7.2 It?p#i(|I^'pi,^7'^«'' Рассмотрим программу , .,„ . Ut.c - Вводим константу а и получаем Я = {a, /(a), g(a), /(/(a)), /(ff(a)), ff(/(a)), ff(^(a)),...}. П 2.7.3 Пример 2.7.4. ; 5 = - ,,,.,,._,s (J Вводим но^по константу q,. Получаем Яо = {с,,}. Так какв^5не встречаетсяяи одного функционального символа, имеем Я — ^о — д ^ q, встречаетсяяи одного функционального символа, имеем {} ^о
124 Глава 2. ЛОГИКА ПРЕДИКАТОВ Теоретически, для того, чтобы проверить предложение на выпол- выполнимость, мы должны узнать, существует ли какая-нибудь интерпре- интерпретация (в бесконечном множестве возможных интерпретаций), в ко- которой истинно данное предложение. Задача решается намного про- проще, если мы ограничимся рассмотрением универсальных предложе- предложений, т. е. предложений, содержащих только кванторы всеобщности. В этом случае достаточно работать только с небольшим классом интерпретаций, называемых эрбрановскими интерпретациями. Дадим формальное описание эрбрановской интерпретации. Определение 2.7.5. Эрбрановская интерпретация. Пусть 5 — множество дизъюнктов, и Я — эрбрановский универ- универсум, соответствующий 5. Эрбрановская интерпретация Лн для S определяется следующим образом. 1. Областью интерпретации является Я. 2. Интерпретация символа константы есть сама константа. 3. Интерпретация терма f(t{,...,tn), где / — функциональный символ, есть терм /(<,',..., t'n), где t[,..., t'n — интерпретации тер- термов ?,,...,<„ соответственно. 4. Интерпретация n-местного предикатного символа P(t{,..., tn) есть n-местное отношение Р(Ц,..., t'n) на множестве Я, где t{,... ..., t'n — интерпретации термов tlf..., tn соответственно. ? 2.7.5 Пример 2.7.6. Для языка арифметики С = {^, +, *, s, 0}, где s — функция следования, имеем § 2.7. ЭРБРАНОВСКИЕ ИНТЕРПРЕТАЦИИ 125 -40 \- , Я, = {0, *(())}, Я2 = {0,*@),ф@))}, ЛИ и наконец, Интерпретациями элементов языка С, отличных от 0, являются соответствующие отношения на множестве Я. Например, для s и ^ согласно определению 2.5.2 мы имеем: e(s): Я I—> Я = а »—> з(а) б Я е(^) С Я2: е(^) = {@, e@)), (e@), S2@)),..., (e»@), s» + '(Ой,2,7-]б Далее мы сформулируем основную теорему об эрбрановских ин- интерпретациях. Теорема 2.7.7. Пусть <р — универсальное предложение, и S — его множество дизъюнктов. Тогда ч> выполнимо (в какой- либо интерпретации) тогда и только, тогда, когда оно выпол- выполнимо в эрбрановской интерпретации. _ . ,,, Доказательство. (<=): Эрбрановская интерпретация явля- является частным случаем интерпретации (очевидный факт). (=*•): Мы хотим доказать, что если предложение tp выполнимо в какой-либо интерпретации Л, то можно определить такие отно- отношения на эрбрановском универсуме, которые будут обращать дизъ- дизъюнкты из множества 5 в истину. Предположим, что tp выполнимо в интерпретации Л, которая имеет область интерпретации А. Для обозначения интерпретаций различных символов языка С, к кото- которому принадлежит tp, мы используем: е(с) = <Ге А, где с — константа; е(/) = /: A" i—> А, где / — п- местный функциональный символ; e(t) = e(?(tlt • ¦ •. *»)) = /(*;. • • •, *J. где t =/(*„ ..., *„) -терм1); e(R) = R С А", где R — n-местный предикатный символ. Для каждого п-местного предикатного символа R мы определяем отношение Дд на эрбрановском универсуме Я (определения 2.7.5, 2.5.2 и), 2.5.5) следующим образом: RH(tl,...,tn)&(Tl,...,Tn)?R w, Таким образом, мы имеем эрбрановскую интерпретацию Лн. Положим A' = {t\t б Я}. Строим интерпретацию Л', беря в каче- качестве области интерпретации А', а в качестве интерпретаций функ- функциональных и предикатных символов — сужение на множестве А' соответствующих интерпретаций из Л. Из того, что Л \= tp, и ин- интерпретации всех термов, встречающихся в tp, содержатся в А', следует, что Л' \= tp. Отсюда, по определению Лн следует Лн \= tp. Следовательно, предложение tp действительно выполнимо в эр- эрбрановской интерпретации. ? 2.7.7 Согласно теореме 2.7.7, если предложение tp не выполнимо в эр- '¦ брановской интерпретации, то tp не выполнимо, т. е. не существует интерпретации, в которой -оно истинно. Другими словами: С помощью эрбрановских интерпретаций мы сводим проблему невы- невыполнимости множества дизъюнктов к проблеме невыполнимости множества основных примеров этих дизъюнктов на эрбрановском универсуме. Так как в основные примеры дизъюнктов не входят переменные, выполнимость может быть доказана с помощью мето- методов логики высказываний, таких как метод семантических таблиц и метод резолюций. Метод семантических таблиц Бета и метод резолюций являются алгоритмическими доказательствами (в отличие от обычных мето- , дов проверки выполнимости в PrL, пример 2.5.17). Этот результат в ') Элемент множества А, являющийся интерпретацией терма t, обозначается t. — Прим. перев. , , . л.
126 Глава 2. ЛОГИКА ПРЕДИКАТОВ классической и современной литературе известен как теорема Эр- брана, независимо от того, в какой формулировке он приводится. Он будет анализироваться в следующем разделе при работе с выво- выводами, построенными с помощью семантических деревьев. ' ali § 2.8. Метод систематических таблиц В логике предикатов, как и в логике высказываний, мы можем определить, является ли предложение или множество предложений выполнимым. Методы, изученные нами ранее, можно применять и в контексте PrL. Начнем с семантических таблиц5) [Fitt69, Fitt90, Meta85, Smul68]. Эти таблицы используются для нахождения истинностного значения сложного предложения языка PrL С Определение 2.8.1 (исчисление замкнутых систематических таблиц). Предположим, мы имеем язык С и константы с,,, с,,... этого языка собраны в один бесконечный список (значение этого списка станет понятным в построении 2.8.5). Пусть а, и,, а2 — предложения языка С. Перечень семантических таблиц приведен на рис. 2.1. ? 2.8.1 Семантические таблицы для PrL получаются из соответствующих таблиц для PL путем добавления правил для кванторов. С помощью семантической таблицы ¦ ' ,— -. ..¦ ¦ t(Vz)?>(z) '- --¦ ¦ -¦ ¦ • •¦ ¦¦ " ' " для всех с мы представляем факт «для истинности формулы (Vx)v?(x) необхс димо, чтобы <р(с) было истинным для всех констант с». Соответственно, семантическая таблица ¦~Tiba--ki,<..inmt<»- tCx)ip(x) Щс) для новой с .«е ,» f -I ') В этом разделе метод семантических Таблиц излагается для собственного под- подмножества PrL, не содержащего функциональных символов — так нашмкмой узкой логики предикатов. — Прим. перев. •¦ ¦ ¦ I § 2.8. МЕТОД СИСТЕМАТИЧЕСКИХ ТАБЛИЦ 127 •'Г ,-я • 3 )jjs Ж ¦»¦ t(oi V сг2) 7 ./ to п. ?(> Для 1 • » СГ2) \ t«r» »>(*) ¦ >сех сд»«' /(ci V сг2) /°2 г 8 /((Tl —> СГ2) t А, 12 / для новоЛсф 2 tc г k^ 5 t(cri Л сг2) № ta2 9 t( ) /' \ Г1 • / t0T2 ¦ to Р(с) ДЛЯ НОВОЙ С -it-; -j. . ,i у -. •¦* ;''У4:.;. у ¦*' ¦ , , , .ц 6 /(сг, Л сг2) G1 10 /(G ОСГ2) /' \ t( ri / ;¦ ,¦', Tl /сг2 ^ tcr2 14 ft (с) ¦ для всех с Рис. 2.1 ,4- * К , ^' f ¦ ''!' L
128 Глава 2. ЛОГИКА ПРЕДИКАТОВ *ярг представляет факт «для истинности формулы (Зх)(р(х) необходи- необходимо, чтобы существовала константа с, которая еще не появлялась в таблице, такая что <р(с) принимает истинное значение». Семантические таблицы для PrL называются замкнутыми систе- систематическими таблицами, коротко ЗСТ. Строение замкнутых си- систематических таблиц для предложений PrL аналогично строению соответствующих таблиц для PL. Сначала рассмотрим несколько примеров. Пример 2.8.2. Допустим, что нам нужно доказать общезна- общезначимость формулы a: (Vx)</?(x) —> (Зх)<р(х), где </? — предложение PrL. Начнем с таблицы, в корне которой находится fa. - i ¦• :.f((Vx)tp(x) ->• Cx)<p(x)) t(Vx)<p(x) fCx)ip(x) вершина 1 вершина 2 вершина 3 из вершины 3 /v(c) Для всех с вершина 4 из вершины 2 ' t<p(c) для всех с вершина 5 противоречие между 4 и 5 В последней вершине семантической таблицы мы использовали ту же самую константу с для того, чтобы получить противоречие. Так разрешается делать, поскольку таблица для (Vx)v?(z) позволяет использовать любую константу. Неформально, приведенный выше вывод по Бету означает, что предложение (Ух)ф(х) —> (Зх)<р(х) общезначимо, так как все по- попытки опровергнуть его привели к противоречию. ? 2.8.2 Пример 2.8.3. ЗСТ для общезначимой формулы, фигурирую- фигурирующей в теореме 2.3.6 имеет вид, изображенный на рис. 2.2. П 2.8.3 § 2.8. МЕТОД СИСТЕМАТИЧЕСКИХ ТАБЛИЦ 129 для ново* е Рис. 2.3 Семантическая таблица для ?(Vx)v?(x) (или двой- двойственная таблица для fCx)ip(x)) позволяет нам объявлять формулу <р(с) истинной (соответственно ложной) для всех кон- констант с. Семантическая таблица для tCx)ip(x) позволяет нам объявлять '" <р(с) истинной только для тех констант, которые еще • не встречались в система- систематической таблице. Следующий пример демонстрирует, что могло бы произойти без этого ограничения. Пример 2.8.4. Рассмотрим предложение (Зх)</з(х) —> —> (Ух)<р(х). Это предложение не общезначимо, так как существо- существование х, такого что формула р(х) истинна, не влечет истинность <р(х) для всех х (например, из существования х такого, что х > 3 не следует, что х > 3 верно для всех х). Однако, см. рис. 2.3. В вершине 5 мы не имели права использовать ту же константу, что и в предыдущей вершине 4. Поэтому нам удалось «доказать», что предложение (Зх)</?(х)—» (Vx)ip(x) общезначимо, тогда как это, очевидно, неверно. D 2.8.4 Из-за таблиц 11 и 14 (см. рис. 2.1) систематическая таблица мо- может быть бесконечной, если в одной из ее ветвей не удается по- 5 Г. Метакиденс, А. Нероуд
130 Глава 2. ЛОГИКА ПРЕДИКАТОВ § 2.8. МЕТОД СИСТЕМАТИЧЕСКИХ ТАБЛИЦ 131 лучить противоречие (в примерах 2.8.2 и 2.8.3 нет необходимости] выписывать все константы таблиц 11 и 14). Этот факт станет по-! нятнее из последующего формального описания замкнутой система- ] тической таблицы предложения <р. Построение 2. 8. 5. Построение замкнутых систематических таблиц. Построение начинается с того, что помеченная формула ftp или ttp помещается в корень таблицы. Далее выполняется индуктивная j процедура. Шаг 71. Мы уже построили таблицу Тп. Таблица Тп далее расширяется до новой таблицы Тп+1, с исполь-1 зованием некоторых вершин Тп. Шаг и + 1 . Пусть X — неиспользованная неэлементарная вер- вершина, самая левая среди наиболее удаленных от корня вершин.') Если такой вершины не существует, то систематическая таблица является замкнутой. Если такая вершина есть, то мы строим табли- таблицу Тп +!, продолжая каждую непротиворечивую ветвь, проходящую через вершину X, присоединением (в конец ветви) таблицы, соот- соответствующей X. Рассмотрим новые случаи для PrL: Случай 1. X имеет вид t((Vx)tp(x)). Пусть сп — первая константа в списке всех констант языка, кото- которая не встречалась в вершинах вида ttp(cn) ни в одной ветви, прохо- проходящей через X, Тогда мы добавляем ttp(cn) в конец каждой непроти- непротиворечивой ветви, проходящей через X, в соответствии с рис. 2.42). Случай 2: X имеет вид t{iyx)tp(x)) ";' /((Vx)i,o(x)) /((Vx)v(x))- Пусть ск — первая константа в списке, которая не встречалась ни в одной вершине каждой из вет- ветвей, проходящей через X. Тогда мы добавляем ftp(ck) в конец каж- каждой ветви, проходящей через X, в соответствии с рис. 2.5. Случаи 3, 4: X имеет вид f((Bx)tp(x)) и t((Bx)tp(x)) соот- соответственно. Рис. 2.4 Рис. 2.5 1) Рассматриваемая здесь детерминированная стратегия построения замкнутых де- деревьев неполна, поскольку для некоторых общезначимых формул она приводит к по- построению бесконечных деревьев (см. теорему 2.10.2). В данном случае целесообразно отказаться от однозначного выбора неиспользованной вершины на п + 1 -ом шаге и полагать, что ее выбор производится недетерминированно. В этом случае мы полу- получим корректную и полную, хотя и неоднозначную процедуру построения замкнутой семантической таблицы. Однако существуют полные корректные детерминирован- детерминированные стратегии построения семантических таблиц, с которыми можно ознакомиться в [К1ее52]. — Прим. перев. ) Вершина X остается неиспользованной. — Прим. перев. ю?0" . ; ыЬ "i''Js Эти случаи двойственны случаям 1 и 2. Говоря неформально, в случаях 1 и 3 (двойственно 2 и 4) мы хотим избавиться от повторений и объявляем <р(с) истинной каждый раз для новой константы, выбирая ее из списка констант (что, вообще говоря, может продолжаться бесконечно). ? 2.8.5 Определение 2.8.6. Замкнутая систематическая табли- таблица, коротко ЗСТ, есть объединение всех таблиц Тп из предыдущего построения, т. е.: Т= ? 2.8.6 ЗСТ может иметь бесконечное число вершин, тогда как семанти- семантические таблицы для PL всегда конечны. Определение 2.8.7. 1. ЗСТ называется противоречивой, если все ее ветви противоречивы. 2. Предложение а выводимо по Бету (опровержимо по Бету), если существует противоречивая ЗСТ с корнем fa (ta). Тот факт, что предложение а выводимо по Бету обозначается \-в а. 3. Предложение а выводимо по Бету из множества предложе- предложений PrL 5, если существует противоречивая ЗСТ с корнем fa и следующей вершиной tP, где Р представляет собой конъюнкцию предложений множества S. Этот факт обозначается 5 \-в а. О 2.8.7 Пример 2.8.8. вершина 1 [(Чх)А(х,х) А ,у)) V В(у,у))] вершина 2 ; фх)А(х,х)\ 5С V-S. вершина 3 HHHi: А{Зу){-*А(у, у) V В(у, у)] вершина 4 ¦ t[-u4(co,Co) VB(co,co)] .f *». "¦;* /И(со,со)] ф4(со,со)] t[A{c,c)\ .>,.. ¦ fir;- 'В п . . t[A(ci,ci)] . Б' > x.-. i' иовой из верш.2 для всех с '•; А
132 Глава 2. ЛОГИКА ПРЕДИКАТОВ В этом примере левая ветвь противоречива, тогда как правая ветвь продолжается бесконечно. ? 2.8.8 Исчисление семантических деревьев очень похоже на исчисление Бета. Мы рассмотрим неформальное описание задачи и метода решения. Семантические деревья: неформальное описание Пусть tp — предложение и 5 — соответствующее множество дизъюнктов. Если tp выполнимо, то оно истинно в некоторой эрбра- эрбрановской интерпретации (теорема 2.7.7). Соответственно, все основ- основные примеры дизъюнктов из 5 истинны в этой интерпретации. Сле- Следовательно, если предложение tp невыполнимо, любая попытка под- подтвердить все основные примеры дизъюнктов из 5 с помощью озна- означивания основных атомов R(t{, t2,..., tn), где термы t{, t2,..., tn принадлежат эрбрановскому универсуму, обречена на неудачу. Этот факт может быть обнаружен за конечное число шагов путем постро- построения конечного множества невыполнимых в эрбрановской интерпре- интерпретации основных примеров. По теореме 2.7.7 эти основные примеры невыполнимы во всех интерпретациях. Следовательно, вопрос состоит в том, как построить процедуру, которая, имея на входе предложение tp и соответствующее множе- множества дизъюнктов 5, 1) если tp невыполнимо, останавливается после конечного числа шагов, выдавая конечное множество основных примеров; 2) если tp выполнимо, процедура в общем случае не дает никакого ответа за конечный период времени, при этом она осуществляет построение эрбрановской интерпретации, на которой истинно tp. Другими словами, с помощью этой процедуры мы хотим полу- получить доказательство невыполнимости предложения или контрпри- контрпример. При построении такой процедуры используются семантические деревья [ChLe/3, Dela87]. Определение 2.8.9. Деревом называется структура Т = = {Х, г}, где X есть множество вершин дерева Гиг есть бинарное отношение на множестве X удовлетворяющее следующим услови- условиям. 1. Если х, у б X и хгу, то х называется предшественником у, а у называется последователем х. 2. Дерево Г содержит в точности одну вершину, не имеющую предшественников. Эта вершина называется корнем дерева Т. 3. Каждая вершина дерева Г, отличная от корня, имеет в точно- точности одного предшественника. Линия, соединяющая вершину с ее последователем, называется дугой. Заключительной называется вершина, для которой не суще- существует последователей. Последовательность дуг, соединяющих за- за§ 2.8. МЕТОД СИСТЕМАТИЧЕСКИХ ТАБЛИЦ 133 ключительную вершину дерева Г с его корнем, называется ветвью дерева Т. ? 2.8.9 Пример 2.8.10. -Ч ч- ''Z**^"*?*?,: T ;/fi'i-;i •чйоноо hi )M ' :'Xy --/f. .. ' ","Д)П ЭЯ% ?~Щ ¦Vf?* ж;- Я IT ' И' 1.1 ¦4 СЦ \*ШН!Ф :-;! J3 Граф Т| является деревом. Обратите внимание на ветвление в нижней части, которое напоминает листву дерева, перевернутого корнем вверх. Граф Т2 не является деревом, он имеет два корня и, кроме того, вершину, у которой есть две предшествующие вершины. Граф 7^ тоже не является деревом, он содержит вершину, имеющую две предшествующие. ? 2.8.10 Замечание 2.8.11. Семантические таблице для высказы- высказываний PL и замкнутые систематические таблицы для предложений PrL являются деревьями. л ... .,,,... чааъ ,, ? 2.8.11 ,,,...
134 Глава 2. ЛОГИКА ПРЕДИКАТОВ Определение 2.8.12. (семантические деревья). Пусть S = {Си ..., Сп} — множество дизъюнктов, Р,,..., Рх — атомы, вхо- входящие в дизъюнкты множества 5, и {а{,..., ап,...} — эрбранов- ский универсум множества 5. Семантическим деревом для S на- называется дерево Т, удовлетворяющее следующим условиям. 1. Корнем дерева Т является произвольная точка. Вершины, от- отличные от корня представляют собой основные примеры атомов РХ,...,РХ на универсуме {о1;..., ап,...}. Каждая вершина имеет | в точности две последующих вершины, а именно Р{(ап,..., aik) и \ ->Pi(ail,...,aik). 2. Каждая ветвь таблицы Т, содержащая в точности основные примеры § 2.8. МЕТОД СИСТЕМАТИЧЕСКИХ ТАБЛИЦ 135 представляет конъюнкцию lt] ) Л ... Л Pip(apl,..., apk). 3. Дизъюнкция всех конъюнкций ветвей дерева Т является об- общезначимой формулой. 4. Если вершина дерева Т имеет вид P(ai{,..., aik), то ни на ка- какой ветви дерева, проходящей через эту вершину, не может встре- встречаться ->Р(аA,...,аЛ). 5. Если в процессе построения дерева Т мы получили вершину к, которая вступает в противоречие с каким-либо основным примером одного из дизъюнктов С{,...,Сп множества 5, тогда к считается заключительной вершиной, и о соответствующей ветви говорят, что она противоречива. П 2.8.12 На практике, при построении семантического дерева множества 5 мы начинаем с РДа,,,..., ои): Pi(an,...,aik) Если один из дизъюнктов множества 5 содержит Р^ау^..'., а1к), то правая ветвь противоречива, -iP^a^,..., alk) является заключи- заключительной вершиной, и построение продолжается по левой ветви. Ес- Если один из дизъюнктов 5 содержит -iP,(an,..., alk), левая ветвь ветвь противоречива, Р{(аи,..., а1к) — заключительная вершина, и построение продолжается по правой ветви. Предположим, что Р^а,!,..., а1к) — не заключительная вершина. Тогда мы строим вершину /^(oj,,..., aj,). (Выбор атома для продол-; жения построения произволен.) „*.,¦,...-,..«ць.-.,,.!*.,¦; ,„..лн*м Ветвь х, представляет конъюнкцию Pi(aM, ..., а^) Л Р2(а21,... ...jOj,). Ветвь -зи представляет конъюнкцию Р\{аХ\, ..., аХк) А A->P2(a21,..., О;,). Мы проверяем, содержит ли какой-либо дизъюнкт множества 5 один из атомов -ip^a,,,..., alk) или -iP^aO) ^ / Pi(a4,... «1 Если содержит, х, — противоречивая ветвь, и мы далее рассматри- рассматриваем ветвь «2. Таким образом, мы продолжаем проверку и построе- построение. Наша цель — достичь заключительной вершины, исчерпав при этом все атомы из 5. Определение 2.8.13. 1. Множество дизъюнктов 5 назы- называется опровергаемым семантическим деревом, если существует семантическое дерево для 5, ветви которого противоречивы. 2. Ветвь ж семантического дерева множества дизъюнктов 5 на- называется полной, если для всех основных примеров Р(а{,.. .,ап) каждого атома Р в этой ветви содержатся или Р(а{ ..., ап), или -.Р(а„..,ав). ' ? 2.8.13 Пример 2.8.14. Пусть дано у>: (Vx)[P(x)A(-.P(x)VQ(/(x)))A Л-.?(/(*))]. Тогда 5 ={{Р(х)}, bP(x),Q(/(x))}, bQ(f(x))}), 1 2 3 и Я =эрбрановский универсум = {а, /(а), /(/(а)), f(f(f(a))),...}, основные примеры = {Р(а), Q(a), P(f(a)), Q(f(a)),...}. Семантическое дерево Т, для 5 изображено на рис. 2.6 Посмотрим, почему ветвь «2 противоречива: -х^ представляет конъюнкцию -Q(/(a)) A P(f(a)) A Q(a) А Р(а). Второй дизъюнкт множества 5 имеет вид {-iP(x), Q{f(x))}. По- Поэтому, согласно 5, мы требуем, чтобы формула -P(x)vQ(/(x)) была истинной для каждого х. Однако, ^ утверждает, что в эрбра- новском универсуме существует значение переменной х равное а, для которого выполняется ))AP(/(a))AQ(a)AP(a).
136 Глава 2. ЛОГИКА ПРЕДИКАТОВ . ?:т>1 (Отсюда мы имеем также 1 1' >f и по правилу де Моргана a)) л P(a) (по формуле А Л В -* А), ' дсям )' ¦ -Л;)' Итак, ветвь ^ дает противоречие со вторым дизъюнктом множест- множества 5. Как было отмечено ранее, мы сами выбираем порядок выбора оче- очередного элемента из Я для подстановки в атомы из множества 5 Например, если мы выберем Q(f(a)) сразу вслед за Р(а), мы по- получим очень простое семантическое дерево Т2 для множества 5, в котором все ветви противоречивы. § 2.8. МЕТОД СИСТЕМАТИЧЕСКИХ ТАБЛИЦ 137 Пример 2.8.15. <р: (Ve) (Vz)[(-P(z) V Тогда * ), x)) Л Л ), x)}, а основные пртмеры образуют множество огли^см {Р(Ъ), Q(f(b), Ь), Р(д(Ь)),...}. натэн Семантическое дерево для 5: « П 2.8.15 Как говорилось ранее, число шагов, необходимых для достиже- достижения заключительной вершины противоречивой ветви, существенно зависит от порядка использования атомов при построении дерева. В замечании 2.8.11 мы упоминали о том, что семантические таб- таблицы и замкнутые систематические таблицы являются деревьями. По лемме Кёнига (лемма 1.11.9) каждое конечно ветвящееся дерево с бесконечным числом вершин имеет по крайней мере одну беско- бесконечную ветвь. Следовательно, если 5 невыполнимо, то построение его семантического дерева приведет через конечное число шагов к обнаружению эрбрановской интерпретации Лн такой, что Лн У= S. Если 5 выполнимо, то результатом соответствующего построения будет бесконечное дерево,1) каждая ветвь которого будет опреде- определять эрбрановскую интерпретацию, на которой выполняется 5. Это заключение составляет содержание теоремы Эрбрана, которую мы докажем с помощью метода построения семантического дерева для данного множества дизъюнктов 5. D2.8.K 1) Если бесконечен эрбраиовский универсум Jfsi'1— Прим. перее. ИМ Щ
138 Глава 2. ЛОГИКА ПРЕДИКАТОВ Теорема 2.8.16 (теорема Эрбрана). Если множество дизъЛ юнктов S невыполнимо, то S опровергается семантическим де-\ ревом. Доказательство. Опишем алгоритм построения семантиче- семантического дерева для 5. Мы формируем эрбрановский универсум для S, а также множество -. •, • , ^г ( {оо, а,,...} ;•'„''-.;.: JL;. .j/' основных примеров атомов из множества Ц., , Шаг 0: Строим дерево: # 1 ",' s ЦСЗ}№<;;. ЭИКЯ,.' 'по Шаг и . Добавляем к заключительной вершине каждой непро- непротиворечивой ветви ж фрагмент о„ ->ап Теперь предположим, что 5 не опровергается семантическим де-! ревом. Тогда построение, описанное в нашем алгоритме никогда не] закончится. Однако, в этом случае по лемме Кёнига дерево содер-j жит бесконечную ветвь ж. Для каждого основного примера ап ветвь) х в качестве некоторой своей вершины содержит либо ап, либо его отрицание ->а„. Определяем эрбрановскую интерпретацию следующим образом. Для каждого n-местного предикатного символа Р и термов j tv t2,..., tn, интерпретации которых принадлежат эрбрановскому j универсуму для 5, интерпретация Р есть отношение •¦Шц где Р(?п ..., tn) является какой-либо вершиной бесконечной ветви. Очевидно, что на этой интерпретации выполнимы все дизъюнкты! множества 5. Следовательно, множество 5 выполнимо. ? 2.8.16 j Фактически, теорема Эрбрана предоставляет возможность при проверке выполнимости предложения или множества дизъюнктов S) использовать методы логики высказываний, например, метод семан- j тических таблиц или метод резолюций. Если 5 невыполнимо, то су- ] ществует множество основных примеров дизъюнктов множества S,?' которое также будет невыполнимым. Это конечное множество со-] стоит из высказываний PL, и его невыполнимость может быть об-] наружена известными нам методами. Таким образом, для каждог множества дизъюнктов '5 мы начинаем перечислять все основные примеры дизъюнктов из S. Во время выполнения этой процеду-J ры мы систематически проверяем выполнимость каждого конечног § 2.8. МЕТОД СИСТЕМАТИЧЕСКИХ ТАБЛИЦ 139 множества основных примеров, пользуясь методами логики выска- высказываний. Если 5 невыполнимо, тогда такая проверка покажет, что одно из конечных подмножеств невыполнимо. Если 5 выполнимо, то эта процедура будет продолжаться бесконечно. Пример 2.8.17. Пусть дано предложение из примера 2.8.15. Vp: {Ух) (Vz)[(^P(x) V Q(f(x), х)) Л Р(д(Ь)) Л -Q(x, z)\. Нужно определить, выполнимо <р или нет. Соответствующее мно- множество дизъюнктов имеет вид: S = {-hP(x), Q(f(x), x)l,{P(g(b))},bQ(x, z)}}. 1 2 3 Эрбрановский универсум для 5 есть множество: Я = {6, д(Ь), f(b), f(g(b)), g(f(b)), ...}. Множество основных примеров атомов из 5: {Р(Ь), Q(f(b), Ь), Р(д(Ь)), Q(f(g(b)), д(Ь)), P(f(b)),...}. Строим семантическое дерево для 5 в соответствии с методом из теоремы 2.8.16. Это семантическое дерево служит доказательством того факта, что множество 5 невыполнимо, и предъявляет некоторое невыпол- невыполнимое подмножество основных примеров дизъюнктов из 5. Это подмножество тех и только тех основных примеров, которые бы- были использованы для объявления некоторой ветви противоречивой. А именно: ), bQ(f(g(b)), g(b))}t {P(g(b)) bP(b),Q(f(b),b)},{-P(9(b)),Q(f(9(b)),g(b))}}
140 Глава 2. ЛОГИКА ПРЕДИКАТОВ § 2.8. МЕТОД СИСТЕМАТИЧЕСКИХ ТАБЛИЦ 141 Первые два основных примера получены из дизъюнкта 3 множест- множества 5, третий — из дизъюнкта 2, и два последних — из дизъюнкта 1. Невыполнимость этого конечного множества действительно можно доказать методом резолюций в рамках логики высказываний, дем обозначения: '-' х)*>'' r({"' A:Q(f(b),b) v Ж' И--'-- • у.г.ц. у.>,..^й{.-г.-л-,о в. Q(f(9(b)),g(b) ¦ .d'-i,..-wv:.. ... C:P(g(b)) '¦ ¦'¦'»-^- •<" D:P(b) Теперь мы можем переписать наше конечное подмножество основ-^ ных примеров дизъюнктов множества 5 следующим образом: г^|с$Ю#ьзуя метод резолюций, получаем \- " " B) -J3 ' '' ."¦.' ..„• C) с ,.,. - •-¦¦ ;; D) -дл „ • E) -а в ' • F) в :., G) ? "^ ": (П'Ъ резолюция (З) и E) резолюция B) и F) В этом месте мы должны отметить, что невыполнимое множество основных примеров, определяемое нашим алгоритмом построения семантических таблиц, не всегда минимально. Так в предыдущем примере подмножество h. H ¦:• Ю-Z; ¦¦ уже является невыполнимым: A) ^В т B) с C) -пС, В , с , D) В ..-.¦ ¦,д; E) ? '?Л! резолюция B) и C) резолюция (I) и D) 'О''! Пример 2.8.18. Приведем пример выполнимого множества дизъюнктов. Пусть дано предложение Vp: (Vx)[Cy)P(x, у) - (Зу)Р(а, у)] Г'. СНФ предложения р имеет вид Ч>: (Vx) (Vy)[-P(x, у) V Р(а, f{x, у))]. (Почему?) Соответствующее предложению </? множество дизъюнк- дизъюнктов имеет вид и соответствующий эрбрановский универсум— -щ Н = {а, /(а, а), f(a, /(а, а)), /(/(а, а), а), /(/(а, а)|У(а, о)),.. .}• Основными примерами атомов из 5 являются ^ *¦ Z {Р(а, а), Р(а, /(а, а)), P(f(a, a), a), P(f(a, а), /Ц, а)),...}. Семантическое дерево для множества 5 имеет вид: ,. , 5 «¦¦ Это бесконечное семантическое дерево содержит ветви, которые по своей конструкции не являются противоречивыми, так как конъ- конъюнкция их атомов не противоречит ни одному дизъюнкту множества 5. Например, ветвь ж,, которая не содержит отрицаний Р, непро- непротиворечива. Ветвь ж, определяет эрбрановскую интерпретацию, в которой выполняется 5. ? 2.8.18 ;D2.8.li
142 Глава 2. ЛОГИКА ПРЕДИКАТОВ § 2.9. Унификация и резолюция в логике предикатов Мы уже упоминали о предваренной и сколемовской нормальной форме предложения. Пусть у> — некоторое предложение языка PrL. Тогда последовательностью преобразований: А: предваренная форма; ' ' '¦ В: КНФ подформул, не содержащих кванторов; С: сколемовская нормальная форма; D: множество дизъюнктов; мы можем привести <р к множеству дизъюнктов и определить его истинностное значение с помощью обычных методов PrL. Пример 2.9.1. Пусть предложение у уже находится в пред- предваренной форме (А). Ч>: (Vx) (Эу) (Эг) ((-Р(х, у) A Q(x, г)) V Я(х, у, г)) ~(Vs) (Эу) (Эг) (ЬР(х, у) VЯ(х, у, г)) A(Q(x, z) VR(х, у, z))). Теперь вводим сколемовские функциональные символы /, д и обо- обозначаем у = /(х), z = д(х). Получаем ц> ~ (Vx)[(iP(s, /(х)) V Д(х, /(*), 5(х))) '5 •' ' ° A(Q(x,g(x))VR(x,f(x),g( И наконец, определяем множество дизъюнктов (D): § 2.9. УНИФИКАЦИЯ И РЕЗОЛЮЦИЯ В ЛОГИКЕ ПРЕДИКАТОВ 143 Когда предложение ц> представлено в виде множества дизъюнк- дизъюнктов, нам приходится работать с переменными и сколемовскими функциями. Справиться с этой проблемой можно с помощью семан- семантических деревьев, определенных в предыдущем разделе. Используя семантические деревья, мы можем выбрать термы для подстановки вместо переменных из соответствующего эрбрановского универсума и применить метод резолюции для того, чтобы найти противоречие между основными примерами дизъюнктов. Такая процедура, одна- однако, требует больших затрат времени. Более того, ее нельзя предста- представить в виде хорошо структурированного алгоритма, который можно было бы реализовать на компьютере. Таким образом, нам нужен более четкий с алгоритмической точки зрения метод, который мож-1 но использовать для компьютерного программирования. Процедура I унификации, к изучению" которой мы переходим [ChLe73, Dela87, Fitt9O, Lloy87, Thay88], как раз и предлагает необходимый метод | для определения противоречивости множества дизъюнктов. Унификация: неформальное описание В определении 2.2.19 мы ввели понятие подстановки. Пусть нам даны следующие дизъюнкты: С,: {P(f(x),y),Q(a,b,x)} С2: Мы хотим применить резолюцию к Сх и С2, подставив вместо х терм g(c) и вместо у — терм g(d). Для этого нам необходимо 1) проверить, можно ли применить резолюцию к С, и С2, и 2) найти подходящую подстановку, допускающую резолюцию. Такую проверку и вычисление подстановки осуществляет алго- алгоритм унификации. Посмотрим, как этот алгоритм унифицирует С, и С2. Шаг 1. Мы начинаем сравнивать соответствующие термы дизъ- дизъюнктов слева направо, пока не встретим первые термы с одинако- одинаковыми функциональными символами, которые различаются перемен- переменными или константами. Мы создаем множество, состоящее из этих термов, называемое множеством рассогласования. Для Сх и С2 первым множеством рассогласования будет {х, д(с)}. Шаг 2. Для каждой переменной множества рассогласования мы проверяем, встречается ли она в каком-нибудь другом терме этого же множества. Ш а г 3. Если на предыдущем шаге получен положительный ответ, то дизъюнкты не унифицируемы, и применение алгоритма оканчи- оканчивается неудачей. Если ответ отрицательный, мы осуществляем под- подстановку вместо переменной из множества рассогласования терма из этого же множества. Для С, и С2 мы применяем подстановку в1 = {х/д(с)}. В результате С, и С2 принимают вид ¦1 ¦ C? = {P(f(g(c)),y),Q(a,b,x)} 1(i г" - Г Ш а г 4: Мы продолжаем двигаться направо, снова выполняя пунк- пункты 1-3. Новым множеством рассогласования будет {у, g(d)}. При-, меняем подстановку {y/g(d)} и получаем C? = {P(f(g(c)),g(d)),Q(a,b,x)} : *' с?=с2. Очевидно, мы можем применить резолюцию к дизъюнктам С,2 и С22. В конце концов, алгоритм заканчивает свою работу, выдавая в ка- качестве ответа множество подстановок, позволяющих унифициро- унифицировать С, и С2 и затем применить к ним правило резолюции для
144 Глава 2. ЛОГИКА ПРЕДИКАТОВ PL. Это множество подстановок называется общим унификатором (ОУ) дизъюнктов. Для С, и С, общим унификатором является мно- множество в = {х/д(с), y/g(d)}. Если дизъюнкты не могут быть унифи- унифицируемы, алгоритм останавливается на шаге 2. , Унификация: формальное описание л» Далее мы представим формальное описание алгоритма унифика- унификации и необходимые для этого определения. Определение 2.9.2 (множество рассогласования). Пусть 5 = {С,, С2,..., Сп} — множество дизъюнктов. Множество DS(S) = = {?,, 4) • • ч tn | ?,,...,?„ — первые слева термы, стоящие на соот- соответствующих местах в дизъюнктах С,,..., С„, среди которых есть по крайней мере два различных } называется множеством рассо- рассогласования S. О 2.9.2 Множество рассогласования не определяется однозначно, оно за- зависит от порядка следования атомов в дизъюнктах. В примере 2.9.1 мы имеем = {Q, С2} = x), у), Q(a, Ь, х)}, Первыми слева различными термами в атомах P(f(x), у) и P(f(g(c)), g(d)) являются х и д(с), таким образом, первым мно- множеством рассогласования будет DSi = {х, д(с)}. После применения подстановки 0, = {х/д(с)} возникает несоответствие между термами у и g(d), и следующее множество рассогласования, определяемое рассматриваемым алгоритмом будет иметь вид DS2 = {у, g(d)}. Определение 2.9.3. Пусть X = {<т,, а2,..., ап} — множе- множество атомов или термов. Подстановка в называется унификатором для X, если <7,0 = <720 = ... = сгп0. D 2.9.3 Определение 2.9.4. Унификатор в называется наиболее общим унификатором (коротко НОУ), если для любого другого унификатора ф существует подстановка j такая, что %р = &у.О 2.9.4 Для множества термов или атомов S наиболее общий унификатор определяется единственным образом [Lloy87]'). Пр и м е р 2.9.5. Рассмотрим множество атомов S = = {Q(g(x), w), Q(y, b)}, где b — константа. Унификатором для S является подстановка Если подстановку гр применить к множеству S, получатся следую- следующие основные примеры: Q(g(x), т)гр = Q(g(b), Ь) Q(y, Ь)ф = Q(g(b), Ъ). § 2.9. УНИФИКАЦИЯ И РЕЗОЛЮЦИЯ В ЛОГИКЕ ПРЕДИКАТОВ 145 Если мы теперь положим -у — {х/b} и в = {у/д(х), w/b}, мы можем легко показать, что ip = &у. Кроме того, подстановка в унифицирует рассматриваемые атомы. Таким образом, в является наиболее общим унификатором. ? 2.9.5 Пример 2.9.6. Рассмотрим множество термов C = {f(x,g(x)),f(h(y),g(h(y)))}. Подстановка гр = {x/h(g(c)), y/g(c)} является унификатором С. Подстановка в = {x/h(y)\ также является унификатором С. Если мы положим 7 = {у/с}, легко доказать, что гр = 9у, а также что в — наиболее общий унификатор. D 2.9.6 Теперь мы можем перейти к формальному описанию алгоритма унификации. Алгоритм 2.9.7 (алгоритм унификации). .л Пусть Т = {Рр Р2,..., Рп} — множество атомарных формул. х Шаг 0. в0 = Е (тождественная подстановка) Шаг к . Мы уже построили подстановки в0, 9и ..., вк. ]t Шаг fc + 1 (рекурсия). , 1) Если Р]в,в2...вк = Р2в]в2...вк = ... = Рпв]в2...6к, алгоритм за.' канчивает работу, выдавая в — в1в2...вк в качестве наиболее общего, унификатора. 2) Если Pi 0, в2... вк Ф Р}; 0, в2... вк для некоторых г, j, тогда * а) строим множество рассогласования б) осуществляем проверку вхождений переменных, т. е. проверя-* ем для каждой переменной v ? DSk, содержится ли она в каком-либо1 другом элементе DSk. Если ПВ дает положительный ответ, мы останавливаемся и дела-* ем заключение, что множество Г не унифицируемо. Если множе->> ство DSk вообще не содержит переменных, ПВ также дает положи- положительный ответ. Если DSk содержит переменную v и терм t, и ПВ дает отрицательный ответ, мы полагаем вк + 1 = {v/t}, избавляясь таким образом от несоответствия между Ри ..., Рп в термах v, t. Шаг к + 2 . Мы повторяем шаги к + 1, к + 2 для к = к + 1. Теорема 2.9.8 показывает, что если Г унифицируемо, то алго- алгоритм останавливается, выдавая в качестве ответа наиболее общий унификатор: НОУ0 = 0Д...0т ? 2.9.7 ') Это утверждение вообще говоря неверно. Например, атомы Р(х) и Р(у) имеют^ по крайней мере, два различных НОУ 0] = {х/у} и в2 = {у/х}. — Прим. перев. Доказательство указанной теоремы не рассматривается в этой книге, но его можно найти в [Robi65, ChLe73].
146 Глава 2. ЛОГИКА ПРЕДИКАТОВ Теорема 2.9.8 (Дж. А. Робинсон). Применение алгоритма унификации к множеству атомов Т — {Ри Р2,..., Рп} дает сле- следующий результат: если Т унифицируемо, то алгоритм останавливается, выда- выдавая в качестве ответа НОУ множества Т; если Т не унифицируемо, то алгоритм останавливается, объ- объявляя, что унификатора не существует. ? 2.9.8 Теорема утверждает, что если Г унифицируемо, алгоритм унифи- унификации останавливается, определяя именно НОУ (а не произвольный унификатор) множества Т. Пример 2.9.9. Дано множество формул: л. ] S = {Q(a,x,f(g(z))),Q(z,f(y),, Определить, унифицируемо ли 5. Если да, найти НОУ. Л". / Шаг 0: Полагаем в0 = Е ! м/ ¦ Шаг 1: S& = S :'Г'""" ''*''' А ,М "П '' ?>, w ншжп м ПВ негативна Полагаем 0, = {z/a} ,2: ЭД ={Q(a, x, f(g(a))), Q(a,/ DS(See) {} ПВ негативна Полагаем 92 = {x/f(y)} A) = DS3 = {g(a),y} ^^ ПВ негативна w Полагаем в3 = {у/у(а)} 4: , 5 унифицируемо и его НОУ имеет П 2.9.9 Пример 2.9.10. Дано множество формул: § 2.9. УНИФИКАЦИЯ И РЕЗОЛЮЦИЯ В ЛОГИКЕ ПРЕДИКАТОВ 147 Определить, унифицируемо ли 5. Если да, найти НОУ. «Ir'x kfM Шаг 0: %.во = Е У- ,и • i*! ¦> •: :> fUj ш"' Шаг 1: i:Se0 — S i> ^чл'лпз--,ч. -.. • ол.-.:<к^иг 'т$ > Г * ПВ негативна v)f, ; : Полагаем 0,= Шаг т ? ПВ позитивна, z встречается в /(г), w Следовательно, 5 не унифицируемо. D 2.9.10 Здесь мы должны заметить, что во многих приложениях в целях большей эффективности процедура поиска вывода ПРОЛОГа, осно- основанная на алгоритме унификации, не осуществляет проверку вхож- вхождений. Другими словами, она подставляет первый терм из текущего DS вместо первой переменной из этого множества. Это, конечно, может привести к неверным результатам, поэтому программисту приходится создавать в программе соответствующие средства за- защиты для избежания таких ошибок. Теперь мы можем весьма просто описать метод резолюций для PrL. Метод резолюций для PrL . • .(B.;i:.E Метод резолюций для PrL фактически представляет собой ком- комбинацию алгоритма унификации для PrL и метода резолюций для PL. Точно так же, как в PL (определение 1.9.17), для множест- множества дизъюнктов PrL 5 резолютивный вывод из S есть конечная последовательность дизъюнктов С,,..., Сп такая, что для каждого С, (l^i^n) либо с; € 5, либо С„ е R({Cp CJ) A ^ j, k ^ i), где Я({Ср Ск}) — множество резольвент С- и Ск. Отметим здесь, что поскольку переменные во всех дизъюнктах считаются связанными кванторами всеобщности, мы можем пере- переименовать эти переменные, чтобы избежать конфликтов во время процедуры унификации. Такое переименование называется норма- нормализацией переменных. Рассмотрим пример. • Пример 2.9.11. Пусть даны следующие дизъюнкты: )Р()} "?¦ "' («, v),P(v,u)}.
148 Глава 2. ЛОГИКА ПРЕДИКАТОВ Мы хотим сделать заключение С3 = {-Р(х, у), z, у), Р(х, z)}. Соответствующее обозначение для Сх, С2 и С3 в контексте PrL ет вид (Vx)(Vy)(Vz)[P(x,y)AP(y,z)-»P(x,z)] для С, .,',.'.. (Vu)(V«)[P(«,t;)-»P(w, u)] для С2 .,' ¦• '/.^ (Vx)(Vy)(Vz)[P(x,y)AP(z,y)^P(x,z)] для С, Метод I. Мы работаем непосредственно в контексте PrL. Дизъюнкты Сх, С2 и С3 эквивалентны предложениям (Vx) (Vy) (Vz)bP(x, у) V ^Р(у, z) V P(x, z)] ..'. л НОДЗг». .'Ж.:./ ?Ш • (Vu) (Vu)[->P(U, t>) V P(t>, u)] « йГЗЭД ом.. or, (Vx) (Vy) (Vz)[-.P(x, y) V iP(z, y) V P(x, z)] Й9Ша Проводим переименование переменных предложения BJ| gH (vx)(v,)hP(x,,)vp(,)x)] H;^:^m "".H КПД fri '*/>-' -¦'».'»na' 00 По теореме 2.3.6 из D) получаем *\ * (Vx) (Vy) (Vz)bP(x, 2) V P(z, x)] * Конъюнкция A) и E) по теореме 2.3.6 дает (Vx) (Vy) (Vz)[(-.P(x, z) V P(z, x)) A A(-.P(x,tf)V-.P(ftz)VP(x, и по формуле pOr HVB)A(AVC)^(BVC) ,№ВД выводимой в PrL (почему?), мы преобразуем F) к виду ч'^:я- (Vx) (Vy) 0/z)[(P(z, x) V -Р(х, у) V ^Р(у, z)], ..^^.} Проводим переименование переменные предложения способом: (Vx)(Vz)hP(z,x)VP(x,z)], и по теореме 2.3.6 из (8) получаем ./¦¦ )\^P{z, x)V z}\, A) B) C) D) E) (*) G) Ко»1ЫЙЮсция (9) и G) согласно (*) дает (Vx) (Vy) (Vz)hP(x, У) V -,Р(у, § 2.9. УНИФИКАЦИЯ И РЕЗОЛЮЦИЯ В ЛОГИКЕ ПРЕДИКАТОВ 149 Проводим переименование переменных в предложении B): (Vy)(Vz)bP(z,y)VP(y,z)] A1) По теореме 2.3.6 из A1) получаем (Vx) (Vy) (Vz)[-.P(z, у) V Р(у, z)] A2) Конъюнкция A0) и A2) согласно (*) дает (Vx) (Vy) (Vz)hP(x, у) V -,P(z, у) V Р(х, z)}, что и является искомой формулой. Метод II. Построим вывод дизъюнкта С3 методом резолюций: (DC * ,> C) {->Р(х, z), P(z, x)} из B), подстановка {и/х, v/z} D) {->Р(х, у), -^Р(у, z), P(z, х)} из A) и C), резолюция E) {-<P(z, x), P(x, z)} из B), подстановка {u/z, и/х} F) {->Р(х, у), ^Р(у, z), P(x, z)} из D) и E), резолюция G) {->P(z, у), Р(у, z)} из B), подстановка {u/z, v/y} (8) С3 из F) и G), резолюция Метод II представляет собой более механистическую процедуру, которая, несомненно, быстрее и эффективнее, чем метод I. Метод III. Вывод также может быть представлен в виде пе- перевернутого дерева, корнем которого является С3. Дизъюнкты, вы- выбранные для резолюции, расположены в одном ряду, их переменные} нормализованы. Применяемая унификация обозначена около ветви- дерева, и атомы, к которым применяется резолюция, подчеркнуты. = С, х, у), у, z), P(z,x)} bP(n,v), P{v, и)} = I \ I{n/z,v/x} {-,P(x,y)^P(y,z),P(x,z)} (H Эта процедура, представленная деревом и также позволяющая вы- вывести дизъюнкт Сг, используется в языке ПРОЛОГ. $дшн i ? 2.9.11
150 Глава 2. ЛОГИКА ПРЕДИКАТОВ Динамизм ПРОЛОГа и эффективность логического программиро- программирования в целом в области символических вычислений, не вызывает сомнений. В третьей главе дается более подробное изложение основ ПРОЛОГа. Замечание 2.9.12. Метод резолюций фактически является развитием и упрощением соответствующих методов работы с ло- логикой предикатов. Следовательно, если предложение а логики PrL выводимо методом резолюций из множества S предложений PrL (сокращенно S г-д о), то а выводима из S по определению 2.3.8. Формально: S Ья а =Ф- S Ь о. Обратное, однако, также выполняется для любого множества дизъ- дизъюнктов S: 1 5 Ь а =» S \-R a > D 2.9.12 Теперь обратимся к результатам о корректности и полноте рас- рассмотренных ранее методов. , ,, § 2.10. Корректность и полнота исчислений логики предикатов ,1(_( <¦ Мы приведем здесь результаты, касающиеся полноты и коррект- корректности систем вывода для PrL так, как мы это делали для PL. Дока- Доказательства этих фактов очень похожи на соответствующие доказа- доказательства для PL, их можно найти в [ChLe73, Meta85, Smul68]. Корректность и полнота метода семантических таблиц Запись \-в о будет означать, что предложение а выводима по Бе- Бету, а запись (= о — то, что предложение о общезначимо. Сформу- Сформулируем вспомогательную лемму, а также теоремы корректности и полноты исчисления Бета. Лемма 2.10.1. Пусть R —п-местный предикатный сим- символ языка С, и а —предложение С. Предположим, что сущест- существует непротиворечивая ветвь х в систематической таблице с корнем -фа. Построим интерпретацию А следующим образом. В качестве области интерпретации возьмем произвольное множе- множество {а1( U2,...} — А, элементы которого находятся во взаимно- взаимнооднозначном соответствии с символами констант языка С. Ин- Интерпретация каждой константы ct есть элемент а, = е(с(). Определяем отношение e(R) С Ап: (a^, а^,..., а{ ) ¦» tR(ct, с^,..., с{ ) —вершина ветви х. Тогда а) если fa является вершиной ветви х, то предложение а ложно в интерпретации А; § 2.10. ПОЛНОТА ИСЧИСЛЕНИЙ ЛОГИКИ ПРЕДИКАТОВ 151 б) если to является вершиной ветви х, то предложение а истинно в интерпретации А. О 2.10.1 Теорема 2.10.2 (полнота исчисления Бета). Если предложе- предложение а является следствием множества предложений S, то оно выводимо по Бету из 51): S\=a^S\-Ba D 2.10.2 Если предложение а общезначимо, то о D 2.10.3 Следствие 2.10.3. оно выводимо по Бету: F= Определение 2.10.4. Интерпретация А языка С согласу- согласуется с ветвью х семантической таблицы, если а) to является вершиной х =*- А |= а, б) fa является вершиной х=$~Ау^о. D 2.10.4 Лемма 2.10.5. Пусть Т—замкнутая систематическая таблица с корнем fa, и А — сужение интерпретации языка С на множество символов констант, входящих в предложение а, та- такое что A\=-io. Тогда существует по крайней мере одна ветвь таблицы Т, которая согласуется с некоторым расширением А. О 2.10.5 Теорема 2.10.6 (корректности исчисления Бета). Если пред- предложение а выводимо по Бету из множества предложений S ло- логики предикатов, то а является следствием S: S\- в ¦S\=a ? 2.10.6 Следствие 2.10.7. Если предложение а выводимо по Бету, то оно общезначимо: \-ва=>\=а ? 2.10.7 Теорема 2.10.8 (компактности). Множество предложений S выполнимо тогда и только тогда, когда каждое конечное под- подмножество S выполнимо. ? 2.10.8 Корректность и полнота исчисления резолюций Теорема 2.10.9 (корректности исчисления резолюций). Пусть S—множество дизъюнктов, и R*(S)—множество ре- резольвент S. Если множество R*(S) содержит пустой дизъ- дизъюнкт, то S невыполнимо: DeR*(S)^S невыполнимо 1чй' D 2.10.9 1) То есть существует такой порядок выбора неиспользованщр! вершин в неде- недетерминированной процедуре построения семантического дерева, Цвй котором будет построена замкнутая таблица. — Прим. перев.
152 Глава 2. ЛОГИКА ПРЕДИКАТОВ Лемма 2.10.10. Если С[ и Q являются основными приме- примерами дизъюнктов С, и С2, а С есть резольвента С[ и С2', тогда существует резольвента С дизъюнктов С, и С2 такая, что С является основным примером С. О 2.10.10 Теорема 2.10.11 (полнота исчисления резолюций). Пусть S — множество дизъюнктов, и R*(S) — множество резоль- резольвент S. Если S невыполнимо, то множество R*(S) содержит пустой дизъюнкт: S невыполнимо =» D D2.10.11 Содержательное истолкование этой теоремы имеет следующий вид. Чтобы доказать выполнимость или невыполнимость предложе- предложения методом резолюций, достаточно вывести пустой дизъюнкт из соответствующего множества дизъюнктов. В частности, если дано непротиворечивое множество дизъюнктов S, и мы хотим вывести предложение у>, то мы применяем метод резолюции к множеству дизъюнктов S U 5", где 5" соответствует -пр. Если мы получим пу- пустой дизъюнкт, противоречивость будет следствием предположения -чр, следовательно, мы докажем, что предложение *р общезначимо. Пример 2.10.12. Пусть задано множество хорновских дизъ- дизъюнктов из примера 2.4.7. Нужно с помощью метода резолюций най- найти ответ на следующие запросы: ,,р» , . ,* ,,х*м«*»лй1доц!П -X! а) «Что может украсть Питер?»; б) «Может ли Питер украсть Мэри?». 1V' "*>,'¦' ";\14 ' " Решение: Мы записываем данные хорновскив дазъюнкты и за- запросы в теоретико-множественной форме. Таки#«вМзом, получаем следующее множество хорновских дизъюнктов:!?) * Т С,: {вор(Питер)} С2: {любит(Мэри, шоколад)} ": V.V..,, С3: {любит(Мэри, вино)} *^w*,;-w;лит« .rj С4: {любит(Питер,деньги)} ;> t/h, А' ¦¦';¦.¦" С5: {любит(Питер, х), ->любит(х, вино)} С6: {может_украсть(х, у), ->вор(х), ->любит(х, i/)} Запросы принимают следующий вид: С7: {-1Может_украсть(Питер, х)} i ч: У« г >¦ Cg.- {-1Может_украсть(Питер, § 2.10. ПОЛНОТА ИСЧИСЛЕНИЙ ЛОГИКИ ПРЕДИКАТОВ 153 Тогда: ft а) 1.3; -'Ч I I '< " »•: /i/Питер 'Я^И?^'»1 } \ { \ I } у/деньги Другими словами, имея в начале отрицание запроса, мы получи- получили пустой дизъюнкт. Следовательно, С7 не является справедливым требованием. Более того, в предыдущем выводе определяется зна- значение переменной у, тем самым, мы получаем ответ у — деньги на запрос (а), означающий, что Питер может украсть деньги. . i-pq <^7 ft; \ {-iBop(Ibnrep), -даобит(Питер, у)} ¦'¦¦Ж? С» / i/Питер {->любит(Питер, у)} \ / у/деньги .4*- Таким образом, из С8 можно также вывести пустой дизъюнкт. Следовательно, Питер может украсть Мэри! D 2.10.12 Замечание 2.10.13. Если во время выполнения процеду- процедуры резолюции алгоритм унификации не может найти наиболее об- общий унификатор, другими словами, мы не можем вывести ? из наших данных, то цель называется неуспешной. В противном слу- случае, цель называется успешной (замечание 1.9.9). В частности, цель «может.украсть(Питер, Мэри)» из примера 2.10.12 является успеш- успешной. D 2.10.13 Полнота аксиоматического исчисления Доказательство следующей теоремы о выводе в аксиоматической системе выходит за рамки этой книги. Его можно найти, например, в [Klee52, Mend64, Rasi74, RaSi70].
154 Глава 2. ЛОГИКА ПРЕДИКАТОВ Теорема 2.10.14 (полноты и корректности аксиоматического исчисления, Гёдель, 1930 г.). Формула ц> логики предикатов вы- выводима из множества S предложений PrL тогда и только тогда, когда ц> является следствием S. Формально: S \- ч> <=> S f= U 2.10.14 Следствие 2.10.15. Формула ц> выводима из аксиом PrL тогда и только тогда, когда ц> общезначима. Формально: \- D 2.10.15 (¦:¦ § 2.11. Проблема разрешимости логики предикатов Многие математические задачи являются частным случаем неко- некоторой общей схемы и поэтому могут быть решены посредством при- применения обобщенной процедуры к конкретной задаче. Например, мы можем ответить на вопрос «делится ли полином /(х) на полином д(х)}* с помощью алгоритма деления, пытаясь разделить конкретный по- полином /(х) на конкретный полином д(х). Если остаток от деления равен нулю, ответом на вопрос будет «да». Если остаток отличен от нуля, ответом будет «нет». Определение 2.11.1. Метод, позволяющий ответить «да» или «нет» на произвольный частный случай общего запроса, называ- называется разрешающей процедурой. Задача нахождения такого метода для некоторого общего запроса называется проблемой разрешимо- разрешимости для этого запроса. П 2.11.1 Многие проблемы разрешимости в математике или не могут быть решены в общем виде, или имеют только частные решения, то есть могут быть решены при выполнении некоторых условий. Одной из таких проблем является проблема разрешимости для произвольной логики L. Логика L определяется своим языком, который состоит из логических и специальных символов, а также аксиомами и пра- правилами, с помощью которых мы можем выводить и анализировать i правильно построенные предложения логики L. Определение 2.11.2. Проблема разрешимости для логики L состоит в нахождении алгоритмической процедуры, с помощью ко- которой мы можем решить для каждого правильно построенного пред- предложения логики L, выводимо оно в L или нет, другими словами можно ли его доказать в L или нет. D 2.11.2 § 2.11. ПРОБЛЕМА РАЗРЕШИМОСТИ ЛОГИКИ ПРЕДИКАТОВ 155 Проблема разрешимости в логике высказываний решается с по- помощью таблиц истинности: если нам дано высказывание А, мы стро- строим таблицу истинности А и проверяем, является ли А тавтологией. Если высказывание А есть тавтология, то по следствию 1.12.2 А выводимо в PL; если же А не является тавтологией, то оно не вы- выводимо в PL. Следовательно, справедлива следующая теорема: Теорема 2.11.3. Проблема разрешимости для PL имеет положительное решение. ? 2.11.3 Не так проста ситуация в PrL. По следствию 2.10.15 мы знаем, что формула <р языка С логики предикатов выводима тогда и только тогда, когда ц> общезначима, т. е. истинна во всех интерпретациях языка С. Однако, число интерпретаций языка С бесконечно, и мы, конечно, не в состоянии все их проверить. Следующая теорема из- известна с 1936 года [Chur36, Turi37]. Теорема 2.11.4. Проблема разрешимости для PrL не име- имеет решения. Другими словами, не существует алгоритмической процедуры, позволяющей определить, выводима данная формула PrL или нет. D 2.11.4 Хотя проблема разрешимости для PrL не может быть решена в общем виде, для некоторых частных случаев существуют решения [Klee52, Chur56]. Теорема 2.11.5. Проблема разрешимости имеет реше- решение для формул в предваренной нормальной форме, в которых все кванторы существования следуют за кванторами всеобщ- всеобщности. Иначе говоря, существует алгоритмическая процедура, позволяющая определить, выводима формула вида (Ух,)... (y >j3)(З) ;; ;'/ \ только v только з "¦«' х ? >п, или нет. •> t iidH-^вця п 2.11.5 Теорема 2.11.6. Проблема разрешимости имеет решение для всех формул, содержащих только предикаты, степень кото- которых не превосходит единицы, т. е. ноль-местные и одноместные предикаты. D 2.11.6 В [Chur56] приведена аналитическая таблица, представляющая все известные частные решения проблемы разрешимости для PrL. Наряду с попытками найти частные решения проблемы разреши- разрешимости для PrL, определенные усилия были затрачены на решение проблемы выполнимости формулы PrL, то есть на поиск алгоритми- алгоритмической процедуры, позволяющей определить, выполнима ли данная формула PrL или нет. Теоремы 2.6.6 (Лёвенгейм, Сколем), 2.7.7 и 2.10.6 утверждают, что проблема выполнимости для PrL имеет ре- решение в частных случаях, и. iv:|«<.VfMj>h? . :u.
156 Глава 2. ЛОГИКА ПРЕДИКАТОВ §2.12. УПРАЖНЕНИЯ 157 § 2.12. Упражнения :1 2.12.1. Определите, чем являются следующие выражения: терм^- 1*и, формулами или ни тем, ни другим: а) Майкл; е) (Ух) [число(х) Л х = х + х]; ?j ; ж) =[+(х + у), z] з) (х + у) + з2; -' и) лучшая книга; т к) ненавидит(х, у) f б) математик (х); в) число F); .# г) является-планетой (ж); ™д)C+1) + 10; ^Решение. ,.. а) терм; ш б) формула; в) формула; г) формула; д) терм; i е) формула; ж) формула; з) терм; и) ни то, ни к) формула. 2.12.2. Найдите свободные вхождения переменных в следующих формулах: „. /v.-.'oi^»_<s ¦ ¦ б) Q(z) -* -.(Vx)(Vy)P(x, у, о V. в) (Vx)P(x)A(V2/)Q(x) У). Решение. а) у, х (х также имеет связанное вхождение); б) z; в) х. 2.12.3. Найдите свободные вхождения переменных в следующих формулах. Какие из этих формул — предложения? a) (Vx)(Vy)(Vz) [х > у Л у > z] -> (Зги) [w > w]; ^ б) (Зх) (красный (х)) V [(Уу)голубой (у) V желтый (ж)]; t ' в) х + х — х + х; и г) (Зу)[х + х = х + х]; ,(|| д) (Зх)Cу) [учитель(х, у) А учитлредмету (х, у, z)]. aNj Решение, а) Свободных вхождений нет. Формула является предложением. б) Переменная х имеет свободное вхождение во вторую дизъюнк- дизъюнктивную подформулу. в) Переменная х имеет свободное вхождение. г) Переменная х имеет свободное вхождение. д) Переменная z имеет свободное вхождение. 2.12.4. Используя арифметический символ «<* (меньше) и язык логики предикатов, сформулируйте следующие фразы: и. .< •?! 1 а) Существует число х, меньшее, чем 5 и большее, чем 3.^' б) Для любого числа х существует число у, меньшее х. н в) Для любого числа х существует число у, большее х. i:" г) Для любых чисел х и у, суммы х + у и у + х равны. ^ д) Для любого числа х, существует такое число у, что для любо- любого z, если разность z — 5 меньше, чем у, то разность х — 7 меньше 3. Решение. Введем функции —(х, у) и +(х, у), выражающие раз- разность и сумму х, у, и предикат «число (х)», обозначающий, что х является числом. Тогда предложения запишутся следующим обра- образом: а) (Зх)[число (х)Л < (х, 5)Л < C, ж)]; б) (Ух)Cу)[число (х) Л число (у)Л < (у, ж)]; в) (Ух)Cу)[число (х) Л число (у)Л < (х, у)]; ^ж « г) (Ух)Cу)[(число (х) Л число (у)) ->= (+(х, у), +(у, ж))]; ц ,} q д) (Ух)(Зу)(Уг)[число (х) А число (у) А число (z)A <в f1 w Л (<(-(*, 5), у)-<(-(*, 7), 3))]. 2.12.5. Пусть в, ф, ? —подстановки, Е —тождественная подста- подстановка, и а — атомарная формула. Докажите, что а) $Е = Ев = в; б) (ав)ф=а(9ф); Решение. б) Пусть в = {ujsu ..., um/smfj ф , ... .. .,vn/tn}. Сначала докажем, что для всех термов Т верно СИШГСтво Доказательство проведем индукцией по длине т. 1. Если т — константа, тогда (*), очевидно, справедливо. " ' 2. Если г — переменная х, то а) если х${щ,..., um} U {и,,..., vn}, тогда х(вф) = х = (хв)ф; б) если х е {и,,..., ит}, то существует 1 ^ i ^ m такое, что в) если х е {vu ..., «„} - {щ,..., ит}, то существует 1 ^ j ^ п такое, что (хв)гр =югф = х(&ф). 3. Если т — это терм f(tv...,tk), тогда (*) справедливо по пред- предположению индукции и по определению 2.2.19. Тогда если a — атом, то по свойству (*) и определению 2.2.19 (почему?) верно (ав)ф = а(&ф). 2.12.6. Определите, какие из следующих пар формул являются вариантами: (, ,лк-т ;.АШ;" ¦ - ¦ ь '•/' . ,,, .,
158 Глава 2. ЛОГИКА ПРЕДИКАТОВ 1. -. (¦ , ¦¦•(. а) Р(/(х, у), g(z), а) и P(f(y, х), д(и), а); , , ,, б) Р(х, х) и Р(х, у). , Решение, а) да (почему?); б) нет (почецу?)., 2.12.7. Докажите, что а) если free(х, а, А), то Н А(х/а) —> (Эх)А; , б) b(Vx)A->A; /в) ЬА->(Зх)А; ' %[] '\ *У ' ' ' -«г) h(Vx)A->Cx)A; ' "-' <>-" ' '. > i "' е) h (Vx)(Vy)(x = у -> у = х); ¦ >>sv Atx) онум-Ц ж) Ь (Vx)(Vy)(Vz)[(x = yA» = z)-x=z]. i; Решение, а) Если free(x, а, А), То /гее(х, в^-чА ме 4 верно заключение Затем по аксиоме 3 и правилу Modus Ponens получим, что Формула -i-iA <-> А является тавтологией. Из замечания 2.3.4D) и теоремы о подстановке эквивалентных формул следует, что Тогда также !' б) По аксиоме 4, так как free(x, а, А). •< .; ; ; г) Ввиду в) верно h А -> (Зх)А, а ввиду б) Ь (Vx используя тавтологию, мы получим h(A- (Зх)А) -¦ [((Vx)A -¦ А) -> ((Vx)A -»Cx)A)]. Двухкратное применение правила Modus Ponens приведет нас к же- желаемому результату. е) Пусть А — это формула х = у. Тогда по а) имеем Ь х = х-> (Зу)(х = у). f!MJ § 2.12. УПРАЖНЕНИЯ 159 По аксиоме 6, замечанию 2.3.7 и правилу Modus Ponens мы по- получим, что Ь (Зу)(х = у). Тогда по правилу обобщения верно h(Vx)(Vy)(x = y). е) По аксиоме 7 мы имеем ;{Ь:,Л ,s h х = у —¦ (х = х —> у — х). и "-;'',, Применим тавтологию , что даст нам hx = x—>(x = y—* у = х). По аксиоме 6 и правилу Modus Ponens мы получим I- х — у -* у = х. Двукратное применение правила Modus Ponens приведет нас к цели. ж) По аксиоме 7 имеем у = а по е) йгдайд*'^ Применим тавтологию что даст нам .(>• * «н;'- #«"**¦ l Затем три раза применим правило Modus Ponens. 2.12.8. Определите теоретико-множественную утверждений. а) Джон любит еду. .-" б) Яблоки - это еда. -. в) Цыплята — это еда. (}ч • г) Все, что можно съесть и при этом не умереть, — это еда. д) Билл ест и все еще жив. е) Мэри ест все, что ест Билл. Решение. Введем следующие предикаты: Любит(х, у) — х любит у; Пища(х) — х является едой; Ест(х, у) — х ест у; Живет(х) — х жив. Тогда а) Утверждение выражается формулой (Ух)[Пища(х) —у Любит(Джон, х)]<-> ¦¦>¦'<'* '' <-» (Ух)[-Лища(х) V Любит(Джон, х)]. " *й
160 Глава 2. ЛОГИКА ПРЕДИКАТОВ мни т Множество S = {{-¦Пища(х), Любит(Джон, х)}} — ее теорети- теоретико-множественная форма. /, б) Пища(Яблоки). Следовательно, S — {{Пища(Яблоки)}}. г) Утверждение можно записать формулой (Vx)(Vy)[Eer(x, у) ЛЖивет(х) -> Пища(у)]<-> <-+ (Vx)(Vy)[-iEcT(x, у) V -Живет(х) V Пища(у)].'' Следовательно, S — {{-iEct(x, у), ->Живет(х), Пища(у)}}. 2.12.9. Предположим, что драконы существуют на самом деле, и мы поймали одного из них. Запишите следующие предложения, данные на обыденном языке, в виде хорновских дизъюнктов. а) Всякий дракон, живущий в зоопарке, несчастен. б) Всякое животное, встречающееся с вежливыми людьми, счаст- счастливо. в) Все люди, посещающие зоопарк, вежливы. г) Животные, живущие в зоопарке, встречаются с людьми^лосе- щающими зоопарк. Решение. Введем следующие предикаты: Дракон (х): х — это дракон; \ у' <, Я Человек (х): х — человек; „,,,.' '. ¦., ., Счастлив (х): х счастлив; Живет (х, у): х живет в у; Животное (х): х является животным; Вежливый (х): х вежлив; Посещает (х, у): х посещает у; Встречает (х, у): х встречается с у. Тогда а) <— Дракон(х), Счастлив (х), Живет (х, Зоопарк); б) Счастлив(х) <— Животное (х), Человек (у), Вежливый Встречает (х, у); в) Вежливый (х) <— Человек (х), Посещает (х, Зоопарк); г) Встречает (х, у) <— Животное (х), Человек (у), Живет (х, Зоопарк), Посещает (у, Зоопарк). 2.12.10. Сформулируйте следующие высказывания, данные на обыденном языке, в виде хорновских дизъюнктов. а) х — мать у, если х-,— женщина и родитель у. ,A б) х — отец у, если х — мужчина и родитель у. /) \ в) х — человек, если его родитель — человек. „yr/ М it i §2.12. УПРАЖНЕНИЯ 161 г) х — человек, если отец х — человек. (,н. :''" Щ} Л д) Никто не родитель самому себе. (¦.-, -.:! ,>. \ 2.12.11. Пусть у нас есть два пустых сосуда в 5 и 7 литров. Мы хотим найти последовательность действий, которая приведет к тому, что в семилитровом сосуде будет ровно 4 литра воды. Разрешены только два действия: 1) наполнить сосуд; 2) переливать воду из одного сосуда в другой, пока один из них не будет полон или пуст. Сформулируйте задачу и разрешенные действия с помощью хор- хорновских дизъюнктов. i Решение. Введем предикат , Содержат (и, v): 7-литровый сосуд содержит и датров, а 5-литровый — v литров. и Если мы предположим, что отношения x + y — z Шх ^ у уже опре- определены, то задачу можно выразить следующими мидложениями: С,: Содержат@,0) <— , . С2: <- СодержатD, у) <н С3: СодержатG, у) <— Содержат(х, у) С4: Содержат(х, 5) <— Содержат(х, у) Съ: Содержат@, у) <— Содержат(х, у) С6: Содержат(х, 0) <- Содержат(х, у) С7: Содержат@, у) <— Содержали, v), и + v = у, у ^ 5 С8: Содержат(х, 0) <— Содержат(и, и), и + v — х, х < 7 С9: СодержатG, у) <— Содержали, г>), u + v = w, 7 + у = w Сю: Содержат(х, 5) <— Содержали, v), u + v — w, 5 + х = w Предложение С, соответствует начальной ситуации, а С2 — наша цель. Предложения С3 и (^.обозначают соответственно наполнение первого и второго сосуда. Предложения С5 и С6 обозначают опусто- опустошение первого и второго сосудов, С2 и С8_— переливание воды, пока ^¦•'¦«••¦-i iL'i'.'iK" t- один из сосудов не будет пуст, а не наполнится. u8 — не и Сю — пока один из сосудов 2.12.12. Пусть С — {a, b, P} — некоторый язык логики предикатов, а Л — такая интерпретация ? на области D = {а, Ь}, что (а, а) и (Ъ, Ъ) принадлежат е(Р), а (а, Ь) и (Ь, а) не принадлежат е(Р). Определите, являются ли следующие формулы истинными в А: 6 Г. Метакиденс, А. Нероуд
162 Глава 2. ЛОГИКА ПРЕДИКАТОВ -г а) (Vx)Cy)P(x, у); б) Cx)(Vy)P(x, у); ¦f в)(Ух)(Зу)[Р(х,у)- г) (Vx)(Vy)P(x, у); д) (Зу)-Р(а, у); е) (Vx)P(x, х). Решение. Мы обозначаем факт (a, ЬNе(Р)С?J, приписывая значение t (истина) выражению Р(а, Ь), и факт (а, ЬL е(Р) С D2, приписывая значение / (ложь) этому же выражению. Тогда для за- заданной интерпретации мы можем использовать следующую таблицу значений предиката Р на области интерпретации: P(a, a) СЧ- P(a, b) f P(b,a) f P(b,b) СЧ- к а) Если x принимает значение а или b, то по таблице мы можем убедиться, что существуют такие значения у (а и b соответствен- соответственно), что предикат Р(х, у) имеет значение «истина». Таким образом, формула (Vx)Cj/)P(x, у) истинна в А. б) Формула ложна (почему?). :j ' ''•' '••¦ в) Построим таблицу, в которой даны значения подформул фор- формулы в) для всевозможных значений х и у: (х, (а, (а, (Ь, (Ь, У) а) Ь) а) Ь) (У, (а, (Ь, (а, (Ь, X) а) а) Ь) Ь) Р(х, У) сч- / / t t сч. сч. t Р(У, х) сч. / / / Следовательно, формула в) истинна в Л. г) Если х придать значение а, а у — значение Ь, то формула Р(х, у), очевидно, не истинна в Л. д) Формула ->Р(а, у) истинна, когда у принимает значение Ь. 2.12.13. Пусть дано предложение а: (Зх)Р(х) —> (Vx)P(x). а) Докажите, что предложение о всегда истинно в интерпретации, область которой состоит только из одного элемента. .„„ , б) Найдите интерпретацию с областью, состоящей из двук эле- элементов, в которой предложение а ложно. ¦'-'• §2.12. УПРАЖНЕНИЯ 163 Решение, а) Пусть А = ({а}, е(Р)) — любая интерпретация языка ? = {Р}, на котором выражена а. Тогда по определению 2.5.5 мы получим А \= (Зх)Р(х) -> (Ух)Р(х)^Д (= (Vx)P(x) или А ^ (Зх)Р(х) <ФД (= Р(а) или А (= -iP(a) <ФД(=Р(а)У-.Р(а). Но последняя дизъюнкция верна согласно тавтологии A V->A (см. замечание 2.3.4). б) Пусть {а, Ь} — область искомой интерпретации, причем а ф Ъ. Ложность предложения а в А предполагает, что А ^ (Vx)P(x) и А \= (Зх)Р(х). Построим следующую таблицу значений преди- предиката Р для а и Ь: Р{а) сч- Р(Ь) f В этой интерпретации предложение ст не истинно (почему?). 2.12.14. Найдите интерпретацию с областью, состоящей из двух элементов {a, bj, в которой предложение (Зх)(Зу)Р(х, у) было бы истинным, а предложение (Vx)Cj/)P(x, у) — ложным. 2.12.15. Пусть С = {А, си %,..., cj — это язык, где А — сим- символ двуместного предиката, а с,,..., % — константы; и пусть А = = ({1,2,..., 9}, /) — это интерпретация, где / — отношение дели- делимости, е(Д) = / и е(с^ = i, i = 1,..., 9. Определите, какие из сле- следующих выражений истинны в заданной интерпретации1). Ответ ар- аргументируйте. а) (Vy)A(c,, у); в) (Зх) (Vj/)A(x, у); б) (Vx)[A(x, с5) <-+ (х = е,) V (х = с5)]; г) (Зх) (Vy)A(y, x). и Решение. По определению 2.5.5 мы получим а) истинно (почему?); в) истинно (для какого х?); б) истинно (почему?); г) ложно (почему?). 2.12.16. Пусть ? = {<,=,+,-, 0, 1} — это язык арифметики. а) Напишите на языке С предложение Р(х), которое в обычном математическом смысле интерпретируется как «х — простое чис- число». б) Используя Р(х) как предикат, выразите в языке С, что сумма двух простых чисел, отличных от 2, — четное число. Решение, а) Число х является простым тогда и только тогда, когда х и 1 —единственные делители х. Тогда: , ,^4, - , ,,ц> ') Выражение Д(х, у) интерпретируется как «у делится на ж» — Прим. перев.
164 Глава 2. ЛОГИКА ПРЕДИКАТОВ '{x = zAy=\)\; У = +A,1)))- и наС Р(Х) «-» (Vy)(V2)[(x = у-2)^(х = уЛ2=1) б) (Vx)(Vy)[(P(x) Л Р(у) А -*(х = +A, 1)) Л ¦ -> C,z)(+(x, у) = +B, Z))]. 2.12.17. Пусть дан язык логики предикатов С = {=, аксиом Е = {(Vx)[x ^ x], (Vx)(Vy)[(x ^ у) Л (у ^ х) - (х = у)], (Vx)(Vy)(V,z)[(x ^ у) Л (у <; г) - (х ^ г)\, v ' (Vz)(Vy)b(z = у) Л (х ^ у) -» (Vx)(Vy)[(x = у) V (х ^ у) V (у ^ х)]}. Определите такие две различные интерпретации Д, и А^ языка С, что Д, (= ? и .Aj ^ E. Решение. Первые три аксиомы из S вводят отношение упо- упорядоченности, четвертая утверждает, что упорядоченность плотна, а пятая — то, что упорядоченность полна. Мы знаем, что действи- действительные, рациональные и натуральные числа с обычным отношени- отношением порядка полностью упорядочены, и, более того, упорядоченность плотна для действительных и рациональных чисел, но не плотна для натуральных чисел (почему?). 2.12.18. Пусть Д, =(Q, е,(Р)) и A2 = {N, e2(P)) — две интерпре- интерпретации языка ? = {Р} логики предикатов, где ?,(Р) и е2(Р) — это обычные отношения порядка рациональных чисел Q и натуральных чисел N, где #(Д,) и в{А\) — соответствующие теории (см. опре- определение 2.5.10). а) Найдите два таких предложения сг, и сг2 языка С, что х (= сг, Л V (т. ¦'¦ I • • 2- б) Определите, какие из следующих предложений истинны, и аргументируйте ответ. Решение, а) По определению 2.5.5 как сг,, так и сг2 должны быть истинными в Д,, а в А\ предложения сг, и сг2 не могут быть истинными. Пусть сг, — выражение, обозначающее плотность упо- упорядочения: сг,: (Vx)(Vy)b(x - у) Л (х ^ у) - - Cz)[(x ^z)A(z^y)A -.(a: = z) А -(у = г)]]. Другое важное различие между Q и N состоит в том, что суще- существует наименьший элемент в N, а у Q нет наименьшего элемента. Пусть сг2 — предложение, утверждающее, что наименьшего элемен- элемента нет: 1 ' ¦ , сг2: -iCx)(Vy)P(x, у). • ¦•*• •>*<¦'•¦>*»"<•>¦ §2.12. УПРАЖНЕНИЯ 165 Тогда Д, (= сг, Л сг2 и Лг ^ сг, V сг2 (почему?), б) Д, |= «г,, но Лг ^ сг,. Следовательно, 0(Д, ^2 (почему?), но Д, У=^о2. Следовательно, 0(Д,)? (г) (= —icrj (почему?), но ->сг, ^ 0(Д) (почему?). Следовательно, 2.12.19. Приведите к предваренной нормальной форме следующие предложения: б) (Vx)(Vy)[CZ)P(x, у) Л Р(х, z)] -+ (Bu)Q(x, у, и); в) (Vx)(Vy)[CZ)P(x, у, z) A [Cu)Q(x, и) - C«)Q(y, «)]]. Решение. Используем формулы с A) по F), (9) и A0) из раздела 2.5. в) (Vz)(Vy)[C2)P(z, у, z) A [Cu)Q(x, и) -»C«)Q(y, и)]] *->(Vx)(Vy)[Cz)P(x, у, г) Л [-.C«)Q(x, u) V C«)Q(y, «)]] (x, у, 2) Л [(V«)-.Q(х, и) V Cu,)Q(y, ш)]] (x, у, 2) Л (V«)Cti»)[-.Q(a:, «) V Q(y, w)]] *-»(Va:)(Vy)C2!)(V«)Cti»)[P(x, у, г) Л (-Q(x, u) V Q(y, to))]. 2.12.20. Определите теоретико-множественную форму следую- следующих предложений: a: Cx)(Vy)Cz)[(P(x,y)V-,Q(x)VR(z))A y, у А (-Р(х, у) V -Q(x)) Л (-Р(х, у) V Д (*))!;'••¦'* ! »ЧП a': -1(Vx)Cy)[P(x,y)^g(y)]; ^ ? V,: -,[(Vx)P(x) - Cy)(V*)Q(y, г)]. Решение. Предложение ст уже находится в предваренной нор- нормальной форме. Так что нам нужно определить сколемовскую нор- нормальную форму (СНФ). a': (Vy)Cz)[(P(a, у) V -.Q(a) V R(z))A А (^Р(а, у) V ^Q(a)) А (^Р(а, у) V R(z))] (почему?) ст": (Vy)[(P(a, у) V ^Q(a) V Д (/(у)))Л Л (-.Р(а, у) V -.Q(a)) Л (-.Р(а, у) V Д (/(у)))], где а — новая константа, а /(у) — новая одноместная функция. То- Тогда по определению 2.6.10 теоретико-множественная форма сг имеет вид: .- j, , Теперь преобразуем ip в ПНФ:
166 Глава 2. ЛОГИКА ПРЕДИКАТОВ §2.12. УПРАЖНЕНИЯ 167 tp 0/x)P(x)A(Vy)Cz)-,Q(y,z) Соответствующая сколемовская форма имеет вид . , ,;. ,:. <?•: (Vx)(Vy)[P(x)A-Q(y,/(x,y))], И а ь где /(х, у) — новая двухместная функция. Множества. ./. •. ,' ',';¦'• есть теоретико-множественная форма ip. ,$^ЛЦ;-..} йг-"! •/ 2.12.21. Даны следующие предложения: ; j <; ¦ г^ ;' ? ¦. V» ^: Все, кто сберегают деньги в банке, получают проценты. F2: Если бы процентов не было, никто бы не сберегал деньги в банке. Введем следующие предикаты: -• А(х, у): х сберегает в банке у; нт Т(х): х — это проценты; К(х,у): х зарабатывает у; Х(х): х — это деньги. Сформулируйте F, и F2 на языке, определенном вышеуказанными предикатами, и определите сколемовскую форму для F, и ->F2. 2.12.22. Пусть (G, #) — группа. Опишите выбранными Вами пре- предикатами свойства группы G, а именно, что G замкнута относи- относительно #, операция # ассоциативна, имеется единичный элемент и обратные элементы. Определите СНФ формул, которые выражают эти свойства. Решение. Введем предикат Р(х, у, z), который интерпретиру- интерпретируется следующим образом: х#у — z. Тогда формула «г,: (Vx)(Vy)Cz)P(x, у, z) .*.,.-.: выражает, что G замкнута относительно #. Ассоциативность жается формулой . >."¦••¦ <т2: (Vx)(Vy)(V*)(Vu)(V«)(Vtu)[P(x, у, и)Л -го AP(y,z,v)AP(u,z,w)^>P(x,v,w)]A &¦' Л (Vx)(Vy)(Vz)(VU)(Vu)(Vu;)[P(x, у, «)Л Л Р(у, 2, «) Л Р(х, v, w) -» Р(и, 2, ш)]. Существование единичного элемента: «т3: Существование обратного элемента: *' ?'' а4: (Зу) (Vx) C*)[P(x, у, х) Л Р(у, х, х) -» Р(х, jy"y)A>i«, x, СНФ этих предложений суть: * «г,*: (Vx)(Vy)P(x,y,/(x,y)), ч; 9Ш* где /(х, у) — новая функция от двух переменных; >; a;: (Vx)(Vy)(V2!)(V«)(V«)(Vti») [[Р(х, у, и) Л Р(у, z, v) A P(u, z, w) -» Р(х, v, ш)]Л Л [Р(х, у, и) А Р(у, z, v) A P(x, v, w) -> Р(и, 2, ш)]] (почему?) ¦« [[-1(Р(х, у, и) Л Р(у, z, v) A P(u, z, w)) V P(x, v, ш)]Л Л h(P(x, у, и) Л Р(у, z, v) A P(x, v, w)) V P(u, z, w)]} [[-Р(х, у, и) V -Р(у, 2, и) V -Р(и, 2, ш) V Р(х, v, ш)]Л Л [-Р(х, у, и) V -.Р(у, 2, v) V -.Р(х, и, ш) V Р(и, z, w)]], которая совпадает с ПНФ предложения а2 (почему?); а\\ (Ух)[Р(х,а,х)АР(а,х,х)]; •''И'^;Т a;: (Vx)hP(x,6,x)V-P(b,x,x)V jj , ,, V(P(x,g(x),b)AP(g(x),x,b))], где а и b — новые константы, ад — новая функция. Другой возможный путь решения задачи — использовать язык ло- логики предикатов С = { =, /, г, е}, где / — символ функции от двух переменных с интерпретацией /(х, у) — х#у, г — функция от одной переменной, причем г(х) — обратный элемент к х, константа е — единичный элемент группы, а — — предикат, обозначающий равен- равенство, например, как в [Hami78]. 2.12.23. Пусть 5! и 52—два множества дизъюнктов: 52 = {{Р(х), Q(x)}, {R(z)},{T(y), ^W(y)}}. Определите эрбрановские множества Н3 для S, и Я,,..., Н10 для S2.
168 Глава 2. ЛОГИКА ПРЕДИКАТОВ Решение. Для 52. В 52 не встречаются символы переменных. Введем константу с. Тогда Яо = {с}. Более того, в S2 нет функцио-, нальных символов. Таким образом, Яо = Нх — ... = Я10 = {с}. 2.12.24. Определите эрбрановские множества Яо и Н{ для мно-1 жества дизъюнктов 5 = |{Р(/(х), a, g(f(x), b))}}. Определите все] основные примеры (по определению 2.4.3) для 5 на множествах и Я,. _ ( ч ,,м+ Решение. /fl,. ,. ,, .м, . ,. „Ai ¦ , , ¦ Я, = {а, Ь, /(a), f(b), g(f(a), b), g(f(b), b)}. Тогда' Примеры на множестве Яо для 5 суть ' ';-¦ ,! ' '.V) еры на множестве Я, для 5 суть )':\\.- : /., = {{P(f(g(f(b), b)), a, g(f(g(f(b), b)), b))}}. .к' '- 2.12.25. Докажите при помощи замкнутых систем»Т|Р|есю«' ЛИЦ общезначимость следующих предложений: , , ,, :. , б) -.(V < tB)(Vx)(P(x)AQ(x))*->((Vx)P(x)A(Vx)Q(x)); г) (За;) (Р(х) V Q(x)) ~ (Зх)Р(х) V Cx)Q(x); д) Co;)(Vy)P(x, у) - (Vy)Cx)P(x, у). Решение, а) См. рис. 2.7 По определению 2.3.7, предложе- предложение а) доказуемо по Бету, то есть его можно доказать посредством ЗСТ. в) См. рис. 2.8. Построенная таблица замкнута и противоречива, следовательно, она содержит доказательство предложения в). § 2.12. УПРАЖНЕНИЯ 169 /[[(Эх)Р(х) -»• (Vx)Q(x)] -> (Vx)[P(x) ;e[Cx)P(x)-+(vx)Q(x)] Рис. 2.7 2.12.26. Докажите средствами ЗСТ, что следующие предложения недоказуемы по Бету: а: (Vx) (Р(х) V Q (х)) -»(Vx)P(x) V (Vx)Q(x); <р: (Зх)Р(х) A Cz)Q(z) - (Зх) (Р(х) Л Q(x)). Найдите две интерпретации Ла и А^, в которых соответственно а и <?> ложны. Решение. Предположим, что а доказуемо по Бету. Тогда ЗСТ для а с корнем fa должна быть противоречива. Построим ЗСТ (см. рис. 2.9). Эта ЗСТ непротиворечива (почему?), поэтому а не может быть доказуемо по Бету. Чтобы определить интерпретацию Аа, отметим на непротиворе- непротиворечивых ветвях вершины tP и tQ знаком * (почему?). Константы сх и <^ —область искомой интерпретации. Пусть е(Р) = {с1} и e(Q) = = {cj. Тогда предложение а ложно в _Aff — ({с1( cj, e(P), е(<5))
170 Глава 2. ЛОГИКА ПРЕДИКАТОВ f[(yx)(P(x)AQ(x)) о ((Vi)P(i) A (Vi)Q(i))] t[(V:r)(P(z) Л <?(*))] f. s» -. *•;: f{Dx)(P(x)/\Q(x))} ¦ t[((Vi)P(x)A(Vi)Q(x))] t[P(c) Л Q(c)] для всех с tP(c) ' л tQ(c) /(V* t{Vx)Q{x) /P(cj) новая cj /Q(c3) новм о tP(c) для всех с, с* tP(cj) - .. tQ(c) для всвс с, c'tQ(c') tP(Cl) Рис. 2.8 (приведите полное доказательство последнего утверждения, опира- опираясь на определение 2.5.5). 2.12.27. Найдите опровержения приведенных ниже множеств ме- методом семантических деревьев: ) {{()}{ б) 5' = {{Р(х), Q(f(x))}, {-Р(а), Щх, у)}, {-.Л(а, я)}, Решение. а) 5 = {{P(fp, {-^Р(х) д(д, а)}, {-^(у.а)}}- Эрбранов универ- ( 1 2 3 сум для 5 имеет вид Н = {а}. Далее см. рис. 2.10. 2.12.28. Постройте семантические деревья и определите невыпол- невыполнимые основные примеры, соответствующие следующим формулам: J rf fQ{<%) новая с2 , , . t[P(c) V <Э(с)] для всех #„ , t[P(Cl)v0(Cl)] <[P(c2)V0(ca)] Рис. 2.9 (v« а) or; Cx)(Vy)P(x, у) Л (Vy)Cx)-1P(y, x); б) v: Cx)(yy)(Vz)Cw)[P(x, y) A -P(y, x)]; в) т: Cx)(Vy)(V2)C«;)[P(x, y) A ^P(z, w)]. ЧТСЙ ¦jO- ::1OT
172 Глава 2. ЛОГИКА ПРЕДИКАТОВ Р(а) Q(a,a) -iQ{a,a) Рис. 2.10 ,. Решение, а) Определим СНФ формулы а: а «-»(За:) (Vy)P(x, у) A (Vz) Cw)^P(z, w) (переименование связанных переменных) «-»(Зх) (Vy) (Vz) (Зш)[Р(х, у) Л -P(z, w)] (почему?). Тогда а\ (Vy) (V*)[P(a, у) Л ^P(z, /(у, z))]. Эрбрановский универсум есть множество Я = {а, /(а, а), /(а, /(а, а)), /(/(а, а), а), /(/(а, а), /(а, а)),...}, и соответствующее множество дизъюнктов — S = {{P(a,y)},{^P(z,f(y,z))}}. P(a,f(a,a)) Один из невыполнимых основных примеров формулы a ectfe {{P(a,/(a,a))},bP(aJ(a,a))}}. б) По теореме 2.3.6 , х)). у)Л Тогда V'- (Vy)[P(a, у) Л-РГ, форма <?> есть множество {{Р(а, у)}, {-<Р(у, а)}}, и эрбранов- эрбрановский универсум Я = {а}. Невыполнимый основной пример — {{Р(а, а)}, {^Р(а, а)}}. '(у, а)]. Теоретико-множественная '(а, У)},' ~ §2.12. УПРАЖНЕНИЯ 173 2.12.29. Определите, является предложение a: Cx)[G(x) V F(x)] - [Cx)F(x) - (Bx)^G(x)] логически истинным или нет, и постройте соответствующее дока- доказательство или контрпример. Решение. Мы построим ЗСТ с корнем fa. Если эта таблица противоречива, мы применим определение 2.6.7 и теорему 2.10.6. Если таблица непротиворечива, то непротиворечивая ветвь этой таблицы даст нам интерпретацию, в которой предложение а ложно. 2.12.30. Найдите невыполнимые основные примеры для следую- следующих множеств дизъюнктов: а) 5, = {{Р(х, а, д(х, Ь)}, {-Р(/(у), z, g(f(a), Ь))}}; Ь- ¦'¦ б) 52 - {{Р(х)}, {-*Р(х), Q(f(x))}, bQ(f(a))}}; в) 53 = {{Р(х)}, {Q(x, f(x)), ^P(x)}, {^Q(g(y), z)}}.* ^ ! Решение. Определите соответствующий эрбрановский уни- универсум и постройте соответствующее семантическое дерево. 2.12.31. Создадим язык логики предикатов С для изучения евк- евклидовой геометрии. Специальными символами С будут: Р(х) — унарный предикат, интерпретируемый как *х является точкой»; Е{у) — унарный предикат, интерпретируемый как «у является прямой линией»; 1(х, у) — бинарный предикат, интерпретируемый, как *х принад- принадлежит у». а) Какова будет интерпретация ?? Опишите область этой интер- интерпретации и интерпретации Р, Е и I: соответственно е(Р), е(Е) и б) Для предложения a: (Vx)[P(x) —> (Зу) (Е(у) А 1(х, у))] язы- языка ? сформулируйте его интуитивную интерпретацию и рассмотрите вопрос о его истинности. в) Добавим к языку ? бинарный предикат П(х, у) с интуитивной интерпретацией «прямые х и у параллельны». Опишите интерпре- интерпретацию языка ? U {П}. Сформулируйте аксиомы для ? U {П}. Решение. Основные аксиомы о точках и прямых таковы. 1) Существует по крайней мере одна точка, которая не принадле- принадлежит к заданной прямой. 2) Любая пара точек принадлежит ровно к одной прямой. 3) На каждой прямой находятся хотя бы две точки. Из этих аксиом мы можем вывести, например, теорему: суще- существуют по крайней мере две прямые, проходящие через заданную точку.
174 Глава 2. ЛОГИКА ПРЕДИКАТОВ §2.12. УПРАЖНЕНИЯ 175 Параллельность прямых можно определить так: две прямые на j плоскости, которые не имеют общих точек, называются параллель- j ными (параллельность stricto sensu, в отличие от параллельности^ lato sensu, которая утверждает, что две прямые параллельны, eon они совпадают или не имеют общих точек). а) Интерпретация С имеет вид А = (А, е(Р), е{Е), еG)), где А={х: х точка на плоскости} U {х: х прямая линия на плоскости] е(Р) = {х: х —точка}, е(Е) = {х: х —прямая}, еG) = {(х, у): х —точка, у — прямая, и х Лфгат на у}. б) По определению 2.5.5 «Н- ''-У ,. <Ф для любой точки сеАА\= Р(с) -> (Зу)(Е(у) Л Цс, у)) Ф> для любой точки с и любой прямой с А\=Р(с)^(Зу)(Е(у)АЦс,у)) ? <фдля любой точки с А|=Р(с)—> (Зу)(Е(у) АЦс, у)) ' и для любой прямой с А |= Р(с) —> (Зу)(Е(у) А Цс, у)). Но для любой прямой с верно А (= Р(с) -> (Ву)(Е(у) А Цс, уЩ как показано, например, в доказательстве следствия 1.5.4 и коммен-j тариях к этому доказательству. Тогда по тавтологии A A truth *-* А мы получим A)-<фдля любой точки с А[=Р(с)->(Зу)(Е(у)А1(с, у)) <Ф для любой точки с А \= (Зу) (Е(у) А Цс, у)) или А ^ Р(с^ "ч(,, , о для любой точки с существует такая прямая с', что А (= (Я(с') Л Цс, с')) (по тавтологии А V (В А -•?) «-> А)). Однако последнее предложение следует из аксиом. }_% Пусть с, — прямая из А. Тогда на с, лежат по крайнеАшере точки Cj и Сз- Пусть с' будет прямой, проходящей через $и, напри-| мер, через Cj. Следовательно, предложение а истинно в А. *; / в) Предикат П(х, у) может быть определен срёЦ(НгвШШ языка Формально, на языке С U {П} аксиомы Евклида таковы: 1) (Vx) Cy)[E(x) А Р(у) А -^Цх, у)}; 2) (Vx) (Vy) C2){Р(х) Л Р(у) A E(z) А -(х = у) - ^ [7(х, 2) Л 7(у, г) Л ((Vu;) (E(w) Л 7(х, w) Л 7(у, 3) (Vx) (Зу) C Л -(у = 2) Л Л РB) ^ 7(у, х)Л Л 7B, х)] 4) П(х, у) ~ -^Cz)[P(z) А Е{х) А Е(у) A I(z, x) Л I(z, у)]. Последняя аксиома является определением предиката П. Теорема в начале этого решения имеет такой вид: (Vx)Cz)Cu;)[P(x) Л E(z) A E(w) -+ 7(х, у) А 7(х, w) A -.B = w)]. Средствами предиката П мы можем, например, сформулировать транзитивность и симметричность отношения параллельности: (Ух)(Уу)(У2)[П(х, у) А Щу, z) - П(х, z)]; (Докажите, что последние две формулы истинны в интерпрета- интерпретации А языка С U {П}, где А' = (А, е(Р), е{Е\, еG), е(П)) и е(П) = = {(х, у): х, у — прямые, и х параллельна у}). 2.12.32. Определите, какие из следующих множеств предложе- предложений унифицируемы. Если они унифицируемы, найдите наиболее об- общий унификатор (НОУ). a) S = б) 5 = {{Р(а, х, h(g(z)))}, {P(z, h(y), в) S = {{Q(f(w), a, z)}, {Q(w, b, f(z))}}; r) S = {{любит(гу, /(у)).}, {любит(Джордж, футбол)}}; д) 5 = {{R(w, у), Q(w, f(z), z), ^R(w, w)}, {R(w, z), e)S = {{P(/(x), a)}, {P(y, f( ж) 5 = {{P(/(x), z)}, {P(y, a)}}. •' ^Ш Решение. Применим алгоритм унификации.и Введем в, = {y/f(a)}, 5, = {{P(/(a), g(x))}, {P(f(a), /(a)}}, Мы видим, что в DS2 не содержитед.в^щментарных вхождений переменных, так как х встречается только В д(х). Следовательно, S не унифицируемо. , .:,: ; , , ; •> -:-^ л iw.«»t«»K
176 Глава 2. ЛОГИКА ПРЕДИКАТОВ б) DSl = {a, z). Введем ft, = {z/a}, 5, - {{Р(а, х, h(g(a)))}, {P(a, h(y), h(y))}}, , {P(a, h(y), , DS3 = {g(a), y). Введем ft, = {x/h(y)}, S2 = {{P(a, h(y), h(g( Введем ft3 = {y/g(a)}, S2 = {{P(a, h(g(a)), h(g(a)))}, {P(a, h(g(a)), (g()))}} Следовательно, 5 унифицируемо, и его НОУ есть ft, = {z/a,x/h(g(a)),y/g{a)}. 2.12.33. Определите, какие из следующих предложений унифици- унифицируемы. В случае, когда предложения унифицируемы, найдите НОУ. )S {{Q()}{Q(b}} 3 = 6)S = {{Q(a,x)},{Q(a,a)}}; в) 5 = {{Q(a, x, /(x))}, {Q(a, у, у)}}; ..; Г) 5 = {{Q(x, у, z)}, {Q(u, h(v, v), u)}}; v r: (Д) 5 = {{P(x, g(x), y, h(x, y), z, f(x, y, z))}, {P(u,v,e(v),w,k(v,w),s)}}. ,г,;цы.' .S?.S (Мы полагаем, что a, b — константы, а /, g, h, e, к —функции.) 2.12.34. Пусть ft — общий унификатор для множества дизъюнк- дизъюнктов 5. Докажите, что ft — НОУ для S и 06 = в тогда и только тогда, когда для любого унификатора ш для 5 справедливо ш — вш. Решение. Если ft — НОУ, то для любого унификатора ш най- найдется такая подстановка 7. что Наоборот, если ш — унификатор и ш = вш, то для некоторой под- подстановки 7 справедливо Предположим, что ft ф вв. Тогда найдется такая переменная х и такой терм q, что x/q e в и x/q ^ ftft. Это означает, что {x/q)') € ву и (х/дO $• вву, а эт0 приводит к противоречию ввиду A). 2.12.35. Определите невыполнимый основной пример для еле, ющего множества дизъюнктов: 5 = {{Р(х, а, д(х, Ь))}, {-Р(/(у), z, g(f(a), b))}}. Решение. Заметимг что мы могли бы применить метод резол ции (и узнать, при каких условиях 5 невыполнимо), если бы пер' менная х совпадала с f(y), переменная z — с а, и переменная х §2.12. УПРАЖНЕНИЯ 177 иишг |;>-л1, К , с f(a). Используем подстановку ft = {z/a, x/f(a), у/а} Тогда 5 при- примет вид 5' - {{P(f(a), a, g(f(a), b))), {-P(/(a), a, g(f(a), b))]}. Очевидно, что 5' — искомый невыполнимый основной пример (по- (почему?). 2.12.36. Предположим, что верны утверждения, представленные ниже. а) Существует хотя бы один дракон. v б) Дракон либо спит в своей пещере, либо охотится в лесу.'У в) Если дракон голоден, он не может спать. jj г) Если дракон устал, он не может охотиться. Примените метод резолюции, чтобы ответить на следующие во- ПР°СЫ- пег* A) Что делает дракон, когда он голоден? , Б) Что делает дракон, когда он устал? B) Что делает дракон, когда он голоден Решение. Введем предикаты: Дракон (х) — х— дракон; Может(х, y,z) — y может делать faiy /k01 H) Делает (х, y,z) — y делает х в 2; s., .^ rrr:r«m*^»»saM*t:} iOl Голоден(х) —х голоден; ,, , , ,f ащ н Psh —Q (Г1**) Устал (х) — х устал. ,, г,;, ,п ?адй., ?_.. { „ МЫЯК5оД (fl Мы также предположим, что , '...., Г/МнодсниЛ} (й Может(х, у, z) 1- Делает (z, у, г). {Jk)iunY} f$») F - Выразим утверждения а), б), в) и г) при помощи дизъюнктов: ~ а) Дракон(А) <—; /о б) Делает(спит, А, пещера), Делает(охотится, А, лес) +-; щ в) -пМожет(спит, А, пещера) *— Голоден(А); г) ->Может(охотится, А, лес) <— Устал(А). ^ Обратим предложения а)-г) и (*) в теоретико-множественну*» форму: н 1) {Дракон(А)}; 2) {Делает(спит, А, пещера), Делает(охотится, А, лес)}; 3) {-.Голоден(А), -.Может(спит, А, пещера)}; т 4) {-.Устал(А), -.Может(охотится, А,лес)}; 5) {Может(х, у, z), --Делает(х, у, z)},*' fc, i> мт*т? А) Добавим к предложениям 1-5 два Предложения: ^ Jfd sKerr,!*
178 Глава 2. ЛОГИКА ПРЕДИКАТОВ &>>*'' "r!u>-1 6) {Голоден(А)}; 7) {-.Делает(х, у, z)}. Предложение 7 является целью наших поисков. Попробуем вы- вывести П методом резолюции, соответствующим образом подбирая значения для х, у и z. 8) {Делает(спит, А, пещера)}, х = охотится, у = А, г = лес — из 2 и 7; 9) {Может(спит, А, пещера)} — из 5 и 8; 10) {-Может(спит, А, пещера)} — из 3 и 6; 11) П —из 9 и 10. Следовательно, если дракон голоден, то он охотится » «к^гтп Б) Добавим следующие два предложения к предложениям ЛЧу" 6) {Устал(А)}; ' ^ ^Г;? '" 7) {-1Делает(х, у, z)}. Тогда можно вывести 8) {Делает(охотится, А, лес)}, х = спит, # = 2 и 7; 9{ 9) {Может(охотится, А, лес)} — из 5 и 8;8 '" 10) {->Может(охотится, А, лес)} — из 4 и $,* 11) D — из 9 и 10. ' лУ''п В) Добавим к 1-5 такие предложения: , 6) {Голоден(А)}; ^ А'' : .. 7) {Устал(А)}; • .у¦*,*><;¦ ¦ 8) {-.Делает(х, у, z)}. Предложение 8 — цель резолютивного поиска. Имеем: 9) {-1Может(спит, А, пещера)} — из 3 и 6; 10) {-пМожет(охотится, А, лес)} — из 4 и 7; 11) {-1Делает(спит, А, пещера)}, х = спит, у = А, z = пещера — E) и (9); 12) {->Делает(охотится, А, лес)}, х = охотится, у = А, 2=лес — из E) и A0); 13) {Делает(охотится, А, лес)} — из B) и A1); j 14) {Может(охотится, А, лес)}, х = охотится, у = А, 2= лес — 1 из E) и A3); 15) П —из A0) и A4). . Заметим, что противоречивость предложений с 1 по 8 была до-1 казана без помощи предложения 8, которое является нашей целью. из § 2.12. УПРАЖНЕНИЯ 179 Соответственно условиям задачи, предположение, что дракон одно- одновременно голоден и устал, приводит к противоречию. Таким обра- образом, мы не можем узнать, что делает дракон, когда он и голоден, и устал. 2.12.37. Пусть следующие предикаты интерпретируются так: Т(х, у, и, v) — *xyuv — это трапеция, х, у, и и v — соответствен- соответственно ее верхняя левая, верхняя правая, нижняя правая и нижняя ле- левая вершины»; Р(х, у, и, v) — «отрезки ху и vu параллельны»; ... Е(х, у, z, и, v, w) — *xyz = uvw»; и пусть даны предложения: A,: (Vx)(yy)(Vu)(Vv)[T(x,y,u,v)^P(x,y,v,u)] ; (определение трапеции); А2: 0/x)(Vy)(Vu)(Vv)[P(x,y,u,v)-+E(x,y,v,u,v,y)] (если xy||vu, то xyv — uvy); А3: Т(а, Ь, с, d)(abcd—трапеция). Докажите методом резолюции, что из Ах, А2 и А3 следует E(a,b,d,c,d,b). Решение. Нам достаточно доказать, что предложение А1АА2АА3А^Е(а, Ь, d, с, d, Ь) „ ч m (*) невыполнимо (почему?). Теоретико-множественная форма (*) такова: 5 ={{-.Т(х, у, и, v), Р(х, у, v, и)}, {--Р(х, у, v, и), Е(х, у, v, и, v, у)}, {Т(а, Ь, с, d)}, {^E(a, Ь, d, с, d, Ь)}}. Теперь мы видим, что 1) {-Г(х, у, и, v), Р{х, у, v, и)}; (v ; ¦ «- 2) {--Р(х, у, v, и), Е(х, у, v, и, v, у)}; ' ^.-н'. 3){T(a,b,c,d)}; ,, .[- 4) {-.Я(а, Ь, d, с, d, Ь)}; - ; ¦, 5) {->Р(а, b, d, с)} — унификация и резолюция 2 и 4; 6) {->Т(а, Ь, с, d)} — унификация и резолюция 1 и 5; 7) ?—из з и 6. ; 2.12.38. Докажите при помощи метода резолюции и ЗСТ: а) {{(ух)[А(х) -»(В(х) А С(х))}, (Зх)[А(х)А ; ; AD(x)]}}\=Cx)[D(x)AC(x)); ' \ б) {(Эх)[Р(х) A (Vy)(T(x, у) - Q(x, у))], Qtx)[P(x) -*
180 Глава 2. ЛОГИКА ПРЕДИКАТОВ Доказательство, а) Построим ЗСТ с корнем f[Cx)[D(x)A А С(х)]]. Затем мы объединим конъюнкцией (в одну линию!) фх)[А(х) - (В(х) А С(х)))] и t[Cx)[A(x) A D(x)]). Для метода резолюции, мы обратим в СНФ конъюнкцию ((Зх)[А(х) A D(x)}) А (<Ух)[А(х) - (В(х) А С{ A(^Cx)[D(x)AC(x))). (пользуясь коммутативностью Л, мы в первую очередь лу с квантором существования, чтобы ее СНФ была мы построим теоретико-множественную форму а). . . v;. )' •'I ь >f ' „V . P »»¦¦ ' ;'u "¦ 'J\- .. К / , К \ .'j: V'V' / Г .<) ri с' {-и -••¦" "J {\ .;¦',, > г i ->' й " C A.»i f-'Jik/i1" ¦ - i-'i1' !i • 1 * Глава 3 ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ: ПАРАДИГМА ПРОЛОГа ¦%: То 6еТ тёХоя \ai vdaav тг\и 8oiaC.6y.eva аиа-уоцеи ei dC xai ара\г)< e' , ё<р rju та i be цт), ixavra Надо осмыслить установленное зда- .','••' ние и всякую очевидность, к кото- '" рой мы возводим наши предположе- ¦С11 ния. Иначе все будет полно путаницы IJ! и смятения. >*. Эпикур § 3.1. Пролог и логическое программирование 3.1.1. Введение •' До сих пор мы занимались^исследованием, «' анализом основных йРлогики с языком программирования вованы в каждой конкретной pa3SoBKWoc™ программирования.
182 Глава 3. ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ Главное значение пропозициональной логики и логики предика- предикатов состоит в том, что с их помощью определяются математические модели, позволяющие доказывать истинность или ложность одних утверждений путем построения вывода из множества других утвер- утверждений или предположений. Следуя этим принципам, мы уже имели дело с моделями, описывающими правило Modus Ponens, с таблич- табличными доказательствами и методом резолюций. Именно метод резо- резолюций служит связующим звеном между математической логикой и логическим программированием и в то же время восполняет про- пробел между абстрактными математическими моделями и операциями языков программирования, такими как ПРОЛОГ. В первой главе мы рассматривали резолюцию как процедуру до- доказательства в логике высказываний. Далее, во второй главе, озна- ознакомившись с каноническими формами, сколемовскими формами, а также с понятиями подстановки и унификации, мы распространили резолютивную процедуру доказательства и на логику предикатов. Теперь мы собираемся описать язык программирования, средства которого позволили бы нам уточнить и представить в завершенном виде события окружающего мира, а также наш обыденный практи- практический опыт, используя при этом элементы математики настолько широко, насколько это возможно. Характерными чертами этого языка являются формализация за- заданной информации, а также интенсивное использование аппарата вывода во взаимосвязи с математической логикой. Наши знания формально представляются хорновскими дизъюнк- дизъюнктами, которые не только позволяют описывать в простых терминах события окружающего мира, но и легко преобразуются в сколемов- скую стандартную форму. Аппарат вывода с подстановкой, унифика- унификацией и резолюцией, задействованный в нашем языке, предоставляет удобное алгоритмическое средство для обработки данных и извле- извлечения заключений из множества хорновских дизъюнктов. Нам известно, что в процессе резолютивного вывода проводится исследование исходных данных задачи и обеспечивается получение ее решения при условии, что это решение существует. Имея в виду эти обстоятельства, мы можем начать предварительное знакомст- знакомство с ПРОЛОГом на уровне интуитивного понимания. Обратимся к следующему примеру. Предположим, что мы располагаем некоторыми сведениями, пред- представленными в виде хорновских дизъюнктов логики предикатов рх: Лицо(Марк) +- t!,uw?.*,;. ' гь ;*«ь^ ч, #>: Лицо(Аврелий) <— ; iH,•-•,. ,,v о<п «миг; q- Рз\ Смертен(х1) +- Лицо(х1) «^п.'.'тие^ин йэоеэ or, р4: Жил-вЛомпеях(Аврелий) *—-у,шкиы р5: Жил-В-Помпеях(Марк) *— ^.л',"> л р&: Родился(Аврелий,45) <— ¦;¦.<;,< ,.^¦; • Pjl Р0ДИЛСЯ(МарК, 40) <— .>. М.' Йо-.О.'-^ § 3.1. ПРОЛОГ И ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ 183 Ръ'- Я»: Р\о- Ри: Р\2- ¦ f*f ¦, Умер(х2, 79) <— Жил_в_Помпеях(х2) Извержение(вулкан,79) <— Мертв(хЗ, i2) +- Смертен(хЗ), Родился(хЗ,*1), 12—i Не_жив(х4, *3) <— Мертв(х4, t3) Мертв(х5, t4) <— Не_жив(х5, tA) Мертв(х6, i6) +- Не_жив(х6, Щ, *6 > *5 ^14. «— Не_жив(х, 1987) Для соблюдения некоторых формальных требований ПРОЛОГа, о ко- которых еще пойдет речь в дальнейшем, мы записываем индексы ря- рядом с переменными или термами; так, например, мы записываем xl вместо Х[. Первые тринадцать хорновских дизъюнктов задают информацию, которую мы предоставляем программе. Последний дизъюнкт рн — это запрос, с которым мы обращаемся к ней: \^ Кто не жив в 1987 году? ч'ч Соответствующая теоретико-множественная форма представления предложений р,,.. .рн такова: A) {Лицо(Марк)} ! '-Л'!Щ W:'~ B) {Лицо(Аврелий)} "• '• ¦ ¦¦• ., C) {Смертен(х1), -1Лицо(х1)} яу D) {Жил_в_Помпеях( Аврелий)} if,* E) {Жил_в_Помпеях(Марк)} ;; ^ F) {Родился(Аврелий,45)} G) {Родился(Марк, 40)} (8) {Умер(х2, 79), -.Жил_в_Помпеях(х2)} (9) {Извержение(вулкан, 79)} A0) {Мертв(хЗ, t2), -|Смертен(хЗ), -1Родился(хЗ, rii^.., -.(t2-tl > 150)} " J A1) {Не^кив(х4, t3), -Мертв(х4, t3)} *ut I? A2). {Мертв(х5, tA), ->Не^ив(х5, tA)} ти пь A3) {Мертв(х6, i6), -Умер(х6, t5), -(i6 > i5)} '' A4) {-.Hej«HB(x, 1987)}. Эти же предложения, будучи записанными на ПРОЛОГе, примут дующий вид: A) лицо(марк). \ «I B) лицо(аврелий). ,, t!, C) смертен (XI):- лицо(Х1). '?< D) жил_в_Помпеях(аврелий) .s,,^ s^;.^д;^;;¦ " • so/: E) жил_в_Помпеях(марк). 0,Vo ^ Т'1 '-а F) родился(аврелий,45). ' ^ ' G) родился(марк,40). (8) умер(Х2,79) :— жил^_Помпеях(Х2) . ;€ (9) извержение(вулкан,79). ^я A0) мертв(ХЗ,Т2) : - смертен(ХЗ), родился(ХЗ,Т1), *¦ <¦ -t«,vt -, г- gt(T2-Tl,150). , , _ и ; Г* ну
Глава 3. ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ 184 A1) не_жив(Х4,ТЗ) :- мертв (Х4, ТЗ) . A2) мертв(Х5,Т4) :- не_жив(Х5,Т4). A3) мертв(Х6,Т6) :- умер(Х6,Т5), gt(T6,T5). ' A4) ? не_жив(Х,1987). где gt(X, Y) обозначает X > Y. Следуя системе обозначений ПРО- ЛОГа, мы записывали константы прописными буквами, а перемен- переменные— заглавными. Знак пунктуации «.» в большинстве версий ПРО- ЛОГа обозначает конец очередного хорновского дизъюнкта. ПРОЛОГ, подобно логике предикатов, пытается доказать целевое утверждение. Если целевое утверждение справедливо, то в полу- полученном ответе ПРОЛОГ учитывает все частные случаи решения, т. е. он дает все возможные значения переменных, при которых целевое утверждение становится справедливым. Давайте посмотрим, как это происходит, и каким образом здесь применяются подстановки, уни- унификация и резолюция. .*.. .-*-¦<¦• > > •>-. Наша исходная цель имеет вид Не^кив(Х,1987). ..''' -у ПРОЛОГ просматривает данные в поисках хорновского дизъюнкта, заголовок которого может быть унифицирован с текущей целью. Подстановка 0, = {х4/х, ?3/1987} унифицирует цель с заголовком формулы A1). ПРОЛОГ тут же пытается проверить тело формулы A1), объявляя текущими целями одну за другой все посылки этой формулы. Резолюция формул A4) и A1) дает ¦(* 4ч A5) {-.Мертв(х,1987)} . ,-,' {,~jli из A1) и A4) Этап 2: $'#¦-, ^Ж: ¦' Наша цель теперь имеет вид ' "<>! >L^ Мертв(ж,1987). •-'¦ Х ПРОЛОГ, следуя резолютивному выводу, пытается унифицировать эту цель с заголовком некоторого хорновского дизъюнкта, содер- содержащегося в программе. Это достигается применением подстановки 02 = {хЗ/х, ?2/1987} к формуле A0). Этап 3: Новое целевое утверждение для ПРОЛОГа представлено тройкой посылок из формулы A0), т. е. оно имеет вид Смертен(х), Родился(х, ?1) и gtA987- ?l, 150). Эти подцели будут рассматриваться в том порядке, в котором они входят в состав правила A0). Согласно методу резолюций это утвер- утверждение представляется в виде правила A6) {-.Смертен(х), -лРодился(х, ?1), -л gtA987- ?l, 150)} § 3.1. ПРОЛОГ И ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ 185 Этап 4: ПРОЛОГ унифицирует атом «Смертен(х)» с заголовком предложе- предложения C) при помощи подстановки в3 = {х1/х}. И метод резолюций использовал бы ту же самую подстановку для унификации атома «Смертен(х)» и заголовка «Смертен(х1)» правила C). Этап 5: ,; Наша очередная цель теперь ,' : Лицо(х). Она, в свою очередь, унифицируема посредством подстановки в4 = = {х1/Марк}с фактом, представленным формулой A). Воспользовавшись методом резолюций, мы бы получили A7) {-.Лицо(х), ->Родился(х, ?l), ->gtA987 — ?l, 150)} из C) и A6) A8) {-.Родился(Марк,?1),-.gtA987-?l,150)} из A) и A7) Этап 6: ПРОЛОГ продолжает выполнять процедуру доказательства и пы- пытается выполнить следующую цель из той тройки, которая была выработана на этапе 3, то есть Родился(Марк, ? 1) Унификация успешно применяется к правилу G) с подстановкой 05 = {?1/4О}. Метод резолюций, соответственно, образовал бы фор- формулу A9) {-.gtA987-40, 150)} из G) и A8) Этап 7: Последней целью из нашей тройки, которую нужно выполнить, остается gtA987-40, 150) и она успешно выполняется ПРОЛОГом, поскольку 1987 —40 > 150. Этап 8: Целевое утверждение, полученное на этапе 2, «-|Мертв( 1,1987)» было выполнено с означиванием х =Марк. Цель первого этапа вы- выполнена, таким образом, с тем же означиванием. На этом этапе резолютивный метод выводит дизъюнкт B0) D из A9) Этап 9: ПРОЛОГ не останавливается на достигнутом. Он продолжает вы- вычисления, пытаясь унифицировать последнюю из выбранных целей другим способом, для того чтобы отыскать все правильные реше- решения. Как только эта последняя цель будет выполнена всеми воз- возможными способами и все правильные решения будут получены,
186 ¦?¦ Глава 3. ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ процедура повторится, уже применительно к непосредственно пред- предшествующей ей цели. Если и эту цель удастся выполнить каким- либо другим способом, то процедура продолжит попытки выполнить оставшуюся «последнюю» цель, используя подстановки, которая бы- были получены к этому моменту. Следуя этой стратегии и не имея альтернативных возможностей выполнения заключительной цели «gtA987 — 40, 150)», ПРОЛОГ попытается выполнить непосредствен- непосредственно предшествующую цель «Родился(Марк, il)», воспользовавшись другой подстановкой. Таким образом, рано или поздно, ему доведет- доведется унифицировать подцель «Смертен(х)» с фактом B), посредством подстановки вА = {xl/Аврелий}. Далее вычисления последуют тем же путем, как и на этапе F), однако, решением на этот раз будет -1Не_жив( Аврелий, 1987) для означивания х =Аврелий. Этот хитроумный прием ПРОЛОГа, позволяющий ему отыскать все возможные решения, называется откатом. Он будет детально ра- разобран в соответствующем разделе. 3.1.2. Логика и программирование Основное отличие логического программирования и языка ПРО- ПРОЛОГ от традиционного программирования и алгоритмических языков типа ФОРТРАН, БЕЙСИК, КОБОЛ и ПАСКАЛЬ заключается в основопо- основополагающих принципах логического программирования, а именно, в организации и выполнении логической программы. Программа состоит из двух компонентов — логики и управле- управления [Kowa79, Lloy87]. Под «логикой» здесь подразумевается систе- система основных понятии, касающихся того, ЧТО делает программа, а под «управлением» — свод синтаксических понятий, определяющих, КАК именно она это делает (например, как именно алгоритм решает задачу). Если бы мы захотели выразить это одним уравнением, то мы могли бы написать ПРОГРАММА = ЛОГИКА + УПРАВЛЕНИЕ Привычная нам программа, написанная на БЕЙСИке или каком- нибудь другом традиционном языке программирования, состоит из команд, описывающих действия, которые должна последовательно выполнить вычислительная машина для того, чтобы программа мо- могла произвести желаемый результат. Например, команда программы на БЕЙСИке 10 LET X = X + 5 увеличивает на 5 содержимое ячейки памяти, соответствующей пе- переменной X. Для языка программирования, подобного БЕЙСИКу, характерны императивные команды, которые шаг за шагом описывают поведе- § 3.1. ПРОЛОГ И ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ 187 ние программ так, что после выполнения конечной последовательно- последовательности таких команд получается правильный и ожидаемый результат1). Устройство этих команд в процессе проектирования программы, на- находится в ведении компоненты УПРАВЛЕНИЯ. А ЛОГИКУ указанной команды составляет выражение «X + 5», ко- которое само по себе является не командой, а всего лишь небольшой дескриптивной программой. Эта программа явно описывает ариф- арифметическое значение, которое должно быть вычислено, и неявно указывает, как именно оно должно быть вычислено. Поэтому БЕЙСИК относится к числу императивных языков, со- содержащих дескриптивные элементы. ПРОЛОГ-программа, напротив, может содержать предложение милый(Х) :— любит(X,людей) . ¦ которое есть всего лишь логическое определение взаимосвязи пре- [ дикатов «милый» и «любит». Поэтому проектирование ПРОЛОГ-программы основано на пра- вильном подборе предикатов, определяющих отношения между объ- ектами, так, чтобы связь между входными данными и информацией, ожидаемой нами на выходе, была бы описана полностью. Вообще говоря, программа на традиционном языке программиро- ( вания задает функцию, отображающую входные данные в выходные данные программы, в то время как программа на логическом языка программирования задает отношение между данными [Watt90]. И поскольку отношения является более общим понятием, чем функ- функция (всякая функция есть отношение, но отношение, в общем слу- случае, не обязано быть функцией), логическое программирование на- наделено большими возможностями, нежели традиционное програм- программирование. Выбор предикатов, а значит и отношений, выражаемых этими пре- ! дикатами, относится к логической компоненте ПРОЛОГа. А управле- управление осуществляется путем-выбора порядка расположения программ- ' ных утверждений, а также при помощи ряда структурных средств ! управления, таких как отсечение «!» (см. п.3.4.4), используемых в качестве синтаксических конструкций ПРОЛОГа. По этой прими- не ПРОЛОГ относится к числу дескриптивных языков, содержащих императивные структурные элементы в качестве элементов управ- управления. Давайте рассмотрим пример программы, которая считывает два числа и выдает на печать наибольшее из них. Для того чтобы нагляд- но продемонстрировать различие между традиционным программи- • рованием и логическим программированием, мы приведем сначала программу на БЕЙСИке, а затем ту же самую программу на ПРОЛОГе. ') Точнее было бы сказать, получается некоторый результат, поскольку он может отличаться от ожидаемого, и корректность его еще предстоит обосновать. — Прим. перев. ¦, .¦;.¦ -. ;,trfi".i.,.,«ii. tt > ¦/*».¦ < t,V»<v ¦ ••¦¦, ¦>
188 Глава 3. ЛОГИЧЕСКОЕ ПРОГРАММ1#ОЮ№ЙЕ 10 20 30 40 50 60 70 Программа на БЕйсике INPUT "NUMBER1", X INPUT "NUMBER2", Y '" IF X > Y THEN 60 PRINT Y GOTO 70 .,-,,.-.. ч>; print x :V,' ',"'"¦ *''"' '; END ":',->., ...;¦' '.. ^ j.. ' '¦ ¦ :: -~ , к.. ,Ц: 'Mi. ¦¦m Программа на прологе" *i; :.'Т'Д'1-,^^„ программа :- write("NUMBERl"), read(X),Jreal(X), write("NUMBER2"), read(Y)> ,|?al(Y), больше(Х,У,2), write(Z). больше(Х,Х,Х). больше(Х,У,У) : - X < Y. '¦ ¦ '"- больше(Х,У,Х) : - Y < X. "' ^»tt ? программа. «»>..'•¦ Здесь «real» — специальный предикат ПРОЛОГа, который проверя- проверяет, является ли его аргумент действительным числом (см. п.3.5.4). Используя «nl», мы считываем каждое число с новой строки. Программа на Бейсике — это просто последовательность команд. Эти команды, исполняемые в порядке их нумерации в программе управляют вычислением, т. е. определяют структуру и ход исполне- исполнения программы. Логическая компонента в БЕйСИК-программе при- присутствует в виде отношения «<». ПРОЛОГ-программа, в отличие от БЕИСИК-программы, представля- представляет собой совокупность дизъюнктов, которые полностью описывают отношение, определяющее большее из двух чисел, т. е. предикат «больше». Это семейство дизъюнктов выражает логическое напол- наполнение программы, которое преобладает в ПРОЛОГе, в то время как управление проявляет себя в порядке расположения предикатов в дизъюнктах и дизъюнктов в программе. Типичная программа задается данными, которые мы хотим обра- обрабатывать, и последовательностью действий, которые мы хотим вы- выполнить. Как только мы описали исходные данные нашей задачи и процедуры, которые позволят нам получить результат, структу- структура управления сразу определяет порядок, в котором должны при- применяться различные процедуры. Другими словами, мы имеем од- однозначно определенную последовательность процедур, некоторые из которых могут выполняться неоднократно (например, в цикле). Выбор подходящего формализма представляется весьма существен- существенным, поскольку от него зависит автоматизация обработки данных. Поэтому одной из основных компонент типичной программы явля- является структура управления, то есть, порядок, в соответствие с которым будут выполняться процедуры. § 3.1. ПРОЛОГ И ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ 189 3.1.3. Логическое программирование Один из наиболее существенных изъянов традиционного програм- программирования проявляется в тех случая, когда возникает необходи- необходимость в постоянной модификации программ и адаптации их к но- новым требованиям. Ведь даже самое незначительное изменение клас- классической программы обычно оказывает влияние на всю структуру управления. Поэтому проверка всего лишь слегка видоизмененной программы требует больших затрат и усилий. Одно из решений сложившейся проблемы предоставляет логиче- логическое программирование на языке логики предикатов. Задача, ко- которую необходимо решить с использованием компьютера, описы- описывается совокупностью дизъюнктов логики предикатов. Некоторые из этих дизъюнктов, как, например, дизъюнкт «больше(Х,Х,Х)» в рассмотренной ранее программе, выражают факты. Другие, как, на- например, дизъюнкт «больше(X,Y,Y): - X < Y», выражают правила обработки фактов. А третьи выражают запросы, на которые нужно ответить, чтобы найти решение задачи. И в результате в логическом программировании вообще и в ПРОЛОГе в частности решением за- задачи, вследствие применения правил программы, будет либо ответ «да» или «нет» на запрос, либо множество значений, которые и представляют искомое решение. Вот поэтому в логическом программировании распространены не только команды чисто функциональной природы, как в классиче- классическом программировании, но и предикаты, конструкции логики пре- предикатов, которые могут принимать значения истины и лжи в зависи- зависимости от их интерпретации и значения их аргументов. Истинность или ложность того или иного предиката в соответствие с конкрет- конкретными значениями его аргументов и определяет, какой из ответов «да» или «нет» будет выдан программой на поставленный вопрос. Ответы на запросы к программе зависят ИСКЛЮЧИТЕЛЬНО от той информации, которой мы снабдим программу. Поэтому, если мы спросим программу из примера п. 3.1.1, является ли число 4 полным квадратом, т. е. квадратом некоторого целого числа, то программа, не имея никаких предикатов, характеризующих полные квадраты, ответит «нет». Это означает, что цель ? полный_квадратD) терпит неудачу, см. Замечание 1.9.9. На это следует обращать особое внимание. Неудача, постигшая ПРОЛОГ при попытке прове- проверить целевое утверждение, вовсе не означает, что это утверждение и в самом деле неверно. Она лишь свидетельствует о том, что ис- используя факты программы и аппарат вывода, имеющийся в нашем распоряжении, мы не можем заключить, что предъявленное целе- целевое утверждение истинно. Этот эффект носит название допущение замкнутости мира (см. также п.3.6.1) [Watt90].
190 Глава 3. ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ Программа считает предикат Q логики предикатов ложным, если она не может доказать, что Q является истинным На основании этого мы можем рассматривать каждую ПРОЛОГ- программу как завершенное описание некоторого мироздания, ко- которое полностью охарактеризовано данными программы. Все, что есть существенное в этом мире, описано данными, и соответствую- соответствующие этим данным цели успешно достигаются; а все, что не описано в программе, считается неизвестным, и относящиеся к этому запросы терпят неудачу. 3.1.4. История развития После того, как Эрбран в 1930 г. предложил алгоритм, позволя- позволяющий нам подобрать интерпретацию, опровергающую формулу <р в случае, если ip не является логически истинной, Гилмор впервые в 1960 г. попытался реализовать эрбрановский метод на компьюте- компьютере [ChLi73]. В своей реализация этого метода Гилмор основывал- основывался на том, что дизъюнкт логически непротиворечив (см. Опреде- Определение 2.5.19) тогда и только тогда, когда его отрицание невыпол- невыполнимо в некоторой интерпретации. В соответствие с этим он завел в своей программе процедуру, которая формировала предложения логики предикатов и время от времени проверяла их на противоре- противоречивость (см. Определение 2.5.16). Программа Гилмора была, одна- однако, не способна анализировать слишком сложные формулы логики предикатов. После того, как Робинсон [Robi65] опубликовал свой алгоритм унификации, Лавленд в 1970 г. впервые предложил линейную резо- резолюцию с правилом выбора. В этом варианте резолютивного метода мы выбираем дизъюнкт, строим для него резольвенту с другим дизъ- дизъюнктом, затем применяем резолюцию к полученной резольвенте, ис- используя какой-либо третий дизъюнкт, и продолжаем этот процесс, применяя правило резолюции к последней полученной резольвен- резольвенте, до тех пор, пока не будет построен пустой дизъюнкт [ChLe73, Lloy87]. Считается, что первыми, кто вступил в область логического про- программирования A972), были Ковальский и Колмероэ [StSh86]. Ко- Ковальскому впервые удалось описать процедурную интерпретацию хорновских логических дизъюнктов и показать, что правило вида А:- В., В. 2) может быть воспринято и реализовано на языке рекурсивного про- программирования. В это же самое время Колмероэ и его исследовательская груп- группа разработали при помощи системы программирования ФОРТРАН язык программирования, предназначенный для доказательства тео- теорем и реализующий процедурную интерпретацию Ковальского. Так §3.1. ПРОЛОГ И ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ 191 I было заложено основание ПРОЛОГа (программирование посредством ЛОГики). Первый интерпретатор ПРОЛОГа, т. е. программа, которая пере- переводит текст, понимаемый людьми (исходный файл), на язык, вос- воспринимаемый машиной (машинные коды), был написан на АЛГОЛе в Марселе в 1972 г. Русселем, который основывался на теоретиче- теоретических разработках Колмероэ. Однако в целом на вопрос о том, может ли логика, и, следова- следовательно, математика быть использованы в качестве языка програм- программирования, мы должны дать отрицательный ответ [Watt90] Задача, выраженная на языке программирования, должна быть решена компьютером, тогда как в логике и математике имеются проблемы, для которых нет алгоритмического реше- решения, и которые, таким образом, не могут быть решены компь- компьютером. Одним из примеров такой проблемы является проблема разрешимо- разрешимости логики предикатов, см. § 2.11. По этой причине логическое программирование, которое мы бу- будем понимать как концепцию программирования, базирующуюся на логике, всегда ограничивается лишь частью логических формул. ПРОЛОГ, например, имеет дело только с хорновскими дизъюнкта- дизъюнктами, одним из подмножеств множества предложений логики преди- предикатов1). Многие исследователи в последние годы сосредоточили свое вни- внимание на поиске взаимосвязи между различными классами язы- языков программирования, такими как классы языков функциональ- функционального программирование, т. е. программирования, основанного на Л-исчислении [Тпау88], логического программирования и объектно- ориентированного программирования, т. е. программирования, ос- основанного на теории типов, согласно которой каждый объект пред- представляется набором значений, свойств и процедур [Thay88]. Немало усилий было положено на то, чтобы найти подходящие преобразо- преобразования и эквивалентности, позволяющие переходить от одного языка программирования к другому или применять различные формализ- формализмы в рамках одной программы. Большинство языков логического программирования, которые по существу есть ни что иное, как системы доказательства логических теорем, использующие метод резолюций, рассматриваются нами как первые шаги в направлении оптимального логического программи- программирования. ') Хорновские дизъюнкты были выбраны в первую очередь потому, что резолю- резолютивные доказательства в этом классе формул всегда конструктивны, т. е. помимо существования контрмодели для них еще устанавливаются и значения переменных, на которых опровергается исследуемая формула. Это обстоятельство является наи- наиболее существенным, если мы хотим применять логическое программирование для вычислений, а не только для для доказательств. — Прим. перев.
192 Глава 3. ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ Для оптимального программирования, однако, мы должны решить проблему управления, то есть а) сделать доступными более приемлемые и более хитроумные процедуры управления в каждом языке логического программиро- программирования; б) найти возможность переложить все управление проектирова- проектированием и выполнением программы на компьютер. Решение проблемы управления позволит будущим программистам и пользователям ограничить свое взаимодействие с компьютером разработкой полных и строгих формулировок задачи. Программа, в свою очередь, возьмет на себя решение задачи и все управление ходом вычисления программы. § 3.2. Структура программы 3.2.1. Элементы программы ПРОЛОГ-программа состоит из данных и запросов, на которые она должна дать ответ. Данные и запросы являются хорновскими дизъ- дизъюнктами согласно определению 2.4.4. Данные представляются одной из следующих форм: ,т4ц / A(Cl,...,ck)*- J- HF'"a« (*) и символически записываются на ПРОЛОГе .^' л(с„...,с4). ; Здесь А — предикат, а с,,..., ск — константы логики предикатов1). Знак пунктуации «.» указывает место окончания заданной форму- формулы. А(ах,..., ак) *- В,(Ь„ ..., Ь,),.. .?,.(<*,,..., dm) (**) и символически записываются на ПРОЛОГе Л(а„ . .., а,): - Вх(Ьи . . ., Ь,),..., ад,..., dm), где А, В{,..., В. — предикаты, а а,,..., ак, Ь,,..., b,, d,,..., dm — термы логики предикатов (см. Определение 2.2.1). Данные вида (*) согласно определению 2.4.6 называются факта- фактами программы. Данные вида (**) называются правилами программы. При помо- помощи правил программы выражаются отношения между предикатами, встречающимися среди фактов. Правила, являющиеся импликатив- ными формулами логики предикатов, по отношению к которым при- применяется унификация и резолюция, образуют процедурную часть ) Вообще говоря, аргументы сх,...,ск могут быть и произвольными термами, со- содержащими переменные и функциональные символы — Прим. перев. § 3.2. СТРУКТУРА ПРОГРАММЫ 193 программы. При этом А(ах,..., ак) называется заголовком правила, а ВХ(ЪХ,..., Ь,),..., Sy(d,,..., dm) — хвостом, или телом правила. Факты и правила образуют базу данных программы [Brat9O]. Запросы, или целевые утверждения, (см. Определение 2.4.5) представляют собой хорновские дизъюнкты вида и символически записываются в ПРОЛОГе , т ,.о ? ВД,..., Ь,), ... ,By(d,,...,dJ. Здесь В,,..., В. — предикаты, а Ь,,..., b,, d,,..., dm — термы логи- логики предикатов (см. Определение 2.2.1). Разделитель «.» следующий за каждым фактом, правилом или за- запросом обозначает конец соответствующего хорновского дизъюнк- дизъюнкта. Давайте обратимся к ПРОЛОГ-программе из примера 2.4.9 с за- запросом, который рассматривался в примере 2.10.12, — «Что может похитить Питер?» ' вор(питер). J* любит(мэри,шоколад). ' ,}jflt любит (мэри, вино) . к любит(питер,деньги). ; любит (питер, X) : — любит(X, вино). ,!!? может_похитить(Х,У) : — вор(Х), любит(Х.У). I,. ? может_похитить(петр, У) . ; Первые четыре дизъюнкта являются фактами, последующие дваг дизъюнкта — правилами, а заключительный дизъюнкт — это вое утверждение (запрос) программы. Пролог выдаст ответ У = деньги У = мэри означающий, что Петр может похитить деньги или Мэри, о чем мы были уже осведомлены, изучив пример 2.10.12. Итак, ПРОЛОГ-программа есть ни что иное, как собрание фактов, правил и запросов, лишенное каких-либо указаний и ориентиров для управления вычислением. Такое устройство программы свидетель- свидетельствует о чрезвычайной гибкости ПРОЛОГа: мы можем модифициро- модифицировать и расширять программу путем добавления и изъятия фактов и правил, применяя команды «assert» и «retract», о которых пойдет речь в п. 3.5.1. Факты, фигурирующие в ПРОЛОГ-программе, можно воспринимать как декларации о предметном мире программы; это беспрекослов- беспрекословные заявления, описывающие то или иное положение вещей. А вот правила [ХапШО] можно интерпретировать не только как деклара- декларации, но и как процедуры программы. Классические языки програм- программирования допускают по существу лишь процедурную интерпрета- интерпретацию, тогда как ПРОЛОГ — вероятно, единственный язык программи- 7 Г. Метакиденс, А. Нероуд ¦'Л
194 Глава 3. ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ § 3.2. СТРУКТУРА ПРОГРАММЫ 195 рования [Xant90, Brat90, С1Ме84], который допускает как процедур- процедурную, так и декларативную интерпретацию1). 3.2.2. Факты Как было отмечено в п. 3.2.1, факты — это отношения, т. е. преди- предикаты, между разными объектами, представленными термами языка логики предикатов. Таким образом, факт — это предложение языка логики предикатов (см. Определение 2.2.17). Факты ПРОЛОГа могут быть напрямую соотнесены с констатацией фактов на разговорном языке. Разговорный язык канарейка — это птица Джон — это человек Петр любит Мэри Петр может похитить Мэри ПРОЛОГ ;ii: птица (канарейка) . '¦• w человек(джон). любит(петр,мэри). т'-!;!!3' можетлохитить (петр, мэри). Джон и Анна — родители Мэри родители (мэри, джон, анна) . Наименования предикатов и констант всегда начинаются с пропис- прописной буквы, и слова в сложных словосочетаниях, обозначающих пре- предикаты, соединяются символом подчеркивания «_». В конце записи каждого факта ставится точка. Расположение термов в предикате упорядочено. Факт -''¦* • любит (мэри, энди) . *"** означает, что «Мэри любит Энди» и отличается от факта -' '' *- "*'' ' любит(энди,мэри). Выбор предикатов, а также наделение их названиями, которые будут далее использоваться — это прерогатива программиста. По- Поэтому важную роль играет истолкование фактов. Например, факт ) Это не совсем верно, поскольку языки функционального программирования (лисп, ХОУП, миранда и др.) также имеют декларативную семантику. В отличие от ПРОЛОГа, декларативная семантика языков функционального программирования имеет алгебраическую природу. Программы, написанные на этих языках, можно вос- воспринимать как системы функциональных уравнений, поиск решения которых обес- обеспечивается процедурной семантикой. Элементами декларативной семантики можно наделить и операторные языки программирования. Но здесь декларативная семан- семантика играет второстепенную, вспомогательную роль и применяется главным обра- образом при анализе операторных программ. Действительно замечательным свойством логического программирования является то, что обе семантики — декларативная и процедурная — равноправны и в значительной мере независимы, хотя и полностью соответствуют друг другу (см. теоремы о корректности и полноте). Поэтому на од- одну и ту же логическую программу человек-программист и компьютер-исполнитель могут смотреть с различных позиций, наилучшим образом соответствующих стилю мышления каждого из участников процесса программирования. — Прим. перев. «отец (Джон,Крис)» можно понимать двояко: «Джон — отец Кри- Криса» или «Крис — отец Джона». Всякий раз мы должны остановить- остановиться на каком-либо одном варианте, и ни в коем случае не пытаться использовать оба сразу! Нам не приходится рассчитывать на полу- получение правильного результата программой, содержащей факты отец(джон.крис). . ' ',тж'-ш: отец(Джордж,ник) . ,"..-¦> если первый факт понимается нами как «Крис — отец Джона», а второй «Джордж — отец Ника» V i 3.2.3. Правила Правилом ПРОЛОГа является импликактивная формула (см. п. 3.2.1) логики предикатов. При помощи правил выражается инфор- информация и отношения более общие и более сложные, нежели простые сведения, представимые фактами. Например, ^ tsrui 5a , отец(крис,Джордж). Ч i4m 'A '¦'" " отец (ник, джон). Р T«V!^<3 :¦ отец(Х.Г) : - сын(Г.Х). Первые два дизъюнкта — факты. Они указывают нам на взаимос- взаимосвязь между конкретными людьми, Крисом и Джорджем, Ником и Джоном, соответственно. Третий дизъюнкт выражает общее без- безличное правило, в котором задействованы предикаты над данными: если Y — сын X, то X—отец Y. Переменные, как в правилах, так и в запросах, пишутся с за- заглавной буквы. В конце каждого правила ставится точка. Заголовок отделяется от тела символьной комбинацией «: —». Если тело прави- правила содержит более одного предиката, то эти предикаты отделяются друг от друга запятой «,». Рассмотрим пример ;/-т- ¦ ¦ <ч ¦ ".''¦¦'¦'' - t любит(джон,мороженое). любит (джон, мэри). • '• '•- ""- *'• ™- '. 'да« любит (джон, му зыку). геи'.ч.?; ".":-* -л,1 ^тах-.-ч. * съедобно(мороженое). з н ест(Х.Г) : - съедобно(У), любит(Х,Г). Ш1 Здесь тело правило образуют два предиката «съедобно (F)» и «любит (X ,Y)» Это правило утверждает, что для любых X и Y, если Y съедобно, и X любит Y, то X поедает Y (см. Определение 2.4.1). В ПРОЛОГе два и более правил могут иметь один и тот же заго- заголовок, и тогда мы имеем право записать их как одно новое правило
196 Глава 3. ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ с одним общим заголовком, разделяя тела символом «;». Например правила любит(Х , Y) ' — любит(У,Х). '/' д1 ' ' * любит(Х.У) : — хороший(У) . ' ча; ' :; можно объединить в одно правило ' ' "к ' ''*" любит(Х,У) : — любит(У.Х); хороший(У). e,i ' которое будет означать «X любит У, если У любит X, или если У — хороший». ПРОЛОГ нумерует факты и правила в каждой базе дан- данных. Например, в базе данных из последнего примера «лю- «любит (джон, мороженое)» является первым дизъюнктом базы данных, а правило ест(Х.У) : — съедобно(У), любит(Х,У) является пятым дизъюнктом. Как мы увидим в п. 3.4.1, порядок, в котором факты и правила заносятся в базу данных очень важен для вывода заключений. 3.2.4. Запросы Запросы, или целевые утверждения ПРОЛОГа, — это вопросы об- обращенные к тем условиям и предикатам логики предикатов, кото- которые фигурируют среди данных программы. Например, для данных п. 3.2.3 такими вопросами могут быть ? любит (джон, X). {U ? любит(Х.У), съедобно(У).Т -А* и ПРОЛОГ ответит на первый запрос Г X = мороженое * X = мэри ; - '» X = музыку • i а на второй запрос — X = джон У = мороженое Запросы начинаются с вопросительного знака и оканчиваются точ- точкой. На некоторые из запросов, как например, на запрос ? любит (джон, X) . можно ответить многими разными способами. Составной запрос, наподобие ? любит (X, У), съедобно (У). может содержать более одной подцели, которые отделяются друг от друга запятой. В составных запросах, одни и те же переменные обычно относятся к одним и тем же термам. Например, спрашивая ? любит (X, У), съедобно (У). мы просим программу отыскать такие X и У, чтобы X любил У, и У было съедобно. А запрос «м-....; .•(¦•.v-nu^ «.;.•¦;: ,t- vu-i:" ¦¦.•« н^мм; ктянен T>t л-.'г «'I t i Л г § 3.2. СТРУКТУРА ПРОГРАММЫ 197 У;:?!Н ? любит(Х.У), съедобно(X). потерпит неудачу. Это означает, что ПРОЛОГуЦв удастся отыс подходящее значение X, и поэтому он вынуиен будет ответ: нет. 'wVl Взгляните на описание одной вечеринки. любит(джес,элен). »г>-м;-' любит (джон,мэри) . ' !;' v любит (джейн, энди) . "*tP '" v', ;? любит (кейт, энди) . lv шЩ 1' слушает (джон, рок) . "f*\ !"', i слушает(тим,рег-т ' слушает(анна,джаз)Г пьет(джес,пиво). пьет(джон,джин). пьет (джейн,вино) . эм*>й^тйыЭ 6.Е \ пьет(кейт,вино). . 0 , , , пьет (анна, пепси). . ^ ...д^ ,,jj% ,-р курит(джес). ^ курит(кейт). '4 дружит (анна, X) : — слушает (X , рок) . 9 дружит (энди, X) : — пьет(Х ,вино), любит (X, энд»), курит(Х) . A) ? любит(джон,мэри). B) ? любит(джек,мэри). C) ? пьет(джейн,вино), слушает(джейн,рок). D) ? дружит (энди, X) . E) ? слушает(Х.У) . F) ? любит (кейт, X), любит(джейн,Х). ,м; г G) ? любит(Х.У), слушает (X, рок), пьет Qf> пиво) . Пролог ответит следующим образом A) да B) нет C) нет D) X = кейт E) X = джон I & ' ?>.<-4jr/-.-.BH ,--; •- >' У = рок ;.;•,;¦«.,•..•¦- •-> f« -<:f- « ^ = тим ^„ ^j У = рег-тайм ^: X = анна - -1) ^У = джаз .. , F) ^(Х = ЭНДИ . 1; и' G) нет к,,,,,, •,. * v ., ¦¦' *'<yt ')'¦ vs #•
198 Глава 3. ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ Запросы A), B) и C) относятся к разряду запросов проверки дан- данных, тогда как запросы с D) по G) — к разряду запросов обра- обработки данных. Запросы C), F) и G) являются составными, или конъюнктивными запросами. Запросы B), C) и G) терпят неудачу (Замечание 1.9.9 B)) по сле- следующим причинам. Для положительного ответа на запрос B) среди данных программы нет информации, касающейся отношений Джека и Мэри. При попытке найти ответ на запрос C) первая подцель вы- выполняется успешно, т. к. Джейн любит вино, но зато отсутствуют сведения о том, какого рода музыку предпочитает слушать Джейн. Поэтому вторая подцель и, следовательно (почему?), весь запрос C) терпит неудачу. Запрос G) не будет выполнен поскольку ин- информация о вечеринке не содержит сведений о таких значениях X и Y, которые удовлетворяли бы одновременно всем трем подцелям. § 3.3. Синтаксис данных ••>»*?,.>'--^i 3.3.1. Объекты ПРОЛОГа гу ' Как мы уже говорили, в ПРОЛОГе используется лишь собственное подмножество языка логики предикатов, обогащенное некоторыми вспомогательными символами. Таким образом термами в ПРОЛОГе являются переменные, константы и функции, зависящие от пе- переменных и констант (см. Определение 2.2.1). Константы, в свою очередь, подразделяются на атомы, числа и последовательности специальных символов. Основными объектами языка ПРОЛОГ явля- являются предикаты и списки. В этом разделе мы займемся изучением термов и основных объектов ПРОЛОГа. 3.3.2. Алфавит ПРОЛОГа Алфавит Пролога состоит из ",f, 41 а) заглавных и прописных букв латинского алфавита1) ABCDEFGH1JKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz б) цифр 012345678 9, в) специальных символов, наподобие !#$%&*()_=" + <> ? / ., набор которых зависит от конкретной версии ПРОЛОГа, г) вспомогательных символов, которые играют важную функцио- функциональную роль, но не отображаются на экран, наподобие пробела (SPACE) или перехода к новой строке (ENTER). § 3.3. СИНТАКСИС ДАННЫХ 199 1) Не умаляя корректности и общности, мы позволили себе добавить к этому спи- списку и буквы русского алфавита — Прим. перев. 3.3.3. Переменные Переменные в ПРОЛОГе обозначаются символами или словами, начинающимися с заглавных букв алфавита ПРОЛОГа. Переменные всегда начинаются с заглавной буквы или со знака подчеркивания. Например, переменными являются X, Y, Result, Отец, Who, .мэри, A3 Напротив, выражения х, у, result, отец переменными НЕ являются. Нельзя считать переменныш и такие выражения 1-ый_атлет (начинается цифрой) *•¦,¦¦ "Result" (заключено в кавычки) ti 3579 (цифровая запись) n.roj-}« Поэтому, если мы запишем < - • * A) женщина (Мать). Tsruft «*.. ¦ B) женщина(мать). то факт A) будет означать для ПРОЛОГа, что всякая константа, име- имеющаяся в программе есть женщина (почему?), тогда как факт B) говорит о том, что одна выделенная константа «мать» является жен- женщиной. ПРОЛОГ предоставляет дополнительную возможность использова- использования анонимных, безымянных переменных в тех случаях, когда нам нет необходимости знать их точное имя; мы можем просто поста- поставить на их место символ подчеркивания _ . Например, записывая в ПРОЛОГе мать(элен,_) . мы сообщаем тем самым, что Элен — это мать некоего лица, имя которого в этой программе несущественно. Задавая вопрос ? родите ли (ник, _, Мать). мы интересуемся тем самым только именем матери Ника, обозна- обозначая его отца анонимной переменной. Как правило, мы используем анонимную переменную в тех случаях, когда эта выделенная пере- переменная встречается в программе лишь один раз [Xant90]. Как будет показано в соответствующем параграфе, применяя анонимные пе- переменные, мы облегчаем процесс унификации и экономим время. 3.3.4. Константы Константы, которые в ПРОЛОГе изображаются символьными строками, подразделяются на три класса в соответствие с классифи- классификацией [Brat90]. Согласно этой классификации константы в ПРОЛОГе могут быть а) атомарными термами, * v '"•' б) числами, 'Ч «<» в) последовательностями специальных символов "W;:l-°'-¦
200 Глава 3. ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ § 3.3. СИНТАКСИС ДАННЫХ 201 Атомарный терм — это последовательность букв, цифр и знаков «.» (которая, однако, не должна начинаться символом подчеркива- подчеркивания, иначе это будет переменная). Первый символ должен быть при этом строчной буквой. Например, у342, torn, красное-яблоко ^ А вот такие выражения НЕ являются атомарными термами * Питер (начинается заглавной буквой) .-о _х5 (начинается подчеркиванием) t 4vst ч ««да», 3t •' (начинается цифрой) -..-,-.,.. * а.32 (содержит точку) Всякая последовательность символов, заключенная в одинарные ка- кавычки, также является атомом, как то 'х', 'Петр', '5tx', 'У Джона красивый галстук' Числа бывают двух типов — целые и действительные. Например, 211345, -32, 0.000013, -5.7 Первоначально язык ПРОЛОГ разрабатывался для описания символь- символьных преобразований, и его возможности выполнять арифметические вычисления были очень ограничены. Однако последняя редакция ПРОЛОГа [Colm90] предоставляет большие возможности для прове- проведения математических вычислений. Используя в прологе последовательности специальных симво- символов, мы можем ввести в обиход символьные конструкции, которым придается особое истолкование. Например, — > или = = = > можно использовать для обозначения импликации -+. с/г 3.3.5. Предикаты Предикаты (см. Определение 2.2.1) выражают отношения и свой- свойства термов. Например, предикат больше (+(Х, 2),: (if3)) означает, что терм +(Х, 2), или то же самое Х+2, больше, чем терм : (if 3), или то же самое Y: 3 (см. Определение 2.2.1). Символы «+» и «:» соответствуют сложению и делению, X uY — переменные, а 2 и 3 — константы. Наименования предикатов начинаются в ПРОЛОГе с прописной буквы. В ПРОЛОГе имеется возможность строить составные предикаты, или структуры, из предикатов, которые уже имеются в программе. Возьмем, например, факты, описывающие состав семьи ^ ОТвЦ(НИК) . !''• мать(мэри). ~ . .т*л>-,:¦:'>я^ «хмнфи ;¦ • ребенок(аяна). н>.- ,-¦ ¦¦. ^ • ,.»;¦' цкждаху (*| ' " ребенок(тим). .,¦' u<i?fefs\ йг;^'л i . ••. ,ч.;г ^•но В этом примере «отец», «мать» и «ребенок» — предикаты, а «ник», «мэри», «анна» и «тим» — константы. Факты этой базы данных можно выразить, используя один преди- предикат семья(отец(ник), мать(мэри), дети(анна,тим)). (**) В этом выражении «семья» — предикат, но «отец», «мать», «де- «дети» — уже не предикаты, а функции [Thay88]. Это означает, что выражения «отец(ник)», «мать(мэри)» и «дети(анна,тим)» рассма- рассматриваются как определенные значения функций, т. е. как констан- константы. Поэтому «отец(ник)» в (*) — совсем другой синтаксический объект, нежели «отец(ник)» в (**). Точно так же факт ,ц любит(джордж,мороженое). где «любит» — предикат а «джордж» и «мороженое» — константы, мо- может быть выражен при помощи предиката мороженое(любит(джордж)). A) или *¦ джордж(любит(мороженое)). B) причем в A) «мороженое», «любит», «джордж» — соответственно, предикат, функция и константа, тогда как в B) те же самые выраже- выражения «джордж», «любит», «мороженое» будут предикатом, функцией и константой соответственно. ПРОЛОГ распознает, является ли заданное выражение константой, функцией или предикатом в зависимости от его местоположения в факте, правиле или запросе; Метод распознавания будет наглядно продемонстрирован в следующем параграфе после того, как мы рас- рассмотрим древесное представление предикатов. Значительное преимущество использования составных предика- предикатов можно увидеть на примерах баз данных семьи (*) и (**). Со- Составные предикаты дают возможность упрощать выражения и гибко манипулировать с данными. Например, если мы интересуемся роди- родителями семьи, то соответствующие запросы к программе (*) будут иметь вид ? отец(Х). ? мать (Г). в то время как воспользовавшись одним предикатом, мы могли бы позволить себе единственный запрос к (**) ? семья(отец(Х), мать(Ю, _) . (**) в котором анонимная переменная (см. п. 3.3.3) обозначает, что мы не интересуемся значениями функции «дети».
202 Глава 3. ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ ,, 3.3.6. Представление предикатов деревьями Рассмотрим пример синтаксического анализа некоторого предло- предложения естественного языка. Мы можем для простоты считать, что предложение образовано из подлежащего, сказуемого и дополнения. Подлежащее и дополнение являются выражениями, состоящими из существительного и прилагательного, а группа сказуемого — выра- выражением, состоящим из глагола и наречия. Поэтому для синтаксиче- синтаксического анализа фразы белобрысый малыш медленно открыл дверь можно воспользоваться деревом [Thay88, Xant90], висячим-верши- висячим-вершинам которого приписаны слова этой фразы ¦ >,л «¦¦ ¦ оп га >>,* .л\г----'<х: ¦!< подлежащее предложение сказуемое A дополнение существительное прилагательное наречие пдряага белобрысый малыш медленно открыл ,,- существителЦИр : дверь ,. • '¦ Та же самая методика синтаксического разбора применима и к предикатам: каждый предикат представляется деревом. Корнем де- дерева (Определение 2.8.9) служит рассматриваемый предикатный символ. Внутренние вершины помечены функциональными симво- символами, входящими в состав предиката. Висячие вершины соответст- соответствуют переменным или константам, встречающимся среди аргумен- аргументов функций и предиката. Поэтому данные (*) из предыдущего параграфа могут быть пред- представлены четырьмя деревьями отец мать ребенок ребенок *^- ник мэрн анна ТИМ 'It I § 3.3. СИНТАКСИС ДАННЫХ 203 тогда как сложный предикат (**) соответствует дереву юо-т .« семья -л.-:.K,k.s 'ЦЗ отец ** ник мать мэри дети ft' анна Выражения "'i *л «любит(джордж, мороженое)», «мороженое(любит(джордж))» и «джордж(любит(мороженое))» представляются следующими структурами тим ¦;'#¦¦ !«'¦• Г;-. ' $ мороженое Джордж любит любит любит •¦>. Джордж мороженое Джордж мороженое 4л Как мы увидим в § 3.4, используя древесное представление пре- предикатов, ПРОЛОГ осуществляет унификацию. После проведения уни- унификации двух предикатов образуются деревья, которые будут в точ- точности совпадать. 3.3.7. Списки Список — это просто перечень данных, заключенный в квадрат- квадратные скобки «[» и «]», как например [вино,мыло,джон,X,дом] Те самые списки, которые служат основным элементом конструк- конструкций ЛИСПа [WiBe89], были встроены и в ПРОЛОГ. Используя списки, мы имеем возможность собирать информацию в одном объекте ПРО- ЛОГа. Например, три факта ^ любит (джордж, футбол) . ,-». любит(джордж,пиво). любит(джордж,чипсы). можно заменить, воспользовавшись списком, одним фактом 1?']. любит(джордж,[футбол,пиво,чипсы]). к (f
204 Глава 3. ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ в котором набор термов футбол,пиво,чипсы представлен объектом [футбол,пиво,чипсы]. В общем случае, список образован последовательностью термов1). Применяя списки, мы экономим память и получаем удобное сред- средство для представления и обработки сложных данных. Списки, вообще говоря, определяются рекурсивно следующим об- образом. Списком может быть а) пустой список, т. е. список, не содержащий ни одного элемента (обозначается «[ ]»). б) непустой список, образованный парой термов 1) первый терм называется заголовком списка. Щл 2) второй терм называется хвостом, или телом списка. Заголовком списка может быть произвольный терм ПРОЛОГа: кон- константа, переменная или функция2). Хвостом списка обязательно должен быть список. Например, заголовком списка [футбол,пиво,чипсы] является константа футбол, а хвостом этого списка является список [пиво,чипсы] Обратившись к рекурсивному определению функций в логике пре- предикатов, Определение 2.2.1, мы видим, что список не является функ- функцией. Более того, списки формируются на основе общего свойства или отношения, которым обладают все элементы списка. Например, список [мясо,хлеб] может обозначать продукты, которые нужно купить, и в этом случае он выражается предикатом купить(мясо,хлеб) Поэтому список можно рассматривать как предикат, восполь шись предикатным символом «.», обозначающим наличие неа| рого предиката на соответствующем месте. Например запись . (с алат,винегрет) обозначает список [салат,винегрет] без указания на качественные особенности термов «салат» и «ви- «винегрет» и взаимосвязь между ними. Поэтому выражение «.(са- «.(салат, винегрет)» можно рассматривать как обобщенный предикат, точная форма которого заранее неизвестна. Поэтому нельзя обра- обращаться к ПРОЛОГу с запросами ? [салат,винегрет]. <IF А*,.,. 1;.Д. § 3.3. СИНТАКСИС ДАННЫХ 205 или < н& 1 1> ИЛИ ,..t, . ? [X,винегрет]. поскольку нам неизвестно имя предиката, соответствующего «.». Бо- Более того, в одной и той же программе могут присутствовать несколь- несколько списков, и все они выражаются при помощи специального сим- символа «.». В общем случае список может быть представлен как предикат .(Head,Tail) Хвост списка, в свою очередь, является списком с заголовком и хвостом1). Если же мы рассматриваем «.» как функтор, т. е. символ обозначающий некоторую функцию, то общий вид списка будет таков .(Headl,.(Head2, .((Head3,.. ..(Head, [])...))), «; Где [ ] обозначает пустой список. " г Например список [а, 6, с] в общем виде представляется как .(а,.(Ь, .(с,[]))) Список, состоящий из одного элемента может иметь вид (элемент,[]) Наиболее часто списки реализу- ,; ются в виде деревьев. Древесная ,, структура списка образует внутрен- внутреннее представление этого объекта. Внутреннее представление спискоь используется интерпретатором ПРО- ПРОЛОГа. ¦'¦ Например, древесная структура списка [янв,февр,март,апр,май,июнь] изображена на рис. 3.1, где символ «.», сто- стоящий в корне дере- дерева, обозначает преди- предикат, а тот же са- самый символ «.», сто- стоящий в промежуточ- Рис- 3-1 ных вершинах обозна- , ' чает функцию. [элемент] или 01 1) В числе которых могут быть и ёйМОМ. — ПрОМ* 2) А также некоторый другой спишь «**17ршк. <ЦяМ д > 'tii 1) Или пустым списком. -*-Лрим. перев
206 Глава 3. ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ § 3.4. АППАРАТ ВЫЧИСЛЕНИЙ 207 Во всех редакциях ПРОЛОГа имеется очень развитая и гибкая си- система обозначений для списков, облегчающая обработку длинных списков и списков переменной длины. Представление списков ос- основано на применении символов «[», «]», а также «:» или «|». На- Например список [a,b,c,d] j!;m < ¦« с заголовком А и хвостом [6, с, d] записывается в виде ц Ш где переменные Я и Г соответствуют термам а и [6, с, § 3.4. Аппарат вычислений HI 3.4.1. Процедура унификации в ПРОЛОГе Процедура унификации термов (§ 2.9) вместе с реализующим ее алгоритмом (см. п. 2.9.9) является одной из наиболее важных опе- операций в ПРОЛОГе. Процедура унификации отсутствует в других языках программи- программирования высокого уровня. И хотя в ЛИСПе унификация выступает в качестве основного свойства операций, в этом языке не применя- применяется метод резолюций для построения вывода. Вместе с тем, спо- способность ПРОЛОГа строить эффективные выводы основывается на удивительно слаженном взаимодействии процедуры унификации и резолюции. Унификация позволяет связывать переменные с заданными объ- объектами языка ПРОЛОГ. Например, сообщение ПРОЛОГа X — футбол означает, что переменная X приняла указанное значение и стала связанной с константой «футбол». По существу, проводя унификацию, мы проверяем, можно ли при- привести два предиката к единому виду. Если это невозможно, то уни- унификация считается неудавшейся. Если же эти предикаты можно привести к общему виду, то унификация успешно завершается. В результате ее выполнения переменным обоих предикатов присваи- присваиваются такие значения, при которых эти предикаты будут отожде- отождествлены (т. е. будут совпадать). В математической литературе термин «унификация» нередко за- заменяется термином «отождествление», а вместо термина «присво- «присвоить значение» используются термины «связать» или «подставить». Связывание переменных понимается здесь совсем в другом смысле, нежели связывание свободных переменных (Определения 2.2.12 и 2.2.13), поскольку все переменные в ПРОЛОГе уже связаны кван- квантором всеобщности (Определения 2.4.1 и 2.4.4). Термин «связать» означает в ПРОЛОГе, что переменная приняла некоторое определен ное значение в процессе выполнения программы. При помощи алгоритма унификации и общего унификатора (Алго- (Алгоритм 2.9.7 и Определение 2.9.4.) ПРОЛОГ может выполнять сложные подстановки. Наилучшим образом эту процедуру можно описать, воспользовавшись древесным представлением предикатов. Предположим, что база данных в ПРОЛОГе содержит факт пациент(джон, температураC8)). /i (*) и мы обращаемся к ней с запросом н«ц>ш ? пациент (.X, температура(F)) . Древесные структуры Г и Г,, соответствующие факту (*) и нашему запросу выглядят следующим образом пациент т >:/ ч « » ' Джон температур» - .' "... • 38 пациент Ъ температура jW>:-f'} I у Если мы наложим дерево Т7 прямо поверх дерева Г, то для того, чтобы добиться полного совпадения, переменные дерева % долж- должны быть унифицированы, или отождествлены, с соответствующими термами дерева Т, поскольку наименования предикатов и количест- количество дуг в обоих деревьях одинаковы. Поэтому в ответ на наш запрос ПРОЛОГ образует подстановку Y =38 ч ..;;"*' ? В общем случае в процессе унификации, проверяя возможность отождествления А я В, необходимо соблюдать следующие правила [Xant9O]. 1) если А и В — константы, то А и В отождествимы только в том случае, когда они соответствуют одному и тому же объекту, 2) если А — переменная, а В — произвольное выражение, то А отождествляется с В. Если В — переменная, то В отождествляется 3) если А и В — функции, то А и В отождествимы только тогда, когда а) А и В имеют одинаковые заглавные функциональные символы, ) Это правило унификации — так называемая унификация без проверки вхожде- вхождения — в общем случае некорректно и применяется исключительно в целях повыше- повышения эффективности выполнения пролог-программ. Для того, чтобы переменная А и сложный терм В были унифицируемы необходимо также потребовать, чтобы А не имела вхождений в В. — Прим. перев.
208 Глава 3. ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ 6) соответствующие подтермы А и В попарно отождествимы1). 4) если А я В — предикаты, то А и В отождествимы тогда и только тогда, когда а) А и В имеют одинаковые заглавные предикатные символы, б) соответствующие термы-аргументы А и В попарно отождест- отождествимы2). Перечисленные правила согласования свидетельствуют о том, что процедура унификации выполняется рекурсивно. Правила C) и D), или точнее подпункты (За) и Dа) этих правил, обращаются к пунк- пунктам 1, 2, 3 и 4 неформального описания унификации, приведенного в § 2.9. Рекурсивную сущность этих правил демонстрирует следую- следующий пример. Нам предъявлены следующие геометрические данные точкаA,1). i точкаC,5). .'.. , ''«.«иА-¦¦'(. -г, -| '.'.', ? отрезок (точка A,1), точкаC,5)). '<¦. ¦" \ а также запрос отрезок(точка(Х1Д2), точка(У1,У2)). '. l'"' <:,¦¦;¦> Соответствующие им древесные структуры таковы ;, vi«' ¦ л \ -> точка \ 'ь; t чЯЙ:с' точка "•>¦¦¦ отрезок отрезок К)Ф il пг. точка точка •ч- р, п% точка точка У1 Y2 Тогда правила унификации будут применяться в следующем порядке ) Имеется в виду отождествимы одновременно при помощи одной и той же под- подстановки. — Прим. перев. ) И здесь также имеется в виду, что эти пары термов отождествимы одновременно при помощи одной и той же подстановки. — Прим. перев. § 3.4. АППАРАТ ВЫЧИЩЕНИЙ 209 A) B) C) D) E) отрезок .- точка Х\ Х2 Ф' точка Y\ Y2 <т отрезок точка 1 1 точка 3 5 ... Dа) " D6, Зав A)) 7' C6 в B)) D6, Зав A)) 0! C6 в B)) .к -п и i ц э оН Поэтому деревья Г3 и Т, могут быть унифицированы, или отожде- отождествлены, путем означивания переменных Х\ = 1 Х2 = 1 Mi- -» Y\ = 3 Y2 = 5 Рекурсивное определение отношений составляет одну из динамиче- динамических характеристик ПРОЛОГа, которая будет рассматриваться более подробно в § 3.4.5. 3.4.2. Вывод и процедура отката Как мы уже упоминали, программа в ПРОЛОГе допускает двоякое истолкование — логическое, или декларативное, и процедурное. В этом параграфе мы займемся процедурной интерпретацией ПРОЛОГа. Мы опишем, как именно ПРОЛОГ осуществляет вывод заключений. Мы уже ознакомили читателя с процедурой унификации и резо- резолютивным методом. Применяя процедуру унификации, мы строим множество основных атомов программы (Определение 2.2.15). На следующем шаге мы повторно применяем правило резолюции к это- этому множеству основных атомов и устанавливаем в итоге справедли- справедливость заключений, выводя пустой дизъюнкт. Используя метод резо- резолюций, мы уверены, что любое высказывание, которое может при- принять истинное значение, получит это значение. Однако, в ПРОЛОГе мы не можем ориентировать вывод на интересующее нас выска- высказывание, а это чрезвычайно важно для эффективного выполнения программ. Рассмотрим, например, следующие высказывания пропозицио- пропозициональной логики ; (О о и, B) Е Щу C) BVnB °'7* D) AV-^D У't Х:;.:$ E) АУ^В *»- •¦ :<,-.-.,.< ¦ ¦ -> ¦;,1,«^' > -*•
210 Глава 3. ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ и зададимся вопросом, всегда ли в этом случае будет справедливо А. Мы добавляем высказывание F) ^А и получаем следующее резолютивное доказательство А. л' G) В из B) и C) ; (8) А из G) и E) Л*' '* <¦' (9) D из (8) и F) П ¦•:) Но с равным успехом можно построить и другое резолютивное j казательство А. .^ ;/ г. .g^^."<**]•¦¦ G') А изA)иD) ;-w>;mv,wttr, мтг. (8') D из G') и F) ,,, -:,Гу>»«г<л , Первое доказательство длиннее второго, и для его построения тре- требуется больше времени. Кроме того, в первом доказательстве нам пришлось вывести высказывание В, не имеющее никакого отноше- отношения к А. Аппарат вывода в ПРОЛОГе содержит специальную процедуру по- поиска в пространстве атомов программы, которая, с одной стороны, позволяет программисту управлять последовательностью вычисле- вычислений, а с другой стороны, гарантирует, что все возможные решения задачи будут найдены [Lloy87]. Эта процедура называется отка- откатом. Рассмотрим, например, следующую базу данных в ПРОЛОГе. К(,;. вор (джон) /* 1 */ j4 \t. любит (мэри, шоколад) /* 2 */ . .- любит (мэри, вино) /* 3 */ .',,-¦. любит (джон, X): -любит (X, вино) /* 4 */ может_похитить(Х,5О : -вор(Х),любит(X, Y) /* 5 */ В большинстве редакций ПРОЛОГа комбинация символов /* откры- открывает, а комбинация */ закрывает комментарии, не исполняемые программой. В приведенной программе мы использовали в качестве комментариев номера дизъюнктов. Предположим, что мы обратились к программе с целевым запро- запросом ¦¦¦¦it ? можетлохитить(джон,/?) /* что може*;й$!(Нтить Джон */ Для того, чтобы ответить на этот запрос придиг^Л^полнить сле- следующие действия. ¦'- ' .,'.;.- Этап 1. Х/Джон Z/Y вор (Джон) может лохитить (джон ,Z). Проверяется возможность унификации целевого  утверждения с фактом или заголовком какого-либо правила базы данных. Унификация возможна с \ заголовком правила E) при помощи подстановки «;,< ' Х/Джоц, Z/Y. Запоминается порядковый номер правила E). Все переменные, входящие в тело , '¦) программного утверждения E), изменяют свои «я значения в соответствии с унифицирующей подстаикЖОш § 3.4. АППАРАТ ВЫЧИСЛЕНИЙ 211 Этап 2. ? вор(джсон), любит(лхон,У) . да Этап 3. A) ПРОЛОГ пытается выполнить поочередно каждую ** подцель. В базе данных, начиная с первого ,1 дизъюнкта A), проводится поиск программного утверждения, заголовок котрого может быть унифицирован с первой подцелью. Унификация успешно применима к дизъюнкту A). Этот дизъюнкт является фактом, и поэтому подцель выполнена ...паи ¦ ч-т ? любит(джон,У) . X/Y любит(У,вино) Этап 4. D) ПРОЛОГ пытается выполнить вторую подцель. В базе данных, начиная с первого дизъюнкта A), проводится поиск программного утверждения для унификации с этой подцелью. Унификация успешно применима к дизъюнкту D) с использованием подстановки X/Y. Переменные в теле правила D) немедленно изменяют свои значения в соответствие с этой подстановкой. ? любит (У, вино ). Этап 5. И' О?? «шз». Предпринимается попытка выполнить дизъюнкт, образующий тело правила D). База данных вновь просматривается с самого начала в поисках подходящего для унификации программного утверждения. Попытка унифицировать подцель с фактом B) терпит неудачу, поскольку "вино" и "шоколад не унифицируемы. Порядковый номер дизъюнкта B), по отноше- отношению к которому была предпринята унификация, запоминается. B) Y/Мэри Этап 6. ПРОЛОГ пытается найти иной способ выполнения подцели и переходит к следующему дизъюнкту программы C). Здесь унификация успешна. C) Я».-: да Этап 7. Исходная цель «можетлохитить (джон, Z)» была достигнута по- посредством подстановки Z/Мэри. Вслед за этим ПРОЛОГ предприни- предпринимает попытку достичь этой цели другим путем. Для этого произ- производится откат к ближайшей предшествующей подцели, которую удалось достичь, т. е. к «любит(F,вино)», с тем, чтобы провести ее унификацию с другим хорновским дизъюнктом этой программы. На этом этапе вычисления ПРОЛОГ освобождает все переменные от тех значений, которые были присвоены им ранее. Затем прос- просматриваются все дизъюнкты, расположенные в программе вслед за последним дизъюнктом, с которым удалось унифицировать эту под- подцель (в данном случае, следующие за дизъюнктом C)). В ПРОЛОГе расположение вслед означает, что соответствующий дизъюнкт име-
212 Глава 3. ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ ет списковый номер больший, нежели последний дизъюнкт, с ко- которым была проведена унификация (см. п. 3.1.2). Поскольку номер исполняемого дизъюнкта заносится в память на каждом шаге вычис- вычисления, ПРОЛОГ может тем самым помечать все расположенные ниже дизъюнкты. Ввиду того, что в нашей программе отсутствуют другие факты или правила, заголовки которых могут быть унифицированы с данной подцелью, ПРОЛОГ прекращает поиск. Из приведенного описания функционирования программы видно, что ПРОЛОГ пытается выполнить одну цель на каждом шаге вычи- вычисления. Эта особенность механизма вывода в ПРОЛОГе, или точнее, процедуры отката, наделяет ПРОЛОГ свойством детерминированно- детерминированности. Порядок, в котором программные утверждения заносятся в базу данных, играет важную роль при выполнении и управлении ПРО- ЛОГ-программой. Попытка ПРОЛОГа отыскать решение для заданной (под)цели программы путем просмотра базы данных в глубину, пред-; ставляет собой одну из основных алгоритмических стратегий обхо- обхода дерева поиска — стратегию поиск в глубину с возвратом. Мы перейдем сейчас к описанию этого алгоритма, составляющего ядро процедуры отката. V:<. i. Г, V -U 3.4.3. Поиск в глубину с возвратом Применение деревьев для поиска решения задачи основано на представлении начальных данных, равно как и решений самой за- задачи, в виде пространства состояний [Nils71]. Пространством со- состояний называется дерево, в котором а) вершины соответствуют различным стадиям решения проблемы: начальное состояние, промежуточные состояния, возникающие в ходе решения задачи, и заключительные состояния; б) дуги, соединяющие вершины, соответствуют допустимым перехо- переходам из одного состояния в другое. Решение проблемы, таким образом, сводится к поиску пути из на- начального состояния в заключительное состояние [Brat9O]. Осуществляя процедуру выполнения сложного целевого запро- запроса, ПРОЛОГ просматривает пространство состояний. Целевой запрос становится корневой вершиной соответствующего дерева. Промежу- Промежуточные вершины соответствуют промежуточным подцелям, которые всякий раз нужно достичь. Заключительные состояния соответству- соответствуют фактам или следствиям из фактов базы данных (Определение 2.5.21). Выбор пути из одного состояния в другое равносилен вы- выбору соответствующих подцелей. Поэтому пространство состояний программы в первом примере § 3.2.2 может быть описано следую- § 3.4. АППАРАТ ВЫЧИСЛЕНИЙ 213 щим деревом, -''•..•at;' ¦*i"t\u а D В ;*..«>, .*•),•:¦¦• .\<-v-. *<r\ E в котором дизъюнкт А является начальным состоянием, целью задачи, а дизъюнкты D и Е — заключительными состояниями, фак- фактами базы данных. Поэтому для решения задачи вывода А имеются два пути решения, которые соответствуют двум различным множе- множествам допустимых переходов {Е—>В, В —>А}. Возникает вопрос, как в заданном пространстве состояний задачи выбрать подходящий путь решения задачи, и даже более того, как отыскать все альтернативные пути решения. Мы можем получить ответ на эти вопросы, воспользовавшись алгоритмом поиска в глу- глубину с возвратом для обхода дерева. Идея алгоритма поиска в глубину с возвратом основана на следу- следующих очевидных соображениях. р, Поиск пути решения, Путь_решения, из вершины N дерева в верщр ну заключительного состояния нужно проводить, руководствуя» двумя правилами. ™ а) Если N — вершина заключительного состояния, то Путь_решения представлен списком [JV]. ,,, б) Если N имеет последователя ATI, для которого построен ы Путь_ решения_1, ведущий из вершины ЛГ1 ' в разрешающую вершину, то Путь.решения задается .' списком [N: Путь_решения_1]. Алгоритм исполняется итеративно до тех пор, пока все возможные пути решения не будут найдены. Каждая вершина-последователь, для которой проверяется наличие пути решения, должна распола- располагаться в дереве глубже и левее своего непосредственного предше- предшественника, считая от начальной вершины. Когда ПРОЛОГу нужно вернуться, для того чтобы отыскать альтернативные пути, соверша- совершается откат к непосредственно предшествующей вершине. Отсюда и название алгоритма. Таким образом, алгоритм поиска в глубину с возвратом может быть представлен следующей ПРОЛОГ-программой. »\,v. ч ( «о
214 Глава 3. ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ V,[N]) : - цель (AT). . V, [N: путь-решения]) : — допустимый_переход(Д N1) ,найти_путь(./У1 ,путь_решенил). Может показаться странным, что в этой программе, а точнее, во втором программном утверждении, мы используем предикат «най- ти_путь» для определения самого предиката «найтилгуть»! Подоб- Подобные рекурсивные определения отношений между объектами ши- широко используются в ПРОЛОГе и будут рассмотрены более подробно в § 3.4.5. Способность ПРОЛОГа к определению его собственных структур- структурных и функциональных элементов, наподобие алгоритма поиска в глубину и рекурсии, является одним из признаков динамичности этого языка. Эта способность проистекает из декларативной и ло- логической природы ПРОЛОГ-программ и ее называют ПРОЛОГ посред- посредством самого ПРОЛОГа. 3.4.4. Управление откатом: отсечение В языке ПРОЛОГ имеется специальный предикат отсечения, обо- обозначаемый символом «!», который служит для управления проце- процедурой вывода, или точнее, для управления откатом. «Отсечение» применяется в ПРОЛОГе для предотвращения выбора определенных путей в процессе обхода пространства состояний задачи. Это бывает необходимо в тех случаях, когда пользователь либо знает заранее, что эти пути не ведут к решению задачи, либо желает сократить время вычисления программы. Помимо этого отсечение применяет- применяется императивно (принудительно) в тех случаях, когда пользователь сознательно отказывается от рассмотрения следствий из некоторых определенных фактов (использует отсечение как форму неприятия фактов). «Отсечение» как логический предикат всегда считается истин-' ным. Это означает, что оно всегда должно быть выполнено в случае его вызова. Интересно проследить последствия использования «от- «отсечения» при вычислении и построении заключений ПРОЛОГ-про- ПРОЛОГ-программ. Рассмотрим, например, следующую базу данных ПРОЛОГа [Тпау88]. - Р2(Х), РЦУ). ¦/-, /* -РЦУ). - /* ;.. рцх,у) ; -Р2(а). ;; рзF). , РЦа). ' ' Р5(а). * Р5(Ь). и запрос ., ? Р5(Х),РЦХ,У). 1 */ 2 */ 3 */ 4 */ 5 */ / / / /* 6 */ ,/*7*/ § 3.4. АППАРАТ ВЫЧИСЛЕНИЙ 215 Пространство состояний, содержащее единственный путь решения задачи, представлено деревом ? РЦХ),РЦХ,У). «м*-* ¦_ ; 1.34 . а 4 ПРОЛОГ решает первоначальный запрос «Р5(Х), Р\(Х, Y).* с использованием подстановки Х/а. Давайте посмотрим теперь, что случится, если мы вставим «отсе- «отсечение» в тело программного утверждения / * 1 * / так, чтобы этот дизъюнкт принял вид РЦХ, У): - Р2(Х), !, РЗ(Г). /• 1' •/ Сначала ПРОЛОГ попытается разрешить начальную цель, выбрав ле- левый путь. Значит ему придется разрешать подцель «Р1(а, а)», акти- активизируя дизъюнкт /* Г */. После того, как будет решена подцель «Р2(а)» настанет очередь отсечения, !, которое выполнится немед- немедленно, поскольку предикат отсечения всегда является истинным. Вычисление продолжится, и будет предпринята попытка унифици- унифицировать Р3(а), которая окончится неудачей, поскольку в программе нет дизъюнктов, заголовки которых могут быть унифицированы с Р3(а). В обычном случае ПРОЛОГ должен провести откат к под- подцели «Р1(а, а)» и продолжить вычисление активизируя дизъюнкт / * 2 * /. Но поскольку в теле / * Г * / содержалось отсечение, которое было выполнено, отката не произойдет. Отсечение, \, не допускает повторную обработку подцели, которая была уни- унифицирована с заголовком процедуры, содержащей в теле этот предикат отсечения. И хотя в том случае, когда программа содер- содержит дизъюнкт /* 1 */, первоначальная цель будет выполнена, если
216 Глава 3. ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ последовать правым путем вычисления, применяя подстановку Х/а и YJa, тем не менее, эта же цель не будут достигнута в том слу- случае, когда программа содержит дизъюнкт /* Г */. Это означает, что ПРОЛОГ выдаст ответ «нет». Другими словами, правый путь ре- решения, заключенный в прямоугольную рамку, вырезан и удален из пространства состояний. В пространствах состояний, имеющих бо- более сложное устройство, применение «отсечения» приводит к уда- удалению из пространства целых поддеревьев. Вот этой способности отсекать поддеревья решений и обязан своим названием предикат «отсечения». Интересно посмотреть на то, как при помощи оператора «отсе- «отсечения», мы можем избавить ПРОЛОГ-программы от зацикливания, возникающего при бесконечно долгом выполнении операций вслед- вследствие использования неправильно описанных данных. Давайте ис- исследуем поведение следующей ПРОЛОГ-программы вор (джон). / * 1 * / вор(Х) : - вор(Х). , _ /* 2 */ при обращении к ней с запросом ¦ \ ? вор(Х). "''' л /* 3 */ Унифицируя запрос с фактом / * 1 * /, ПРОЛОГ немедленно получит ответ X =джон, и затем, освободив переменную X от значения «джон», попытается выполнить запрос другим способом, обратившись к дизъюнкту /* 2 * * I. После применения правила резолюции образуется новая цель ? вор(Х). /* 4 */ /* 4 * совпадающая с первоначальным запросом /* 3 */. Дизъюнкт /* 4 */ унифицируем с заголовком программного утвр / 2 * /, дщая с первоначальным запросом /* 3 */. Дизъюнкт /* унифицируем с заголовком программного утверждения / * 2 * /, и после унификации будет вновь получено целевое утверждение /¦ 4 */'). Это означает, что программа попала в бесконечный цикл, из которого нет выхода. Посмотрим теперь, как та же самая программа, в которой дизъ- дизъюнкт/* 2 */ снабжен предикатом отсечения '«4Ш<шх. вор(джон). ..onoqu Mij* 1 */ вор(Х) : - вор(Х), !. vprjTH.-'ti-.„я•, хщочса ,0/ё 2' */ будет отвечать на запрос атоя ;л&л-,о«? ао !,-."¦ 7 ворОЛ. ги, , №,(.п ,,,)/• 3 •/ Дизъюнкт /* 1 */ тут же даст ответ » , •Ч'У'П <"*¦+ X =джон, ) Если говорить более строго, то пролог, имея запрос / * 4 * /, сначала вновь активизирует факт /* 1 */, еще раз получит ответ X =Джон, и лишь затем обратится к яиз-kiohktv /* 9 * /—л*.,,- «—~- к дизъюнкту / * 2 * / — Прим. перев. § 3.4. АППАРАТ ВЫЧИСЛЕНИЙ 217 ПРОЛОГ попытается отыскать все возможные решения: унифицируя запрос с заголовком программного утверждения /* 2' */, разрешит его, получит новую цель ? вор(Х), !. /* 4' •/ и остановится, поскольку «отсечение» не позволяет во второй раз обратиться к заголовку правила /* 2' */, в теле которого встречается отсечение1). Поэтому единственным ответом будет X =джон, , и программа будет выполнена без зацикливания. Функционирование «отсечения» может быть описано только в терминах процедурной интерпретации ПРОЛОГ-программ. Это озна- означает, что ответственность за последствия использования отсечения и управление вычислением возлагается на программиста. Необхо- Необходимость включения «отсечения» в состав языка ПРОЛОГ постоянно оспаривается теми, кто хочет видеть ПРОЛОГ чисто логическим язы- языком программирования. Эти возражения опираются на следующие доводы. 1) ПРОЛОГ-программа без «отсечения» способна, используя откат, находить все правильные ответы на заданный запрос (система вы- вычислений правильных ответов обладает свойством полноты). С вве- введением «отсечения» это свойство полноты утрачивается, так как «отсечение» не позволяет программе вычислить любые правильные ответы. 2) Воспользовавшись «отсечением», мы получаем возможность создавать логически некорректные ПРОЛОГ-программы, которые, несмотря на скрытую возможность логического вывода из них неправильных заключений, работают корректно в случае примене- применения «отсечения». Однако, использование «отсечения» в некоторых программах позво- позволяет повысить их эффективность без нарушения логической целос^» ности. ^ ¦< t 3.4.5. Рекурсивные определения в ПРОЛОГе Используя рекурсивные определения, мы можем определять но- новые предикаты в ПРОЛОГ-программе .Предположим, например, что мы хотим определить отношение «предок» для изучения одного из фрагментов фамильного древа. 1) На самом деле пролог сначала обратится к факту /* 1 */, еще раз получит тот же самый ответ X =джон, и лишь затем сработает отсечение, препятствуя повторному обращению к дизъюнкту / * 2' * /. — Прим. перев.
218 Глава 3. ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ ..J-',',-' ,>r-i»r X6 !V 'О I'. предок (X, Z) предок (X, Z) Каждая вершина обозначает .-,, .,.;! члена семьи, а связь между ,i j вершинами обозначает \ отношение "роджтель" Мы можем заметить, что для каждой пары лиц X, Z, непосред- непосредственно связанных друг с другом в фамильном древе, X является предком Z, если X — родитель Z. Поэтому отношение «быть пред- предком» может быть определено посредством хорновского дизъюнкта предок(X, Z) : - родитель^, Z). (а) Таким образом, используя предикат «родитель», мы определяем предикат «предок» для людей, отстоящих друг от друга на одно поколение. При определении отношения «быть предком» для людей, отсто- отстоящих друг от друга на два поколения, например, для Х\ и Х4, мы замечаем, что для каждой пары лиц X, Z в фамильном древе, X является предком Z, если X является родителем некоторого F, который, в свою очередь, является родителем Z. Тогда мы записываем дизъюнкт предок(.X, Z) : - родитель(.X, F), родитель(Х"Z). (Ь) Проводя попытку проверить отношение «быть предком» между ли- лицами, отстоящими друг от друга более, чем на два поколения, нам придется строить последовательность программных утверждений нарастающей длины. : — родитель^, F1), родитель(F1, F2) , родитель(F2, Z). : — родитель^, F1), родитель(Y1, Y2) , родитель(F2, F3), родитель (F3, Z) . Погружаясь вглубь фамильного древа, мы вынуждены определять все новые и новые правила. Это, вне всяких сомнений, делает на- нашу программу неэффективной, поскольку независимо от выбранного языка, программа считается полезной и эффективной лишь тогда, § 3.4. АППАРАТ ВЫЧИСЛЕНИЙ 219 когда она может найти решение общей задачи, а не только ее от- отдельных специальных примеров. Но существует и более удобный способ определения отношения «быть предком». Заметим, что для каждой пары лиц X, Z в фамильном древе, X является предком Z, если X является родителем некоторого F, который, в свою очередь, является предком Z. Исходя из этого, мы имеем возможность записать следующее про- программное утверждение ПРОЛОГа предок(.X, Z) : — родитель(X, F), npeflOK(FZ). (с) В этом описании мы использовали предикат «предок» для опреде- определения самого предиката «предок»! Определения такого вида назы- называются рекурсивными определениями, а отношения, которые ими обозначаются, называются рекурсивными отношениями. Мы по- понимаем интуитивно, что рекурсия зарождается в тот момент, когда набросок решения строится путем воспроизведения это- этого же наброска в ином масштабе или на другом уровне [Xant90]. Так, в примере с фамильным древом описание отношения «предок» между Х\ и ХЪ воспроизводится на разных уровнях следующими диаграммами. XI—| предок X2—' уровень О с г; я XI—| . Х2 ¦ Х4 Х2 предок )•('¦ уровень 1 зредок хъ—' уровень 2 Правила (с) недостаточно для определения отношения «предок». Хотя с точки зрения логики в нем выражено все то, что мы хотим определить, оно все же не дает программе необходимой информации для получения ответа на запрос, касающийся отношения «предок». Обратимся к примеру. Предположим, что нас снабдили фамиль- фамильным древом и соответствующей базой данных ПРОЛОГа, представ- представленными НИЖе, -W ,. ГуАй« .• , •'¦ . .•-.t«s. -, >,*#:,. . *>Л ч-jt» .• «Я
220 Глава 3. ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ ™ ''¦'УЛ. '¦ Анна Мэри Джон родитель(мэри.джон). ,., , !¦ I*!*/ родитель (дхон, анна). ,( ,, ., / * 2 * / родитель (джон, крина). и /*3*/ предок (X, Z) :- родитель (А", У), -if ¦ чч ¦¦•", предок (У, Z). t k / *5 */ Ирина , ^"'; / !;v soi-шм и мы обратились с запросом "'' р""-..ГЛсщ^щ!'?«\ ? предок(мэри,анна). ПРОЛОГ попытается отыскать ответ на этот запрос в Пространстве состояний, изображенном в виде следующего дерева онпо мои ,.. ,,!.,,.; ? предок(Мэри,Анна). ,л г,, цикл ¦г- Ы.4 HI 34'"! Х/Мэри, Z/Анна ? родитель(Мэри,У),предок(У,Анна). У/Джон ? предок (Джон, Анна). Х/Джон, Z/Анна .;')!¦ ПРОЛОГ не сможет завершить поиск решения проблемы в про- пространстве состояний. Эта ветвь дерева будет продолжаться бес- бесконечно долго, и ПРОЛОГ будет все время проходить один и тот же цикл, пытаясь выполнить цель «предок(У,?)», означивая по- разному ее переменные. И конечно, ПРОЛОГ не прервет выполнение программы, не имея возможности ответить «да» или «нет». Момент остановки программы будет определяться ограничениями вычисли- вычислительных ресурсов компьютера, на котором установлена конкретная редакция ПРОЛОГа, а вовсе не естественным завершением вычисле- вычисления ПРОЛОГ-программы. В связи с этим нам нужен метод, который позволял бы надежно гарантировать нормальное завершение выполнения заданной рекур- рекурсивной процедуры. Для применения этого метода нужно завести еще один хорновский дизъюнкт, обеспечивающий краевые усло- условия, при которых выполняется исследуемое отношение. В примере § 3.4. АППАРАТ ВЫЧИСЛЕНИЙ 221 с фамильным древом таким условием будет отношение «родитель», означающее, что одно из лиц является предком другого лица, если оно, по крайней мере, является родителем этого другого лица, т. е. Для всех X, Y в фамильном древе X — предок Z, если X — роди- родитель Z. Нам нужно, таким образом, добавить к базе данных программное утверждение предок(Х, Z) : - родитель(Х, Z) . /* 4 */ Дизъюнкт / * 4 * / играет также роль граничного условия, описы- описываемого отношения. С введением /* 4 */ пространство состояний, соответствующее ответу на первоначальный запрос, будет представ- представлено деревом ? предок(Мэри,Анна). ¦¦'*,¦ Х/Мэри /. Z/Анна / / родитель(Мэри,Анна) нет Х/Мэри \ Z/Анна Г.. « Э1-; • ? рояитель(Мэри,У),предок(У,Анна). -Ив У/Джон ? преяок(Джон,Анна). «и. 1ь(Джон,У),предок(У,Ан«^ 'Щ У/Анна .Д ¦- -И-. ? родитель(Анна,Анна). нет ? предок(Анна,Анна). 5 ? родитель(Анна,Анна),предсис(Анна,Анна) Итак, добавляя дизъюнкт / * 4 * /, мы вынуждаем ПРОЛОГ завер- завершить поиск в пространстве состояний и ответить положительно на наш запрос. Краевое условие рекурсивного отношения называют также ре- рекурсивным базисом.. К выбору ограничения для рекурсивного отно- отношения и соответствующего ему программного утверждения нужно отнестись очень внимательно. Имея дело с задачей, допускающей рекурсивное решение, следует придерживаться следующих принци- принципов. Общее решение задачи разбивается на два направления: iw..$». э
222 Глава 3. ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ § 3.4. АППАРАТ ВЫЧИСЛЕНИЙ 223 1) В первом направлении приводятся решения «простых» частных случаев задачи (обеспечиваем рекурсивный базис). 2) Во втором направлении рассматривается «общий» случай за- задачи, решение которого осуществляется сведением к упрощенному варианту этой же задачи (обеспечиваем рекурсивный переход). Перед тем, как обратиться к рассмотрению специальных операций над списками, стоит сказать несколько слов об операции унифика- унификации над списками. 3.4.6. Обработка списков Поскольку списки есть ни что иное, как абстрактные предикаты (см. § 3.2.4), они унифицируются точно так же, как и все прочие предикаты, а именно Список L 1 унифицируем со списком L 2, если L 1 и L 2 имеют в своем составе одно и то же количество элементов, и все элементы, входящие в состав L 1, унифицируемы с соответствующими элемен- элементами L21). Поэтому два списка могут быть унифицируемы тогда и только то- тогда, когда их заголовки и хвосты, т. е. собственно элементы списков, могут быть унифицированы. Например, для списков ' ¦**¦¦•'''' > Ll = [a:Y] запрос к ПРОЛОГу ? L\=L2 будет успешно выполнен с подстановкой Y = [Ь, с]. В свою очередь, списки = [а,Ь] 1/2=[высота, цвет, местоположение] ,,. i будут, напротив, не унифицируемы, поскольку имеют разное коли- количество элементов. Списки можно использовать для представления множеств. Одна- ( ко, здесь имеется одна существенная особенность. Порядок распо- расположения элементов в множестве не играет никакой роли, тогда как . порядок расположения элементов списке очень важен2). Но тем не ') При помощи одной и той же подстановки, общей для всех пар соответствующих элементов этих списков. — Прим. перев. 2) Следует также иметь в виду, что все элементы множества считаются попарно различными, в то время как списки могут содержать любое количество одинаковых элементов. Поэтому корректнее было бы сопоставлять списки не с множествами, а с мультимножествами. — Прим. перев. менее, над списками выполняются такие же основные операции, как и над множествами. Поэтому, основываясь на рекурсивном опреде- определении списка и процедуре унификации, ниже будут предложены определения следующих операций: 1) Проверка принадлежности произвольного элемента или списка элементов некоторому списку, т. е. отношение принадлежности и включения для списков. 2) Конкатенация (последовательное соединение) в качестве объ- объединения списков. 3.4.6.1. Предикат member Ьав-:: Предикат member применяется для проверки вхождения произ- произвольного элемента в состав некоторого списка. Этот предикат встро- встроен в большинство редакций ПРОЛОГа. В общем случае считается, что элемент X входит в состав спи- списка L, если а) X — заголовок L, или :л- '¦ б) X — элемента хвоста списка L. v! Поэтому мы можем привести следующее рекурсивное определение предиката member A) member (Я, [Я: .]) . B) member(A,[_: Т]) : - member(A, T) . где _ обозначает безымянную переменную. Дизъюнкт A) задает ба- базис рекурсии. Например, пространство состояний для запроса member(X, [а, Ь, с]) . представлено деревом ~~[ ' ? member(X,[a,b,c]). Х=а ¦щ '-¦¦¦!• ..,9Т member(X,[a:_]). да ? member(X,[b,c]). Х=Ь ? member(X,[b:J). да Х=с member(X,[c]) А=Х Т=[] member(X,[c:_]). да ? member(X,[ нет И поэтому элемент X щходит в состав списка [а, Ь, с] только в том случае, когда ."'. ,-¦-. < ¦. с s - ¦¦ -•.':>?®п
224 Глава 3. ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ X = a, X = b, или или Г.- 'J -Ь ** ¦! , r t J - ,Л Легко видеть, таким образом, ч^Д1Р0Ж)Г, #ытаясь$*1р}«ииггь за- запрос '.у .-А уц,; , ..м'^,.^) тетЪет(Х,[а, b, с\). , ' •' чдд.рки^>v-; » подставит на место переменной ДГ°1С011кретнУю i , >HiiJ 3.4.6.2. Предикат append При помощи предиката append мы построим список L3, являющийся конкатенацией пары списков Ы и L2. Рассмотрим этот новый предикат append(L I, L2, L3). При описании append обратим внимание на следующие его свой- свойства. 1) Результатом конкатенации некоторого заданного списка и пу- пустого списка будет изначальный список. Поэтому справедлив такой факт append([ ],L,L). /* 1 */ 2) Допустим, что первый список имеет вид [X: Ы]. Если мы при- присоединим к нему список L 2, то в результате получим список, заго- заголовком которого будет заголовок первого списка, а его хвост обра- образуется в результате конкатенации хвоста первого списка и L 2. Это свойство можно проиллюстрировать диаграммой X X 11 12 На основании этого наблюдения, мы можем записать append([X:Ll],L2,[X:L3]) :- append(L 1, L2, L3) . /* 2 */ Ясно, что дизъюнкты /* 1 */и/* 2 */ представляют рекурсивное определение предиката append. Дизъюнкт /* 1 */ выступает в роли базиса рекурсии, а дизъюнкт / * 2 * / определяет рекурсивный переход, сводящий задачу конкатенации двух сложных списков к задаче конкатенации более простых списков, и осуществляет тем самым рекурсию. Давайте обратимся к, примеру. Предположим, что мы имеем за- запрос ? append ( [а, Ь] , [1,2] , [а, Ъ, 1,2] ) . > л , «« X; § 3.5. ВСТРОЕННЫЕ ПРЕДИКАТЫ 225 Пространство состояний вычисления ответа на это запрос изобра- изображено в виде дерева ? append([a, b ,[1,2], [а, 6,1,2]). X/a,Ll/[b], L2/[l,2],L3/[b,l,2] !'¦ 'H- , [l, 2], [6, l, 2]). X/b,Ll/[ ], L2/[1,2],L3/[1,2] да из 1 для L/[l,2] Поскольку путь решения существует, ПРОЛОГ даст положитель- положительный ответ на запрос. Предикат append встроен в большинство редакций и версий ПРО- ЛОГа. Некоторые другие предикаты, применяемые для обработки списков, представлены в упражнениях. § 3.5. Встроенные предикаты Встроенными предикатами называются предикаты, определен- определенные в самой системе ПРОЛОГ и предназначенные для обработки, размещения и управления данных, а также для организации взаи- взаимодействия пользователей с ПРОЛОГом. 3.5.1. Предикаты размещения данных Г Г ' .4f ПРОЛОГ-программу можно рассматривать как базу данных, содер- содержащую факты и правила в качестве данных. Всякое изменение дан- данных программы требует и обновления самой ПРОЛОГ-программы. В традиционных языках программирования обновление программы, т. е. добавление и изъятие данных, равно как и изменение струк- структуры управления, осуществляется непосредственно самим програм- программистом. В ПРОЛОГе, напротив, программа может обновляться авто- автоматически в ходе своего выполнения, применяя специальные встро- встроенные предикаты assert и retract. Предикат assert употребляется для внесения в программу фактов и правил. Этот предикат имеет вид assert(G), где G — произвольное программное утверждение. Отметим, что предикат assert(G) всегда завершается успешно, и в результате его исполнения утверждение G добавляется к совокупности дан- данных программы. 8 Г. Метакиденс, А. Нероуд
226 Глава 3. ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ § 3.5. ВСТРОЕННЫЕ ПРЕДИКАТЫ 227 Предикат assert можно применять по-разному. Возьмем, напри- например программу, состоящую из единственного дизъюнкта человек(Джордж). A) Если мы обратимся с запросом ? смертен(джордж). ответом будет «нет», поскольку в программе нет определений для свойства быть смертным. Если же мы обратимся с запросом ? assert(смертен(джордж)). то, благодаря успешному завершению assert программное утверж- дение , I . « .. f смертен (джордж). • ', •,, >: B) будет внесено в программу. ' '•¦"¦•¦ ' '¦' Встроенный предикат assert можно применять также для введе- введения новых правил. В нашем примере мы можем вместо ? assert(смертен(джордж)). обратиться с запросом assert (смертен(X) : - человек(Х)). В результате этого вместо факта B) программа пополнится новым правилом смертен(Х) : — человек(Х). B') Мы можем выбрать также и то место, на которое будет поставлено в базе данных новое программное утверждение, применяя следующие вариации предиката assert: asserta(G) и assertz(G) которые позволяют поместить программное утверждение G соот- соответственно в начало или в конец списка данных программы. Подобно тому, как мы вносим данные в программу при помощи assert, мы можем удалять данные, применяя встроенный предикат retract (G), где G — программное утверждение. Использование retract дает эффект, противоположный действию assert. 3.5.2. Предикаты взаимодействия ПРОЛОГ, как и всякий дружественный для пользователя язык про- программирования, располагает средствами, обеспечивающими взаимо- взаимодействие программы с периферийными устройствами компьютера, с экраном и с пользователем. Эти средства представлены набором специальных встроенных предикатов, а именно read, write и con- consult. Предикат read применяется для ввода символьной информации с клавиатуры. Он имеет вид read(X), где X — переменная, обозначающая последовательность символов, которые программа должна прочитать. Предикат «read(X)» всегда завершается успешно, проводя унификацию переменной X с после- последовательностью входных символов. Поэтому, если мы напишем read(X), то ПРОЛОГ будет ожидать ввода группы символов с клавиатуры. Если мы наберем на клавиатуре компьютера слово «джон», то в ПРОЛОГе предикат read(X) будет выполняться, унифицируя переменную X с символьной строкой джон. Предикат записи • , write(аргумент), функционирует подобно предикату «read» и применяется для отоб- отображения последовательности символов на экран. Аргументом здесь может быть любая символьная строка. Предикат записи всегда за- завершается успешно, выдавая значение его аргумента. Если write поместить в запрос, то значение его аргумента будет отправлено на печать. Поэтому, если мы обратимся с запросом Pwrite("Джон - высокий"). то ПРОЛОГ выполнит write, напечатав на принтере • "Джон - высокий" При помощи read и write мы можем создать целый ряд полезных программ. Например, программа •*- print(Имя,Номер)": - read (Имя), read (Номер), • write(Имя), write(" "), write(Номер), nl. заставляет ПРОЛОГ ожидать, пока мы введем две символьные стро- строки, которые будут унифицированы с переменными Имя и Номер. За- Затем эти две символьные строки будут напечатаны на одной линии и разделены пробелом благодаря write(" "). После этого выпол- выполнится специальный предикат nl, переводящий курсор экрана или принтер в начало новой строки. Предикат сопзи^(файл) применяется для прочтения ПРОЛОГ-про- граммы из заданного файла. Предикат сопзи11(файл) всегда выполняется, помещая программ- программные утверждения из файла в оперативную память компьютера с тем, чтобы ПРОЛОГ мог использовать их для вывода заключений.
228 Глава 3. ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ 3.5.3. Равенство в ПРОЛОГе: В ПРОЛОГе имеется несколько различных предикатов для про- проверки равенства объектов. Наиболее употребительные предикаты, встроенные во всех редакциях ПРОЛОГа, таковы: «=» Отношение А — В считается успешно выполнимым, когда А соответствует В, т. е. когда А и В унифицируемы. «==& Отношение А —= В считается выполнимым, когда А и В тождественно совпадают. Например, равенство отец(павел, энди) = отец(павел, X) успешно выполняется за счет подстановки Х/Энди, в то время как равенство отец(павел, энди) == отец(павел, X) не выполняется. «=:=» Отношение А\ =:= А2 выполняется, когда оба А\ и А2 являются числовыми выражениями, имеющими одинаковое число- числовое значение. «is» Отношение «X is А» выполняется, когда X — переменная, & А — числовое выражение. При этом ПРОЛОГ вычисляет значение А и унифицирует его с переменной X. Здесь мы обращаем осо- особое внимание на различие между «is» и «—». Например, ответом ПРОЛОГа на запрос ? х =3-1. ч:г •:;>-. будет X — 3 - 1. Это свидетелшргеует о«М* что при употреблении «=» арифметические операции в правой чисти равенства не выпол- выполнялись. Если же мы спросим .... ? X is 3-1. ,*. ¦».#?*¦¦ rV ¦ то получим ответ X = 2. '•"" :п»а. ¦>;¦ «\==» Предикат «\==» является отрицанием «==», т. е. отно- отношение А \ == В выполняется тогда и только тогда, когда А == В не выполняется. «= \ =» Предикат «= \ =» является отрицанием «=:=», т. е. от- отношение А\ — \ = А2 выполняется тогда и только тогда, когда А\ =:= А2 не выполняется для числовых выражений А\ и А2. 3.5.4. Арифметика в прологе Хотя ПРОЛОГ проектировался в основном для нужд символьно- символьного программирования, он содержит ряд функций, которые можно^ использовать для выполнения арифметических операций. В боль шинстве редакций ПРОЛОГа определены следующие функции: + сложение . ,.., ,, ., — С ВЫЧИТаНИе ,>-, .. Т-.И a!!itei-.-.4t,.-H:j« \<m Ч. § 3.5. ВСТРОЕННЫЕ ПРЕДИКАТЫ 229 -;: / " div ,¦... mod умножение деление деление нацело остаток от деления ишеются также специальные встроенные предикаты сравнения чи- числовых выражений ;,, > больше .^-, < меньше '''""¦ <| => больше или равно Л. =< меньше или равно О 3.5.5. Контроль типов «var» При помощи предиката var(X) можно проверить, верно ли, что X — это переменная, которая еще ни РАЗУ НЕ получала никакого значения. Если терм X является переменной, ни разу не подвергавшейся изменениям, то предикат успешно выполняется. В противном случае выполнение предиката заканчивается неудачей, «nonvar» Воспользовавшись предикатом nonvar(X), мы можем проверить, верно ли, что объект X не является переменной. «integer» Предикат integer успешно выполняется, если X яв- является целым числом. Например, составной запрос ? integerCO, / is 3 + 5. потерпит неудачу, тогда как запрос /is 3 + 5, integer(I). будет успешно выполнен и выдаст ответ / = 8. Это произойдет пото- потому, что к моменту выполнения integer (/) переменная / уже будет унифицирована с результатом сложения 2 + 3. «real» Предикат real(X) выполняется, если X —действитель- —действительное число. «atom» Предикат atom(X) выполняется, если X — атом. «atomic» Предикат atomic(X) выполняется, если X — атом или число. 3.5.6. Операторы Часто для упрощения набора текста программы и облегчения по- понимания сложных предикатов (см. § 3.3.5) мы записываем преди- предикаты и функции в виде операторов. Так, например, для операции сложения мы могли бы использовать запись +(х, у), где + высту- выступает в роли оператора.
230 Глава 3. ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ § 3.5. ВСТРОЕННЫЕ ПРЕДИКАТЫ 231 Для того, чтобы полностью описать оператор, мы должны указат^ его приоритет, позицию, а также уточнить его связь с аргументами! Полное описание оператора осуществляется с помощью встроенного! предиката ор, который образует простой дизъюнкт вида : - ор(( приоритет ), ( позиция ), [список имен операторов])| Программные утверждения, описывающие операторы, располага- располагаются в начале программы. Приоритет операторов устанавливает порядок их выполнения сложных выражениях, содержащих более одного оператора. Прис ритет задается целым неотрицательным числом, область значени* которого зависит от конкретной редакции языка. Например, в ТУРБО4 ПРОЛОГе приоритет может быть любым числом от 1 до 2000. Прнг прочих равных условиях операторы, приоритет которых ближе к 1, исполняются ранее операторов, приоритет которых ближе к верх<| ней допустимой границе. Например, выражение . ,' 8 + 2*2 Г>1-'7^','г/в«н*к- мы предпочитаем воспринимать как > « я? цим- . * 8 + B * 2) чтобы получать в результате «12» , а не как (8 + 2) * 2, дающее в результате «20». Поэтому приоритет «*» должен иметь меньшее числовое значение, нежели приоритет «+». Позиция оператора обозначает расположение оператора относи- относительно его операндов. Имеется три варианта позиции: в начале, между и после операндов. Поэтому если мы хотим, чтобы предикат отец(а, Ь) употреблялся как оператор в смысле «а является отцом 6», то этот предикат естественно поставить между его аргумента- аргументами, т. е. в виде «а отец Ь». Здесь мы имеем случай инфиксного оператора, и его позиция обозначается выражением xfx В связи с этим, придавая предикату отец приоритет 200, мы должны описать его программным утверждением : — орB00, xfx, отец). Аналогично вводятся префиксные и постфиксные операторы. Та- Таким образом, описывая оператор «-¦» для отрицания фактов, разум- разумно потребовать, чтобы он располагался перед операндом, т. е. чтобы он был префиксным оператором. Присваивая этому оператору при- приоритет 500, мы можем описать его программным утверждением : - орE00, /х, -0. Если же мы хотим дате определение факториала, применяя символ «!», то было бы естественно обозначать факториал «х!», располагая «!» после операнда. Поэтому «!» будет постфиксным оператором. Наделяя этот оператор приоритетом 400, мы можем описать его программным утверждением : — орD00, ха, !). Ассоциативность оператора указывает, будет ли этот оператор иметь больший, меньший или равный приоритет по сравнению с его операндами. Явное описание приоритета очень важно в тех слу- случаях, когда не определен приоритет операндов. Например, арифме- арифметическое выражение а — Ь — с обозначает «(а — Ь) — с», а не «а —( Ь — с)». Описание ассоциативности осуществляется путем отделения сим- символов «х» и «у», обозначающих операнды. Так, выражения «/х» или «х/», содержащие переменную х, означают, что оператор имеет бо- более низкий приоритет, чем его операнд. А выражения «/у» и «у/», содержащие переменную у означают, что приоритет оператора не менее высок, чем у его операнда. Конечно, мы вправе задавать раз- различные комбинации приоритетов у двухместных операторов, как, например, в описании «х/у». Предикаты для арифметических операций и различных видов ра- равенств встроены в большинство редакций ПРОЛОГа и представлены в виде операторов, имеющих определенные описания приоритета, позиции и ассоциативности. Примерами могут служить следующие описания. :-ор E00, у/х, [+,-]). A) : -ор D00, у/х, [*,/]). B) : - орE00,х/х,[=, is,<, >, =<,=>, = \=, \ ==,=:=]). В дизъюнкте B) говорится о том, что «*», умножение, и «/», деле- деление, являются операторами, имеющими два операнда и приоритет 400, тогда как в A) утверждается, что сложение и вычитание имеют два операнда, и их приоритет 500. Поэтому в арифметических вы- выражениях с «+ >>, «—», «*» и «/», сначала выполняются операции «*» и «/» ввиду их низкого приоритета, а затем — операции «+» и Если мы хотим определить логические связки «<->», «V», «Л» и «-¦» для записи формул логики предикатов и пропозициональной логики, то мы можем ввести соответствующие операторы. : - ор(800, у/х, <->). **"*1 - орG00,х/у, Л). $?Л: - оР(б00,х/у, v). ',7 : - орE00,/у, -). ' у, логическую эквивалентной^ НА А В) <-> -.AV-.5 '* ¦', ,,, , v::
232 Глава 3. ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ можно представлять в ПРОЛОГе программным утверждением. 3.5.7. Ханойские башни ,.;.¦ л> * ' Игра «Ханойские башни» служит типичным п|4ш< йых описаний. Суть этой игры такова. ' ^ .._, . ..,¦.'• . «а ЮМ . Имеются три колышка — левый, средний и правый, — и N ди- дисков разного диаметра с отверстием посередине. Вначале все диски нанизаны на левый колышек так, что большие диски расположены внизу, а маленькие — вверху. Самый большой диск служит основа- основанием всей башни. Задача состоит в том, чтобы перенести все диски на правый колышек, расположив их в том же самом порядке. При этом должны быть соблюдены следующие правила а) всякий раз разрешается перемещать только один диск с одного колышка на другой, б) запрещается класть диск большего размера на диск меньшего размера. По всей видимости, нам нужно создать программу поиска пути из начального состояния в заключительное состояние, в которой бы- были бы соблюдены указанные ограничения на перемещения дисков. Обратим внимание на следующие обстоятельства. 1). В заключительном состоянии на левом колышке не остается ди- дисков. 2). Воспользовавшись правым колышком мы можем переместить N — 1 диск с левого колышка на средний сообразно с правилами (а) и (Ь). Это будет один шаг нашей рекурсии. Затем оставшийся на левом колышке самый большой диск нужно перенести на правый колышек. 3). Воспользовавшись левым колышком, перенесем N — 1 диск со среднего колышка на правый, соблюдая правила (а) и (Ь), и тем самым решим задачу. Основываясь на этих наблюдениях, мы можем предложить следую- следующую программу. перенос@,_,_,_) : - !. "^ nepenoc(N,X,XZ) : - М is N - I, 'C}-' %-<ч1> перепос(М, X,Z,Y), '%. Jf^! § 3.6. ОТРИЦАНИЕ В ПРОЛОГе 233 напечатать_сообщение(Х, Z), напечатать-СообщениеСХ, У) : — write («перенесли диск со стержня X на Y»). ханойская_башня(.Ю : — перенос(iV,левый,средний,правый) . В первых двух программных утверждениях фактически реализова- реализованы высказанные выше замечания. Третье программное утверждение распечатывает при помощи предиката write сообщения о перемеще- перемещении дисков. Четвертый дизъюнкт обращается с вызовом к программе перемещения заданного числа дисков. Обозреть пространство вычислений этой программы непросто да- даже для небольших значений N, поскольку в общем случае для ре- решения задачи требуется совершить 2N — 1 перемещение дисков. Чи- Читателю предоставляется возможность воссоздать в качестве упраж- упражнения пространство вычислений программы для N — 3. § 3.6. Отрицание в ПРОЛОГе Язык логики предикатов, используя содержащиеся в нем логи- логические связки и кванторы, позволяет формализовать большинство разговорных фраз. Например, утверждение Р разговорного языка Р: «Каждая канарейка, которая не больна, летает» может быть символически представлено на языке логики предика- предикатов предложением Р: (Ух)[(канарейка(х) Л -1больна(х)) -> летает(х)] Здесь мы использовали логическую связку «-¦» для выражения отри- отрицания предиката «больна». Однако язык ПРОЛОГ, основанный на хор- новских дизъюнктах, не позволяет выражать отрицание явно, хотя может давать ответ «нет» на некоторые запросы. Поэтому формули- формулировка, интерпретация и всякая обработка отрицаний дизъюнктов в ПРОЛОГе представляется непростым делом. Возникающие при этом проблемы можно разбить на три категории: 1) Как интерпретировать ответ «нет»? 2) Как в ПРОЛОГе выводится отрицание дизъюнкта? 3) Как следует применять отрицание в ПРОЛОГе? 3.6.1. Допущение замкнутости мира и отрицание как неудача Согласно допущению замкнутости мира, сокращенно CWA (Closed World Assumption) ( § З.1.З.), если предложение А ни яв- явно, ни опосредованно не выразимо в программе Р, иначе говоря,
234 Глава 3. ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ § 3.6. ОТРИЦАНИЕ В ПРОЛОГе 235 > к ¦">*?¦>¦ ~«~,-я. *¦" если А не является ни фактом, ни следствием, вытекающим из ных Р, то мы полагаем, что отрицание А справедливо. Рассмотри^ следующую программу: ' полный_квадрат D). полный_квадрат(9). и обратимся к ней с запросом ? полный_квадратA6). '1с1',, ,*,'{" ,',;"."';'*" Ответом ПРОЛОГа будет «нет». Этот ответ ПРОЛОГа не следует трак- трактовать как «16 не является полным квадратом», полагая, что «не» обозначает обычное для математической логики отрицание. Этот ответ «нет» подразумевает всего лишь, что у программы нет осно- оснований считать число 16 полным квадратом. Такая «мыслительная» особенность ПРОЛОГа и логического программирования основывает- основывается на допущении замкнутости мира и называется отрицание как неудача. На самом деле мы не можем выразить негативные знания посред- посредством хорновских дизъюнктов: программа в логическом програм- программировании по определению состоит исключительно из хорновских дизъюнктов, пригодных для представления только позитивных зна- знаний, т. е. из фактов, правил и запросов, в которых отсутствует отри- отрицание. Применяя правила резолюции к запросу Q, мы, по существу, доказываем, что {факты, правила, ->Q} ЬП, т. е. {факты, правила} I—>Q —> П, Q Это означает, что в общем случае мы не можем доказать, что фор- формула вида ->А, где А не содержит отрицаний, следует из фактов и правил некоторой программы. Предпринимаются попытки распро- распространить методы логического программирования на формулы более сложного вида, нежели хорновские дизъюнкты, для того, чтобы уве- увеличить выразительные возможности логических программ [Shep88]. 3.6.2. Нормальные цели 1 Рассмотрим программу Р: любит(джон, мэри). ^ любит(джон, стерлядь). 3 ( ^ ест(Х ,Y) : - любит(Х ,Y) , съедобна(У). у,Л\ ¦ съедобна(стерлядь). Если мы спросим Р верно ли, что Мэри съедобна (!) ? съедобна (мэри). ¦ jiui то ответом будет «нет», т. е. -¦ съедоб Не лишено также смысла спросить Р ? -1 съедобна (мэри). .^,= (мэри2|, (*) CWA. (**) Чтобы ответить на этот запрос программа начнет проверять, верно ли, что цель ? съедобна(мэри). может быть успешно достигнута. Поскольку «съедобна(мэри).» не согласуется ни с какими данными Р, цель достигнута не будет. Поэтому ответом на запрос (*) будет «да». Целевые утверждения вида «? ->А.» называются нормальными целями, [Lloy87, NiMa95]. Процедура согласования, применяемая в ходе выполнения программы, позволяет дать следующее определе- определение успеха и неудачи для нормальных целей: Если цель «? А.» достигается успешно, то цель «? -iA.» недостижи- недостижима, т. е. А является следствием рассматриваемой программы. Если все попытки достичь цель «? А.» оканчиваются неудачей, то цель «? -iA.» успешно достигается, т. е. ->А является следствием рассматриваемой программы. Таким образом, отрицание нормальных целей характеризуется неудачей или успехом достижения соответствующей цели без отри- отрицания, и поэтому его называют отрицание как неудача, или со- сокращенно NF (negation by failure). Соответствующее (мета)правило имеет вид: ? -.А, ? A. fails D NF Это означает, что в случае неудачи «? А.* на программе Р справед- справедливо т. е. -iA следует из Р. По всей видимости, нам придется иметь здесь дело с двумя ви- видами отрицаний, одно из которых стандартная логическая связка, а другое имеет процедурный характер и обозначается предложением «? A.fails». Процедурное отрицание условимся обозначать ~; то- тогда то обстоятельство, что ? А. оканчивается неудачей, может быть обозначено ~А. Содержательно, «? -¦А.» можно считать эквива- эквивалентным А. Правило NF разрешает выполнять резолюцию между ? ->А., (т. е. А) и ~ А ! Такой вид резолюции называется NF-резолюцией. Попытка дать теоретическое обоснование корректности NF пра- правила и совместить, насколько это возможно, логическое и проце- процедурное отрицания привела к понятию замыкания программ [С1аг78, Lloy87, NiMa95]. Основная идея состоит в том, чтобы рассматри- рассматривать предикаты, описанные в некоторой программе Р посредством : —, т. е. <—, как полностью определенные при помощи связки ¦->.
236 Глава 3. ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ 3.6.3. Замыкания программ Логическое основание для замыкания ПРОЛОГ-программ предо- предоставляется замкнутыми при помощи кванторов всеобщности аксио- аксиомами (см. Замечание 2.3.7.) (А6) х = х (аксиома тождественного равенства термов), (А7) х = у —> (А <-> А(у/х)) (правило подстановки равных термов), тождественно истинными формулами PrL A) (В -> А) А (С -* А) <-+ (В V С) -+'А, B) (А(х, у)^В(х, у))~[(Эх)(Эу)(А(х, у)Лх = аЛу=Ь)-+В(а, Ь)], C) (А(а, Ь) «-> (ж = а Л у = Ь -* А (ж, у)), а также некоторыми другими аксиомами, которые описывают свой- свойства функций, встречающихся в программах. Условимся -i(x = у) записывать как хфу. Все функции, которые встречаются в програм- программе, подвергающейся замыканию, [С1аг78, Lloy87, NiMa95], должны удовлетворять следующим специальным, т. е. нелогическим, аксио- аксиомам, замкнутым при помощи кванторов всеобщности: (F,) /(z,,..., хп)фд(ух,..., ут) для всех /, д таких, что / ф д, (F2) /(ж,,..., хп) = /(у,,..., уп) -»(ж, = у,) Л • • • Л (х„ = уп), (F3) f(x) Ф х для всех х собственных подтермов /(х) Эти аксиомы означают, что различные функциональные символы именуют различные функции. Кроме того каждая функция прини- принимает различные значения при различных наборах значений аргумен- аргументов, и значение функции не может совпадать со значением одной из ее переменных, [С1аг78]. Построим замыкание программы Р, представленной в примере из предшествующего параграфа. Для того чтобы замыкание стало интуитивно более понятным, мы будем использовать <— вместо : —. Применяя формулы B) и C) к дизъюнктам Р, мы получим сле- следующую форму, эквивалентную Р любит (tM t2) <— (tj = джон Л t2 = мэри), *>&¦<* любит (t,, t2) <— (tl = джон Л t2 — стерлядь), t) ecT(t3,t4) <- CX)(BY)(t3 = X Att = Y ЛлюбипСХ, У)Л съедобна(У), съедобна(<5) <— t5 = стерлядь, Которую в свою очередь, применяя формулу A), приведем к виду любит(tlf t2) <— (*,=джонЛ <2=мэри)Л \ (<,=джонЛ <2=стерлядь), '•¦'[ у. ecT(t3,t4) *- (ЭХ) (ЗУ) (*з = Л" Л t4 = УЛ ^. любит(X, У) Лсъёдобна(У) , съедобна(t5) «— t5 = стерлядь. ' § 3.6. ОТРИЦАНИЕ В ПРОЛОГе 237 Теперь мы можем рассматривать выражения, стоящие слева от «— как полностью определенные предикаты «любит», «ест», «съедоб- «съедобно». Согласно CWA вся информация об этих предикатах, доступная нам в программе Р, выражена формулами, стоящими справа от <—; следовательно, это и есть исчерпывающее определение указанных предикатов. Но ведь по существу это означает, что «— может воспри- восприниматься нами как «->! Таким образом Р должна иметь следующую замкнутую форму любит(t,, t2) <-> (?,=джонЛ <2=мэри)Л (?,=джонЛ ^2=стерлядь), ( любит(.X, У) Асъедобна(У) , съедобна(t5) <-> t5 = стерлядь. Благодаря этому мы можем немедленно определить отрицание этих предикатов, например, -¦съедобна(?5) «-> t5 ф стерлядь Подобный способ введения отрицания запросов и нормальных целей вполне осмыслен. Более того, отрицание как неудача оказывается похожим на обычное логическое отрицание. Следует, тем не менее, иметь в виду, что интерпретация импликации как эквивалентности недопустима в рамках всей логики PrL и может быть корректно осуществлена только в контексте семантики логических программ. Приведем формальное определение замыкания. Определение 3.6.3.1. 1) Если предикат А стоит в заголовках хорновских дизъюнктов программы Р ;*¦*' (м,,*„) k то полное определение А в Р задается формулой (Vtl)-.-<ytn)(A(tl,...,tn)~El V---V Ek), в которой каждая подформула Е( имеет вид =жи Л--.Л4„ = хмЛ Wt) где t{,..., tn — новые переменные, не встречающиеся в Р, 2/п • • ч Vd — все переменные из дизъюнкта А(х^,,..., х^п) <— W(. 2) Если предикат А не встречается в заголовках хорновских дизъ- дизъюнктов программы Р, то полное определение А в Р задается фор- формулой , ,, . т^,,,п *) ' " '
238 Глава 3. ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ § 3.6. ОТРИЦАНИЕ В ПРОЛОГе 239 или, что то же самое, (Vt,) • ¦ • (Vtn)A(tu ..., tn) <-> D. 3) Замыкание compl(P) логической программы Р образовано со- совокупностью полных определений всех предикатов, входящих в со- состав Р. П 3.6.3.1 Теоретическая выгода использования замыкания compl(P) заклю- заключается в том, что мы, с одной стороны, усиливаем выразительные возможности программы Р без утраты всех ее логических следст- следствий, а с другой стороны, узакониваем правило NF. Это подтвержда- подтверждается следующими теоремами, доказательство которых можно найти, например, в [NiMa95, Lloy87]. Теорема 3.6.3.2. Если Р \= A, mo compl(P) \= А. ? 3.6.3.2 Теорема 3.6.3.3. Правило NF корректно для compl(P). О 3.6.3.3 В общем случае вычисления в логическом программировании не позволяют нам отыскивать значения х, удовлетворяющие запросам вида ? -*А., и чаще всего подразумевается, что правило NF при- применяется только к основным примерам дизъюнктов [NiMa]. Если нормальная цель «? -*А* содержит только основные примеры ато- атомов, то соответствующее отрицание называется безопасным, в про- противном случае оно называется небезопасным. Многие языки ло- логического программирования допускают использование только бе- безопасных отрицаний; это обеспечивается встроенным механизмом задержки обработки нормальных целей до тех пор, пока все вхож- вхождения переменных не получат конкретных значений. , -, , 3.6.4. Нормальные программы и стратификация . /ч-^ vuv Итак, целевые запросы с отрицательными предикатами допусти- допустимы в логическом программировании и ПРОЛОГе. Если мы к тому же разрешим использовать отрицание в теле правил, то подобные про- программы называются нормальными или обобщенными программа- программами, [NiMa95, Lloy87]. Здесь, однако, положение дел более сложное: нормальная программа Р может содержать дизъюнкт вида А: - ->А. ¦ , ' ь т. е. А <— ->А. Этот дизъюнкт эквивалентен А, в compl(P) он будет приведен к виду 'Как в ЩЧ ЩП «С1 эквивалентному А Л-<А\ В таком случае compl(P) становится про- противоречивым множеством формул. Вместе с тем нормальные программы, обладающие расслоен- ностью {стратифицированные программы), имеют непротиворе- непротиворечивое замыкание. Рассмотрим, например, следующую программу Р: ,Г а-. - в, с. ;•*,. \;Т\r<fx''''V-"У- Тогда compl(P) = {A <-> ->В V С} образует, очевидно, непротиворе- непротиворечивое множество формул. Поясним теперь, что мы подразумеваем под расслоенностью про- программы. Заметим, что в программе В предикат А определяется фор- формулами ->В и В А С, т. е. зависит от В и С. Таким образом, мы могли бы ввести иерархию уровней описания предикатов так, чтобы предикаты более высокого уровня определялись посредством преди- предикатов лежащих ниже уровней. Конечно, предикат А должен быть отнесен к «наивысшему уровню описания», поскольку А зависит от В и С. В свою очередь, В следует отнести к более низкому, чем А, «уровню описания», так как значение В должно быть из- известно заранее к тому моменту, когда нужно определять значение А. Ввиду того, что «уровни описания» должны позволить полностью определять значения предикатов в высоких слоях программы, все эти уровни не должны иметь общих элементов. На самом деле, нам следует уточнить очерченный здесь подход, разрешив относить пре- предикат X к тому же уровню, что и предикат Y, участвующий в опи- описании X, при условии, что именно X, а не его отрицание, исполь- используется для определения Y. В нашем примере предикаты, встречаю- встречающиеся в Р, могут быть разбиты на два «уровня описания» So = {В} и S{ ={A, С} так, чтобы отрицание предиката В, участвующее в описании предиката А, было определено на более низком уровне, нежели описание А. Поскольку сам предикат С, а не его отрица- отрицание, фигурирует в описании А, уровень 5, может содержать как А, так и С. Мы можем рассчитывать, что применение данного подхода увен- увенчается успехом, поскольку расслоение призвано устранить неже- нежелательные последствия рекурсии. В общем случае, если отрицание предиката D фигурирует справа от : - в описании предиката F, то D должен быть определен на более низком уровне во избежание рекурсивных обращений, возникающих при откате и приводящих к формулам вида D : — -iZ?. Возможность возникновения такой нежелательной ситуации видна на примере следующей программы: А: - В. .-«"¦ . в : - -iA ¦ !зя. <|»йтх •.: ¦.%> ;. Приведем формальное'определение (см [NiMM9S, Lloy97]).
240 Глава 3. ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ § 3.6. ОТРИЦАНИЕ В ПРОЛОГе 241 Определение 3.6.4.1. Нормальная программа Р называет- называется стратифицированной, если множество предикатов, входящих в Р, может быть разбито на подмножества 50,..., Sn так, чтобы для всякого правила А : - В,,..., Вт из Р, заголовок которого А е Sk, и для каждого В(, 1 < г < т, либо Ш|,>,. ~. *Ч:: j BieSouSlu---uSk ¦ ;¦-r-. ¦'гч;,.;;... : в случае, когда ??4 не содержит отрицания, либо ' '••**¦* ¦• С. G 50 и 5, и • • • и 5t _, в случае, когда В. имеет вид ~>Сг. П 3.6.4.1 Теорема 3.6.4.2. Если Р — стратифицированная програм- программа, то compl(P) — непротиворечиво. О 3.6.4.2 Теорема 3.6.4.3. Если Р — нормальная программа, то пра- правило NF корректно для compl(P). О 3.6.4.3 Исследование проблемы полноты, касающееся NF, выходит за рам- рамки нашей книги. Заинтересованный читатель может обратиться к [Lloy87, NiMa95]. Рассмотрим теперь пример применения правила NF к нормальной программе, т. е. к программе, в которой могут фигурировать отри- отрицательные знания. Предположим, что мы имеем дело с программой Р, в которой содержится обращение к отрицательным знаниям заинтересован(Х, У) : — -i ненавидит(.X, У). /* 1 */ ненавидит(X, У) : - -. любит(Х, У) . /* 2 */ любит (джон.мэри) . /* 3 */ и мы хотим узнать, насколько Мэри интересна Джону, ? заинтересован (джон, мэри). /* 4 */ Выполнение программы происходит следующим образом. Сначала запрос согласуется с левой частью первого правила программы пу- путем применения подстановки X = джон, У = мэри. В результате об- образуется запрос ? -пненавидит(джон,мэри). /* 5 */ Далее алгоритм проверяет целевое утверждение ? ненавидит(джон,мэри). / * 6 * / Этот запрос согласуется с заголовком второго правила программы путем применения подстановки X = джои, У = мэри. За счет этого формируется следующий запрос ^-. .«,,. ^.Sf, ? -плюбит(джон,мэри). Д . /* 7 */ Алгоритм проверяет целевое утверждение К**1'-- *%« ? ЛЮбИТ (ДЖОН, МЭри). f/H) &.7>».l!ii и обнаруживает, что оно успешно подтверждается за счет третьего программного утверждения. По правилу NF цель / * 7 * / не дости- достигается. Значит цель / * 6 * / также не достигается. Следовательно, цель / * 5 * / успешно достижима, и окончательным ответом на запрос / * 4 * / будет «да» ! С другой стороны, если мы попытаемся применить резолютивный метод к соответствующим логическим предложениям, мы не смо- сможем столь же легко добиться результата, потому что Р содержит не только хорновские дизъюнкты. Рассмотрим следующую эквива- эквивалентное представление Р заинтересован^, У) V ненавидит(X, У) , .« ненавидит(X, У) V любит(X, У), любит(джон,мэри), -¦заинтересован(джон,мэри). Здесь мы можем провести резолюцию только между первым и по- последним дизъюнктом, получая в качестве единственного результата «ненавидит(джон,мэри)». Напротив, применяя метаправило NF, мы можем найти приемлемое решение, которое будет корректным в све- свете предположения о том, что все данные, полностью описывающие предикаты программы Р, явно представлены в Р ! ') 3.6.5. Предикат fail Заданная цель в ПРОЛОГе терпит неудачу, то есть принимает истинностное значение «ложь», если попытка найти для нее по- положительное подтверждение с использованием всех возможных от- откатов оканчивается неудачей. Неудача, влекущая за собой отри- отрицательный ответ, может быть объявлена в ПРОЛОГе при помощи специального встроенного предиката под названием fail, который обозначает эту неудачу, .имеет постоянное истинностное значение «ложь» и всегда завершается неудачей. Таким образом fail <-> Q Л -.Q где Q — произвольная формула логики предикатов. Возьмем, например предложение А: «Джон - не канарейка» Предложение А можно представить в ПРОЛОГе правилом канарейка(джон) : — fail. (*) означающим, что «цель канарейка (джон) терпит неудачу». Предпо- Предположим, что база данных ПРОЛОГ-программы содержит только прави- правило (*). Тогда запрос ? канарейка(джон). rj> 4дч, .._,.,.^,,., ,;. ,hy,;ik. ,<„.,. ,..,$
242 Глава 3. ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ обязательно потерпит неудачу. После унификации этого запроса с правилом (*) будет образована новая подцель fail, которая потер- потерпит неудачу по определению fail. Такова операционная интерпре- интерпретация fail: запрос, который состоит из заголовка правила, содер- содержащего в своем теле fail, терпит неудачу1). Мы должны обратить особое внимание на то, что дизъюнкт вида А : - fail. является тождественно истинным в логике предикатов, поскольку формула Q Л-1<5 —> А остается истинной во всякой интерпретации логики предикатов (см. определения 2.5.5, 2.5.19. и доказательство следствия 1.5.4). Отрицание в ПРОЛОГе, вообще говоря, можно представить при помощи подходящей комбинации операторов отсечения и неудачи . Возьмем, например, дизъюнкт Р: (Ух)[(канарейка(х) А ->больна(х)) —> летает(х)], рассмотренный в начале этой параграфа. Предположим, что мы хо- хотим определить отношение между летающими предметами и кана- канарейками. В нашем случае мы имеем дело с канарейками, которые летают, равно как и с канарейками, которые не летают, потому что они, скажем, были покалечены. Поэтому в нашей программе долж- должны быть учтены обе возможности: канарейки, неспособные летать вследствие их болезни, и канарейки, умеющие летать. Эти возмож- возможности отражены в следующей ПРОЛОГ программе: летаетСХ") : - больна(X), !, fail. /* 1 */ летаетСХ") : - канарейка(X). /* 2 */ В этой программе отсечение, !, применяется во избежание активиза- активизации второго правила в случае, когда наша канарейка X больна. Если канарейка X больна, то отсечение предотвратит откат ПРОЛОГа ко второму правилу, и fail приводит заголовок первого правила к неу- неудаче. Если же канарейка не больна, или в базе данных нет никаких упоминаний о том, что она больна, то первое правило не сработает, и ПРОЛОГ совершит откат (отсечения в этом случае не происходит), активизируя второе правило, заголовок которого будет выполнен. Мы видим, таким образом, что отрицание в ПРОЛОГе может быть представлено комбинацией отсечения и неудачи. 3.6.6. Предикат not Существует и другой подход, позволяющий ввести отрицание в ПРОЛОГе посредством специального предиката not(Q) (§ 3.3.5.), который обозначает отрицание Q и выполним всякий раз, когда § 3.6. ОТРИЦАНИЕ В ПРОЛОГе 243 цель Q терпит неудачу. В сущности, предикат not моделирует вы- выполнение комбинации отсечения и неудачи, и описывается следую- следующими дизъюнктами: not(Q) : - Q, !, fail. ,, . t.. /* 3 */ not(Q). , ,,; /* 4 */ Поэтому, если мы обратимся с запросом ' " " « ? not(Q). то ПРОЛОГ активизирует правило /* 3 */. Если предикат Q явно не описан в базе данных и не следует из данных логической программы, то подцель Q в теле правила приведет к неудаче1). Тогда ПРОЛОГ попытается удовлетворить not(Q), применяя дизъюнкт /* 4 */. Поскольку Q приводит к неудаче, not(QJ) выполняется согласно метаправилу NF, и ПРОЛОГ ответит «да» в знак того, что справедливо отрицание Q. Если, в свою очередь, предикат Q либо явно описан в программе, либо выводится из ее данных, то подцели Q, ! и fail в правиле / * 3 * / будут выполнены. Отсечение, /, предотвращает обращение к дизъюнкту /* 4 */, a fail означает, что цельпо-ь(<2) не достигается. Поэтому заголовок правила /* 3 */, not(Q), приводит к неудаче, и ПРОЛОГ выдаст ответ «нет», означающий, что предикат Q выполним, тогда как not(Q)— нет. Применение not существенно облегчает представление отрица- отрицания в программах. В примере из предыдущего параграфа, дизъюнк- дизъюнкты/* 1 * / и / * 2 */ могут быть замещены правилом летает(Х) : - канарейка(Х) , not (больна (X)) . /* Г*/ Предикат not встроен в большинство версий ПРОЛОГа. В тех слу- случаях, когда он отсутствует, мы можем описать not, используя про- программные утверждения»/* 3 */и/* 4 */. Напомним еще раз, что ПРОЛОГ позволяет определять предикаты на множестве конструкций языка в терминах самого языка (ПРОЛОГ средствами самого ПРО- ПРОЛОГаK). 3.6.7. Немонотонные логики Рассуждения, основанные на CWA, имеют один внутренний изъ- изъян. Рассмотрим, например, одноэлементное множество где а и </? — дизъюнкты логики предикатов. Если мы запишем 5 \= \= cwAA в знак того, что А логически следует из 5 при допущении замкнутости мира, то справедливо ) Это справедливо при отсутствии в программе иных альтернативных правил с тем же заголовком! — Прим. перев. ».;.*,, .,>w,, 1) При условии.что поиск подтверждения для Q с использованием всех возможных откатов завершится неудачей за конечное(!) число шагов. — Прим. перев. 2) Точнее, ~ Q. — Прим. перев. 3) Такие средства языка называются метасредствами. — Прим. перев. 'V
244 Глава 3. ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ поскольку а и <р явно не описаны и не выводима^ „, .„. жества 5. Поэтому следствия 5 в случае исполь$$в4ЙВЯ СЦЩ;<< разуют множество Z^^s^n ^\ . , •...,,¦ С;^кш: • :к' = \аУ ip, -icr, -up У, 4t которое, очевидно, противоречиво (применяя два раза правило ре- резолюции, мы можем вывести ?). Таким образом, применение допу- допущения замкнутости мира приводит к противоречию даже в очень простых случаях. Другая проблема возникает в связи с использованием CWA по отношению к общим правилам программы и их исключениям. На- Например, согласно правилу /* Г */ из п. 3.6.6, для того, чтобы прийти к выводу о том, что некое существо летает, мы должны исключить возможность того, что оно больно. Это означает, что мы должны явно описать все возможные исключения для правила /* Г */. Од- Однако, в общем случае добиться этого невозможно, так как некоторые исключения могут быть неизвестны заранее, но будут уточняться в ходе выполнения программы. В последние годы были предприняты попытки развития формаль- формальных методов дедуктивных умозаключений, избавленных от проблем подобных тем, которые возникают в случае CWA. Проводимые ис- исследования направлены на развитие новых логик, получивших на- название немонотонные логики. Основное различие между немоно- немонотонными и классическими логиками высказываний и предикатов со- состоит в том, что в немонотонных логиках мы можем отменять ранее сделанные заключения по мере того, как выводятся новые. В обыч- обычных классических логиках 5 (= А влечет за собой 5 U 5' У= А. Это означает, что дизъюнкт А, являющийся следствием множест- множества дизъюнктов 5, будет следовать также и из всякого расширения множества 5. В немонотонных логиках (сокращенно, NM) Если 5 \= nm А, то, вообще говоря, SuS'^^A. Это означает, что в немонотонных логиках дизъюнкт А, будучи следствием 5, в общем случае не обязан оставаться следствием множества дизъюнктов 5 и 5', объемлющего 5. Отмену ранее сделанных умозаключений по мере расширения данных можно уподобить естественному образу мышления людей, т. е. пересмотру их убеждений по мере поступления дополнитель- дополнительных сведений об окружающем мире. Исследователи немонотон- немонотонных логик стремятся придать новое обоснование языкам логиче- логического программирования типа ПРОЛОГ, рассчитывая создать более § 3.7. ЭКСПЕРТНЫЕ СИСТЕМЫ 245 «умные» и более производительные системы программирования. В немонотонных логиках предметная область считается незамкнутой. Предметная область не является ни статичной, ни окончательно сформированной; вместо этого она постоянно расширяется по мере поступления новых данных и информации. Поэтому понятие истины в предметной области всегда относительно и зависит от тех знаний, которые представлены в нашем универсуме в каждый конкретный момент времени. Механизм вывода в немонотонных логиках основан на допущении замкнутости мира в каждый момент времени. Мы считаем, что в момент времени tl предметная область может быть описана множеством дизъюнктов 5,, тогда как в момент време- времени i2, где tj > ?,, она может быть описана множеством дизъюнктов 52, причем Б2ф Sx. Для того, чтобы найти следствия Sx и 52, или, иначе говоря, для получения ответа на вопрос, относящийся к Sx или S2, мы полагаем, что допущение замкнутости мира сохраняется как в 5,, так и в 52. Это означает, что в момент времени tx универсум замкнут и описан множеством дизъюнктов 5,, а в момент времени t2 универсум также замкнут, но описан множеством S2. Дальнейшие сведения о немонотонных логиках можно отыскать, например, в [Turn84] или [Besn89]. . § 3.7. Экспертные системы 3.7.1. Искусственный интеллект Раздел математики, носящий название теория искусственного интеллекта (сокращенно AI), занимается проблемами разработ- разработки и формализации интеллектуальных методов и процедур реше- решения различных задач. Прилагательное «интеллектуальный» означа- означает здесь способность привлекать методику рассуждений и оценок, свойственную рациональной рассудочной деятельности человека. Исследования в AI направлены на разработку символьных описа- описаний окружающей действительности, и охватывают такие области, как роботехника, понимание естественного языка, экспертные си- системы. 3.7.2. Экспертные системы и обработка знаний Экспертными системами называются вычислительные програм- программы, предназначенные для решения сложных задач, требующих об- обширных знаний и опыта [BuSc84]. Коренное отличие экспертных систем от обычных программ состо- состоит в том, что традиционные программы заняты обработкой данных,
246 Глава 3. ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ в то время как экспертные системы обрабатывают знания. Различия между этими двумя разновидностями программирования представ- представлены в следующей таблице Обработка данных Представление и использование данных Алгоритмические процедуры Итеративные процедуры Обработка знаний Представление и использование знаний Поисковые процедуры Процедуры вывода Экспертные системы — это специализированные системы, ориен- ориентированные на применение в отдельных узких областях человече- человеческой деятельности; к их числу относятся системы медицинской диаг- диагностики, системы контроля механических неисправностей, системы синтеза сложных химических соединений и др. Для решения поставленных задач экспертные системы использу- используют накопленные факты и наборы эвристик, т. е. правил обработки знаний. Эти факты и правила формируются специалистами той кон- конкретной области деятельности, для которой проектируется эксперт- экспертная система. Можно сказать, что упомянутая совокупность фактов и эвристик представляет знания системы в специальной области ее применения, и поэтому экспертные системы часто называют систе- системами баз знаний. Экспертная система состоит из базы данных, аппарата вывода и интерфейса, обеспечивающего взаимодействие системы и поль- пользователя. База данных представляет собой совокупность элементарных со- состояний и фактов, описывающих предметную область интересующе- интересующего нас направления деятельности. Представление знаний [Watt90] в системах, основанных на пра- правилах, достигается за счет использования правил вида IF ( условие, 1 ) and ... ( условие_к ) THEN ( действие ) Аппарат вывода представлен множеством целевых правил обще- общего вида, предназначенных для организации и управления процессом вывода. В этом аппарате используются математические модели, име- имеющие широкую область применения. С их помощью описываются и формализуются общие процедуры обработки и разрешения задач, такие как поиск в глубину с возвратом, откат и другие универсаль- универсальные методы вывода, представленные в предыдущих разделах. В случае, когда механизм вывода не зависит от тех специаль- специальных знаний, которые содержатся в данной экспертной системе, и работает автономно, его можно использовать при разработке новой экспертной системы. Подобные универсальные системы называются оболочками. щ%л- § 3.7. ЭКСПЕРТНЫЕ СИСТЕМЫ 247 Интерфейс обеспечивает взаимосвязь пользователя и системы. Для того, чтобы эта взаимосвязь была как можно более естествен- естественной и удобной для пользователя, в большинстве случаев применяют- применяются специальные подсистемы анализа и синтеза конструкций естест- естественного языка (системы лексического и синтаксического разбора). Отбор и формализация знаний, которые должны быть заложены в проектируемую экспертную систему, является основополагающим и наиболее трудным этапом разработки всей системы. Накопление знаний — это узкое место, «бутылочное горлышко», технологии про- проектирования экспертных систем. Трудность заключается в отыска- отыскании и одновременной формализации специальных правил, которы- которыми руководствуется специалист в конкретной области для принятия решения. Поэтому значительный вклад в успешную разработку и последующую эксплуатацию экспертной системы вносит инженер базы знаний, лицо, ответственное за отбор, накопление и форма- формализацию знаний. В связи с особой значимостью этапа накопления знаний в послед- последние годы были разработаны автоматические системы накопления знаний. Использованные при этом методы были во многих случаях выбра- выбраны чрезвычайно удачно и вызвали большой теоретический интерес [OlRu87, Quin86]. Инструментарий, применяемый для разработки экспертных си- систем, может быть разделен на две категории [WeKu84]: высокоу- высокоуровневые языки символьной обработки и экспертные системы широкого профиля, или оболочки. К числу наиболее распростра- распространенных высокоуровневых языков обработки символьных данных от- относятся ЛИСП [WiBe89] и ПРОЛОГ. Оболочки используются для облегчения и ускорения процесса разработки специализированных экспертных систем. С помощью специального интерфейса, дружественного по отношению к пользо- пользователю, а также структур, образующих оболочку, можно упростить процедуру ввода в экспертную систему фактов и правил и организо- организовать в случае необходимости их пересмотр. Помимо того оболочки включают в себя автономный аппарат построения вывода, который может осуществлять совместную обработку информации и прово- проводить вывод заключений из нескольких различных баз данных. Все i это дает возможность быстро разрабатывать прототипы экспертных систем. 3.7.3. Экспертная система для диагностики почечных забо- > леваний Экспертная система для диагностики почечных заболеваний, Kidney Expert System (KES), была разработана совместными усили- усилиями группы специалистов по логике и логическому программирова-
248 Глава 3. ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ нию факультета математики университета Патраса и специалистов- врачей госпиталя университета Патраса. При описании этой системы мы ограничимся рассмотрением толь- только тех дизъюнктов и процедур, которые определяют ее устройство, функционирование и наглядно демонстрируют применение ПРОЛОГа при разработке экспертных систем. Правила, образующие специализированную базу знаний KES, формализуют приемы, которыми руководствуется врач, диагности- диагностирующий заболевание по его симптомам и показаниям пациента. Он принимает, например, во внимание тот факт, что пациент немолод, что в его моче, равно как и в крови, наблюдаются качественные из- изменения, что почки его увеличены, и т. п. Если все перечисленные выше признаки налицо, то пациент, вероятно, страдает гидронефро- гидронефрозом. Поэтому правила KES имеют следующий общий вид IF общие сведения о пациенте по стандартной форме !ч and жалобы(Х) and/or наблюдение(симптом_1) and/or "' 4jl and/or наблюдение(симптом-к) and/or исследование(лабораторный анализЛ) and/or исследование(лабораторный анализл) THEN диагноз — (заболевание) с вероятностью Р Эти правила были выработаны под руководством медицинских спе- специалистов. Например, для гидронефроза соответствующее правило выглядит так диагноз(гидронефроз, 0.7): -возраст(/П, Н > 11, жалобы (качественные-изменения_мочи), ;, наблюдение (кровотечение_при_мочеиспускании), . наблюдение (двухстороннее.расширениелочки). где 0.7 — вероятность того, что проходящий обследование пациент страдает гидронефрозом. Теоретическая оценка вероятности, сопро- сопровождающая каждый диагноз, имеет априорный статистический ха- характер. За счет этого допускается диагностирование одного и того же заболевания различными путями с разной вероятностью. Базо- Базовые предикаты, фигурирующие в KES, таковы данные: Имеет четыре аргумента: пол, возраст, имя, фамилия па- пациента. наблюдение: Имеет один аргумент — название симптома, наблю- наблюдаемого при обследовании. исследование: Имеет один аргумент — результат лабораторного анализа. , ,, . .... *.tw... . - ¦.«..,.>.. ,.,,«,.,..«и„.'..г.пи аян^ц-, § 3.7. ЭКСПЕРТНЫЕ СИСТЕМЫ 249 жалобы: Имеет в качестве аргумента одно из следующих показа- показаний: боль, качественныелзменение_мочи, количественныелзмене- ния-мочи, изменение.частоты.мочеиспускания. Предикат жалобы используется для группирования симптомов. По- Поэтому правило общего вида, не содержащее в теле предиката жа- жалобы с перечисленными аргументами, не будет активизировано, что отразится на быстродействии процедуры вывода. диагноз: Имеет два аргумента: наименование диагноза и вероят- вероятность того, что пациент может страдать установленным заболева- заболеванием. Завершив описание базовых предикатов и специальных правил экспертной системы, мы можем перейти к описанию процедур и соответствующих программных дизъюнктов, запускающих аппарат вывода в нашей системе. Вначале мы определим процедуру ввода данных о пациенте, или, другими словами, предикат данные данныеE, A, L, F) : — write("Пол пациента (.и/ж)") , ,, readE), nl, write("Возраст пациента"), read(A), nl, чгп/ write("Фамилия пациента"), read(ZO, nl, * , writeC'HMH пациента"), read(F), nl, '• _-№; assertz (пол (S)), ¦¦'• assertz(возраст(A)), r* assertz (фамилияA/)), i *f assertz(mui(F)). Затем определим процедуру ввода показаний пациента, иначе гово- говоря, предикат жалобы жалобы (X) : Уцг write ("Показания пациента", X ," (да/нет) ?"), read (.Ответ), nl, Ответ="да", assertz(жалоба(X)). Теперь перейдем к процедурам ввода симптомов, наблюдаемых при осмотре пациента, и результатов лабораторных исследований, име- имеющихся в распоряжении у врача наблюдение E): — write ("Обнаружено ", S," (да/нет)?"), ?< read(OTBeT), nl, ^ fc. Ответ="да", * assertz (наблюдение ( 5) ). ,j. Исследов (i?): — ';i< write ("Результат анализа",Л, " (да/нет) ?")<? read(OTBeT), nl, Ответ="да", • 1 assertz( исследование(Ю). Ь "' '^
250 Глава 3. ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ § 3.8. ЭВОЛЮЦИЯ ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ 251 В приведенных выше описаниях оператор assertz заносит в базу данных заголовок соответствующего правила вместе с подстановоч- подстановочным вариантом его аргументов. За счет этого информация, получен- полученная в ходе диалога системы и пользователя, помещается в память и сохраняется для дальнейшей обработки. И в завершение мы опишем главный предикат поста- витьлиагноз. поставить_диагноз : — !, данныеE, A, L, F), ; . . диагноз(ДР), г, assertz (диагноз (Д Р)). Если описанный предикат поставить в качестве запроса и обеспе- обеспечить базу данных нужными эвристиками, то ПРОЛОГ приступит к выводу заключений. В действительности, возникнет диалог между пользователем и ПРОЛОГом, который завершится постановкой тех или иных диагнозов в зависимости от сведений, представленных пользователем. Предположим, например, что база данных содержит следующие правила диагностики. диагноз(острыйлиелонефрит,0.7) : — % жалобы (боль), ,.и ,; наблюдение (лихорадочный.озноб), наблюдение (кровотечение лри_мочеиспусканив). диагноз (острыйлиелонефрит, 0.8) : — возраст(А), А <9, диагноз (острыйлиелонефрит.О. 7) , .;, , исследование (положит. _анализ_культуры_моч||)у,у,: > 10 !«•'-! mi .-¦,:¦.:. жалобы (изменение_частоты_мочеиспускания),'" :' . "v;t» жалобы(боль), v;'1oi диагноз (острыйлиелонефрит.О. 8) , , ,, наблюдение (боли_влочках), .' - %t ' наблюдение(миктоурит), наблюдение (дизурия). ', Обратимся с запросом ? поставитьлиагноз. Завяжется следующий диалог между пользователем и экспертной системой (ответы пользователя взяты в кавычки, а строки, содер- содержащие комментарий, отмечены значком %). ? Пол пациента (.и/ж) «м» ? Возраст пациента «11» ? Фамилия пациента «имярек» ? Имя пациента «имярек» У. ПРОЛОГ вводит в базу данных следующие дизъюнкты У, пол(м). У, возраст A1). .,.,**;„ У, фамилия (имярек). ' ¦•¦-•..-. У. имя (имярек). ? Показания пациента боль (да/нет)? «да» >f У, ПРОЛОГ заносит в базу данных дизъюнкт У. жалоба (боль) . ? Обнаружено при обследовании пиурия (да/нет)? «да» У, ПРОЛОГ заносит в базу данных дизъюнкты j У. наблюдение (пиурия). | У. диагноз (острыйлиелонефрит, 0.7). У. и пытается найти другое подтверждение '' У. - для предиката диагноз. , У, Поскольку во втором программном утверждении s У. с заголовком диагноз ,, У, упоминается возраст(А), У. а в нашем случае А — 11, то предикат А < 9 |, У, будет невыполним, и ПРОЛОГ перейдет У, к третьему программному утверждению, У. утверждению, описывающему предикат диагноз. ? Показания пациента изменение_частоты_мочеиспускания (да/нет)? «нет» У, ПРОЛОГ отвергает последнее правило, У. прекращает, учитывая оператор отсечения, поиски ответа, У, на первоначальный запрос, и выдает окончательный диаг- У, ноз • •( D = острыйлиелонефрит Р '*¦ Р = 0.7 л if ¦ К1'' . •;.{; ," -¦ < :' . § 3.8. Эволюция логического программирования , 3.8.1. Редакции ПРОЛОГа ;; ПРОЛОГ в первоначальной редакции ПРОЛОГ I был спроектирован как вспомогательный искусственный язык для обработки естествен- естественно-языковых конструкций на основе логики [Colm90, Со190а]. И хо- хотя этот вариант языка оказался очень эффективным средством для представления и решения сложных задач, его способности выпол- выполнять арифметические вычисления были весьма ограничены. ПРОЛОГ и, та редакция ПРОЛОГа, которая рассматривается в на- нашей книге, обладает достаточной гибкостью и выразительностью для проведения арифметических вычислений, благодаря использо- использованию аппарата бесконечных деревьев и предиката «\ =». Последняя редакция ПРОЛОГа, ПРОЛОГ III [Colm90, Col90a] облада- обладает еще более развитыми возможностями, включающими встроенный
252 Глава 3. ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ § 3.8. ЭВОЛЮЦИЯ ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ 253 аппарат обработки бесконечных деревьев, булеву алгебру, предика- предикаты <, =, <, >, =>, и \=, а также сложение, вычитание и умножение функций и констант. ПРОЛОГ Ш относится к числу так называемых языков логического программирования с ограничениями (constraint logic programming) [Cohe90]. Логическое программирование с ограничениями сформи- сформировалось в результате попыток обогатить язык хорновских дизъюнк- дизъюнктов переменными, принимающими значения из различных областей, как то множество деревьев, действительных чисел, булева алгебра и т. п.1) V' 3.8.2. Версии ПРОЛОГа ПРОЛОГ в сущности предлагает лишь аппарат для выполнения логических программ. Разнообразные версии ПРОЛОГа, имея в своей основе один и тот же аппарат логического вывода, различаются, по большей части, в стиле общения с пользователем. МИКРО-ПРОЛОГ [С1Мс84], ТУРБО-ПРОЛОГ, АРИТИ-ПРОЛОГ, Д-ПРОЛОГ [Xant90] предназначены для малых компьютеров. Система Д-ПРОЛОГ является греческой версией и допускает использование греческих букв. 1С-ПРОЛОГ, mu-ПРОЛОГ и nu-ПРОЛОГ имеют более сложные прави- правила выбора предикатов для унификации [Lloy87]. Nu-ПРОЛОГ, обла- обладающий автоматическим препроцессором, допускает гораздо более чуткое управление программой по сравнению с другими версиями ПРОЛОГа и считается языком наиболее близким к языку «идеально- «идеального» логического программирования. 3.8.3. ПРОЛОГ и метапрограммирование В разделах 1 и 2 мы отмечали, что для языка С логики предикатов или логики высказываний имеется соответствующий метаязык, т. е. язык, на котором описываются свойства языка С и его дизъюнктов, см. Замечание 1.5.2. Подобной возможностью располагает и ПРО- ПРОЛОГ. Метапрограммы в ПРОЛОГе воспринимают программы ПРОЛОГа как термы и анализируют их свойства и взаимоотношения. Напри- Например, в [Kowa90] предикату придается следующий смысл «программа Т применяется для доказательства дизъюнкта Р*. ') Помимо типизации переменных в логическом программировании с ограничения- ограничениями широко используются нелогические средства разрешения встроенных предикатов, налагающих ограничения на допустимые значения переменных. — Прим. перев. За счет способности ПРОЛОГа к метапрограммированию пользова- пользователь, имея вначале простые программы и применяя по мере необ- необходимости средства метаязыка, может создать ПРОЛОГ-программу, управляющую целой группой ПРОЛОГ-программ, которые, в свою очередь, обращаются к другим ПРОЛОГ-программам, и т. д. Метапрограммирование применяется с целью автоматизации раз- разработки ПРОЛОГ-программ и автоматической проверки их свойств. 3.8.4. ПРОЛОГ и параллелизм Поиски путей повышения быстродействия и эффективности вы- вычислительных машин привели к созданию параллельных компьюте- компьютеров. Классический компьютер обрабатывает каждую команду или оператор программы последовательно по очереди, в результате чего машина способна исполнять только по одной команде или операто- оператору на каждом шаге вычисления. В параллельных компьютерах на одном шаге вычисления привлекаются несколько независимых друг от друга команд или операторов, которые исполняются параллельно на многопроцессорном вычислительном устройстве. Хотя применяя параллельные алгоритмы и параллельные компь- компьютеры можно получить простые и естественные решения сложных задач, при этом приходится сталкиваться с новыми проблемами, связанными с синхронизацией обмена сообщениями между незави- независимыми процессами и управлением всей программой. Эти трудности можно преодолеть обратившись к специальным языкам программи- программирования, обладающим способностью выражать параллелизм вычис- вычислений (например, к языку ОККАМ) и восполняющим разрыв между новой многопроцессорной аппаратной технологией и классическим последовательным программным обеспечением. В самом ПРОЛОГе нет средств для использования параллелизма вычислений. Более того, .выполнение ПРОЛОГ-программы, как мы уже отмечали ранее, представляет собой последовательный про- процесс. Однако, в последние годы были разработаны и выдвинуты на первый план языки параллельного логического программирования. В основу этих языков положен принцип параллельной интерпрета- интерпретации логических программ, который обеспечивается специальными средствами синхронизации процессов и управления всей програм- программой. Реляционный язык, предложенный Кларком и Грегори в 1981 г. был первым языком логического программирования, который допу- допускал возможность недетерминированного выбора независимых про- программных утверждений. Утверждения этого языка могут быть пред- представлены в следующем виде А : - Gu...,GJBx,...,Br. (*) Щ\ А- '• ~ Gx,.. ., Gk/Si\\S2\\ ... ||5р»КН«;;?»ЭТо ^EICliH Я ,(**)
254 Глава 3. ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ где A, G,,..., Gk, В{,..., Вт — предикаты, а 5„ ..., 5Г — конъюнк- конъюнкции предикатов. Здесь А является заголовком обоих дизъюнк- дизъюнктов, последовательность Вх,..., Вт — телом дизъюнкта (*), 5,,... ..., Sr—телом дизъюнкта (**), a G,,..., Gk играют роль усло- условий (предохранителей), которые должны выполняться в совокуп- совокупности для активизации дизъюнктов (*) и (**). Различие между эти- этими двумя дизъюнктами имеет процедурный характер: конъюнкции 5|,...,5Г обрабатываются независимыми процессорами, и унифи- унификация без отката выполняется параллельно. Реляционный язык об- обладает весьма ограниченными возможностями, и логические про- программы, выполненные на этом языке, могут применяться только для проверки выполнимости простых отношений между фактами. Конкурентный ПРОЛОГ, предложенный Шапиро в 1983 г., исполь- использует только дизъюнкты типа (*), но зато в нем имеются переменные двух различных типов: переменные для чтения и обычные пере- переменные. Переменные для чтения не допускают подстановки в них термов при унификации. Унификация откладывается до тех пор, по- пока эти переменные не примут конкретные значения. Возникающая при этом задержка решает также и проблему синхронизации. ПАРЛОГ (язык ПАРаллельного логического программирования), разработанный Кларком и Грегори в 1984 г., является улучшенной модификацией Реляционного Языка. В 1985 г. Уида предложил но- новый язык GHC (Guarded Horn Clauses, т. е. охраняемые хорновские дизъюнкты), в котором удалось объединить лучшие черты ПАРЛОГа и Конкурентного ПРОЛОГа. Область языков параллельного логического программирования постоянно развивается. Дополнительные сведения об этих языках можно узнать из [Shap87] § 3.9. ПРОЛОГ И ЛОГИКА ПРЕДИКАТОВ 255 Vt! § 3.9. Пролог и логика предикатов Как мы уже отмечали, в логическом программировании прихо- приходится иметь дело с особым классом формул логики предикатов, а именно, с хорновскими дизъюнктами. Поэтому язык ПРОЛОГ без спе- специального предикатного символа «.» (см. п. 3.3.7) представляет со- собой подмножество языка логики предикатов. При этом сама система программирования ПРОЛОГ, которая по существу есть ни что иное, как особая стратегия вывода заключений из начальных допущений в рамках логического программирования, предстает в двух различных ипостасях, которые можно условно назвать A) Чистый ПРОЛОГ B) Реальный ПРОЛОГ Чистый ПРОЛОГ не содержит никаких средств управления вычисле- вычислением, и поэтому отсечение !-, а также предикаты fail и not в этом языке отсутствуют. Реальный ПРОЛОГ является расширением чисто- чистого ПРОЛОГа за счет добавления отсечения, fail и not. Выделение этих двух разновидностей ПРОЛОГа весьма существенно, поскольку теоремы полноты для логики предикатов, будучи справедливыми в чистом ПРОЛОГе, перестают быть таковыми в реальном ПРОЛОГе. В каждой ПРОЛОГ-программе данные представляются совокуп- совокупностью предложений 5 логики предикатов. Всякий запрос вида «? Р» к программе требует построения доказательства или опро- опровержения для 5 Ьд Р. В чистом ПРОЛОГе теорема полноты (Теоре- (Теорема 2.10.11) и теорема Робинсона (Теорема 2.9.8) гарантируют, что алгоритм унификации всегда завершится, и при этом либо будут обнаружены все значения переменных, для которых 5 Ьл Р, либо, отношение S \-R P будет опровергнуто. i Применяя в реальном ПРОЛОГе оператор отсечения, мы коренным образом изменяем эти свойства. Отсекая поддеревья в дереве вычи- вычислений, мы можем воспрепятствовать программе найти те значения переменных, при которых S\-RP. Показательным примером может служить программа из п. 3.4.4, содержащая правило (Г) с операто- оператором отсечения. Обращение к этому правилу вынуждает программу давать неправильный ответ. И поэтому, хотя использование отсечения, fail и not придают программированию в реальном ПРОЛОГе большую гибкость, ни про- программист, ни пользователь не имеют гарантии того, что их програм-s мы будут вычислять правильные результаты. Программы чистого ПРОЛОГа требуют порой больших затрат вре- времени для своего исполнения. Необходимость проектирования бы- быстродействующих программ заставила заняться разработкой прие- приемов улучшения их производительности даже в реальном ПРОЛОГе. Реальный ПРОЛОГ, в котором отсутствует проверка вхождения пе- переменной в терм при унификации (см. Алгоритм 2.9.7.), но зато используются отсечение, fail и not, является в настоящее время наиболее эффективным и популярным языком логического програм- программирования. И хотя корректность программ при этом будет теорети- теоретически необоснованной, это не означает, что результаты их вычи- вычислений будут неверны. Это значит всего лишь, что программист должен быть очень осторожен в употреблении встроенных опера- операций, отсечения и отрицания not. Обращаясь к реальному ПРОЛОГу, мы можем улучшить быстродействие и эффективность программы ценой отказа от общей теоремы полноты. Коренное отличие логики предикатов от ПРОЛОГа, как чистого, так и реального, проявляется в том, как эти системы обращаются с данными программы 5. ПРОЛОГ упорядочивает данные, нумеруя факты и правила в порядке их расположения в программе. И да-' же порядок расположения предикатов в теле правил сохраняется в точности таким, каким он был указан при написании программы. Поэтому правила
256 Глава 3. ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ А : - Ви В2. (*) А: - В2, Вх. ' (**) считаются различными, несмотря на то, что в логике предикатов соответствующие формулы эквивалентны благодаря коммутативно- коммутативности V. Более того, время выполнения программы может сущест- существенно зависеть от того, какому из этих двух правил будет отдано предпочтение. Процедурный стиль обработки данных в ПРОЛОГе создает трудно- трудности в тех случаях, когда программа содержит правила вида А: -А. A) или даже более общего вида А : -Вх,...лА,...,Вк. B) Дело в том, что хорновские дизъюнкты вида или (Вх Л...ЛВкЛА)-> А являются тавтологиями (оба они эквивалентны формуле А Л^А), и поэтому правила A) и B) не добавляют программе по существу никакой новой информации. Однако, обращение с запросом «? А.» к программе, содержащей правила A) или B) порождает, ввиду рекурсивного определения А, бесконечный цикл, из которого про- программа сама по себе выйти не в состоянии. Большинство случаев зацикливания ПРОЛОГ-программ возникает в связи с наличием в них данных вида A) или B). С другой стороны, логически общезначимый хорновский дизъ- дизъюнкт вида А : - fail. эквивалентный в логике предикатов формуле РЛ-.Р-+Л, где Р — произвольное предложение логики предикатов, а Л — хор- хорновский дизъюнкт, применяется в реальном ПРОЛОГе для выражения отрицания. Отрицание в реальном ПРОЛОГе гораздо сильнее обыч- обычного отрицания логики предикатов. В логике предикатов отрицание дизъюнкта А можно определить как -.А«(А^ВЛ-.В) или равносильно Поэтому в случае '•¦•'¦* 5 Ь„ А It §3.10. УПРАЖНЕНИЯ 257 как -уА, так и not(A) в реальном ПРОЛОГе являются невыполнимы- невыполнимыми предложениями (см. Определение 2.5.15 и п. 3.6.2). Однако, в случае S\/R A т. е. когда А резолютивно недоказуемо в программе 5, в логике пре- предикатов в общем случае нельзя определить, будет ли при этом обя- обязательно справедливо 5 \-R -*A, в то время как в реальном ПРОЛОГе not(A) будет безусловно справедливо в виду допущения о замкну- замкнутости мира (см. пп. 3.6.2 и 3.6.3). Реальный ПРОЛОГ, независимо от того, полон он или нет, полу- получил широкое распространение и является наиболее эффективным языком логического программирования. А что касается контроля правильности программы, — так это всегда было и остается уделом программистов и пользователей. § 3.10. Упражнения Ч 3.10.1. Запишите на языке ПРОЛОГ следующие высказывания обы- обыденной речи: а) Крис ненавидит учебу. б) Кто-то любит Мэри. в) Джордж дружит со всяким, кого он любит, если этот человек тоже любит его. г) Мэри любит всякого, кто восхищается ею. „ f! д) Энди опасается тех, кто крупнее его. -J'*>''¦' е) Энди ревнует ко всякому, кто нравится Мерм, если этот ЧИ$о- век не менее высок, чем Энди. » Решение, а) ненавидит (крис, учебу). '>' *bi б) любит (X,Мэри). в) дружит (Джордж, X): — любит (Джордж, X) , любит (X, Джордж). г) любит(Мэри,Х): — восхищается(X,Мэри) . д) опасается(Ник.Х): — крупнее{X,Энди) . е) ревнует (Энди, X ): — нравится (Мэри, X), not (ниже (X, Энди)) . 3.10.2. Напишите ПРОЛОГ-программу, соответствующую доказа- доказательству из упражнения 2.12.37. Решение. t(a, b, с, d). /* abed —трапеция с вершинами а, /Ь, /с, /d */ р(а, b,c,d) : - t(a, b, с, d). /* ab \\ cd, если abed —трапеция */ e(a, b, с, d; d, b) : — p(a, b, c, d). ~ /* abd — cdb, если ab || cd */ e(a,b,c,d;d,b). t ..... J /*abd=cdb*/ 9 Г. Метакиденс, А. Нероуд
258 Глава 3. ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ §3.10. УПРАЖНЕНИЯ 259 3.10.3. Представьте в виде ПРОЛОГ-программы базу данных всех европейских стран вместе с их столицами. Сформируйте подходя- подходящие запросы, позволяющие определять столицу заданной страны или страну, имеющую столицей заданный город. 3.10.4. Для приведенной ниже базы данных определите отноше- отношения выше, вышеСХ, У) высокого роста, высокий (X) среднего роста, средний (X) низкого роста, низкий(X) Условимся считать, что мужчина, тп, и женщина, /, имеют высо- высокий рост, если он превышает 180 и 175 см соответственно, и низкий рост, если он не превышает 170 и 160 см. рост (Билл, тп, 180). ' рост(Энди, тп, 154). рост(Джим,т, 187). рост(Пол,т, 175). ** рост(Джон, тп, 166). рост (Алекс, тп, 176).' рост(Мэри,/173). ; рост(Анна,/ 161). рост (Джоан,/ 168). рост (Кэтрин,/ 178) i4 Решение. -Л-.НЬ П: ¦ it а. но зъаае(Х, У) : высокий(Х) высокий(Х) средний(Х) средний(Х) низкий(Х) : низкий(Х) : 3.10.5. Рассмотрим следующие таблицы оборудования и его по- поставщиков на склад запасных частей для автомобилей - трост(Х,., Z), рост(У_, W), Z > W. : - рост(Х, m, У), У=>180. : - рост(Х,/, Y), У=>175. : - рост(Х, тп, У), Г > 170, Г < 180. : - рост(Х, / Y), F>160, F<175. - рост(Х, тп, Y), Y=<\70. ,/ Y), У=<160. ' ft: Поставщик Код 001 002 010 ПО Имя Джон Энди Джон Ник Род деятельности Фабрикант Посредник Посредник Импортер Город Афины Пирей Салоники Пирей i,- Товар Артикул 003 004 005 013 Наименование Масло Шины Лампы Масло Модель 30 157/75 RAAI 60 Вес 300 2000 10 500 Поставка Код 001 002 010 ПО Артикул 005 003 004 013 Количество 150 200 030 250 ш 9'." Представьте информацию, содержащуюся в таблицах, в виде базы данных ПРОЛОГа, используя только двухместные предикаты и запи- запишите в виде хорновских дизъюнктов следующие запросы: 1) Как зовут поставщиков масла? 2) В каком городе проживает поставщик шин, и в каком городе проживает поставщик ламп? !Г . 3) Что поставляет Джон? ••¦ 4) Какой поставщик масла обосновался в Патрасе и поставляет менее 400 тонн продукта? лЩ -¦ 5) Кто поставляет лампы, и кто поставляет шины? i'1'1 . J"' Решение. Введем следующие предикаты: . .• г: о - ¦ i. имя(Х, У) /* X — код поставщика, У — имя поставщика*/ профессия(Х, У) /* X — код поставщика, У — род деятельности*/ город(Х, У) /* X — код поставщика, У — местожительство*/ продукт(Х, У) оборудования*/ тип(Х, У) вес(Х, У) код_артикул(Х, У) количество(Х, У) /* X — артикул, У — наименование /* X — артикул, У — тип оборудования*/ /* X — артикул, У — вес оборудования*/ /* X — код, У — артикул*/ /* X — код, У — количество продукта*/ Таким образом, образуется следующая база данных: Ы имя@01,джон).
260 Глава 3. ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ " ,-Ji-U, пп имя@02,энди). ;v,... ,' io*^;. Л| имя@10,джон). ! - -- имяA10, ник). / ' ..'У'1''! профессия@01, фабрикант). .' '... профессия@02,импортер) . - ., ,,;i . профессия@10,посредник).. : профессияA10,импортер) . ;,. • f) ! город@01,афины). город@02,патрас). i^W :f • г-; i'Q .: город@10,салоники). ?"'" _ .„.!.; городA10,пирей) . 7, -*•'•¦ :> ,'¦;','¦ ;, .; „.,; продукт@03,масло). |$'>:'Д;.ЛЛ* Гк.Ч'г^' Л* продукт@04,шины) . • • ~|-'--¦-•- продукт @05, лампы) . ЛШ' , " v< | продукт@13,масло) . ,- ••!¦• — • тип@03,0"). ¦<>"" ;¦ lf , тип@04,57/75"). 4 , тип@05,"МА1"). ; К- > тип@13,0"). - < , < ! - вес @03,300). с* О .'; i вес@04,2000). - —' вес@05,10). < О f>l.- .fMqod _ы:, вес@13,500). -'.Ур/ h'j!:"v: г.») код-артикул@01,005). ,j, ;,i; <>fi. ,;. v-jh^sci код_артикул@02,003). r код_артикул@10,004). <' ' код_артикулA10,013). количество@01,150). : v ^!у>:ш* -);-;- ч^^лч; количество@02,200) . ./п;^ jrj;P'»"-«Tjo-; ¦•¦•'i-1 (I количество(ОЮ.ОЗО). ;;( ,,.>., ,.г^ "-i,,tt,-,',-.-,г; но и;>1 .' л количество A10,250). ' " ' ',,. Сформируем следующие хорновские дизъюнкты для запросов ; A) поставщик-масла (ИмяПоставщика): — ;. продукт(КодПродукта,масло), а код_артикул (КодПоставщика, КодПродукта)'.f имя(КодПоставщика,ИмяПоставщика). ?. Uf ? поставщик-масла (ИмяПоставщика) . ... город-продукта(ГородПоставщика,Продукт): — > продукт(КодПродукта,Продукт), V код-артикул(КодПоставщика,КодПродукта)j имя(КодПоставщика,ГородПоставщика). ( ? город_продукта(Х,шины) ,город_продукта(У,лампы). f поставляет(ИмяПоставщика,Продукт): — продукт(КодПоставщика,ИмяПоставщика), код_артикул(КодПоставщика,КодПродукта), f §3.10. УПРАЖНЕНИЯ 261 имя(КодПродукта,Продукт). ? поставляет(джон,Продукт). D) поставкаласлалатрас(ИмяПоставщика,ОбъемПоставки): — продукт(КодПродукта,масло), вес(КодПродукта,ВесПродукта), и- ,г, .¦ ВесПродукта < ОбъемПоставки, •\ч •¦ ч^и».^ -«.о- к0Д-артикул(КодПоставщика,КодПродукта), *д,Г город(КодПоставщика.патрас). имя(КодПоставщика,ИмяПоставщика). ? поставляет_маслолатрас(Х,400). E) поставщик(ИмяПоставщика,Продукт): — продукт(КодПродукта,Продукт), код_артикул(КодПоставщика,КодПродукта), |!J имя(КодПоставщика,ИмяПоставщика). !(!, ? поставщик(Х, лампы) , поставщик (У, шины) . 3.10.6. Проведите анализ вычислений заданной ПРОЛОГ-програм- мы и постройте соответствующее дерево вычислений. А(а, Ь). /* 1 */ В(Х) : - С(Х, У). ,., /*2*/ СF,а) : - А(а, 6). .„,. /* 3 */ С(Х, У) : - А(Х, У). а, / * 4 * / ? В(Х). Решение. Запрос В(Х) унифицируется с заголовком правила / * 2 * /. Образуется цель С(X, У). Она, в свою очередь, унифици- унифицируется с заголовком /* 3 */ при помощи подстановок X/b, YJa. Поскольку А(а, Ь) унифицируется с фактом /* 1 */, вычисление успешно завершается, и ПРОЛОГ выдает ответ Х = Ъ ' «к П Y = a «ч- ч. Затем ПРОЛОГ освобождает переменные X и У от ранее получен- полученных значений, совершает откат, пытаясь выполнить целевое утвер- утверждение С(Х, У) иным способом. Цель С(Х, У) унифицируется с за- заголовком правила /* 4 */. При этом образуется новая цель к(Х, У), которая унифицируется с фактом / * 1 * / при помощи подстано- подстановок Х/а, Y/b. После освобождения переменных и очередного отката ПРОЛОГ не имеет возможности добиться выполнения основной цели или промежуточных целей каким-либо иным способом, и поэтому вычисление ограничивается еще одним ответом X = а Дерево в пространстве вычислений имеет вид:
Глава 3. ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ §3.10. УПРАЖНЕНИЯ 263 " ''К да t ¦(.-*. ¦ X/a, Y/Ь ? А(а,Ь) . л. &>У: '¦ <П , ''¦''. ¦'¦ 3.10.7. Полиция обнаружила тело несчастной женщины по имени Сюзанна, голова которой была разбита тупым орудием. Участника- Участниками этой печальной драмы являются Алан, тридцатипятилетний мяс- мясник и вор, а также Джон, двадцатипятилетний футбольный игрок, который испытывает сентиментальную привязанность к Сюзанне и Барбаре одновременно. Барбара, двадцати двух лет, парикмахер, замужем за Бертом, пятидесятилетним хромым столяром. В ходе расследования в доме Джона был обнаружен револьвер. Для поли- полицейских ревность и запланированное ограбление служат подходя- подходящими возможными мотивами совершения преступления. Помогите им отыскать убийцу. Решение. /* Формулы, выражающие предположения и факты, полученные в ходе расследования */ .. ._,.,.¦..;... _ v личность(джон,25,мужчина,футболист). личность(алан,35,мужчина,мясник). личность(барбара,22.женщина,парикмахер) личность(берт,50,мужчина,столяр). личность(алан,35,мужчина,карманник). знакомы(барбара,джон). знакомы(барбара,берт). знакомы(сюзанна,джон). убита(сюзанна,дубинкой). мотив(деньги). мотив(ревность). имеет (берт, деревянный_костыль). . : имеет(джон,пистолет). /* соображения здравого смысла */ действуют_одинаково(де]эевянный_костыль,дубинка). . действуют_одинаково (брусок, дубинка). действуют-одинаково (ножницы,нож). ' , ' действуют-одинаково (бутсы, дубинка) *jkj« ¦ s., и я ? (Ь Г ЫРС" ** К- >*.* : у) jv возможноJBweeT(X,бутсы): —личность(Х,_,_,футболист). возможноjBweeT(X,ножницы): —личность(Х,_,_,парикмахер) . возможноjm«eeT(X,Предмет): — имеет{X,Предмет). /* предположения о преступнике — */ , >>,д /* подозреваемые двух категорий: */ ,., :тл ., ,i /* имевшие возможность совершить убийство */ ?_ к >QCii /* и имевшие причину совершить убийство */ 1 v' подозреваемый_по_возможности(Х, Y): -убита(У,Орудие), *д действуют-одинаково (Орудие, Предмет), возможно_имеет(.X, Предмет). подозреваемый лоа«отивам(Х,У): —мотив (ревность), личность(.?Г,_,мужчина,-), знакомы(.X, У). подозреваемыйло_мотивам(Х, Y): —мотив(ревность) личность(X,-,женщина, _) , знакомы(X,Субъект), знакомы(F,Субъект), личность (Субъект,., мужчина, _). Подозреваемыйломотивам(.X, Y): -мотив (деньги) личность(Х,_,-.карманник). /* соображения здравого смысла */ наиболее_подозрительный(Х, У): — " f' " подозреваемыйлоа«отивам(Х,У), q подозреваемыйло_возможности(Х, У). V7t k '» •* В силу своего определения предикат наиболеелодозрительный не имеет вероятностной интерпретации и зависит исключительно от двух предикатов подозреваемыйло-мотивам и подозреваемыйло_возможности. Проверьте, построив соответствующие полные вычисления, что на поставленные запросы построенная ПРОЛОГ-программа даст сле- следующие ответы: ? подозреваемыйло_возможности(Х, сюзанна) . "' ? подозреваемыйло_мотивам(.Х\ сюзанна). «),1Э д X=барбара Х=аллен ? наиболеелодозрительный(Х, сюзанна). Г) а ,Н» а -Г' 3.10.8. Не очень-то приятно вычислять рассИШния по карте пШ подготовке к путешествию. ПРОЛОГ-программа^|десь может ПРИГОДИТЬСЯ. .-чм ttXlt>>:,. ¦ •-,:.Щ>< :¦>'«-
264 Глава 3. ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ ..,,,...,, ;Н»\ Решение. Рассмотрим в качестве примера следующую про- программу /* данные из путеводителя */ дорога(каламата,Триполи,90). дорога(триполи,аргос,60). S ' ' *_ : \ дорога(аргос,коринф,49). ''ь'*'>-'м- ¦¦ лч<>;/--'1' i- ¦» дорога(коринф,афины,83). /* правила вычисления расстояний1) */ ОР! г «ыма*я.'.седел путь(Город1,Город2,Расст): -дорога(Город1,Город2,Расст). путь(Город1,Город2,Расст): -дорога(Город1,X,РасстЮ, путь (X,Город2,Расст2), ^'^ялтае«дог Расст = Расст! + Расст2. Каково расстояние между Каламатой и Коринфом? ? путь (каламата,коринф, X). 199 3.10.9. Приведите рекурсивное определение предиката :. ., факториал(Х Y), который подразумевает Y = Х\, основыва!Ю|»{||§ соотношениях ^ , s , „^ аI! - 1 .'¦ . л>'; йЩ/. h-- ¦¦'•-, б) п! =(п - 1)! ¦ п 'кЛч,';Ц, ,ом.^ Постройте дерево вычислвииЬЩ»* изученной программы м за- запроса >« ov.#w>M4i* ? факториалC, X) шу*®ХЩ<< ?"?гчпаи'^->^У оч*у$%у vMr.- !# Решение '«/жт^ |чц»т;ш мснт,оптаоа;.ч! t»->wm >ь Соотношение а) задает граничное условие, |ус§$Ц1?рение б) — рекурсивный переход. Искомое определение ВЦЭДОДТ так: «4< факториалA,1) : - !. р.кечинм' /* 1 */ ¦'' факториал(iV.Фактор) : — iVI = N-l, k'"»f факториал(ЛГ1 ,Фактор1), ¦ Йим».*.а»< Фактор = N* Фактор1. Tqo> / * 2 * / Отсечение в формуле / * 1 * / используется для предотвращения отката при вычислении 1!. *' i;" Пространство состоянии запроса ? факториалC, X) й;ч ') Следует иметь в виду, что предложенная программа хорошо работает только в том случае, когда в путеводителе отсутствуют замкнутые «кругосветные» маршруты. В противном случае дерево вычислений может оказаться бесконечным. Подумайте над тем, как нужно модифицировать эту программу, чтобы она могла вычислять кратчайшее расстояние между городами. — Прим. перев. §3.10. УПРАЖНЕНИЯ ,-ц f .vi*...l. 265 представлено следующим деревом ,uiic^':; ¦ : о* f ? факториал C, AT). ^«Ш''¦";»•¦• ^ N/3, Фактор/Л1 10 . " „,? iVl = 3 - 1, факториал(ЛГ1,Фактор!) , С. * Af/2, Фактор/Фактор! N1 = 2-1, факториал(ЛГ1,Фактрр1) , ¦Г /. /1 ? Фактор!= 1. отсечено 1 •") аи, ЯОТ!1'.- ? Фактор= 3*2. да X = 6. i H :> ; U Э Ч s 3.10.10. Приведите рекурсивное определение предиката ие ":>т" •хр(х, у, г), который обозначает соотношение x» = z и задае^Ш*) сивную функцию , tс. ш в Ч .. с. ш в Ч Xs = х-Xs Г;4": Ч^' ¦"• I 3.10.11. Предположим, что нам требуется определить предикат, описывающий количество родителей некоего лица х. Согласно Биб- Библии мы должны иметь ввиду, что Адам и Ева не имели родителей. Поэтому мы пишем программу Р\ т/* программа Р\ */ , ЭТ,твт1 число_родителей(адам,0):- !. , /*/1/*/ число-родителей(ева,0):- !. (- чпои{<,>, • / */2/* / число-родителей(X, 2). '" / * /3/ * / в которой применяется отсечение во избежание отката в запросах вида ? число_родитвлвй(адам,Х). ^ ^# 1<№ ? число_родитвлвй(адам,0).
266 Глава 3. ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ §3.10. УПРАЖНЕНИЯ 267 /* 1 */ U 2 * /* 3 */ а) Что выдаст ПРОЛОГ в качестве ответа на запрос - ? число-родителей(ева,2). (*) и почему? б) Что выдаст ПРОЛОГ в качестве ответа на запрос (*), если вместо программы Р\ мы воспользуемся программой Р2 /* программа Р2 */ число_родителей(адам,ЛГ) : — !, N— 0. число_родителей(ева,Л^) : — !, N = 0. <„,. число_родителей(Х,2). ; и каков будет ответ на запрос < *\ ? число_родителей(Х, Y). л ' '' х к программе Р2? * -,Ф г 3.10.12. Напишите ПРОЛОГ-программу вычисления абсолютной величины числа. 3.10.13. Напишите ПРОЛОГ-программу, проверяющуМ|утгём П{ мотра всех элементов списка, содержится ли задайныи ЭЛ6М (простой элемент или список) в заданном списке L. Решение. -ят* •? элемент (Я, [Я: _]). элемент(/, [_: Г]) : - элемент(/, Г). 3.10.14. Проверьте содержится ли список Я в списке L в каче- качестве элемента, и определите первый элемент списка L. Примените написанную программу к списку L = [а, Ь, с, ]. Решение. элемент(Я, [Я: _]):-!. элементе/, [.: Г]) : - элемент(/, Г). Единственным решением, найденным ПРОЛОГом в ответ на запрос ? элемент(.X, [а, Ь, с]). будет X = а. Наличие отсечения в дизъюнкте / * 1 * / делает невозможным обнаружение других ответов. 3.10.15. Напишите программу, выделяющую п первых элементов списка. 3.10.16. Напишите программу, вычисляющую разность двух спи- списков. /* 1 */ /* 2 */ Решение, вычесть (L, [], L): — !. вычесть([Я: T],L,Ul: -элемент(Я, L),!,вычестьGJL, U) .* вычесть (_,_,[]). элемент(Я,[Я: _]). элемента, [_: Г]): -элемента, Г). •*"*-"• " 3.10.17. Определите в терминах ПРОЛОГ-программы теоретико- множественные отношения элемент, подмножество и пересечение Решение. -...,«.. -..*,.>>., ^л^кв> /* G */ .я STaiji . «и» о;'»';¦- ' квД элемент(Д[Я: _]). ^<это.¦.;>¦:•':• ->w••'¦.. •¦ ¦¦¦ki> элементе/, [_: Г]): -элемент(/, Г). • ^ ,„'» /* с */ ;,' V подмножество ([Я: Г],/): —элементСЯ, /) ,подмножествоG^/) . подмножество ([], /). /* П */ X пересечение ([], X, []). пересечение([X, Г], /, [X, Z]): -элементСД /), ! , пересечение(Т, I, Z). •) пересечение([X, Т], I, Z): — пересечение(Т, I, Z)*). « 3.10.18. Предположим, что мы располагаем списком из восьми животных, V — [al, a2, rl, Ы, hi, ol, о2], которые классифициру- классифицируются следующим образом. ¦ •*'« Пресмыкающиеся: Млекопитающие Хищники: Oi, о Заведите базу данных, описывающую приведенную классифика- классификацию, а также ПРОЛОГ-программу, способную отвечать на запросы а) К какому классу относится животное X? б) Какие животные относятся к классу У? ; Решение. «'мк;: У. животное(С, X) : — водное(С, X), наземное(CJ X) . водное (рыба, [а 1, а2]). 'SSftOflfi наземное(пресмыкающееся,[г1]). &)«.тх наземное (птица, [Ы, 62]). { ,У- Л 1) Данная программа верно определяет трехместное отношение пересечения пары множеств, представленных списками, при том условии, что порядок расположения общих элементов в третьем списке (переменная Z) совпадает с порядком их распо- расположения в списке, задающем первое множество (переменная Т). — Прим. перев.
268 Глава 3. ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ §3.10. УПРАЖНЕНИЯ 269 наземное (С, X):- млекопитающее (С, X). ' млекопитающееСтравоядноеДМ]). jhst» . ^..у! млекопитающее (хищник, [о 1, о2]). ;;н<'?и*. классификация(С, X): —животное(С, L),элемент(X, L). Для получения ответа на указанные вопросы следует обратиться к программе с запросом ? классификация (С, X). 3.10.19. Напишите ПРОЛОГ-программу, выдающую на экран спи- список имен в алфавитном порядке. Имена в списке разделяются точ- точкой, а признаком окончания списка должно служить слово stop. Решение. Упорядочить имен по алфавиту можно при по- помощи дерева. Каждая вершина дерева соответствует предикату node(L, W, R), который интерпретируется как «L —левый непо- непосредственный последователь текущей вершины, R — правый непо- непосредственный последователь текущей вершины, a W — это имя, ко- которое должно быть прочитано программой». Каждое имя сравнивается с именем в корне дерева, а за- затем процедура сравнения продолжается рекурсивно применитель- применительно к левым или правым последователям соответствующей верши- вершины. Выполнение этой процедуры прекращается как только оче- очередная вершина оказывается переменной или как только иско- искомое имя будет обнаружено в дереве. Например, для списка имен джон.мэри.джеймс.эдуард.stop, мы будем иметь следующее дере- дерево :¦>'.'¦ вершина вершина X джеймс Искомая программа такова ¦ порядок ( X): —прочитать ( X), имя ( W, W1), даю разбор(Ш, X, Y) ,порядок(К). " порядок(Х): — nl,write("упорядоченные слова:"),nl, записать (J?) > nl.nl, write ("Выполнено. ") ,nl,(,?' прочитать ( W): -read ( W), W==st op, !, f ail. I-. * pa36op(V^,BepniHHa(L, W, R) ,вершина(Ь, И(Д)): — !. ' разбор(V^,BepniHHa(L, Wl, Д) ,вершина(Ц V^l, R))\ - '•»' С^ИП, !, разбор(W,L,U). разбор (W,BepniHHa(L, W\, R) ,вершина(Ь, Wl, {/)): — !,,; разбор(И(Д, U). ниже([],_): - !, ннжв(УГ). , , maei[W: Y],[Z,T]): - X<Z. записать(X): — var(X), !. i ¦ записать(вершина(Ь, Wl, R)): — !, записать(L), m«[(H(W4),write(H(W4),writeC1."), • л,,.., записатьСД). Для запуска программы необходимо обратиться к ней с запросом ? порядок{X). где X — список имен, который должен быть упорядочен. xvona 3.10.20. Напишите ПРОЛОГ-программу, которая по заданЙЙМу списку чисел формирует дерево и возвращает древесное пре ление этого списка, в котором все элементы упорядочены. 3.10.21. Напишите программу, представляющую диаграмму З.г •ю.щ и ИГ- ."•< «.$ '-С" ьизд вн ячнот r>0;iVO;'.T'. и найдите с ее помощью непосредственных последователей end. Решение. Взаимосвязь вершин описывается предикатом 'Дуга(г, у), который трактуется как «существует дуга, ведущая из х в у». Искомая программа такова. дуга(а, Ь). *--'¦ дуга(с,Ь). '-..'.WMi;.;^»»,, u^,;,.s; flyraW, a). flyra(d, с). дуга(Ь, е). JA дуга(е,/ дуга(Ь, д). что ? дуга(с, х). ? дуга(#, у). 3.10.22. Напишите программу, способную нарисовать приведен- приведенную ниже фигуру при помощи одной непрерывной линии, которую можно провести, не отрывая карандаша от бумаги.
270 Глава 3. ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ §3.10. УПРАЖНЕНИЯ 271 hn?\:. ,[QP- отрезок(/?<3): С?], отрезок (/? Q) ,G). 4j г ,«Г, отрвзок(/?<9): С],отрвзок(<3, Я G]?[?G1|) 6(G Решение. pncyfiCG, [P,Q: L\) : - выбери(С,отрезок(/?<Э.СШ, рисуй(С1,r~ рисуй([~ выбери( выбери( выбери([^. ^J; .,t~, „.j,. г ,-,--. .. „. ? рисуй([отрезок(а, 6) ,отрезок(а, с) ,отрезок(а, d), P,.l4?- отрезокF, с) ,отрезок(Ь, d) ,отрезок(с, d), ' s* '„.v , отрезок(с, е) ,отрезок(с?, е)] ,L) ,write(L ). 3.10.23. Напишите программу, определяющую взаимное распо- расположение точек на декартовой плоскости. а) точка (а, Ь) лежит внутри круга с центром в точке (с, d) и ради- радиусом г. б) три точки плоскости (xpt/,), (xj, уз) и (хз, Уз) лежат на одной прямой. Решение. Каждая точка описывается предикатом точка(х, у), где х и у — координаты точки. Соотношение, описывающее все внутренние точки круга имеет вид (x-cJ + (y-dJ ^ г2 Три точки декартовой плоскости лежат на одной прямой в том и только том случае, когда > .,.t|.. Наконец, предикат , • ,\ •*'* внутри (точка (х, у), (с, d) , г), > ' ¦[ ',:. .!:.,, 1,, утверждает, что * „'' ' ' ' >л <:' точка(х, у), ' располагается внутри круга с центром (с, d) и радиусом г. Ветре енные предикаты и арифметические операции, необходимые для по- построения программы, могут быть найдены в § 3.5.4. * I»1 «л i? 1>"Ж(Ж1 10 ?л\ 3.10.24. Определите сочетания элементов из заданного списка. 3.10.25. Напишите алгоритм, проверяющий совпадение заданной точки с одной из вершин заданного дерева, учитывая при этом, что каждая вершина дерева имеет не более двух непосредственных по- последователей (Определение 2.8.9). В том случае, если заданная точ- точка не содержится в дереве, алгоритм должен присоединить ее к дереву в качестве новой вершины. 3.10.26. Джордж, Тим, Джон и Билл — поклонники футбола, а Ник и Джим болеют за команды А и В соответственно. Нику сим- симпатичен всякий, кто болеет за команду А, в то время как Джорджу нравятся любители футбола, не являющиеся сторонниками команды В. Сформулируйте эти условия в терминах базы данных ПРОЛОГа и найдите ответ на следующие вопросы: ««» ¦¦; ,(»-!„') :>щпт ем «с а) Кто нравится Нику? . б) Симпатичен ли Билл Джорджу? с) Кто нравится Джорджу? j Решение. ^./""foxi •^n^p ,. /* Заданные условия */ ^vL'ff^.i-i;^^ •?,i-.n болеет_за(ник,а). ft^i-t ,-9»Э)ВТ иГ-К-ш болеет_за(джим, 6). жЪь любит (джордж, футбол). ;| mvs^o^i toxf •:¦¦ любит (тим, футбол). .*' '-' '*> Ф ¦ ¦•' 4г<^ .рфф любит (джон, фу тбол). •¦¦ - -н любит(билл,футбол). любит(.X,футбол) : — болеет_за(Х, а) . любит(.X,футбол) : — болеет_за(Х, Ь). нравится (ник, X) : — болеет_за(Х, а) г нравится (джордж, X) : — любит (X, not (болеет_за(.X, Ь)). ! "'' ' /* Запросы и ответы */ . '?! Д, ? нравится(ник,Х). яцръъ ¦¦¦- '-N Х = Д*™ ч -\^ьиш - ? нравится (джордж, билл) . , " g), . .' ( ¦ "да {".? и С _...'.. ? нравится (джордж, X). ^ ]'.{ X = джордж ,'• ¦ х = тим :1:, \. •THitT- X = джон X = билл X билл , . , , , 3.10.27. Предположим, что имеется некоторая шЮлог-програм- ма Q. Исследуйте запросы ' '* ¦ ' r- lC> ' ¦ ¦>"'¦' A) ? not(p). ' B) ? not(not(p)). l
272 Глава 3. ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ C) not (not (not (p))) , i;; Bn) ? not(...(not(p))...). liHll' ко; 2п Bп + 1) ? not(. (not(p)).. .)• 2n+l »v.v, kw- •I 4 ¦/>.' "¦)."¦ i« iff P где p — предикат не содержащий свободных переменных. Решение. Допустим, что р успешно выполняется в программе Q. Тогда цель not(p) терпит неудачу, и поэтому ПРОЛОГ ответит «нет» на запрос A), «да» на запрос B), «нет» на запрос C), «да» на запрос Bп), и «нет» на запрос Bп + 1) по определению оператора not. Если же р терпит неудачу, то not(p), напротив, успешен, и ПРО- ПРОЛОГ ПРОЛОГ ответит «да» на запрос A), «нет» на запрос B), «да» на запрос C), ..., «нет» на запрос Bп), и «да» на запрос Bп + 1). В общем случае, предикат not2"(p) принимает то же значение, что и р, тогда как предикат not2n + 1(p) принимает то же значение, что и not(p), в точности также, как ведет себя логическое отрица- отрицание. Различие между not и отрицанием логики предикатов подробно рассмотрено в п. 3.6.1 и § 3.9. 3.10.28. Постройте простую систему лексического анализа пред- предложений »..*.-. :• ¦ •'¦ -л.-. • , г,с o к. л «Ребенок спит» и ,.гг,„ .1 (» --. 4;(*ej «Ребенок ест яблоко» i Решение. предложение(.X, У) : - подлежащее(X, U), сказуемоеЩ У). подлежащее(X, У) : - существительное(.X, У). сказуемое (X, У) : - непереходный_глагол(Х, У). сказуемое(X, У) : — переходный-глаголСХ, U), дополнение(Ц У). существительное ([ребенок: Y],Y). существительное ([яблоко: Y],Y). переходный_глагол([спит: У], У) , . s"^! к у непереходный_глагол([спит: У], У) .,.», у переходный_глагол([ест: У], У) 3.10.29. Постройте простую систему лексического анализа пред- предложения <• я. «Мэри съела торт» ,; ) §3.10. УПРАЖНЕНИЯ 273 3.10.30. Представлено следующее естественно-языковое предло- предложение Р: Джордж занят покупками или он находится дома Постройте соответствующий дизъюнкт для Р, а также следствия, которые можно вывести из базы данных, содержащей это утверж- утверждение. Решение. Предположим, что А и В обозначают предложения А: Джордж занят покупками. В: Джордж находится дома. . , : . ю Тогда в рамках логики предикатов Р примет вид i ь да J1 >/ t is ' '1 , ,v i. Р: AV В ¦ "'1!Г * который эквивалентен любой из следующих форм Дизъюнкты, соответствующие этим предложениям, таковы. B:-not(A). /* 1 */ A:-not(B). /* 2 */ Если база данных ПРОЛОГ-программы состоит из дизъюнктов /* 1 */ и /* 2 */, то запросы ? В. не найдут ответа, поскольку вычисление зациклится, и это легко заметить, рассмотрев пространство состояний программы. Один из путей получения решения заключается в том, чтобы об- образовать две разные программы, состоящие из дизъюнктов /* 1 */ и /* 2 */ соответственно. В этом случае пространство состояний каждой из программ для тех же запросов будет иметь вид Программа 1 =; -y^, В:- not(A). м ' /:«^. •; /* 1 */ lnot(A). !if ' *<¦¦ '. программа 2 A:- not(B). t .,,. t.rsPI.1 /* 2 */ f ? A. '"' "" not(J3). На оба запроса ПРОЛОГ, применяя правило NF выдаст положи- положительный ответ «да». Таким образом в программе 1 выводимы «not (А)» и «В», а в программе 2 выводимы «not (.В)» и «А». Обратите
274 Глава 3. ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ внимание на то, что из одного и того же предложения Р выводи- выводимы два различных и взаимно противоречивых множества следствий. Проблемы такого рода возникают всякий раз, когда мы имеем дело с предложениями, подобными Р, которые не могут быть представ- представлены хорновскими дизъюнктами, и для которых нет возможности определить, является одна или несколько составных частей этого предложения тождественно истинной или тождественно ложной. Так, например, в нашем случае невозможно установить истинност- истинностные значения А или В. Как было показано в Определении 1.9.7, составные хорновские дизъюнкты должны содержать хотя бы одну отрицательную литеру. Это условие не соблюдается для дизъюнкта А У В, где А и В —предложения, не содержащие отрицаний. ¦ к:-. t , ,,, v(v. J ¦-» >, J < '> ¦ ' .111 " 1 Г )f k - if't "H," J" J f I ' trtk « л «i .« Hi'ji'Bt 6'Я< '_¦).:• v¦¦«¦..'i^ ?«*tv :^1^Фщ,^т:-(„г БИБЛИОГРАФИЯ vvfc ,to;1.5!wi ^tt!^jft „. 1. РЕКОМЕНДАЦИИ ДЛЯ ДАЛЬНЕЙШЕГО ЧТЕНИЯ ?i^l,f, 1.1. Логика высказываний. ь., Читателю, интересующемуся историей предмета и его развитием, рекомендуем обратиться к работам [Heij67, Boch62] и [NeSh93], содержащих обширный список литературы. Об аксиоматизации и правилах вывода в логике высказываний подробно написано в [Schm60, Chur56, HiAc28, Hami78, Raut79, Mend64]. Эти же вопросы на более высоком уровне изложения представлены в [К1ее52] в разделе, посвященном логике высказываний. О методе семантических таблиц см. [Smul68, NeSh93]. О булевой и других алгебрах логики см. [RaSi70, Rasi74]. О модальной логике см. [Chel90, HuCr68, NeSh93, Raut79, Schm60]. Для более глубокого изучения связи модальной логики и логики предикатов рекомендуем об- обратиться к [Bent83]. Более подробные сведения об интуиционистской логике содержатся в работах [Brou75, Dumm77, Fitt69, NeSh93, Raut79]. О методе резолюций см. [ChLe73, Dela87] в разделах, касающихся логики выска- высказываний. 1.2. Логика предикатов. Для ознакомления с историей возникновения и развития этой области математиче- математической логики рекомендуем обратиться к работам [Heij67, Boye68, Boch62] и [NeSh93], где также содержится обширный список литературы. Об аксиоматических методах в логики предикатов можно узнать из работ [Chur56, Hami78, Mend64, HiAc28]. Этот же материал на более высоком уровне изложения представлен в [К1ее52]. О методе семантических таблиц см. fSmul68, NeSh93]. Теореме Эрбрана посвящены работы [НегЬЗО] в [Heij67], а также [ChLe73, Dela87, NeSh93, NiMa95]. О проблеме разрешимости см. [Acke54, Chur56, Klee52]. О методе резолюций см. [ChLe73, Dela87, NiMa95, NeSh93], а также стандартный учебник по логическому программированию [Lloy87]. Наиболее значительные статьи по логике, изданные за период с 1879 по 1931 год, содержаться в [Heij67] Великолепное изложение теоремы Гёделя представлено в [К1ее52]. 1.3. Логическое программирование. С основами логического программирования можно ознакомиться в работах [ChLe73, Dela87, Kowa79, Kowa90, Lloy87, NeSh93, NiMa95]. О ПРОЛОГе см. [Brat9O, С1Мс84, С1Ме94, Dela87, NiMa95, StSh86]. Семантике отрицания в логическом программировании посвящена серия работ [Kowa9O, Lloy87, NeSh93, NiMa95, Shep88, Shep92] О метапрограммировании см. [Kowa90] и [H1L194], где представлен новый язык программирования ГЕДЕЛЬ. О немонотонных логиках см. [МаТгЭЗ]. X 2. СПИСОК ЛИТЕРАТУРЫ , "'' > [Acke54] Ackermann, W., Solvable Cases of the Decision Problem, North-Holland Pub. Co., 1954. [Bent93] van Benthem, J.F.A.K., Modal Logic and Classical Logic, Bibliopolis, Napoli, 1983.
276 БИБЛИОГРАФИЯ [Besn89] Besnard, P., An Introduction to Default Logic, Springer-Verlag, 1989. [Beth68] Beth E.W., The Foundation of Mathematics; a study in the Philosophy of Science, 3rd edn., North-Holland Pub. Co. 1968. [Boch62] Bochenski, J. M., Formate Logik, (на немецком), 2nd edn., Verlag Karl Alber, Freiburg-Munchen, 1962. Translated as: A History of Formal Logic, Thomas, I., tr., Chelsea Pub. Co., 1970. [Boye68] Boyer, С. В., A History of Mathematics, Princeton University Press, 1985 [Brat90] Bratko, I., PROLOG Programming for Artifical Intelligence, 2nd edn., Addison-Wesley Pup. Co., 1990. [Brou75] Brouwer, L. E. J., Collected Works, Heyting, A., ed., North-Holland Pub. Co., 1975. [BuSh84] Buchanan, B. G., Shortliffe, E. H., eds., Rule-based Expert Systems: the MYSIN experiments of the Standfort Heuristic Programming Project, Addison-Wesley Pup. Co., 1984. [CCPe85] Coelho, H., Cotta, J. C, Pereira, L. M., How to Solve it with PROLOG, 4th edn., Ministerio do Equipamento Social, Laboratorio Nacional de Engenharia Civil, Lisbon, 1985. [Chel80] Chellas, B. F., Modal Logic, an Introduction, Cambridge University Press, 1980. [ChLe73J Chang, C-L, Lee, C-T., Symbolic Logic and Mechanical Theorem Proving, Academic Press, 1973. [Chur36] Church, A., A Note on the Entscheidungsproblem, Journal of Symbolic Logic, 1, 1936, pp.40-41, and correction, ibid., pp. 101-102. [Chur56] Church, A., Introduction to Mathematical Logic, Volume I, Princeton Uni- University Press, 1956. [Clar78] Clark, K. L., Negation as Failure, in [GaMi78], pp. 293-322. [ClMc84] Clark, K. L., McCabe, F. G., MICRO-PROLOG: Programming in Logic, Prentice-Hall International, 1984. [ClMe94] Clocksin, W. F., Mellish, С S., Programming in PROLOG, 4th edn., Springer-Verlag, 1989. [Cohe90] Cohen, J., Constraint Logic Programming Languages, Communications of the ACM, 33, 7, July 1990, pp. 52-68. [Colm87] Colmerauer, A., An Introduction to PROLOG III, in [Espr87], Part I, North- Holland, 1987, pp. 611-629. [Colm90] Colmerauer, A., An Introduction to PROLOG III, in [Lloy90], pp. 37-79. [Col90a] Colmerauer, A., An Introduction to PROLOG III, Communications of the ACM, 33, 7, July 1990, pp. 69-90. [Curr63] Curry, H. В., Foundations of Mathematical Logic, McGraw-Hill, 1963, Dover Pub., 1977. [Dela87] Delahaye, J.-P., Formal Methods in Artificial Intelligence, Howlett, J., tr., North Oxford Academic Publishers Ltd., London, 1987, Wiley, New York, 1987. [DiSc90] Dijkstra, E. W., Scholten, С S., Predicate Calculus and Program Seman- Semantics, Springer-Verlag, 1990. [Damm77] Dummet, M. A. E., Elements of [ntuitionism, Clarendon Press, Oxford, 1977. [Espr87] ESPRIT '87: Achievements and Impacts, Proceedings of the 4th Annual ESPRIT Conference, Brussels, September 28-29, 1987. [Fitt69] Fitting, M. C, Intuitionistic Logic, Model Theory and Forcing, North- Holland Pub. Co., 1969. БИБЛИОГРАФИЯ 277 [Fitt90] Fitting, M. C, First-Order Logic and Automated Theorem Proving, Springer-Verlag, 1990. [GaMi78] Gallaire, H., Minker, J., eds., Logic and Date Bases, Proceedings of the Symposium on Logic and Data Bases held at the Centre d'Etudes et de Recherches de L'Ecole National Superieure de L'Aeronautique et de L'Espace de Toulouse (C.E.R.T.), Toulouse, November 16-18, 1977, Plenum Press, New York, 1978. [Hami78] Hamilton, A. G., Logic for Mathematicians, Cambridge University Press, 1978. [Heij67] van Heijernoort, J., From Frege to Go'del. A Source Book in Mathematical Logic, 1879-1931, Harvard University Press, 1967. [НегЬЗО] Herbrand, J., Recherches sur la theorie de la demonstration, thesis at the University of Paris. Chapter 5 translated as: Investigations in Proof Theory: the Properties of True Propositions, Dreben, В., van Heijenoort., tr., in [Heij67], pp. 525- 581. [HiAc28] Hilbert, D., Ackermann, W., Grundzuge der theoretischen Logic, Springer- Verlag, Berlin, 1928. The 2ed edn. translated as: Principles of Mathimatical Logic, Hammond, L. M., Leckie, G. G., Steinhardt, F., tr., Luce, R. E., ed., Chelsea Pub. Co., 1950. [HiL194] Hill, P., Lloyd, J. W., The GODEL Programming Language, MIT Press, 1994. [HuCr68] Hughes, G. E., Cresswell, M. J., An Introduction to Modal Logic, Methuen and Co. Ltd, 1968, Routledge, 1989. [Klee52] Kleene, S. C, Introduction to Metamathematics, corrected reprint of the 1952 edn., North-Holland Pub. Co., 1971. [Kowa79] Kowalski, R. A., Logic for problem solving, North-Holland Pub. Co., 1976, reprinted, 1986. [Kowa90] Kowalski, R. A., Problems and Promises of Computational Logic, in [Lloy90], pp. 1-36. [Lloy87] Lloyd, J. W., Foundations of Logic Programming, 2nd edn, Springer-Verlag, 1987. [Lloy90] Lloyd, J. W., ed., Computational Logic: Symposium Proceedings, Brussels, November 13-14, 1990, ESPRIT Basic Research Series, Springer-Verlag, 1990. [MaTr93] Marek, V. W., Truszczynski, M., Nonmonotonic Logic: Context Dependent Reasoning, Springer-Verlag, 1993. [Mend64] Mendelson, E., Introduction to Mathematical Logic, Van Nostrand Com- Company, Inc., 1964. [Meta85] Metakides, G., Mathematical Logic, (на греческом), University of Patras, Greece, 1985. [Meta92] Metakides, G., From Logic to Logic Programming, (на греческом), Каг- damitsa Pub., Athens, Greece, 1992. [Mink88] Minker, J., ed., Foundations of Deductive Databases and Logic Program- Programming, Morgan Kaufmann Pub., Los Altos, CA, 1988. [Mitc86] Mitcie, D., ed., Expert Systems in the Micro-Electronic Age, Edinburg University Press, 1979, reprinted 1986. [Mosc92] Moschovakis, V. N., ed., Logic from Computer Science: Proceedings of a Workshop held November 13-17, 1989, MSRI Publications 21, Springer-Verlag, 1992. '' [NeSh93] Nerode, A., Shore, R. A., Logic for Applications, Springer-Verlag, 1993. [Nils71 ] Nilsson, N. J., Problem-solving Methods in Artificial Intelligence, McGraw- Hill, 1971.
278 БИБЛИОГРАФИЯ [NiMa95] Nilsson, U., Maluszynski, J., Logic, Programming and PROLOG, 2nd edn.,John Wiley and Sons, 1995. [01Ru87] Olson, J. R., Rueter, H. H., Extracting Expertise from Expert: Methods for Knowledge Aquisition, Technical Report, University of Michigan, Cognitive Science and Mashine Intelligence Laboratory, N 13, 1987. [Quin86] Quinlan, J. R., Discovering Rules by Induction from Large Collections of Examples, in [Mitc86], pp. 168-201. [Rasi74] Rasiowa, H., An Algebraic Approach to Non-Classical Logic, North-Holland / American Elsevier Pub. Co., 1974. [RaSi70] Rasiowa, H., Sikorski, R., The Mathematics of Metamathematics, 3rd edn., PWN-Polish Scientific Publishers, 1970. [Raut79] Rautenberg, W., Klassische und nichtklassische Aussagenlogic, Vieweg, 1979. [Reit78] Reiter, R., On Closed World Data Bases, in Logic and Databases, Plenum Press, New York, 1978. [Robi65] Robinson, J. A., A Mashine-Oriented Logic Based on the Resolution Prin- Principle, Journal of the Association for Computing Machinery, 12, 1, 1965, pp. 23-41. [Schm60] Schmidt, H. A., Mathematische Gesetze der Logic I, Springer-Verlag, [Schw711 Schwabhauser, W., Modelltheorie, Bd. /Hochultaschenbuecher, Band 813, 1971. [Shap87J Concurrent PROLOG: Collected Papers, Shapiro, E., ed, vols. 1 and 2, MIT Press, 1987. [Shep88] Shepherdson, J., Negation in Logic Programming, in [Mink88], pp. 19-88. [Shep92] Shepherdson, J., Logic for Negation as Failure, in [Mosc92]. [Smul68] Smullyan, R. M., First Order Logic, Springer-Verlag, 1968, Dover Publ., 1995. [StSh86] Sterling, L., Shapiro, E., The Art of PROLOG: Advanced Programming Techniques, MIT Press, 1986. [Thay88] Thayse, A., ed., From Standard Logic to Logic Programming: Introduced a Logic Based Approach to Artifical Intelligence, John Wiley }] Sons, 1988. [Turi37] Turing, A. M., On computable numbers with an application to the Entschei- dungsproblem, Proc. London Math. Soc, 42, 1937, pp. 230-265. A correction, ibid, 43, 1937, pp. 544-546. [Turn84] Turner, R., Logic for Artifical Intelligence, Ellis Horwood Series in Artifical Intelligence, Halsted Press, 1984. [Watt90] Watt, D. A., Programming Language Concepts and Paradigms, Prentis Hall, 1990. [WeKu84] Weiss, S. M., Kulikowski, С A., A Practical Guide to Designing Expert Systems, Chapman and Hall Ltd., London, 1984. [WiBe89] Winston, P. H., Horn, B. K. P., LISP, 3rd edn., Addison-Wesley, Reading, MA, 1981. [Xant90] Xanthakis, S., PROLOG, Programming Techniques, (на греческом), New Technology Editions, Athens, 1990. [Zeno76] Diogenes Laertius, Lives of Eminent Philosophers, Diogenes Laertius, Vol- Volume II, Book VII, Zeno, para. 76, Hicks, R. D., tr., Loeb Classical Library, pp. 182, 184 (Greek), pp. 183, 185 (English)r Heinemann, London, and Harvard University Press, 1925. ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ Автоматическое доказательство теорем (automatic theorem proving) 38, 122 аксиоматическая система вывода (ax- (axiomatic proofs) 44 аксиоматическая система логики выска- высказываний (axiomatic system of proposi- tional logic) 44, 47 (of prdicate logic) предикатов 99 алгебра булева (Boolean Algebra) 19 алгоритм построения замкнутых систе- систематических таблиц (construction of a complete systematic tableau) 130-131 , КНФ (algorithm constraction of a „i CNF) 49, 50 ПНФ (construction of a PNF) я 118-119 СНФ (construction of a SNF) , 120 семантического дерева 134-135 эрбрановского универсума (con- (construction of the Herbrand Universe) 122-123 — унификации (unification) 143-144, : 145, 206-209 — Эрбрана (Herbrand) 190 аппарат вывода (inference mechanism) 182, 210, 246 аристотелев мир (Aristotelean world) 22 АРИТИ-ПРОЛОГ (ARITY-PROLOG) 252 ассоциативность (associativity) 49 атом (atom) 15, 94 База данных (database) 193, 196, 246 БЕЙСИК (BASIC) 186 Бет 38 Брауэр (Brouwer) 26 Варианты множеств формул (variants of sets of formulae) 98 вершина заключительная (final) 132 — семантической таблицы (of a seman- semantic tableau) 40 обычная (unused) 41 особая (used) 41 подходящая (suitable) 66 ветвь дерева (branch of a tree) 133 — семантического дерева (of a seman^ tic tree) 134 ; полная (complete) 135 противоречивая (contradictory) 134 Ветвь семантической таблицы (branch of a semantic tableau) 41 противоречивая (contradictory) 41 взаимодействие с экраном (screen inter- interaction) 227 — с клавиатурой (keyboard interaction) 226 вхождение переменной свободное (ос- curence, free, of variable) 96 связанное (bound) 95 вывод 45 — в аксиоматической системе (ax- (axiomatic) логики предикатов 103 — по Бету (Beth proof) 42 резолютивный (resolution) 56 в логике предикатов 147 высказываний 44 выражение (expression) 15 — правильно построенное (well-formdjj) 15 *¦ высказывание (proposition) 15 — атомарное (atomic) 15 — выводимое (provable) 45 по Бету (Beth-provable) 42 '•' — выполнимое (satisfiable) 21 — дедуктивно выводимое по Бету (Beth-deduction) 63 — доказуемое (provable) 45 по Бету (Beth-provable) 42 — логически истинное (logically true) 21 ложное (logically false) 21 — невыполнимое (not verifiable) 21 — опровержимое по Бету (Beth-refu- (Beth-refutable) 42 — подтверждаемое (verifiable) 21 — составное (compound) 15 — , таблица истинности (truth table) 24 — , теоретико-множественное пред- представление (set-theoretic representa- representation) 51 высказывания логически эквивалентные (logically equivalent) 22 Генцен (Gentzen) 38, 47 Гилмор (Gilmore) 190 ffi Гильберт (Hilbert) 25 Гёдель 154 Гераклит 91
280 ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ 281 Данные (data) 187, 192 %у *fi — добавление (addition) 225 — синтаксис (syntax) 198 — список (list) 203 — удаление (deletion) 226 доказательство 45 дедуктивный вывод (deduction) 63 дерево (tree) 132 — семантическое (semantic) 134 — фамильное 217 детерминированное свойство ПРОЛОГа (deterministic nature of PROLOG) 212 Диагностическая система (diagnostic sys- system) 247 дизъюнкт (clause) 51 — в логике предикатов 104 — пустой (empty) 51 — резолютивно выводимый (provable by resolution) 56 — унитарный (unit) 53 — хорновский (Horn) 52, 105, 182 дизъюнктивная нормальная форма, ДНФ (disjunctive Normal Form) 35 дизъюнкция (disjunction) 15 дистрибутивность (distributivity) 49, 101, 118 доказательство (proof) 42 — по Бету (Beth) 42 допустимый переход (allowed transition) 212 допущение замкнутости мира (closed world assumption) 189, 233 дуга дерева (arc of a tree) 132 Заголовок дизъюнкта (head of a clause) 52 — правила (of a rule) 193 закон Пирса (Pierce's Law) 41 — двойного отрицания (Law of Double Negation) 28 — де Моргана (of De Morgan) 28 — исключенного третьего (Excluded Middle Law) 28 — контрапозиции (Contrapositive Law) 28 — силлогистики второй (Second Syllo- Syllogistic Law) 28 — силлогистики первый (First Syllogis- Syllogistic Law) 28 — транспозиции (Transportation Law) 28 замена эквивалентная (substitution of equivalences) 101 запрос (query) 193 — к программе (of a program)" 192, 196 — конъюнктивный (conjunctive) 198 Запрос неуспешный (fail) 197 — обработки данных (data manage- management) 198 — проверки данных (data verification) 198 — составной (complex) 198 запятая (comma) 94 зет 128, i3i ;;,^fc Импликация (implication) 15 да',*)» индукция (induction) — , базис индукции (first step) 15 — , индуктивный переход (inductive step) 15 — , общая схема индукции для выска- высказываний (general scheme of induction for proposition) 16 — полная (complete) 16 — , принцип математической индук- индукции (principle of mathematical induc- induction) 16 — , схема для семантических таблиц (scheme for semantic tableaux) 58 интерпретация (interpretation) 31 — в логике предикатов 109-112 — логики предикатов 92 — эрбрановская (Herbrand) 124 интуиционистская логика (intuitionistic logic) 26 исключенного третьего принцип (princi- (principle of the Excluded Middle) 22 искусственный интеллект (artificial in- telegence) 245 истинностное означивание (truth valua- valuation) 19 согласованное с ветвью (agrees with branch) 59 истинностные значения (truth values) 18 истинность предложения (truth of a sen- sentence) 111 — универсальная (universal) 93 — частичная (partial) 93 исчисление систематических таблиц (sys- (systematic tableau proofs) 126 А-исчисление 191 Кант (Kant) 26 квантор (quantifier) 93, 94 — всеобщности (universal) 93 — двойственный (dual) 94 — существования (existential) 93 Кеиига лемма (Koenig's lemma) 66 ч КОБОЛ (COBOL) 186 Ковальский (Kowalski) 190 Колмероэ (Colmerauer) 190 команда (command) 186 — императивная (imperative) 186' Комбинация отсечения и неудачи (fail- (failure-cut combination) 242 комментарии к ПРОЛОГ программе (comments to PROLOG program) 210 коммутативность (commutativity) 49, 101 композиция подстановок (composition of substitution) 97 конечная степень ветвления семантиче- семантической таблицы (finite degree of a seman- semantic tableau) 66 конкатенация (concatenation) 224 константа (constant) логики предикатов 92, 94 конъюнктивная нормальная форма (Con- (Conjunctive Normal Form) 36 конъюнкция (conjunction) 15 корень дерева (origin of a tree) 132 ЛИСП (LISP) 203 1 Литерал (literal) 49 i — в логике предикатов 104 логика высказываний (logic proposition- al) 14 — интуиционистская (intuitionistic) 26 — модальная (modal) 22 — немонотонная (nonmonotonic) 243 логическая длина высказывания (logical length of a proposition) 15 логическое следствие (consequence) 28 Лукашевич (Lukasiewicz) 48 Матрица (matrix) формулы 117 местность (degree, arity) предиката 94 метавысказывание (metaproposition) 29 — логики высказываний (of preposi- prepositional logic) 29 метаязык (metalanguage) 29 — логики высказываний (of preposi- prepositional logic) 29 МИКРО-ПРОЛОГ (MICRO-PROLOG) 252 множество высказываний выполнимое (set of satisfiable propositions) 31 невыполнимое (non-satisfiable) 31 неподтверждаемое (non-verifiable) 31 непротиворечивое (consistent) 31 подтверждаемое (verifiable) 31 противоречивое (inconsistent) 31 — дизъюнктов (of clauses) 51 пустое 51 опровергаемое семантическим до- ревом (refutable by semantic tree) 135 Множество подстановочное (substitution set) 96 — полное 34 i — предложений выполнимое (of sen- sentences satisfiable) 114 невыполнимое (non-satisfiable) 114 непротиворечивое (consistent) 114 противоречивое (inconsistent) 114 — рассогласования (desagreement) 144 — эрбрановское (Herbrand) 123 модальные операторы (modal operators) 22 модель предложения (model of sentence) 112 Наиболее общий унификатор (НОУ) 144 Негативные знания (negative knowledge) 234 Неудача (failure) 189 Неуспешное завершение (fail) 197 Нормализация переменных (normaliza- (normalization of variables) 147 Область интерпретации (universe of an interpretation) 109 общий унификатор в ПРОЛОГе (general unifier in PROLOG) 207 означивание (valuation) 18 лроп — булево (Boolean) 19 &oi — истинностное (truth) 19 ,n — , расширение до истинностЙЙГО означивания (extention) 20 ,тп ОККАМ (OCCAM) 252 _ оператор (operator) t — , ассоциативность (associativity!— 230 4L — инфиксный (infix) 230 ^ — модальный (modal) 22 a];, — позиции (position) 230 ~ — постфиксный (postfix) 230 — префиксный (prefix) 230 — , приоритет (priority) 230 определение рекурсивное (recursive defi- definition) 214 опровержение по Бету (refutation Beth) 42 откат (backtracking) 186, 210 отношение рекурсивное (recursive rela- relation) 214 отождествление (matching) 206 отрицание безопасное (negation safe) 238 — в ПРОЛОГе (in PROLOG) 233 ~
282 ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ 283 Отрицание как неудача (by failure) 235 — небезопасное (unsafe) 238 отсечение (cut) 214 ПАРЛОГ (PARLOG) 254 *''*"'., ПАСКАЛЬ (PASCAL) 181 ПВ 145 Переименование (renaming substitution) 99 Переменная (variable) 92, 93 — безымянная (anonymouse) 199 — для чтения (read only) 254 — свободная (free) 96 — свободная для терма в формуле (free for a term in a formula) 99 — связанная (bound) 96 ПНФ 117 .,. ;. подстановка (substitution) 96 j- — пустая (empty) 97 подтерм (subterm) 95 ,> С.! подформула (subformula) 17, 95 подцель (subgoal) в логике предикатов . 105 — дизъюнкта (of a clause) 52 / позитивные знания (positive knowledge) 234 -f поиск пути (finding a path) 210, 212 полное множество (adequate set) 34 Помпея (Pompei) 182 :' порядок плотный (dense order) 115 последователь (descendant) 65 — непосредственный (immediate) 65 последователь (next node) 132 последовательность высказываний вы- выполнимая (sequence of satisfiable propo- propositions) 65 правило Modus Ponens 44, 47, 99 — введение нового (entering a new) 225 — обобщения (generalization) 99 — программы (of a program) 192, 195 — резолюции (of resolution) 53 предикат (predicate) 92 — встроенный (built-in) 225 — древесное представление (tree struc- structure) 201 — ПРОЛОГа (of PROLOG) 200 — обобщенный (generalized) 204 — полное определение в программе (complete definition in a program) 237 — размещения данных (data manage- management) 225 — составной (compound) 200 предложение (sentence) 96 — выводимое по Бету (Betrcprovable) 131 из множества предложений 131 — предложение выполнимое (satisfi- able) 114 — непротиворечивое (consistent) 114 — опровержимое по Бету (Beth-refu- (Beth-refutable) 131 — универсальное (universal) 119 предшественник (previous node) 132 префикс (prefix) формулы 117 проблема разрешимости (problem's deci- decision) 154 проверка вхождений (ПВ) (occur check) 145 программа (program) 106 — , взаимодействие (interaction with) 226 — , декларативная интерпретация (de- (declarative interpretation) 193, 209 — , замыкание (completion) 2166 236 — , зацикливание (loops) 216 — логическая интерпретация (logical interpretation) 209 — нормальная (normal) 238 — обновление (updating) 225 — обобщенная (general) 238 — процедурная интерпретация (proce- (procedural interpretation) 206, 209 — расслоенная (stratified) 238 — стартифицированная 240 — , структура (structure) 192 — , структура управления (flow) 188 программирование (programming) логи- логическое с ограничениями (constraint logic) 252 — объектно-ориентированное (object- oriented) 191 — функциональное (functional) 191 ПРОЛОГ (PROLOG) 48, 181 — , алфавит (alphabet) 198 — , аппарат вычислений (operational mechanism) 206 — , арифметика (arithmetic) 228 — , атомы (atoms) 199 — , версии (dialects) 242 — конкурентный (concurrent) 254 — , константы (constants) 199 — , контроль типов (type checking) 229 — , метапрограммирование (metapro- gramming) 252 — , неравенство (inequality) 229 — , общий унификатор (general unifier) 207 ^ — , объекты (objects) 198 — , оператор (operator) 229 — , отрицание (negation) 233 — , переменные (variables) 199 — .предикат (predicate) 200 — , равенство (equality) 228 ПРОЛОГ, реальный (real) 254 — , резолютивное доказательство (res- (resolution proof) 191 — , символы специальные (special characters) 198 — , список (list) 203 — , унификация (unification) 207 — , функции (functions) 198 — , целевое утверждение (goal) 192, 196 — , число (number) 198 — , чистый (pure) 255 ПРОЛОГ I (PROLOG I) 251 ПРОЛОГ II (PROLOG II) 25. ПРОЛОГ III (PROLOG III) 251 IC-ПРОЛОГ (IC-PROLOG) 252 mu-ПРОЛОГ (mu-PROLOG) 252 nu-ПРОЛОГ (nu-PROLOG) 252 '«<?" Д-ПРОЛОГ (nu-PROLOG) 252 «\'Ф Протагор (Protagoras) 11 •¦>ч'::,; противоречие (contradiction) 21 »* процедура разрешающая (procedure deci- decision) 154 к путь решения (solution path) 212 '! Расслоенность (stratification) 239 '* расширение (extension) ИЗ — неэлементарное (non-elementary) 113 интерпретации 113 языка 113 — элементарное (elementary) 113 интерпретации ИЗ языка 113 резольвента (resolvent) 54 резолюция (resolution) 53 — линейная (linear) 190 рекурсивный базис (bound of recursion) рефлексивность (reflexivity) 102 Робинсон (Robinson) 190 СНФ 120 связки логические (logical connectives) 15, 94 связывание переменных (binding of vari- variables) 206 семантика (semantic) 15 — Крипке (Kripke) 22 — логики высказываний (of preposi- prepositional logic) 15, 18 семантическая таблица (semantic tableau) с конечной степенью ветвления (of a finite degree) 66 — замкнутая 41, 128, 131 — незамкнутая 41 — противоречивая 41, 131 символ (symbol) логики предикатов 93 — предикатный (predicate) 94, 204 — функциональный (functions) 94 симметричность (symmetry) 102 синтаксический анализ (syntactic analy- analysis) 201 системы баз знаний (knowledge base sys- systems) 246 скобки (parentheses) 94 следствие (consequence) в логике преди- предикатов 117 состояние заключительное (final state) 212 — начальное (initial) 212 — промежуточное (intermediate) 212 — пространство (space) 212 список (list) — , внутреннее представление (inter- (internal representation) 205 — , древесная структура (tree struc- structure) 205 — , заголовок (head) 204 — непустой (non-empty) 204 — , обработка (management) 222 — пустой (empty) 204 — , тело (body) 204 — , унификация (unification) 222 — , хвост (tail) 204 степень (degree, arity) предиката 94 стратегия поиска в глубину с возвратом (depth-first strategy) 212 ТУРБО-ПРОЛОГ (TURBO-PROLOG) 252 таблица семантическая (semantic tableau) 38, 41 атомарная (atomic) 38 замкнутая (complete) 41 незамкнутая (incomplete) 41 противоречивая (contradictory) 41 замкнутая (complete) 128, 131 противотечивая (contradictory) 131 таблица истинности (truth table) 24 — сокращенная (short) 27 тавтология (tautology) 21, 100 тело дизъюнкта (body of a clause) 52 — правила (of a rule) 193 теорема (theorem) 47 — Эрбрана (Herbrand) 138 — дедукции (deduction) 46, 104 в логике предикатов 104 — компактности (of compactness) 66 аксиоматической системы вывода (of axiomatic proofs) 66 дедуктивного вывода (of deduc- deductions) 66
284 ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ 285 Теорема компактности исчисления Бета 151 — корректности (of soundness) 61 аксиоматического исчисления 154 аксиоматической системы вывода (of axiomatic proofs) 66 дедуктивного вывода (of deduc- deductions) 64 исчисления Бета 151 исчисления резолюций 151 отрицания как неудачи (not as failure) 238 резолютивного вывода (of resolu- resolution) 66 семантических таблиц (of seman- semantic tableaux) 61 — полноты (of completeness) 62 аксиоматического исчисления 154 аксиоматической системы вывода (of axiomatic proofs) 66 дедуктивного вывода (of deduc- deductions) 64 исчисления Бета 151 исчисления резолюций 151 резолютивного вывода (of resolu- resolution) 66 семантических таблиц (of seman- semantic tableaux) 62 теоретико-множественное представление (set-theoretic representation) 51 теория интерпретации (theory of interpre- interpretation) 112 — типов 191 •.« : « терм (term) 94 ¦ >•¦ — логики предикатов 94 . — основной (ground) 96 — атомарный (atomic term) 200 транзитивность (transitivity) 102 Универсум эрбрановский (Herbrand uni- universe) 122 унификатор (unifier) 144 наиболее общий (most general) 144 — общий (general) 143 унификация в ПРОЛОГе (unification in PROLOG) 207 — в логике предикатов 142 условия граничные (boundary conditions) 221 — краевые (marginal) 220 ФОРТРАН (FORTRAN) 186 факт (fact) 53 — в логике предикатов 106 " — введение нового (entering a new) 225 — программы (of a program) 192, 194 форма нормальная (normal form) дизъ- дизъюнктивная (disjunctive) 35 конъюнктивная (conjinctive) 36 предваренная (prenex) 117 сколемовская (Skolem) 120 формула (formula) 94 — замкнутая (closed) 96 — выводимая (provable) 103 из множества формул (from a set of formulae) 103 — помеченная 38 — логики предикатов 92, 94 — логически истинная (logically true) 114 — общезначимая (logically true) 114 — помеченная (signed) 38 — элементарная (atomic) 94 Фреге (Frege) 48 функтор (functor) 205 функция сколемовская (Skolem function) 120 Ханойские башни (towers of Hanoi) 232 хвост дизъюнкта (tail of a clause) 52 Хинтикка (Hintikka) 38, 59 Хинтикки лемма (Hintikka's lemma) 59 Хорновский дизъюнкт (Horn clause) 52 — охраняемый (guarded) 254 Целевое утверждение (goal) 193 — в ПРОЛОГе (in PROLOG) 193,196 — нормальное (normal) 235 цель (goal) в логике предикатов 105 — дизъюнкта (of a clause) 52 — неуспешная (fail) 53, 153 — программы (of a program) 52 положительная (to be definite) 52 — успешная (succeed) 53, 153 — неудачная (failed goal) 53 Число (number) 198 — в ПРОЛОГе (in PROLOG) 200 Эвристики (heuristics) экспертной систе- системы (expert system) 246 экспертная система (expert system) 245 — , автоматические системы накопле- накопления знаний (automatic knowledge ac- acquisition systems) 247 — , аппарат вывода (inference mecha- mechanism) 246 — , база данных (database) 246 — , высокоуровневые языки символь- символьной обработки (high level symbolic processing languages) 247 — инженер базы знаний (data base en- engineer) 247 — , интерфейс (interface) 246 — оболочка (shell) 246 «ДОзык арифметики (of arithmetic) 94 — обработка знаний (knowledge man- .,., — дискриптивный (descriptive) 187 agement) 247 — императивный (imperative) 186 — представление знаний (knowledge — логики высказываний (of proposi- representation) 247 '•¦' tional logic) 14 Эпикур (Epicurus) 181 ig — логики предикатов 93 Эрбран (Herbrand) 190 — реляционный (relational) 253 *, г Ч f ¦< ^ .. -iwnm, ц iv - » • .¦ . ,er м • 81 й? 8f; 5? ¦¦ .„.,.,. ,„,.., lcj • ¦ • • > >5 -Г '#JQ to TSK {4 HH Я RHE ( ••liS\i la /Т ¦ IHJ ', . am ' '< .<• щ шштящщт . 131 . .
СОДЕРЖАНИЕ Предисловие к русскому изданию (В. А. Садовничий) . ,.' | 1Н: 5 Введение V!.;s 8 Глава 1. Логика высказываний 11 § 1.1. Введение 11 § 1.2. Язык логики высказываний 14 § 1.3. Понятие семантики в логике высказываний 18 § 1.4. Таблицы истинности 24 § 1.5. Логические следствия и интерпретации 28 § 1.6. Полнота множеств логических связок и нормальные формы 34 § 1.7. Семантические таблицы 38 § 1.8. Аксиоматическая система вывода 44 § 1.9. Метод резолюций 48 § 1.10. Корректность и полнота метода семантических таб- таблиц 58 § 1.11. Дедуктивный вывод из гипотез 63 § 1.12. Корректность и полнота аксиоматической системы вывода 67 § 1.13. Корректность и полнота метода резолюций 67 § 1.14. Упражнения 69 Глава 2. Логика предикатов 91 § 2.1. Введение 91 § 2.2. Язык логики предикатов 93 § 2.3. Аксиоматическое основание логики предикатов . . 99 § 2.4. Система обозначений логического программирова- программирования 104 § 2.5. Интерпретация в логике предикатов 107 § 2.6. Нормальные формы в логике предикатов 117 § 2.7. Эрбрановские интерпретации 122 § 2.8. Метод систематических таблиц 126 § 2.9. Унификация и резолюция в логике предикатов ... 142 § 2.10. Корректность и полнота исчислений логики предика- предикатов 150 § 2.11. Проблема разрешимости логики предикатов .... 154 § 2.12. Упражнения 156 Глава 3. Логическое программирование: парадигме ПРОЛОГа i 181 § 3.1. ПРОЛОГ и логическое программирование , 181 3.1.1. Введение 181 3.1.2. Логика и программирование 186 СОДЕРЖАНИЕ -и 3.1.3. Логическое программирование 189 f i . 3.1.4. История развития 190 i5.3§3.2. Структура программы 192 !с° . 3.2.1. Элементы программы 192 *¦<"¦? . 3.2.2. Факты 104 "? • 3.2.3. Правила 195 .2 . 3.2.4. Запросы 196 ¦^3.3. Синтаксис данных 198 л< • • 3.3.1. Объекты ПРОЛОГа 198 -^ 3.3.2. Алфавит ПРОЛОГа 198 «¦ 1* 3.3.3. Переменные 199 3.3.4. Константы 199 3.3.5. Предикаты 200 3.3.6. Представление предикатов деревьями . . . 202 3.3.7. Списки 203 § 3.4. Аппарат вычислений 206 3.4.1. Процедура унификации в ПРОЛОГе 206 3.4.2. Вывод и процедура отката 209 3.4.3. Поиск в глубину с возвратом 212 3.4.4. Управление откатом: отсечение 214 3.4.5. Рекурсивные определения в ПРОЛОГе ... 217 3.4.6. Обработка списков 222 3.4.6.1. Предикат member 223 3.4.6.2. Предикат append 224 § 3.5. Встроенные предикаты 225 3.5.1. Предикаты размещения данных 225 3.5.2. Предикаты взаимодействия 226 3.5.3. Равенство в ПРОЛОГе 228 3.5.4. Арифметика в ПРОЛОГе 228 3.5.5. Контроль типов 229 < ' " 3.5.6. Операторы 229 3.5.7. Ханойские башни 232 § 3.6. Отрицание в ПРОЛОГе 233 3.6.1. Допущение замкнутости мира и отрицание как неудача 233 3.6.2. Нормальные цели 234 3.6.3. Замыкания программ 236 3.6.4. Нормальные программы и стратифика- стратификация 238 3.6.5. Предикат fail 241 3.6.6. Предикат not 242 3.6.7. Немонотонные логики 243 § 3.7. Экспертные системы 245 3.7.1. Искусственный интеллект 245 3.7.2. Экспертные системы и обработка зна- знаний 245
288 СОДЕРЖАНИЕ 1 ' 3.7.3. Экспертная система для диагностики почеч- . ; . ных заболеваний 247 У ¦< § 3.8.. Эволюция логического программирования 251 3.8.1. Редакции ПРОЛОГа 251 3.8.2. Версии ПРОЛОГа 252 3.8.3. ПРОЛОГ и метапрограммирование 252 3.8.4. ПРОЛОГ и параллелизм 253 § 3.9. ПРОЛОГ и логика предикатов 254 § 3.10. Упражнения 257 Список литературы .-.-. . . . ^V';.'Г'^.Ч'0."'?',4,', :/:':."i 275 Предметный указательЧ' . . . г.с.¦¦•*к.««та* " Н'.Я. .... 279 .. , .,..л л:.> .. , ;¦(;>.¦•.¦ ¦ ,*№>" ¦'•iql! .?.?.? tivi ,¦ t i . ' . и tK ¦ i! 'p ЧУ 'lf t i» ' I* »' 'i ч >'7' ^ *¦ 1 ,' ¦.'«)' > ,1'v >> ' ' It > l»"lll i1 «^HjJ,1.'*- PIUv.'U .*-¦ i '- -1" ,. чН.'- 'I * t, ¦' v " *'' ! ' ' ' :'" ' ¦¦¦!:1'"ит"й.' "¦ vf *" S ? i чаи г