- •ВВЕДЕНИЕ
- •Глава 1. ЛОГИКА ВЫСКАЗЫВАНИЙ
- •§1. Высказывание. Логические операции
- •§ 2. Пропозициональные буквы, связки и формы (формулы логики высказываний). Построение таблиц истинности
- •§ 3. Упрощения в записях пропозициональных форм
- •§ 4. Тавтологии (общезначимые формулы). Противоречия
- •§ 5. Равносильность пропозициональных форм
- •§ 6. Важнейшие пары равносильных пропозициональных форм
- •§ 7. Зависимости между пропозициональными связками
- •§ 8. Нормальные формы
- •§ 9. Совершенные нормальные формы
- •§ 10. Булева (переключательная) функция
- •§ 11. Приложение алгебры высказываний к анализу и синтезу контактных (переключательных) схем
- •§ 12. Приложение алгебры высказываний к анализу и синтезу схем из функциональных элементов
- •§ 13. Вопросы и темы для самопроверки
- •§ 14. Упражнения
- •Глава 2 ЛОГИКА ПРЕДИКАТОВ
- •§ 1. Понятие предиката
- •§ 2. Кванторы
- •§ 3. Формулы логики предикатов
- •§ 4. Интерпретация. Модель
- •§ 5. Свойства формул в данной интерпретации
- •§ 6. Логически общезначимые формулы. Выполнимые и равносильные формулы
- •§ 8. Правила перестановки кванторов
- •§ 9. Правила переименования связанных переменных
- •§ 10. Правила вынесения кванторов за скобки. Предваренная нормальная форма
- •§ 11. Вопросы и темы для самопроверки
- •§ 12. Упражнения
- •Глава 3. ЛОГИЧЕСКОЕ СЛЕДСТВИЕ И МЕТОД РЕЗОЛЮЦИЙ
- •§ 1. Логическое следствие и проблема дедукции в логике высказываний
- •§ 2. Резольвента дизъюнктов логики высказываний
- •§ 3. Метод резолюций в логике высказываний
- •§ 4. Метод насыщения уровня
- •§ 5. Стратегия вычеркивания
- •§ 6. Лок-резолюция
- •§ 7. Метод резолюций для хорновских дизъюнктов
- •§ 8. Преобразование формул логики предикатов. Сколемовская стандартная форма
- •§ 9. Унификация
- •§ 10. Метод резолюций в логике предикатов
- •§ 11. Приложение метода резолюций для анализа силлогизмов Аристотеля.
- •§ 12. Использование метода резолюций в языке ПРОЛОГ
- •§ 13. Введение и использование правил в ПРОЛОГе
- •§ 14. Рекурсивное задание правил в ПРОЛОГе
- •§ 15. Особенности ПРОЛОГа
- •§ 16. Вопросы и темы для самопроверки
- •§ 17. Упражнения
- •Глава 4. ДЕДУКТИВНЫЕ ТЕОРИИ
- •§ 1. Понятие об эффективных и полуэффективных процессах (методах)
- •§ 2. Дедуктивные теории
- •§ 3. Свойства дедуктивных теорий
- •§ 4. Пример полуформальной аксиоматической теории - геометрия
- •§ 5. Формальные аксиоматические теории
- •§ 6. Свойства выводимости
- •§ 7. Исчисление высказываний (теория L)
- •§ 8. Некоторые теоремы исчисления высказываний
- •§ 9. Эквивалентность двух определений непротиворечивости
- •§ 11. Свойства исчисления высказываний
- •§ 12. Другие аксиоматизации исчисления высказываний
- •§ 13. Теории первого порядка
- •§ 14. Формальная арифметика (теория S)
- •§ 15. Свойства теорий первого порядка
- •§ 16. Значение аксиоматического метода
- •§ 17. Теория естественного вывода
- •§ 18. Вопросы и темы для самопроверки
- •§ 19. Упражнения
- •Глава 5. НЕКЛАССИЧЕСКИЕ ЛОГИКИ
- •§ 1. Трехзначные логики
- •§ 2. Многозначные логики
- •§ 3. Понятие нечеткого множества
- •§ 4. Нечеткие высказывания и максиминные операции над ними
- •§ 5. Понятие о нечеткой лингвистической логике
- •§ 6. Модальные логики
- •§ 7. Временные (темпоральные) логики
- •§ 8. Вопросы и темы для самопроверки
- •§ 9. Упражнения
- •Глава 6. ТЕОРИЯ АЛГОРИТМОВ
- •§1. Неформальное понятие алгоритма
- •§ 2. Алфавит. Слова. Алгоритм в алфавите. Вполне эквивалентные алгоритмы
- •§ 3. Нормальный алгоритм (алгоритм А. А. Маркова)
- •§ 4. Функции частично вычислимые и вычислимые по Маркову
- •§ 5. Замыкание, распространение нормального алгоритма
- •§ 6. Операции над нормальными алгоритмами
- •§ 7. Машина Тьюринга
- •§ 8. Задание машины Тьюринга
- •§ 9. Алгоритм Тьюринга. Вычислимость по Тьюрингу
- •§ 10. Связь между машинами Тьюринга и нормальными алгоритмами
- •§ 11. Основная гипотеза теории алгоритмов (принцип нормализации или тезис Черча)
- •§ 12. Проблема алгоритмической неразрешимости
- •§ 13. Примеры алгоритмически неразрешимых массовых проблем
- •§ 14. Сведение любого преобразования слов в алфавите к вычислению значений целочисленных функций
- •§ 15. Примитивно рекурсивные и общерекурсивные функции
- •§ 16. Примитивно рекурсивность некоторых функций. Частично - рекурсивные функции
- •§ 17. Ламбда-исчисление
- •§ 18. Основные результаты
- •§ 19. Вопросы и темы для самопроверки
- •§ 20. Упражнения
- •Глава 7. СЛОЖНОСТЬ ВЫЧИСЛЕНИЙ С ПОМОЩЬЮ АЛГОРИТМОВ
- •§ 1. Понятие о сложности
- •§ 2. Временная сложность вычислений (алгоритма)
- •§ 3. Полиномиальные алгоритмы и задачи. Класс Р
- •§ 4. NP класс
- •§ 5. NP-полные и NP-трудные задачи
- •§ 6. Класс Е
- •§ 7. Ёмкостная (ленточная) сложность алгоритма
- •§ 8. Вопросы и темы для самопроверки
- •§ 9. Упражнения
- •ЛИТЕРАТУРА
- •ПРИЛОЖЕНИЯ
- •Варианты типового задания
- •Тесты для самоконтроля
- •Тест по логике высказываний (тест № 1)
- •Тест по логике предикатов (тест № 2)
- •Тест по логическому следствию и методу резолюций (тест № 3)
- •Тест по дедуктивным теориям (тест № 4)
- •Тест по теории алгоритмов (тест № 5)
- •Тест по неклассическим логикам и сложности вычислений (тест № 6)
- •Ответы к тестам самоконтроля
101
Ответ не зависит от порядка в силу того, что система получит для вопроса дизъюнкт:
родитель(X,Y) родитель(том,X), который равносилен дизъюнкту:
родитель(том,X) родитель(X,Y). На третий вопрос система ответит
Х= боб Y = эни;
Х= боб Y = пат
Пользователь ПРОЛОГа может совершенно не знать метод резолюций. Система сама находит ответы.
§13. Введение и использование правил в ПРОЛОГе
Вкачестве расширения рассмотренной в § 12 программы на ПРОЛОГе введем отношение дети, которое обратно отношению родитель. Можно было бы определить дети тем же способом, что и родитель, т.е. представив описок:
дети (лиз, том). дети (боб, пам).
итак далее. Однако это отношение можно определить проще, использовав, тот факт, что оно обратно отношению родитель, которое уже определено. Такой способ основан на следующем логическом утверждении:
Для всех Х и Y
Y дети Х, если
Х является родителем Y.
Соответствующее прологовское предложение с тем же смыслом имеет
вид:
дети (Y,Х): - родитель (Х,Y). |
(3.20) |
Приведенное прологовское предложение (3.20) называется правилом. Предложение
родитель (том, лиз).
считающееся фактом, безусловно, истинно. Правила описывают утверждения, которые могут быть истинными, если выполнены условия.
К рассмотренной в параграфе 12 программе добавим еще предложение (3.20). Спросим полученную программу, является ли Лиз отпрыском Тома?
? - дети (лиз, том).
Предложение (3.20) на языке логики имеет вид: родитель(Х,Y) дети(Y,X).
Преобразуем последнее выражение в дизъюнкт:
102
родитель(Х,Y) дети(Y,Х). |
(3.21) |
Вопрос к системе преобразуется в дизъюнкт:
дети (лиз, том). |
(3.22) |
Из (3.21) и (3.22) получим:
родитель (том, лиз).
Далее, используя предложение (дизъюнкт) (3.12) получим пустой дизъюнкт, следовательно, система ответит
YES (да).
§ 14. Рекурсивное задание правил в ПРОЛОГе
Вновь рассмотрим программу из параграфа 12. Добавим к этой программе, кроме отношений родитель и дети, еще одно отношение - предок. Определим его через отношение родитель. Все отношение можно выразить с помощью двух правил. Первое правило будет определять непосредственных (ближайших) предков, а второе - отдаленных. Будем считать, что некоторый Х является отдаленным предком некоторого Z, если между Х и Z существует цепочка людей, связанных между собой отношением родитель - родитель.
Первое правило простое и его можно сформулировать так:
Для всех Х и Z
X - предок Z, если
X - родитель Z.
Это переводится на Пролог в виде предложения
предок(Х,Z): - родитель(X,Z).
Второе правило сложнее. Один из способов определения отдаленных родственников задать их следующим множеством предложений
предок(X,Z):-
родитель(Х,Z).
предок(Х,Z): - родитель(X,Y), родитель(Y,Z).
предок(X,Z):-
родитель(X,Y1), родитель(Y1,Y2), родитель(Y2,Z).
--------------------------
103
предок(Х,Z):- родитель(Х,Y1),
родитель(Y1,Y2), родитель(Y2,Y3),
родитель(Y3,Z).
Эта программа длинна и, что важнее, работает только в определенных пределах. Она будет обнаруживать предков лишь до определенной глубины фамильного дерева.
Существует компактная и корректная формулировка отношения предок, которая работает на любую глубину. Ключевая идея для этого: определить отношение предок через него самого, т.е. ввести рекурсивное определение. Это определение будет следующим:
Для всех X и Z
Х- предок Z, если существует Y, такой, что
(1)Х -родитель Y и
(2)Y -предок Z.
Предложение ПРОЛОГа, имеющее тот же смысл, записывается в виде:
предок(X,Z):-
родитель(Х,Y), предок(Y,Z).
Полная программа для отношения предок содержит оба правила: одно для ближайших предков и другое для отдаленных предков. В результате имеем:
предок(Х,Z): - родитель(Х,Z).
предок(X,Z):-
родитель(Х,Y), (3.23)
предок(Y,Z).
Отметим, что рекурсивное задание правил проводится не единственным образом. Так предложение (3.23) можно заменить, например, на следующие
предок(X,Y): -
родитель(Х,Y).
предок(X,Z): -
предок(X,Y), предок(Y,Z).
Если к рассмотренной в параграфе 12 программе добавить предложение (3.23), то полученную программу можно, например, спросить:
«Кто потомки Пам?» На Прологе этот вопрос запишем в виде:
104
?-предок(пам,X).
Система ответит
X=боб;
X=эни;
X=пат;
X=джим
Выясним как получает программа ответ. Предложения (3.23) записываются в виде:
родитель(X,Z) предок(X,Z), родитель(X,Y)&предок(Y,Z) предок(X,Z).
Преобразовав эти формулы получим:
родитель(X,Z) предок(X,Z), |
(3.24) |
родитель(X,Y) предок(Y,Z) предок(X,Z). |
(3.25) |
Вопрос к системе преобразуется к виду |
|
предок(пам,X) ANS(X). |
(3.26) |
Для получения ответа используется предложения (дизьюнкты) (3.10)- (3.15) и дизъюнкты (3.24)-(3.26).
Непосредственный потомок для Пам выявится, если из (3.25) и (3.26) получить бинарную резольвенту:
родитель(пам,Z) ANS(Z). |
(3.27) |
Затем получим ANS(боб) как бинарную резольвенту из (3.27) и (3.10). Потомки второго уровня (внуки Пам) выявятся в результате
получения следующих резольвент
родитель(пам,Y) предок(Y,X) ANS(X), |
(3.28) |
которое получено из (3.25) и (3.26),
родитель(X,Y) родитель(пам,X) ANS(Y), |
(3.29) |
которое получено из (3.28) и (3.24),
|
родитель(боб,Y) |
|
ANS(Y), |
(3.30) |
|
|
|
получено из (3.29) и (3.10). Далее имеем: ANS(эни) -получено из (3.30) и (3.13), ANS(пат) -получено из (3.30) и (3.14).