Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ФиЛП_материалы / Материалы / Prolog / ПособиеПролог.doc
Скачиваний:
55
Добавлен:
01.06.2015
Размер:
449.02 Кб
Скачать

1.4. Другие разделы программы

Кроме перечисленных, в программе на VIP могут быть следующие разделы.

Раздел констант. Эта секция определяет константы, используемые в программе, например:

CONSTANTS

b = 1

c = 10.5

язык = английский

Допустимо объявить один объект через другой, объявленный ранее:

CONSTANTS

b = 10

a = b

При объявлении констант надо учитывать следующие обстоятельства:

в именах констант различаются строчные и прописные буквы;

константа должна быть описана до первого обращения к ней;

нельзя определить константу через саму себя.

В разделах global domain и global predicates определяются глобальные домены и предикаты, которые позволяют строить межмодульные интерфейсы.

Раздел с наименованием facts содержит определение предикатов внутренней базы данных (см. разд. 6).

Все разделы в программе, кроме goal, могут повторяться несколько раз. Порядок следования разделов в общем случае произвольный при следующих ограничениях:

типы аргументов, используемые в разделе predicates, должны быть ранее описаны в разделе domains;

имена и аргументы предикатов должны быть описаны в разделе predicates раньше, чем будут использованы в clauses;

описание одного конкретного предиката обязательно в одной секции clauses и не может быть разнесено по нескольким секциям.

Заметим, что необходимым разделом в программе на VIP является раздел цели.

Упражнения

Сформулируйте правило c заголовком «сестра (X,Y)» на

основании следующих утверждений:

X является сестрой Y, если

X является женщиной;

X имеет мать W и отца Z;

Y имеет тех же родителей.

2. Как называется способ автоматического доказательства истинности правил в Прологе?

3. Как в Прологе записывается структура и что она отражает?

4. Что содержит раздел domains в программе на Visual Prolog? Какой раздел должен обязательно присутствовать в программе?

2. Механизмы доказательства правил

В рассмотренных выше примерах декларативное значение программ позволяет установить, является ли заданная цель успешной, а в случае положительного ответа – при каких значениях переменных она является таковой. Но практически всегда важно знать, как именно происходит поиск решения в системе. Это тот аспект программ, который называется процедурным. И в традиционном Прологе и в VIP он одинаков с небольшими различиями.

2.1. Сопоставление с откатом

Прежде чем рассматривать процесс доказательства правила рассмотрим основную операцию, которая при этом используется в Прологе. Такой операцией является унификация (unification).

В исчислении высказываний два высказывания равносильны, если они синтаксически одинаковы. Унификация в доказательстве теорем – алгоритм поиска таких подстановок значений переменных в предикатах, что они становятся равносильными.

Наряду с термином унификация в Прологе употребляют термин « сопоставление с образцом» (matching). При этом говорят о подстановке как о связывании (binding) или конкретизации переменных какими-либо значениями.

Операция сопоставления при доказательстве цели выполняется над двумя термами, одним из которых является цель или подцель правила, а другой – факт или заголовок другого правила в базе знаний. Унифицироваться могут только термы с одинаковым именем и количеством аргументов. Если для подцели не найден в БЗ ни один такой терм, то сопоставление неуспешно (fail).

Если имена и количество аргументов двух термов совпадают, то сопоставление может закончиться успехом (success) в следующих случаях:

если переменная X цели и переменная Y в предложении базы знаний конкретизированы одинаковыми значениями;

если X – свободная переменная, а Y – конкретизирована; в результате X конкретизируется значением Y.

если X – конкретизирована, а Y – свободная переменная; в результате Y конкретизируется значением X;

если X и Y – cвободные переменные; в результате X и Y становятся сцепленными переменными: изменение значения одной из них, в том числе конкретизация влечет такое же изменение значения другой.

Примеры сопоставлений приведены в табл. 1.

