Концепция логического программирования. Программа на языке Пролог. Лекция 1-1

Содержание

Слайд 2

Концепция логического программирования (ЛП) ЛП – программирование в терминах целей. Процедурные

Концепция логического программирования (ЛП)

ЛП – программирование в терминах целей.
Процедурные языки -

«КАК» что-либо делать.
ЛП – «ЧТО» делать.
Программист сообщает, что ему известно (факты и правила) и задает вопросы: больше интересуют знания, меньше – алгоритмы.
Система сама строит дедуктивный вывод.
Слайд 3

Пролог: набор механизмов Сопоставление образцов Древовидное представление структур данных Автоматический возврат

Пролог: набор механизмов

Сопоставление образцов
Древовидное представление структур данных
Автоматический возврат
Программирование в терминах логики:
Декларативная

точка зрения на программирование
Символьная обработка данных
Слайд 4

Пример области знаний «Логика» Если Дэвид интересуется логикой, то он либо

Пример области знаний «Логика»

Если Дэвид интересуется логикой, то он либо запишется

в следующем семестре на занятия по курсу Логика, либо он ленив.
Если Дэвид самостоятельно изучал литературу по логике, то он интересуется логикой.
Дэвид самостоятельно изучал литературу по логике.
Дэвид не ленив.
Слайд 5

Пример «Логика» Оформление знаний в логике высказываний Высказывания Обозначение Дэвид интересуется

Пример «Логика» Оформление знаний в логике высказываний

Высказывания Обозначение
Дэвид интересуется логикой D
Дэвид запишется

в следующем
семестре на занятия по
курсу Логика A
Дэвид не ленив B
Дэвид самостоятельно изучал
литературу по логике C

Формализация знаний:
D ? A V ~B
C ? D
C
B
A - ?

Слайд 6

Пример «Логика» Оформление знаний в логике предикатов Предикат Обозначение X интересуется

Пример «Логика» Оформление знаний в логике предикатов

Предикат Обозначение
X интересуется Y D(X,Y)
X запишется

в следующем
семестре на занятия по
курсу Y A(X,Y)
X не ленив B(X)
X самостоятельно изучал
литературу по Y C(X,Y)
X – некоторое лицо
Y – некоторый предмет (курс)

Формализация знаний:
D(X,Y) ?
A(X,Y) V ~B(X)
C(X,Y) ? D(X,Y)
C(дэвид,логика)
B(дэвид)
A(дэвид,логика) - ?

Слайд 7

Модель на Прологе строится в терминах: объектов и утверждений (предикатов) Простые

Модель на Прологе

строится в терминах:
объектов и утверждений
(предикатов)
Простые Структуры
объекты Факты Правила
(Термы) (Сложные Вопросы
термы)

Слайд 8

Простые объекты (термы) Константы Атомы (со строчной буквы или в кавычках)

Простые объекты (термы)

Константы
Атомы (со строчной буквы или в кавычках)
Char (отдельный

символ в апострофах)
Symbol
String
Числа (целые и вещественные)
Integer
Real
Переменные (с прописной буквы или подчеркивания)
Слайд 9

Утверждения (предикаты) Факт – безусловно истинное утверждение. отсутствие факта означает его

Утверждения (предикаты)

Факт – безусловно истинное утверждение.
отсутствие факта означает его неудачное выполнение!
Правило

– условно истинное утверждение.
Вопрос – обращение к Пролог-программе, определяющее достижимость цели.
Записываются в виде предложений и заканчиваются точкой.
Слайд 10

Факты (объект1,…,объектN). константы Совокупность фактов – база данных.

Факты
<предикат>(объект1,…,объектN).
константы
Совокупность фактов – база данных.

Слайд 11

Пример. Дерево родственных отношений Иван Ольга Елена Петр Алла Борис Вера Игорь Егор

Пример. Дерево родственных отношений


Иван

Ольга

Елена

Петр

Алла

Борис

Вера

Игорь

Егор

Слайд 12

Пример. Предикаты. родитель(иван, ольга). родитель(иван, петр). родитель(елена, ольга). родитель (ольга, вера).

Пример. Предикаты.

родитель(иван, ольга).
родитель(иван, петр).
родитель(елена, ольга).
родитель (ольга, вера).
родитель (ольга, игорь).


родитель (петр, алла).
родитель (алла, борис).
родитель (вера, егор).
Слайд 13

Пример. Вопросы. ? – родитель(иван, ольга). ==> Yes ? – родитель

Пример. Вопросы.

? – родитель(иван, ольга). ==> Yes
? – родитель (Х, вера).

