- •1. Введение в декларативные языки.
- •Прозрачность по ссылкам.
- •Логическое программирование
- •Правила
- •Примеры
- •Рекурсивные определения
- •Литература
- •Синтаксис пролога.
- •Структуры
- •Предикаты
- •Семантика пролога
- •Как происходит сопоставление
- •Алгоритм Эрбрана
- •Алгоритм вычисления целей(работы пролог машины).
- •Процедурный смысл правил
- •Использование списков и
- •Использование накапливающего параметра(прием)
- •Операторная запись
- •Управление перебором
- •Алгоритмы сортировки
- •1 Пузырьковая сортировка
- •Сортировка вставками
- •Быстрая сортировка.
- •Использование предикатов, анализирующих типы или структуру термов
- •Применение подстановки к структурированному терму
- •Недетерминированное программирование
- •Метод «породить и проверить»
- •Алгоритм сортировки
- •Программирование второго порядка
- •Рассмотрим, как работать с базой данный
- •Поиск в глубину
- •Темы кр
- •Использование формальных языков
- •Недетерминированный конечный автомат
- •Ввод и вывод
- •Рассмотрим ввод вывод алфавитно – цифровых символов
- •Функциональное программирование
- •Базовый язык
- •Рекурсивное определение функций
- •Функции высших порядков
- •Отображение списков
- •Декартово произведение множеств
- •Композиция функций.
- •Бесконечные списки
- •Рассмотрим как можно исп беск списки.
- •Метод породить и проверить
- •Сети связанных процессов
- •Определение ф чисел фибоначи
- •Задача хэмминга
- •Решето Эратосфена
- •Язык типов
- •Рассмотрим алгебраические типы данных.
- •Деревья – рекурсивные типы данных
- •Сделать дерево плоским
- •Удаление элемента дерева
- •Извлечение самого правого элемента
- •Функция форматирования числа
- •Законы функциональных программ
- •Наиболее важные законы функц программ доказываются по индукции
- •Закон map через foldr
- •Закон: композиция
- •Коммутативна
- •Дистрибутивность map относительно композиции:
- •Преобразование программ
- •Пример1
- •Стратегия для композиции
- •Приведение рекурсивной формы к итеративной форме
- •Введение в лямбда исчисление
- •Синтаксис лямбда исчисления
- •Множество связанных переменных
- •Множество свободных переменных
- •Подстановка
- •Конфликт имен(захват переменных)
- •Преобразование термов
- •Вторая теорема Черча – Россера “Теорема о стандартизации”
- •Комбинатор y
- •Вычислим fact 3
- •Вычислим fact 0
- •(Рассказ про y комбинатор – сразу зачёт)
Предикаты
Предикаты записываются в форме предикатный символ и список термов
P (t1,t2, …, tN)
Между предикатным символом и открывающейся скобкой не должно быть пробела.
По форме предикаты записываются так же как и структуры.
Они отличаются только по смыслу (семантике). Структура – это сложное понятие, сложный терм, а предикат – это функция, область значения которой является множеством из истины и лжи.
Факты
Из предикатов можно строить факты.
Rod(I,f).
Rod(m,f).
Rod(f,p).
Факты это предложения программы, в конце ставится точка.
С помощью предикатов записываются цели, это целевые дизъюнкты. Каждая цель отделяются запятыми.
?- rod(X,Y), rod…..
Правила
Имеют вид: p:- p1, p2, …pn.
Где p1…предикаты
P – голова (заголовок) правила.
P1,pn… тело правила.
Семантика пролога
Вычисление пролог программы заключается в построении доказательства методом резолюций.
Определение. Подстановкой называется множество пар вид а xi/tk, где xi – переменная, а tk – терм, таких что:
a) xi<>xm (переменные не повторяются, что гарантирует однозначность подстановки).
Б) xi не входит в tk
Подстановкой можно конкретизировать формулу.
Пример. Кто общий родитель Анны и Павла ?
?-родитель (X,a), родитель (X,p)
( X / f)
Как происходит сопоставление
Термы сопоставимы если
1 они идентичны
2 они станут идентичными, если к ним применить подстановку
Термы pnt(X,15) и pnt(X1, Y1) сопоставимы с подстановкой {X/X1, Y1/15}
/ - “заменяется, конкретизируется”.
Подстановки обычно обозначают обычно греческими буквами тетта, сигма.
Подстановка сигма является унификатором двух термов t1, t2, если её применение к ним делает их идентичными. Сигма t1, сигма t2.
Подстановка это функция, которая является отображением области переменных на область термов.
Сигма = {X/X1, Y1/15} то эту подстановку можно применить к терму
Сигма (pnt(X, 15)) = pnt(X1, 15)
Сигма (pnt(X1, Y1)) = pnt(X1, 15)
Таким образом мы получили 2 одинаковых терма и значит подстановка сигма явл. унификатором этих 2х термов.
Алгоритм Эрбрана
(bcg lkz cjgjcnfcdktybz термов и он находит наиболее общий унификатор(подстановку), которая делает два атома одинаковыми)
Для заданного множества уравнений вида t1 = t2 выполняем в любом порядке след.действия:
1. Если есть уравнение вида:
А) a=b, где – a и b различные атомарные термы,
Б) a = f, где a – атомарный терм, а f – структура,
В) f(….) = g(…..), где f и g – различные функторы
Г) f(t1,t2,tn) = f(t1,t2,tm) где n<.m, то завершаем алгоритм с неудачей (термы несопоставмы)
2. Если есть уравнение вида X=X, где X – переменная, то удаляем его.
3. Если есть уравнение вида a=a, где a – атом, то удаляем его.
4. Если есть уравнение вида f(tl1, tl2, tln) = f(tr1, t12, t1n) то заменяем уравнениями:
Tl1=tr1, tl2 = tr2, …tln = trn.
(чтобы сопоставить структуры, нужно сопоставить компоненты)
5. Если есть уравнение вида t=X, где X- переменная, а t – не переменная, то заменяем его уравнением вида X=t.
6. Если есть уравнение вида X=t, где Х – переменная, а t – терм, в котором Х не встречается, и если Х встречается в других уравнениях, то заменяем в них каждое вхождение X на t.
7. Если есть уравнение вида X=t, где Х – переменная, а t- не переменная, но содержит переменную X, то завершаем алгоритм с неудачей (positive occurs check).
8. Если никакой другой шаг не применим, то успешно завершаем алгоритм.
Есть у нас список целей Кв.всеоб. g1,g2,gn.
Это дизъюнкт который имеет все эти….Есть правило вида кВ.всеоб. p:- p1,p2,pn.
Все переменные связаны квантором всеобщности. P – положительная литера, g1 отрицательная. Если раскроем g1 будет предикато pg1 (t1g1, t2g1, tng1g1).
Точно также предикат p = p (t1,t2,tn)
Количество термов должно быть одинаковым и соответ.термы должны быть сопоставимы. Эта сопоставимость может быть задана уравнениями.
T1g1 должно быть сопоставимо с t1
T1g1 с t2
И т.д.
Tng1g1 с tn
Эти данные явл .входными параметрами для алгоритма унификации.
Пусть этот алгоритм выдал некую подстановку сигма и в результате применения правила резолюции ……
G1 с P соединяется и вместо p заменяем
P1,p2,pn потом g2,…gn. Новый список целей и к нему применяется подстановка сигма.
………….
Исходными данными явл. множество уравнений вида t1=…
Этот алгоритм не детерминированный, можно в любом порядке применять действия к равенствам пока не получим результата желаемого.
…..
Разберем алгоритм.
Рассмотрим первый случай А), если есть уравнение вида a=b, где a b различные атомарные термы
Б)…
В)…
Г)…
См.выше.
2) Удаляем .т.к. никакого смысла не несет
3) а=а всегда, поэтому исключается
Алгоритм Эмбрана всегда завершается, а если….
Примеры
1. { f(X,g(Y)) = f(g(Z), Z) }
(по 4) => {X=g(Z), g(Y) = Z }
По (5) => {X=g(Z), Z=g(Y) }
По 6 => {X=g(g(Y)), Z=g(Y) }
Получили НОУ ():
{X / g(g(Y)), Z/ g(Y) }
2.
{ f(X,g(X), b = f(a,g(Z), Z}
По 4 => {X=a, g(X)=g(Z), b=Z }
По 6 => {X=a, g(a)=g(Z), b=Z }
По 5 => {X=a, g(a)=g(Z), Z=b }
По 6 => {X=a, g(a)=g(b), Z=b }
По 4 => {X=a, a=b, Z=b }
По 1.а => неудача.