- •127994, Москва, ул. Образцова, 15
- •2.Теоретические основы логическоого программирования
- •2.1.Логика высказываний и логика предикатов.
- •2.1.1.Формулы. Синтаксис и семантика формул.
- •2.1.2.Интерпретация формул в логике высказываний.
- •2.1.3.Интерпретация в логике предикатов первого порядка
- •2.1.4.Равносильность формул логики высказываний
- •2.1.5.Тождественная истинность формул логики высказываний
- •2.1.6.Равносильность формул логики первого порядка
- •2.1.7.Тождественная истинность, общезначимость, выполнимость, противоречивость формул логики предикатов
- •2.1.8.Рассуждения в логике высказываний (предикатов)
- •2.2.Метод резолюций
- •2.2.1.Метод резолюций в логике высказываний
- •2.2.2.Подстановка и унификация
- •2.2.3.Метод резолюций для логики первого порядка
- •2.2.4.Стратегии метода резолюций
- •2.3.Отношения и предикаты
- •3.Пролог- язык РекуРсивно-логического программирования
- •3.1.Пролог-история возникновения
- •3.2.Синтаксис языка пролог
- •3.3.Семантика языка пролог
- •3.4.Язык пролог и метод резолюций. Логическая интерпретация языка Пролог.
- •3.5.Работа в пролог-системе
- •3.6.Описание инфиксных операций
- •3.7.Списки в языке пролог
- •3.8.Арифметика в языке пролог
- •3.9.Отсечение и отрицание в языке пролог
- •3.10.Встроенные предикаты языка пролог
- •3.11.Работа с базой данных в языке пролог
- •3.12.Предикаты поиска
- •3.13.Решение головоломки на языке пролог(задача Эйнштейна)
- •4.Лабораторные работы по РекуРсивно-логическому программированию
- •4.1.Задание n1 Отношения между объектами. (на Прологе и Паскале)
- •4.1.1.Методические указания
- •4.1.2.Варианты
- •4.2.Задание n2. Работа со списками
- •4.2.1.Методические указания
- •4.2.2.Варианты
- •4.3.Задание n3. Разные задачи
- •4.3.1.Методические указания
- •4.3.2.Варианты
- •4.4.Содержание отчета
2.3.Отношения и предикаты
Определение 2.3.1. Прямым произведением множеств A1,…, An (обозначается как A1…An.) в теории множеств называется множество {(a1,…,an): a1, A1,,…,an An}.
Определение 2.3.2. Отношением между множествами A1,…, An называется некоторое множество R A1…An.
Определение 2.3.3. n-арным отношением на множестве A называется некоторое множество R An. (An=AA…A – прямое произведение A на само себя n раз)
Определение 2.3.4. Сечением отношения R A1…An по компоненте i и значению c называется отношение R1={(a1,…, ai-1 ,ai+1 ,.., an): (a1,…, ai-1,c,ai+1 ,.., an)R }.
Пусть М – некоторое множество значений переменных.
Предикат P(x1,…,xn) можно представить в виде функции p: М n→{0,1} от n переменных, которая при заданных аргументах принимает значения в зависимости от истинности полученного высказывания.
Предикат P(x1,…,xn) можно представить в виде отношения на множестве M следующим образом:
P ={(a1,…,an)Mn : высказывание P(a1,…,an) истинно} или
P ={(a1,…,an)Mn : P(a1,…,an)=1}.
3.Пролог- язык РекуРсивно-логического программирования
3.1.Пролог-история возникновения
Название ПРОЛОГ есть сокращение, означающее ПРОграммирование в терминах ЛОГики. Идея использовать логику в качестве языка программирования возникла впервые в начале 70-х годов. Первыми исследователями, разрабатывавшими эту идею, были Роберт Ковальский из Эдинбурга (теоретические аспекты), Маартен ван Эмден из Эдинбурга (экспериментальная демонстрационная система) и Ален Колмероэ из Марселя (реализация). Сегодняшней своей популярности Пролог во многом обязан эффективной реализации этого языка, полученной в Эдинбурге Дэвидом Уорреном в середине 70-х годов (см. [3]).
3.2.Синтаксис языка пролог
Основной конструкцией языка Пролог является предикат, задающий отношение между объектами. Пользователь может задавать пролог-системе вопросы, касающиеся отношений, определенных в программе.
Опишем синтаксис языка посредством регуляризованных формул Бэкуса-Наура. Фигурные скобки в формуле означают, что конструкция внутри них может повторяться многократно. Квадратные скобки означают, что конструкция внутри них может отсутствовать.
<программа>::={<предложение>.}
Пролог-программа состоит из предложений. Каждое предложение заканчивается точкой.
<предложение>::=<голова>[:-<тело>]
<тело>::=< предикат>{,<предикат>}
<голова>::=<предикат>
Предложения Пролога состоят из головы и тела, которые разделяются знаком «:-» (вместо «:-» может использоваться «if»). Тело - это список предикатов, разделенных запятыми. Тело может быть пустым. В этом случае знак «:-» опускается.
Предложения бывают трех типов: факты, правила и вопросы.
<факт>::=<предикат>
<правило>::=<голова>:-<тело>
<вопрос>::=?-<тело>
Факты - это предложения, имеющие пустое тело. Вопросы имеют только тело. Правила имеют голову и непустое тело.
<предикат>::=<имя>[(<список_параметров>)]
<список_параметров>::=<параметр>{,<параметр>}
<параметр>::=<число> | <текстовая константа> | <переменная> | <структура>
<текстовая константа>::=”<строка_символов>” | <атом>
Имя предиката может быть дано пользователем, т. е. пользователь может определять отношения, их связи с другими отношениями и оперировать ими. В Прологе также существует набор встроенных предикатов для определения специальных отношений.
Параметрами предиката могут быть конкретные имена объектов (текстовые константы), числовые константы, переменные, а также структуры. Текстовые константы бывают двух видов: строка произвольных символов в кавычках и строка, начинающаяся со строчной буквы без кавычек. Такая константа называется атомом. переменными в Прологе являются идентификаторы, начинающиеся с заглавной буквы, например, X, Y.
Пример 3.2.1. Конструкции языка Пролог
Предикаты:
родитель(X, анна)
родитель(иван, анна)
родитель(“Иван”, “Анна”)
родитель(X, Y)
сосед(X, Y)
Факты:
родитель(иван, анна).
сосед(иван, федор).
Вопросы:
?- сосед(иван, федор).
?- родитель(иван, анна).
?- родитель(X, Y).
Правила:
отец(X, Y):- родитель(X, Y), мужчина(X).
дед(X, Y):- отец(X, Z), отец(Z, Y).
Структура - это единый объект состоящий из совокупности других объектов, называемых компонентами. Компоненты в свою очередь могут быть также структурами.
<структура>::=<функтор>(<список_компонент>)
<список_компонент >::=< компонента>{,< компонента>}
<компонента>::=<параметр>
< функтор >::=<имя>
Функторы различается двумя параметрами: именем и арностью - т.е. числом компонент. Например, point(X, Y, Z) и point(X, Y) - это разные термы.