==> X=ольга
? – родитель (борис, _). ==> No
? – родитель (иван, _). ==> Yes
? – родитель (X,Y). ==>
X=иван, Y=петр

8 решений

Анонимная переменная
(значение роли не играет)

Слайд 14

Правила [A] : – [B]. A – заголовок / голова предложения

Правила

[A] : – [B].
A – заголовок / голова предложения
В –

тело правила (может быть пусто): состоит из фактов и правил.
A: – B1,B2,B3,…BN.
«А выполнимо ЕСЛИ выполнимы В1 И В2 И … BN»
Слайд 15

Пример «Логика» Оформление знаний на Прологе Предикат Обозначение X интересуется Y

Пример «Логика» Оформление знаний на Прологе

Предикат Обозначение
X интересуется Y D(X,Y)
X запишется в

следующем
семестре на занятия по
курсу Y A(X,Y)
X не ленив B(X)
X самостоятельно изучал
литературу по Y C(X,Y)
X – некоторое лицо
Y – некоторый предмет (курс)

Формализация знаний:
A(X,Y) :-D(X,Y),B(X).
D(X,Y) :- C(X,Y).
C(дэвид,логика).
B(дэвид).
A(дэвид,логика) - ?

Слайд 16

Пример. Правила родственных отношений отпрыск(X,Y):-родитель(Y,X). женщина(елена). женщина(ольга). мужчина(петр). мужчина(борис). мать(X,Y):-родитель(X,Y),женщина(Х). отец(X,Y):-родитель(X,Y),мужчина(Х). сестра(X,Y):- родитель(Z,X), родитель(Z,Y), женщина(Х). имеет_ребенка(X):-родитель(Х,_).

Пример. Правила родственных отношений

отпрыск(X,Y):-родитель(Y,X).
женщина(елена).
женщина(ольга).
мужчина(петр).
мужчина(борис).
мать(X,Y):-родитель(X,Y),женщина(Х).
отец(X,Y):-родитель(X,Y),мужчина(Х).
сестра(X,Y):- родитель(Z,X), родитель(Z,Y), женщина(Х).
имеет_ребенка(X):-родитель(Х,_).

Слайд 17

Переменные в предложениях. Диапазон имени переменной – одно предложение! Разные предложения – разные переменные!

Переменные в предложениях.
Диапазон имени переменной – одно предложение!
Разные предложения – разные

переменные!
Слайд 18

Процедура Набор правил с одним именем предиката, сгруппированных в одном месте.

Процедура

Набор правил с одним именем предиката, сгруппированных в одном месте.
A:- B,C. ИЛИ
A:-

D. ИЛИ
. . . ИЛИ
A:- Z,S.
Вызов процедур – по очереди, в порядке записи.
Если вызов процедуры успешен – происходит переход к следующей процедуре,
если нет – возврат к ближайшему из предыдущих вызовов.
Слайд 19

Пример. Процедура родственных отношений кузина(X,Y):-родитель(X1,X),родитель(X2,Y), сестра(X1,X2),женщина(Х). кузина(X,Y):-родитель(X1,X),родитель(X2,Y), брат(X1,X2),женщина(Х). можно кузина(S,Y):- женщина(S),родитель(X1,S), родитель(X2,Y),сестра(X1,X2),

Пример. Процедура родственных отношений

кузина(X,Y):-родитель(X1,X),родитель(X2,Y),
сестра(X1,X2),женщина(Х).
кузина(X,Y):-родитель(X1,X),родитель(X2,Y),
брат(X1,X2),женщина(Х).
можно
кузина(S,Y):- женщина(S),родитель(X1,S),
родитель(X2,Y),сестра(X1,X2),

Слайд 20

Унификация термов Два терма унифицируемы (сопоставимы), если: термы абсолютно одинаковы (константы);

Унификация термов

Два терма унифицируемы (сопоставимы), если:
термы абсолютно одинаковы (константы);
1-й терм –

переменная, 2-й – любой атом;
у них одни и те же функтор и арность и все их аргументы сопоставимы (структуры).
женщина(елена) ≅ женщина(Х)
мать(алла, борис) ≅ мать(Х, егор)
родитель(иван, Y) ≅ родитель(иван, ольга)
Слайд 21

