- •1. Введение в декларативные языки.
- •Прозрачность по ссылкам.
- •Логическое программирование
- •Правила
- •Примеры
- •Рекурсивные определения
- •Литература
- •Синтаксис пролога.
- •Структуры
- •Предикаты
- •Семантика пролога
- •Как происходит сопоставление
- •Алгоритм Эрбрана
- •Алгоритм вычисления целей(работы пролог машины).
- •Процедурный смысл правил
- •Использование списков и
- •Использование накапливающего параметра(прием)
- •Операторная запись
- •Управление перебором
- •Алгоритмы сортировки
- •1 Пузырьковая сортировка
- •Сортировка вставками
- •Быстрая сортировка.
- •Использование предикатов, анализирующих типы или структуру термов
- •Применение подстановки к структурированному терму
- •Недетерминированное программирование
- •Метод «породить и проверить»
- •Алгоритм сортировки
- •Программирование второго порядка
- •Рассмотрим, как работать с базой данный
- •Поиск в глубину
- •Темы кр
- •Использование формальных языков
- •Недетерминированный конечный автомат
- •Ввод и вывод
- •Рассмотрим ввод вывод алфавитно – цифровых символов
- •Функциональное программирование
- •Базовый язык
- •Рекурсивное определение функций
- •Функции высших порядков
- •Отображение списков
- •Декартово произведение множеств
- •Композиция функций.
- •Бесконечные списки
- •Рассмотрим как можно исп беск списки.
- •Метод породить и проверить
- •Сети связанных процессов
- •Определение ф чисел фибоначи
- •Задача хэмминга
- •Решето Эратосфена
- •Язык типов
- •Рассмотрим алгебраические типы данных.
- •Деревья – рекурсивные типы данных
- •Сделать дерево плоским
- •Удаление элемента дерева
- •Извлечение самого правого элемента
- •Функция форматирования числа
- •Законы функциональных программ
- •Наиболее важные законы функц программ доказываются по индукции
- •Закон map через foldr
- •Закон: композиция
- •Коммутативна
- •Дистрибутивность map относительно композиции:
- •Преобразование программ
- •Пример1
- •Стратегия для композиции
- •Приведение рекурсивной формы к итеративной форме
- •Введение в лямбда исчисление
- •Синтаксис лямбда исчисления
- •Множество связанных переменных
- •Множество свободных переменных
- •Подстановка
- •Конфликт имен(захват переменных)
- •Преобразование термов
- •Вторая теорема Черча – Россера “Теорема о стандартизации”
- •Комбинатор y
- •Вычислим fact 3
- •Вычислим fact 0
- •(Рассказ про y комбинатор – сразу зачёт)
Алгоритм вычисления целей(работы пролог машины).
Алгоритм исп.программу(факты и правила).
факты и правила – это хорновские дизъюнкты, все они имеют по одной положительной летере. Факт – одна положительная литера, а правило – одна
Список целей – хорновский дихъюнкт, который не имеет ни одной положительной литеры.
Цели(G1,G2,..Gm)
Вычислить
Просмотр
Программа: факты и правила
Успех или неудача
Подстановка
Пролог машина должна найти опровержение целевому дизъюнкту. Она будет брать литеры целей по очереди и подбирать для каждой литеры факты и правила так, чтобы получить резольвенту.
Сам алгоритм пролог машины можно представить двумя взаимно – рекурсивными процедурами – вычислить и просмотр.
Процедура “вычислить” последовательно перебирает цели(?литеры?) из целевого дизъюнкта, а процедура “просмотр” для заданной целевой литеры целей подбирает факты или правила с которой можно выполнить правила резолюции.
Алгоритм на выходе имеет признак – успех или неудача. В случае успеха на выходе будет еще подстановка, которая является опровержением целевого дизъюнкта.
Рассмотрим алгоритм, функцию “вычислить”. Эта функция рекурсивная, её базовый случай - если список целей пуст (на входе пустой дизъюнкт), то алгоритм успешно завершает работу. Иначе, в общем случае выбирается первая литера G1 и для неё запускается процедура “просмотр“.
О процедуре просмотр. Для литеры G1 она должна найти дизъюнкт в программе, с которым можно выполнить резолюцию. Эта процедура просматривает последовательно факты и правила в программе пока не найдет предложение C, голова которого сопоставима с целью G1.
Т.е. предложение C будет иметь вид
H :- B1,B2,…Bn.
H – голова правила, B1..n – тело правила.
Факт – это правила у которого нет тела.
Это предложение такое что G1 и H сопоставимы.
(Берем 2 предиката….Получаем множество уравнений, запускаем алгоритм Эмбрана…..)
Если сопоставимы, то далее строим резольвенту.
Поскольку в каждом правиле переменные локальные, а правило может вызываться несколько раз, может быть рекурсивным, в правиле все переменные переименовываются, т.е. получают новые имена, которых раньше не было.
(При применениях правил будем ставить ‘, ‘’, ‘’’, и т.д на бумаге. А пролог машина каждый раз генерирует новые имена…G-125,….G-126….и т.п.)
Мы уже получаем новое правило:
H’ :- B1’, B2’,…Bn’ - это правило с переименованными переменными. Далее сопоставляем G1 и H’ и находим подстановку сигма.
Здесь работает алгоритм Эмбрана.
Теперь можно построить резольвенту. Получается новый список целей B1’,B2’…Bn’ (это правила) и цель от целевого дизъюнкта G2,…..Gn. Получается множество литер B1’,B2’…Bn’, G2,…..Gm (вместо G1 тело правила…).
Далее к резольвенте мы должны применить подстановку сигма, т.е. конкретизировать новый список целей. Получаем новый список целей B1’’,B2’’,….Bn’’,G2’,….Gm’ и с этим новым списком целей мы опять вызываем процедуру вычислить, с новым списком целей.
Процедура вычислить может выдать неуспех, в этом случае процедура просмотр должна возобновить свою работу с предложения, следующего за предложением C. Если просмотрена вся программа и соответствие не найдено, то процедура просмотр выдает неудачу, которая приводит к неудаче процедуры вычислить и она должна пересогласовать предыдущую цель. Если ничего пересогласовать не удается, то процедура вычислить завершается с неудачей.
Таким образом, в пролог машине заложен перебор фактов и правил.
Пример.
Берем программу и рассмотрим по шагам.
Факты и правила
1) большой(медведь).
2) большой(слон).
3)маленький(кот).
4)бурый(медведь).
5)черный(кот).
6)серый(слон).
7)темный(X) :- черный(Х).
8)темный(Х) :- бурый(Х).
Цель
?- темный(Х), большой(Х).
Рассмотрим, как будет пролог машина отвечать на поставленный вопрос
темный(Х), большой(Х).
Большой(кот).
Большой(медведь)
черный(Х), большой(Х).
бурый(Х), большой(Х).
7)темный(Х’):-
Черный(Х’).
Сигма = {X’ / X}
8)темный(Х’):-
бурый(Х’).
Сигма = {X’ / X}
4)бурый(медведь).
Сигма={X/ медведь}
5)черный(кот).
Сигма={X/ кот}
Успех
1)Большой(медведь)
Неудача
Таким образом работа пролог машина.
Л/Р будет посвящена тому, что мы исследуем как работает пролог машина. В прологе есть отладчик, который позволяет по шагам проследить работу программы.