Доказательство тела правила выполняется последовательным сопоставлением каждой подцели, начиная с левой, с предложениями БЗ. При этом система с помощью других правил заменяет текущие цели новыми до тех пор, пока не обнаружится, что новые цели сопоставимы или не сопоставимы с фактами. База знаний для каждой подцели просматривается сверху вниз. Если какая-либо подцель не может быть сопоставлена с фактом, то система выполняет операцию отката (backtracking). Суть ее состоит в том, что при неуспехе сопоставления текущего предиката система возвращается к сопоставлению предыдущей подцели с другим предложением БЗ и получением нового набора значений переменных, отличного от того, который имелся перед откатом. Если пересопоставление произошло успешно, то система переходит к текущей подцели. Если нет, откатывается на предпредыдущую подцель. В результате при поиске решения в общем случае перебираются все возможные наборы значений переменных, на которых может быть достигнуто решение.

Таблица 1

Цель или подцель

Факт или заголовок правила в БЗ

Сопоставление

Конкретизация

дата(Число,

Месяц, Год)

дата(15,

декабрь, 2010)

успех

Число <–15

Месяц<– декабрь

Год<– 2010

дата(Число,

Месяц, 2009)

дата(15,

декабрь, 2010)

неуспех

нет

расстояние

(точка(X ,Y),

точка(36, 18))

расстояние

(точка (12, 20),

точка(36, 18))

успех

X <– 12

Y <–20

расстояние

(точка (X, X), точка(36, 18))

расстояние

(точка (12, 20), точка(42, 20))

неуспех

нет

Расстояние

(X,Y)

расстояние

(точка (12, 20), точка(36, 18))

успех

X<–точка

(12, 20)

Y<–точка

(36, 18)

не_опасайтесь

(пудель)

не_опасайтесь

(X)

успех

X<– пудель

не_опасайтесь

(Y)

не_опасайтесь

(X)

успех

X <–>Y

При успешном сопоставлении подцели с предложением БЗ система ставит маркер на этом предложении, причем для каждой подцели существует свой маркер. Поиск подходящего предложения для сопоставления каждой подцели производится от начала БЗ или от маркера, поставленного в БЗ для этой подцели ранее в процессе доказательства.

Для рассмотрения процесса доказательства правила запишем базу знаний, аналогичную по структуре с «хищник», но с другими именами фактов и правила.

a(n1).

a(n2).

b(n1, n2).

c(X): - a(X), a(Y), b(X,Y).

Цель с(X).

1. Сопоставление цели «с» с головой правила увенчалось успехом. Система переходит к доказательству правила. Все переменные в правиле свободные.

2. Подцель а(Х) успешно сопоставляется с фактом а(n1), в результате переменная Х связывается с константой n1. Для этой подцели система ставит маркер на этом факте. Происходит переход на доказательство следующей подцели.

3. Для выполнения сопоставления a(Y) просматривается вся БЗ. Система делает отметку на факте a(n1). В результате переменная Y конкретизируется константой n1. Доказана 2-я подцель.

4. В третьей подцели обе переменные конкретизированы n1, поэтому для сопоставления подцели система ищет предложение b(n1, n1). Так как в БЗ такого факта нет, то третья подцель с этими значениями переменных не может быть доказана.

5. Система ищет другие варианты сочетания значений переменных X и Y.Для этого выполняется откат – возврат на предыдущую подцель а(Y); производится попытка доказать ее второй раз (пересопоставить).

6. Подцель a(Y) сопоставляется с фактом a(n2). Переменная Y конкретизируется константой n2.

7. Система переходит к третьей подцели и ищет в БЗ факт b(n1, n2). Такой факт существует, вследствие чего третья подцель считается доказанной.

8. Из доказательства существования всех подцелей следует доказательство существования цели, выраженной предикатом «с» со значением n1. Так как его в БЗ нет, то говорят, что он создан и может быть использован в программе. Действия системы при доказательстве правила сведены в табл. 2.

Таблица 2

Доказательство a(X)

Доказательство a(Y)