Поиск решения Резольвента – множество целей, которые необходимо выполнить. Поиск (начало

Поиск решения

Резольвента – множество целей, которые необходимо выполнить.
Поиск (начало – с

вопроса):
формируется резольвента;
выбирается очередная цель из резольвенты;
ищется предложение в программе, чей заголовок унифицируется с целью;
цель заменяется на тело выбранного предложения;
поиск продолжается с новой резольвентой, полученной из старой.
Завершение поиска:
резольвента пуста – решение найдено;
все предложения просмотрены – решение не найдено.
Слайд 22

Пример поиска решения Программа p(X):-q(X),s(X),r(X). p(X):-u(X). q(a). q(b). s(c). s(b). r(a).

Пример поиска решения

Программа
p(X):-q(X),s(X),r(X).
p(X):-u(X).
q(a).
q(b).
s(c).
s(b).
r(a).
u(d).
u(a).
?- p(a).

Поиск решения
Начальная резольвента: p(a).
1-е предложение: p(X):-q(X),s(X),r(X).
Унификация: X=a.
Новая резольвента:

q(X),s(X),r(X)
После унификации: q(a),s(a),r(a)
… s(a) выполнить не удается
Выбирается 2-е предложение:
p(X):-u(X).
Новое предложение после унификации:
u(a).
- нет тела, резольвента пуста – вычисление заканчивается успешно.
Слайд 23

Общая структура программы [include «файл, добавляемый к модулю»] [global domains] [Domains] [global predicates] Predicates Clauses Goal

Общая структура программы

[include «файл, добавляемый к модулю»]
[global domains]
[Domains]
<описание сложных термов>
[global predicates]
Predicates
<описание

предикатов>
Clauses
<набор правил и фактов>
Goal
<цель – задаваемый вопрос>
Слайд 24

Predicates (тип_арг1, …, тип_аргN). Можно: (тип_арг1 комментарий1, … , тип_аргN комментарийN)

Predicates

<предикат>(тип_арг1, …, тип_аргN).
Можно:
<предикат>(тип_арг1 комментарий1, … ,
тип_аргN комментарийN)
Допустимо многократное объявление

предиката с одним именем, но с разным количеством аргументов или типами данных
Слайд 25

Пример программы «Семейные отношения» predicates parent(Symbol parent, string child) man(string) woman(symbol)

Пример программы «Семейные отношения»

predicates
parent(Symbol parent, string child)
man(string)
woman(symbol)
mother(SYMBOL, SYMBOL)
father(SYMBOL, SYMBOL)
sister(string,string)
brother(string,string)
kuzina(string,string)
clauses
parent(ivan,peter).
parent(ivan,olga).
parent(elena,olga).
parent(peter,alla).
parent(olga,vera). …

man(«ivan»).
man(peter). …
woman(olga).
woman(alla). …
mother(X,Y):-parent(X,Y),woman(X).
father(X,Y):-parent(X,Y),man(X).
sister(X,Y):-parent(Z,Y),parent(Z,X),woman(X).
brother(X,Y):-parent(Z,Y),parent(Z,X),man(X).
kuzina(X,Y):-woman(X),
parent(X1,X),parent(X2,Y),sister(X1,X2).
kuzina(S,Y):-woman(X),
parent(X1,S),parent(X2,Y),brother(X1,X2).
goal
kuzina(vera,alla).

Слайд 26

Сложные термы Структуры Перечислимые термы Списки

Сложные термы
Структуры
Перечислимые термы
Списки

Слайд 27

Структуры S(X1, X2, …, XN) S – имя структуры (функтор). Xi

Структуры

S(X1, X2, …, XN)
S – имя структуры (функтор).
Xi – компоненты

(аргументы) структуры: константы; переменные; структуры.
N – число аргументов (арность).
дата(1, май, 1983)
дата(День, Месяц, Год)
точка(4,2)
треугольник(точка(4,2),точка(6,4),точка(7,1))
Описание структуры:
T = S(X1, X2, …, XN)
T – имя типа (может совпадать с именем структуры)
Слайд 28

Сложные термы (описание) Перечислимые термы T = k1; k2; … kN

Сложные термы (описание)

Перечислимые термы
T = k1; k2; … kN
T – имя

типа
ki – одно из возможных значений
Списки
T = <тип элементов списка>*
Примеры:
direction = north; south; west; east
sp = integer*
list = direction*
list2 = sp*
Слайд 29

«Семейные отношения», структуры данных domains pol = man; woman date =

«Семейные отношения», структуры данных

domains
pol = man; woman
date = day(integer day, integer

month, real year)
ass = string*
predicates
Person (string fam, symbol name, pol, date)
Child (string, ass)
Family (string fam, string name_husband, string
name_wife, ass children)
age_husband (string fam, date data_today, integer age)
Age (date, date, integer)