Android-приложение для поиска дешевых авиабилетов: play.google.com
Главная -> Классическая логика

0 1 2 3 4 5 6 7 8 9 10 11 12 [13] 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33

Логическая программа задает множество следствий, которые являются результатом программы. Выполнение логической программы - это вывод следствия из нее.

Для выполнения программы требуется обратиться с целевым запросом (целью), который представляет собой последовательность формул вида

Rl{Ui, ...,иш),-, Rp{Ul, ,Um); (2.7)

где Rj{ui, ...,Um) - атомарные формулы логики первого порядка, буквы щ - термы.

Выполнение программы состоит в попытке решить задачу, т.е. доказать целевое утверждение (2.7), используя факты и предположения Л/i, ...,Мт,Wi,VVd, заданные в логической программе.

Описанные конструкции логического программирования семантически интерпретируются в логике предикатов. Процедура интерпретации состоит в сопоставлении формулам логической программы формул логики предикатов.

Для этого каждому факту (2.4) ставится в соответствие формула

y = yxi...yx,Pih,-,tn), (2.8)

где кванторы общности навешены на все переменные xi, ...,Ха атомарной формулы (2.4), входящие в термы tj (кроме переменных, в термах могут быть и константы).

Правилу (2.5) ставится в соответствие формула вида

g = \fyi...\fyr{Q,{8i,-,Sl)L...LQ,n{s,,...,8l)Q{8l,...,8l)), (2.9)

где кванторы общности, как и выше, навешены на все переменные, входящие в термы Si-

Запрос (2.7) получит в соответствие формулу

Hz = \/Zl...\/Zd{Ri{ui,...,Uru)L...LRp{ui,...,Uru)), (2.10)

где кванторы существования связывают все переменные.

Пусть Ji,...,Ja - формулы, соответствующие всем фактам, Gi,Gb - всем правилам. Тогда значение пары <программа, за-прос> есть утверждение о том, что формула Tiz есть логическое следствие формул .Fi,.Fa, 5i,5ь. Для того чтобы выяснить, так jm это, применяется метод резолюций.



Логическое программирование предполагает наличие логической машины, называемой интерпретатором, который осуш,е-ствляет процесс логического вывода. Механизм этого вывода использует процедуру унификации, на которой основан метод резолюций в логике предикатов (см. § 1.3.2).

Рассмотрим действия интерпретатора на примере следующей логической программы:

R{a,b). Q{b,g{c)).

Pix,fiy)):-Rix,z),Qiz,fiy)). (2.11)

P{x,f{y)):-R{x,z),Q{z,g{y)).

R{x,z):-Q{f{x),G[z)).

Здесь a, b,c,d- константы, x,y, z - переменные.

Предпсиюжим, что целевой запрос есть формула

P{u,f{v)). (2.12)

При вычислении ответа на этот запрос интерпретатор формулирует цель Р{и, f{v)) и пытается достичь ее, унифицируя цель с фактами. В нашем случае цель Р{и, f{v)) не унифицируется ни с одним из фактов. Тогда интерпретатор пытается ее унифицировать с заголовком одного из правил.

Это возможно с заголовком первого правила при подстановке < х\и >,< y\v >. Но надо предварительно проверить истинность предположений первого правила. Для этого интерпретатор формирует запрос

Rix,z),Qiz,fiy)).

Цель R{x, z) достигается за счет унификации с первым фактом с помощью подстановки <а;а>,<гЬ>.В таком случае, следую шдм запросом является Q{b, f{y)). Но эта цель не достижима, поскольку не унифицируется ни с одним из фактов.

Интерпретатор возвращается к цели R{x, z) и обращается к второму правилу.

Теперь интерпретатор делает запрос:

R{x,z),Q{z,g{y)).

Цель R{x,z) достигается, как мы знаем, унификацией с первым фактом при подстановке < х\а >,< z\b >, а цель Q{b, д{у)) достигается в силу того, что унифицируется со вторым фактом с помощью



подстановки < у\с >. Следовательно, цель (2.12) достигается подстановкой < и\а >,< v\c >. Поэтому интерпретатор на этом может закончить работу и выдать найденную подстановку. Выполнение программы считается успешно завершенным; при этом виден пример доказательства формулы (2.12).

2.6.2. Языки логического программирования

Для peajm3anHH идей логического программирования разработаны различные языки логического программирования. Первым и наиболее известным является язык PROLOG.

В TURBO PROLOG структура логической программы имеет следующий вид:

domains <структуры и типы даншлх>

global domains <внешние структуры и типы данных>

data base <глобальные предикаты динамической базы данных>

predicates <определение предикатов>

global predicates < внешние предикаты >

goal <цели>

clauses <факты и правила>

Пример 2.1. Логическая программа для выяснения родственных связей: domains name=Symbol predicates parent {паше,паше) father{name,name) mother{name,name) grandfather(name,name) grandmather(name,name)

clauses

шother(oля,пeтя).

father(THMyp,neTH).

father{тимyp,лeнa).

шother{ликa,киpилл).

шother(ликa,викa).

father(cepreй,киpилл).

mother(жeня,иpa).

father(тoля,фeдя).

father(тoля,иpa).

parent{X,Y):- mother{X,Y),father{X,Y). grandfather{X,Y):- father{X,Z),parent{Z,Y). grandmather(X,Y):- mother(X,Z),parent{Z,Y).



0 1 2 3 4 5 6 7 8 9 10 11 12 [13] 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33



0.0118
Яндекс.Метрика