
- •Часть 1
- •1. Введение
- •2. Теоретические основы логического программирования.
- •2.1 Основные определения логики предикатов первого порядка
- •2.2 Стандартные формы представления формул исчисления предикатов.
- •3. Синтаксис языка программирования Пролог.
- •3.1. Основные элементы языка Пролог.
- •3.2. Представление клауз Хорна на языке Пролог. Факты. Правила. Вопросы.
- •3.2.1. Представление фактов в Пролог—программах.
- •3.2.2. Вопросы.
- •3.2.3. Правила.
- •3.2.4. Подстановки и примеры утверждений.
- •3.2.5. Пример Прологпрограммы.
- •4. Семантика языка программирования Пролог.
- •4.1 Декларативная и процедурная семантика программ на языке Пролог.
- •4.2. Вычислительная модель логической программы.
- •4.2.1. Унификация термов.
- •4.2.2. Общая схема согласования целевых утверждений.
- •4.2.3 Механизм поиска с возвратом.
- •5. Рекурсивное программирование на языке Пролог.
- •5.1 Рекурсивные правила.
- •5.2 Схема поиска решений в рекурсивных программах.
- •5.3. Списки и их представление на Прологе.
- •Основные определения.
- •Унификация списков.
- •Предикат list.
- •Типовые процедуры обработки списков на языке Пролог.
- •Предикат length.
- •5.4.2. Предикат member.
- •Предикат first.
- •Предикат last.
- •Предикат next.
- •Предикат append.
- •Предикат add.
- •Предикаты revers1 и revers2.
- •Предикат delete.
- •5.4.10. Предикат number_list.
- •5.4.11. Предикат sumlist.
- •5.4.12. Предикат delrepeat.
- •5.5 Множества и их представление на языке Пролог. Простые программы обработки множеств.
- •Основные определения.
- •Предикат unionset.
- •Пересечение множеств.
- •Разность множеств.
- •Определение подмножества.
- •5.5.6. Декартово произведение множеств.
- •Прологпрограммы сортировки списков.
- •Метод прямого выбора.
- •Метод вставки.
- •5.6.3. Метод перестановок.
- •6. Стандартные предикаты языка Пролог.
- •Арифметические предикаты.
- •6.2. Предикаты сравнения арифметических выражений и символьных термов.
- •6.3. Предикаты определения типов термов.
- •6.4. Примеры программ с использованием арифметических предикатов.
- •6.5. Предикаты вводавывода термов и символов.
- •6.5.1. Ввод/вывод термов.
- •6.5.2. Ввод/вывод символов.
- •6.6. Стандартные предикаты управления логическим выводом.
- •6.7. Стандартные предикаты обработки списков.
- •6.8. Стандартные предикаты обработки строк.
- •7. Система программирования Arity Prolog 5.0.
- •Описание среды программирования Arity Prolog 5.0.
- •Методические указания по лабораторным работам.
- •7.2.1. Лабораторная работа № 1. Простейшая программа на языке Пролог.
- •7.2.2. Лабораторная работа № 2. Использование арифметических операций и унификации арифметических выражений.
- •7.2.3. Лабораторная работа 3.1. Создание базы данных “Cессия” и запросов к этой базе данных на языке Пролог с использованием стандартного предиката fail.
- •Приложение 2. Варианты заданий по лабораторной работе 4.
- •Приложение 3. Варианты заданий по лабораторной работе 5.
- •Список литературы.
2. Теоретические основы логического программирования.
2.1 Основные определения логики предикатов первого порядка
Предположим, есть некоторое множество D объектов, называемое предметной областью. Символы, обозначающие элементы этого множества, называются предметными константами, а символ, обозначающий произвольный элемент предметной области предметной переменной.
Предикатэто логическая функция одной или нескольких переменных P(x1,x2,… xn), определенная на множестве D и принимающая одно из двух значений, «истина» и «ложь», в зависимости от значений предметных переменных. Буква P предикатный символ. Предикат, зависящий от n переменных, называется nместным (или nарным) предикатом.
Для описания некоторой предметной области на языке исчисления предикатов (ИП) определяются множества исходных элементов, правила построения формул, система аксиом и множество правил вывода, каждое из которых описывает способ построения новых формул из исходных элементов и уже построенных формул.
Исходными элементами ИП являются следующие множества:
Конечное множество предметных переменных {x1,x2,…xk};
Конечное множество предметных констант {a1,a2,…an};
Конечное множество функциональных символов {f1,f2,…fm};
Конечное, непустое множество предикатных констант {p1,p2,…pr};
Логические связки: (отрицание), (конъюнкция), (дизъюнкция), (импликация).
Кванторы: (квантор всеобщности) и (квантор существования).
Специальные символы: ( ) + - */ < > . , [ ] : ;
Знак пустого дизъюнкта , который является тождественно ложной формулой.
Правила построения формул определяются следующим образом. Формулы состоят из термов, предикатных констант, специальных символов и логических связок.
Определение терма рекурсивно:
Терм это предметная переменная или предметная константа.
Если f функциональный символ, и t1,t2,…tn термы, то f(t1,t2,…tn) терм.
Предикат вида p(t1,t2,…tn), где p предикатная константа, а t1,t2,…tn термы, является элементарной формулой.
Правила построения ППФ (Правильно Построенных Формул) в логике предикатов 1-го порядка следующие:
Всякая элементарная формула есть ППФ.
Если A и B ППФ, а x предметная переменная, то каждое из выражений A, AB, AB, AB, (x)A, (x)A есть ППФ.
Других правил построения ППФ нет.
Для формул с кванторами справедливо следующее утверждение: формула Q(x1,x2,…,xn) получена из формулы P(x1,x2,…xn) посредством присоединения квантора, если
Q(x1,x2,…,xn) = (xi) P(x1,x2,…xn) или
Q(x1,x2,…,xn) = (xi) P(x1,x2,…xn).
Пусть D={a1 , a2, …, an} есть множество предметных констант, и P(x) предикат, определенный на множестве D, тогда справедливы утверждения:
(x) P(x) = P(a1) P(a2) …P(an) и
(x) P(x) = P(a1) P(a2) …P(an).
Система аксиом исчисления предикатов включает в себя аксиомы исчисления высказываний А1А11 и две аксиомы с кванторами А12 и А13.
A1) A (BC)
A2) (A(BC)) ((AB) (AC))
A3) AB A
A4) AB B
A5) (AB) ((AC) (ABC))
A6) AAB
A7) BAB
A8) (AC) ((BC) (ABC))
A9) (AB) (BA)
A10) A A
A11) A A
A12) (x) A(x) A(t)
A13) A(t) (x) A(x), A(x) ППФ, t терм, не содержащий x. Все аксиомы тождественно истинны.
Выводом P называется такое линейно упорядоченное множество элементов, что всякий элемент P является либо аксиомой, либо заключением применения некоторого правила вывода. Формула является выводимой, если можно построить вывод, заканчивающийся этой формулой.
В исчислении предикатов определены следующие правила вывода:
Все аксиомы выводимы.
Правило подстановки.
Подстановка (ti вместо xi) есть множество = {x1=t1,x2=t2,… xk=tk }, где x1,x2,…,xk попарно различные предметные переменные, xixj при ij , t1,t2,…,tk термы, если xi= ti, то ti отличается от xi.Правило подстановки означает, что если P(x1,x2,…xk) выводим, то и формула P(t1,t2,…tk) = (P(x1,x2,…xk)) выводима.
Правило Modus Ponens (MP).
Если А выводимая ППФ, и A B выводима, то B также будет выводима.
Правило обобщения.
Если B A(x) выводимая ППФ, и B не содержит вхождений x, то формула B (x)A(x) также будет выводима.
Правило конкретизации.
Если выводима формула A(x)B, и B не содержит вхождений x, то формула (x)A(x) B также будет выводима.
Правило переименования переменных.
Если Aвыводимая ППФ, имеющая квантор и (или) , то одна связанная переменная может быть заменена другой, не меняя истинностного значения формулы. Полученная формула также будет выводима.
Других правил вывода нет.