Доказательство b(X, Y)

Доказазательство с(X)

Действия системы

Доказана ?

Значение X

Доказана ?

Значение Y

Доказана?

Доказана?

 

да

n1

да

n1

нет

Откат и пересо-

поставление a(Y)

да

n1

да

n2

да

да

Выход из правила

Говоря языком логики, заданная система аксиом непротиворечива и Пролог автоматически доказал теорему, используя механизм сопоставления и отката.

В приведенном примере цель существует при одном сочетании переменных. Для предыдущих целей «осторожно» и «не_опасайтесь» таких сочетаний по два. В последнем случае говорят, что для достижения цели существует несколько решений (solutions). В традиционном Прологе все решения получаются без каких-либо дополнительных программных средств; при этом на экран выводится сообщение «yes» или значения переменных, включенных в заголовок правила, и количество решений. (В нашем случае Х=n1 1 solution). В общем случае традиционный Пролог совершает полный перебор фактов, независимо от того, имеется в системе одно или несколько решений. VIP ограничивается набором значений переменных, на котором достигается одно (первое) решение. Для того чтобы он мог обнаружить другие, требуются специальные программные средства, такие, как искусственный откат (см.подразд. 4.1). Кроме того, для вывода значений переменных в программе на VIP необходимо ввести системные предикаты вывода, например, write.

(В Visual Prolog 5.1 существует отладочный режим Test Goal, при использовании которого моделируется поведение интерпретатора.)

Изменим систему аксиом так, чтобы доказательство оказалось невозможным. Для этого вместо, например, факта b(n1, n2) запишем факт b(n2, n3). (В исходной предметной области это может означать, например, замену факта «ecт (волк, заяц)» на «ест (заяц, капуста)». Правило оставляем то же. Описание действий системы приведены в табл. 3.

Таблица 3

Доказательство a(X)

Доказательство a(Y)

Доказательство b(X, Y)

Доказательство с(X)

Действия системы

Доказана ?

Значение

Доказана ?

Значение Y

Доказана?

Доказана?

 

X

да

n1

да

n1

нет

Откат и пересопоставление a(Y)

да

n1

да

n2

нет

Откат и пересопоставление a(X), освобождение Y

да

n2

да

n1

нет

Откат и пересопоставление a(Y)

Окончание табл.3

Доказательство a(X)

Доказательство a(Y)

Доказательство b(X, Y)

Доказательство с(X)

Действия системы

Доказана ?

Значение

Доказана ?

Значение Y

Доказана?

Доказана?

 

X

да

да

n2

нет

Откат и пересопоставление a(Х)

n2

 

нет

нет

Выход из правила

Таким образом, доказано, что система аксиом противоречива и сформулированная цель не может быть досигнута.

В процессе доказательства были перебраны и все возможные сочетания значений переменных в предикатах БЗ. По своей сути процесс доказательства правила представляет собой поиск в глубину. Поэтому механизм действия Пролога иногда называют поиском в глубину с возвратом.

Не все предикаты правила в конкретной программе могут пересопоставляться при откате. Не пересопоставляются так называемые детерминированные (determ), т.е. такие, которые могут завершиться неудачно или успешно с одним решением. Недетерминированные (nondeterm) предикаты могут завершиться неудачно или успешно многими способами. В частности, в нашем случае недетерминированными являются голова правила и его первый предикат а(X). При объявлении предиката можно указывать атрибут nondeterm или determ.

PREDICATES

nondeterm a(symbol)

b(symbol,symbol)

nondeterm c(symbol)

CLAUSES

a(n1).

a(n2).

b(n3, n4).

c(X):- a(X), a(Y), b(X,Y).

GOAL

c(X).

Отказ от указания атрибутов приводит к появлению соответствующих предупреждений компилятора. (Предупреждения можно подавить, изменив опции компилятора в VIP 5.1 Options/Project/Compiler options.) Заметим, что стандартные предикаты являются детерминированными.

Соседние файлы в папке Prolog