- •Кафедра Информационных систем и вычислительной техники Национального минерально-сырьевого университета «Горный"
- •Содержание
- •История развития и современное состояние языка prolog
- •Тенденции в истории развития языка Prolog
- •Области применения языка Prolog
- •Современные реализации языка Prolog
- •Поддержка веб-технологий в реализацях Prolog
- •Основы разработки prolog-программ
- •Общие сведения о языке Prolog
- •Понятие факта, правила, запроса и процедуры
- •Механизм сопоставления и поиска с возвратом
- •Основные элементы языка Prolog
- •Среда разработки программ pie и система swi-prolog
- •Основы работы в консоли Prolog
- •Основы работы с программными файлами
- •Справка и помощь в среде swi-Prolog
- •Основы трассировки и отладки в среде pie и swi- Prolog
- •Графические интерфейсы на базе swi-Prolog/xpce
- •Загрузка и запуск программ swi-Prolog'a
- •Использование ярлыков для запуска программ
- •Использование командных и скриптовых сценариев
- •Среда разработки turbo-prolog
- •Структура программы на Turbo Prolog'e
- •Оболочка системы Turbo Prolog
- •Отладка и трассировка программ
- •Работа с простейшими программами в Turbo Prolog'e
- •Работа с графикой в Turbo Prolog'e
- •Среда разработки visual prolog
- •Интегрированная среда разработки
- •Разработка консольного проекта
- •Разработка gui проекта на Visual Prolog'e
- •Prolog — язык логического программирования
- •Системы основанные на знаниях
- •Логические модели и логическое программирование
- •Простейшие конструкции языка предикатов
- •Предикатные формулы
- •Определение правильно построенной формулы
- •Логический вывод
- •6.6.1. Правило резолюции для простых предложений
- •Правило резолюции для сложных предложений
- •Простая резолюция сверху вниз
- •Общая резолюция сверху вниз
- •Унификаторы и примеры унификации
- •Решение задач и извлечение ответа
- •Приложение 1. Запуск Turbo-Prolog в ос Windows 7
- •1. Стандартные предикаты ввода данных.
- •Предикаты преобразования данных
- •Предикаты работы с окнами.
- •Предикаты работы с файлами.
- •Предикаты управления экраном.
- •Предикаты обработки строк.
- •Предикаты работы с графикой.
- •Разные предикаты.
- •Правила вычисление атрибутов экрана.
- •Приложение 3. Пример программы построения дерева синтаксического анализа
- •Интеллектуальные информационные системы prolog - язык разработки интеллектуальных и экспертных систем
Предикатные формулы
В логике предикатов сложным предложениям естественного языка соответствуют предикатные формулы. Предикатные формулы образуются из атомарных предикатов с использованием логических связок. Эти связки еще называют пропозициональными и выделяют пять типов таких связок, которые приведены в табл. 6.1.
Таблица 6.1
Обозначение и назначение логических связок
Обозначение |
- |
, или л |
; или v |
|
O или ~ |
Читается, как ... |
НЕ |
И |
ИЛИ |
Если ..., То , Из ... следует |
Тогда и только ... |
Операция |
отрицание |
конъюнкция |
дизъюнкция |
импликация |
эквиваленция |
В логических выражениях порядок выполнения логических операций задается круглыми скобками. При их отсутствии логические связки имеют следующий приоритет использования: сначала выполняется отрицание ("не"), затем конъюнкция ("и"), после конъюнкции — дизъюнкция ("или") и в последнюю очередь — импликация.
В логике высказываний показано, что операцию импликации можно выразить через дизъюнкцию и отрицание: А В = —A v В, а операцию эквивалентности можно представить через операции отрицания, дизъюнкции и конъюнкции: А о B = (—A v В) л (-B v A).
Таким образом, операций отрицания, дизъюнкции и конъюнкции вполне достаточно, чтобы описывать и обрабатывать любые логические высказывания. Что касается логического программирования, то в нем наиболее часто используют связки «И», «НЕ» «ЕСЛИ». Тогда предикатная формула, соответствующая сложному предложению, может иметь вид, например,
является(ласточка, птица) имеет (ласточка, крылья),
владеет (ласточка, гнездо).
где является/2, имеет/2, владеет/2 - это атомарные предикаты, а «,» и «<^» представляют собой логические связки.
Однако приведенная конструкция предикатной формулы позволяет делать утверждение не только о конкретном индивидууме, которым является
ласточка, но и обо всех индивидуумах из класса птиц, используя для этого вместо констант переменные:
является(Х, птица) имеет(Х,крылья), владеет(Х, гнездо)
Используя переменные вместо конкретных имен, мы приходим к более общим понятиям кортежа длины n, предиката и логической формулы. Однако предикат, который содержит переменные, например,
имеет (Х, крылья)
не может быть однозначно оценен, так как невозможно определить ложь он или истина, Его значение определяется после подстановки в переменную некоторой константы.
Однако, иногда можно определить значения предиката, не делая подстановок, используя кванторы общности (V) и существования (3), которые обозначают «для всех» и «существует, по крайней мере, одно». Тогда приведенная выше логическая формула будет записана в виде:
(VX) [является (Х, птица) имеет (Х, крылья),
владеет (Х, гнездо)]
и соответствуют предложению, которое может читаться как: «любой Х является птицей, если этот Х имеет крылья и владеет гнездом».
Кванторное логическое высказывание с квантором всеобщности вида VxA(x) - истинно только тогда, когда для каждого объекта x из заданной совокупности высказывание A(x) истинно. Логическое высказывание с квантором существования 3xA(x) - истинно только тогда, когда в заданной совокупности существует объект x, такой, что высказывание A(x) истинно.
Кванторы V и 3 могут использоваться и для любого числа переменных, а при их комбинации очень важен порядок их использования. Рассмотрим их различное использование, и соответствующее семантическое толкование высказываний на примере использования двуместного предиката лю- бит/2, который описывает отношение «Х любит Y»:
VX VY любит (Х, Y) - все любят всех;
3Х VY любит (Х, Y) - существует такой X, который любит всех;
VX 3Y любит (Х, Y) - любой X любит хотя бы одного Y;
3Х 3Y любит (Х, Y) - существует такой X, который кого-либо любит;
3Y 3X любит (Х, Y) - существует такой Y, которого кто-то любит;
VY 3X любит(Х, Y) - каждого Y любит хотя бы один Х.
