
Добавил:
Upload
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:
ЛЕКЦИЯ 3
21.09.12
Пролог-программа состоит из набора фактов и набора правил. Этот набор фактов представляет собой некотороую теорию, из которой на базе механизма редукций строится логический вывод о том, является ли указанное утверждение следствием теории, т.е. будет ли оно справедливо на всех моделях теории. Базовый механизм -- механизм редукций.
ПРИМЕР
Факты:
z.
s.
t.
y.
v.
w.
Правила:
y & w -> x
Правила в Прологе -- импликации вроде написанной выше. Остальное -- факты. Правила будем писать так:
x:- y, w
Логическая связка "и" в Прологе -- запятая ","
"или" -- точка с запятой ";". Покамест запрещено. (!!!)
Итак, теория:
z.
s.
t.
y.
v.
w.
x:- y,w
y:- u,z
r:- z
f:- y,z
g:- r,s,t
Прямая цепочка рассуждений
Просматриваем все правила по порядку сверху вниз. Если правая часть правила истинна для данного набора фактов, то этот факт записывается в базе фактов. Так получаем все возможные факты.
Просмотрев теорию, к набору фактов добавляем:
1 шаг
y.
r.
2 шаг
x.
f.
g.
3 шаг
Никаких новых фактов не получим.
Т.о., y, r, x, f, g -- следствия из нашей теории.
Недостатки метода:
- Количество фактов растёт очень быстро (как правило, экспоненциально).
- По ходу дела получаем много фактов, которые нас не интересуют.
Обратная цепочка рассуждений
Объяснение на примере (см.выше):
Берём х, смотрим на набор фактов. Среди них х нет.
Смотрим на набор правил, причём выбираем только те, где в левой части стоит х. Для его истинности нужно, чтобы были истинны у и w. И т.д.
х
+ у w
u z +
+ +
В итоге все факты выполняются. Значит, х -- следствие теории.
Преимущества:
- Не строим лишних фактов, не просматриваем все правила теории.
- Дерево вывода просто строится алгоритмичесаки, процедура легко автоматизируется.
Так и работает Пролог-система.
Пример 2
x:- y,w
x:- s,t
Может быть несколько правил, в левой части которых фигурирует тот же самый предикат.
Если правил несколько и если мы не найдём решений, двигаясь по первому пути, то мы пойдём по второму.
х
^ ("или")
/ \
у w s t
...
Вначале строится такое дерево, потом осуществляется обход этого дерева, слева направо, снизу вверх. Если какая-либо из ветвей "или" доказана, то тогда остальные ветви "или" просто отбрасываются.
Все Пролог-системы имеют встроенный механизм трассировки. ЕГО СЛЕДУЕТ ВКЛЮЧАТЬ!!! Даже для простейших задач. Т.о. мы будем видеть, как строится подобное дерево, последовательность вызовов. (Единственный реальный механизм отладки программ в Прологе.)
В Прологе можно получить не одно решение задачи, а все.
ПРОЛОГ
Есть два типа данных: числа и символы.
Атом -- это есть строка символов, начинающаяся со строчной (маленькой) буквы или со знака "_", или заключённая в кавычки (одинарные или двойные -- в зависимости от версии Пролога).
Примеры:
катя, _Катя, "список отличников"
Числа и атомы могут образовывать некие структуры.
Структура -- это есть конструкция вида:
структура ::= имя_структуры(перечень параметров структуры)
Разделителем в перечне является запятая. Имя структуры -- атом.
Пример:
дата(22, сентябрь, 2012)
Количество элементов в перечне называется арностью структуры.
Элементом перечня структуры может быть структура, т.е. структуры могут быть составными.
Список -- конструкция вида:
[перечень элементов списка]
Элементы списка могут быть любыми, в т.ч. списки, структуры.
Отличия списка и структуры:
1. список не имеет имени, а структура имеет;
2. в списке может быть любое количество элементов.
Переменная
Начинается всегда с _БОЛЬШОЙ_ буквы.
Пример:
Катя, Х
Специальная переменная: _
Называется анонимной переменной (подробнее позже).
Лексический диапазон переменной: одно предложение. Это значает, что переменная имеет своё значение только в одном предложении. Значит, в разных предложениях одна и та же буква обозначает совершенно разные вещи (по смыслу, значению, содержанию, формату).
Диапазон жизни переменной: время обработки предложения, в котором она есть. Обработка предложения завершена -- переменная исчезает и никак не сохраняется в памяти.
Переменные могут быть:
1. свободными -- не имеют _никакого_ значения
2. связанными -- уже получили какое-то значение
Связывание переменных совершается через процедуру унификации:
- константа сопоставляется (унифицируется) с такой же константой;
- переменная унифицируется с любой константой (получает значение этой константы, изменить это значение никак нельзя);
- две переменные унифицируются друг с другом, но с момента связывания любые изменения одной из них автоматически приводят к точно таким же изменениям второй.
Текст программы может состоять из фактов и из правил. Факты не могут иметь свободных переменных.
Правила в Прологе имеют знакомую нам структуру:
A:-B,C,D
где А, B, C, D -- некие структуры. А называют заголовком, или целью, правила, а B, C, D -- подцелью.
___________________________________________________
21.09.12
Пролог-программа состоит из набора фактов и набора правил. Этот набор фактов представляет собой некотороую теорию, из которой на базе механизма редукций строится логический вывод о том, является ли указанное утверждение следствием теории, т.е. будет ли оно справедливо на всех моделях теории. Базовый механизм -- механизм редукций.
ПРИМЕР
Факты:
z.
s.
t.
y.
v.
w.
Правила:
y & w -> x
Правила в Прологе -- импликации вроде написанной выше. Остальное -- факты. Правила будем писать так:
x:- y, w
Логическая связка "и" в Прологе -- запятая ","
"или" -- точка с запятой ";". Покамест запрещено. (!!!)
Итак, теория:
z.
s.
t.
y.
v.
w.
x:- y,w
y:- u,z
r:- z
f:- y,z
g:- r,s,t
Прямая цепочка рассуждений
Просматриваем все правила по порядку сверху вниз. Если правая часть правила истинна для данного набора фактов, то этот факт записывается в базе фактов. Так получаем все возможные факты.
Просмотрев теорию, к набору фактов добавляем:
1 шаг
y.
r.
2 шаг
x.
f.
g.
3 шаг
Никаких новых фактов не получим.
Т.о., y, r, x, f, g -- следствия из нашей теории.
Недостатки метода:
- Количество фактов растёт очень быстро (как правило, экспоненциально).
- По ходу дела получаем много фактов, которые нас не интересуют.
Обратная цепочка рассуждений
Объяснение на примере (см.выше):
Берём х, смотрим на набор фактов. Среди них х нет.
Смотрим на набор правил, причём выбираем только те, где в левой части стоит х. Для его истинности нужно, чтобы были истинны у и w. И т.д.
х
+ у w
u z +
+ +
В итоге все факты выполняются. Значит, х -- следствие теории.
Преимущества:
- Не строим лишних фактов, не просматриваем все правила теории.
- Дерево вывода просто строится алгоритмичесаки, процедура легко автоматизируется.
Так и работает Пролог-система.
Пример 2
x:- y,w
x:- s,t
Может быть несколько правил, в левой части которых фигурирует тот же самый предикат.
Если правил несколько и если мы не найдём решений, двигаясь по первому пути, то мы пойдём по второму.
х
^ ("или")
/ \
у w s t
...
Вначале строится такое дерево, потом осуществляется обход этого дерева, слева направо, снизу вверх. Если какая-либо из ветвей "или" доказана, то тогда остальные ветви "или" просто отбрасываются.
Все Пролог-системы имеют встроенный механизм трассировки. ЕГО СЛЕДУЕТ ВКЛЮЧАТЬ!!! Даже для простейших задач. Т.о. мы будем видеть, как строится подобное дерево, последовательность вызовов. (Единственный реальный механизм отладки программ в Прологе.)
В Прологе можно получить не одно решение задачи, а все.
ПРОЛОГ
Есть два типа данных: числа и символы.
Атом -- это есть строка символов, начинающаяся со строчной (маленькой) буквы или со знака "_", или заключённая в кавычки (одинарные или двойные -- в зависимости от версии Пролога).
Примеры:
катя, _Катя, "список отличников"
Числа и атомы могут образовывать некие структуры.
Структура -- это есть конструкция вида:
структура ::= имя_структуры(перечень параметров структуры)
Разделителем в перечне является запятая. Имя структуры -- атом.
Пример:
дата(22, сентябрь, 2012)
Количество элементов в перечне называется арностью структуры.
Элементом перечня структуры может быть структура, т.е. структуры могут быть составными.
Список -- конструкция вида:
[перечень элементов списка]
Элементы списка могут быть любыми, в т.ч. списки, структуры.
Отличия списка и структуры:
1. список не имеет имени, а структура имеет;
2. в списке может быть любое количество элементов.
Переменная
Начинается всегда с _БОЛЬШОЙ_ буквы.
Пример:
Катя, Х
Специальная переменная: _
Называется анонимной переменной (подробнее позже).
Лексический диапазон переменной: одно предложение. Это значает, что переменная имеет своё значение только в одном предложении. Значит, в разных предложениях одна и та же буква обозначает совершенно разные вещи (по смыслу, значению, содержанию, формату).
Диапазон жизни переменной: время обработки предложения, в котором она есть. Обработка предложения завершена -- переменная исчезает и никак не сохраняется в памяти.
Переменные могут быть:
1. свободными -- не имеют _никакого_ значения
2. связанными -- уже получили какое-то значение
Связывание переменных совершается через процедуру унификации:
- константа сопоставляется (унифицируется) с такой же константой;
- переменная унифицируется с любой константой (получает значение этой константы, изменить это значение никак нельзя);
- две переменные унифицируются друг с другом, но с момента связывания любые изменения одной из них автоматически приводят к точно таким же изменениям второй.
Текст программы может состоять из фактов и из правил. Факты не могут иметь свободных переменных.
Правила в Прологе имеют знакомую нам структуру:
A:-B,C,D
где А, B, C, D -- некие структуры. А называют заголовком, или целью, правила, а B, C, D -- подцелью.
___________________________________________________
Соседние файлы в папке Шумихин