Логическое программирование (Prolog)

Содержание

Слайд 2

Что будем изучать Принципы логического программирования Математическая теория в основе логического

Что будем изучать

Принципы логического программирования
Математическая теория в основе логического программирования –

логика предикатов, логический вывод, вывод типов
Семантика языков логического программирования, вопросы реализации
Языки логического программирования:
Prolog
Mercury
Слайд 3

Что понадобится? Любая СП Prolog, поддерживающая «классический» Эдинбургский синтаксис: GNU Prolog

Что понадобится?

Любая СП Prolog, поддерживающая «классический» Эдинбургский синтаксис:
GNU Prolog (http://www.gprolog.org)
Система на

базе .NET
P#
Prolog.NET (http://prolog.hodroj.net)
Strawberry Prolog (http://www.dobrev.com)
Слайд 4

Что нас ждет? Лекции Семинары Лабораторные работы (4 шт.) выполняются самостоятельно Самостоятельная работа Доклады Обсуждения Экзамен

Что нас ждет?

Лекции
Семинары
Лабораторные работы (4 шт.)
выполняются самостоятельно
Самостоятельная работа
Доклады
Обсуждения
Экзамен

Слайд 5

Критерии оценки Экзамен (письменный, 5 вопросов) – 80% Лабораторные работы –

Критерии оценки

Экзамен (письменный, 5 вопросов) – 80%
Лабораторные работы – 20%
Самостоятельная работа

(доклады, выступления на семинарах, вопросы, дополнительная работа) – 20%
Слайд 6

Варианты самостоятельной работы Научно-исследовательская работа Выполнение полу-исследовательского проекта Выступление с докладом (15-20 мин.)

Варианты самостоятельной работы

Научно-исследовательская работа
Выполнение полу-исследовательского проекта
Выступление с докладом (15-20 мин.)

Слайд 7

Источники

Источники

Слайд 8

Источники Сошников Д.В., Парадигма логического программирования Братко И. Программирование на языке

Источники

Сошников Д.В., Парадигма логического программирования
Братко И. Программирование на языке Пролог для

искусственного интеллекта. пер. с англ. – М.: Мир, 1990.
Bratko I. Programming in Prolog for Artificial Intelligence (3rd edition), Addison-Wesley Publishers, 2001.
Клоксин У., Меллиш К. Программирование на языке Пролог. – М.: Мир, 1987.
Хоггер К. Введение в логическое программирование: Пер. с англ. -М.: Мир, 1988.
Набебин А.А. Логика и Пролог в дискретной математике. – М.: Изд-во МЭИ, 1996.
Малпас Дж. Реляционный язык Пролог и его применение: Пер. с англ. -М.: Наука, 1990.
Стерлинг Х., Шапиро Э. Искусство программирования на языке Пролог: Пер. с англ. - М.: Мир, 1990.
Слайд 9

Введение в Пролог и логическое программирование

Введение в Пролог и логическое программирование

Слайд 10

Рассмотрим пример speciality(X,tech_translator) :- studied_languages(X),studied_technical(X). speciality(X,programmer) :- studied(X,mathematics),studied(X, compscience). speciality(X,lit_translator) :-

Рассмотрим пример

speciality(X,tech_translator) :- studied_languages(X),studied_technical(X).
speciality(X,programmer) :-
studied(X,mathematics),studied(X, compscience).
speciality(X,lit_translator) :- studied_languages(X),studied(X,literature).
studied_technical(X) :- studied(X,mathematics).
studied_technical(X)

:- studied(X,compscience). studied_languages(X) :- studied(X,english).
studied_languages(X) :- studied(X,german).
studied(petya,mathematics). studied(vasya,german).
studied(petya,compscience). studied(vasya,literature).
studied(petya,english).

Факты

Правила

Слайд 11

Как это выглядит?

Как это выглядит?

Слайд 12

Механизм логического вывода

Механизм логического вывода

Слайд 13

Дерево И-ИЛИ

Дерево И-ИЛИ

Слайд 14

Дерево И-ИЛИ (продолжение)

Дерево И-ИЛИ (продолжение)

Слайд 15

Дерево вывода

Дерево вывода

Слайд 16

Дерево вывода (продолжение)

Дерево вывода (продолжение)

Слайд 17

Механизм работы логического интерпретатора Запрос (целевое утверждение) сопоставляется (унифицируется) с головами

Механизм работы логического интерпретатора

Запрос (целевое утверждение) сопоставляется (унифицируется) с головами имеющихся

в программе правил и фактов.
Начиная с первого найденного правила, целевое утверждение подменяется правой частью правила (с учетом замены переменных)
Если встречается неуспех (правило не находится), то происходит откат (backtracking)
Слайд 18

Какое отношение это имеет к логике? speciality(X,tech_translator) :- studied_languages(X),studied_technical(X).

Какое отношение это имеет к логике?

speciality(X,tech_translator) :- studied_languages(X),studied_technical(X).

Слайд 19

Дедуктивные базы данных В приведенном выше примере можно условно выделить базу

Дедуктивные базы данных

В приведенном выше примере можно условно выделить базу фактов

(кто какой предмет изучал) и базу правил
Дедуктивные базы данных – это базы данных, снабженные средствами логического программирования для вывода дополнительных фактов
Примеры: Mercury, Datalog
Слайд 20

Более сложный пример Автоматическое построение учебных планов Опишем зависимости между дисциплинами:

Более сложный пример

Автоматическое построение учебных планов
Опишем зависимости между дисциплинами:
depends(lin_alg, math_logic)
depends(logic_prog, math_logic).
depends(compscience,

lin_alg).
Опишем требуемые для специальности дисциплины:
requires(programmer, compscience).
Как понять, что должен изучать программист?
Слайд 21

Более сложный пример (продолжение) Что видите интересного в этом примере? need_to_study(S,D)

Более сложный пример (продолжение)

Что видите интересного в этом примере?

need_to_study(S,D) :- requires(S,D).
need_to_study(S,D)

:- need_to_study(S,X),
depends(X,D).

Рекурсия
Та же предметная область (дисциплины, специальности) описана в других терминах
Напоминает нормальные формы БД?

Слайд 22

Классический пример

Классический пример

Слайд 23

Как можно описать предметную область? father(nicholas_ii,olga_1). father(nicholas_ii,tatyana). mother(alexandra_fedorovna_1,olga_1). mother(alexandra_fedorovna_1,tatyana). parent(nicholas_ii,olga_1). parent(alexandra_fedorovna_1,olga_1).

Как можно описать предметную область?

father(nicholas_ii,olga_1).
father(nicholas_ii,tatyana).
mother(alexandra_fedorovna_1,olga_1).
mother(alexandra_fedorovna_1,tatyana).

parent(nicholas_ii,olga_1).
parent(alexandra_fedorovna_1,olga_1).
parent(nicholas_ii,tatyana).
parent(alexandra_fedorovna_1,tatyana).
male(nicholas_ii).
female(alexandra_fedorovna_1).
father(X,Y) :- parent(X,Y), male(X).
mother(X,Y) :- parent(X,Y), female(X).

parents(nicholas_ii,alexandra_fedorovna_1,olga_1).
parents(nicholas_ii,alexandra_fedorovna_1,tatyana).

parents(nicholas_ii,alexandra_fedorovna_1,olga_1). F1parents(nicholas_ii,alexandra_fedorovna_1,tatyana).


parents(nicholas_ii,alexandra_fedorovna_1,olga_1). F1parents(nicholas_ii,alexandra_fedorovna_1,tatyana).

Какие достоинства и недостатки у каждого из таких способов описания?