|
|
Пример 1. Нека в дадената сигнатура да има
само един функционален символ a и нека той е константа. Нека p
е едноместен предикатен символ от сигнатурата и нека P да бъде хорновата
програма, състояща се само от факта
p(a).
Тогава Ербрановият универсум се състои само от константата a
и предикатът, който интерпретира символа p в минималния ербранов
модел за P, приема стойност 1 за въпросната константа. Поради тази
причина атомарната формула
Разглежданията от предходния въпрос имат още и един, макар и малък недостатък - те изискват предположението, че в дадената сигнатура има поне една константа. Сега ще направим някои подобни разглеждания, които няма да изискват подобно предположение, защото ще се занимаваме с разширени ербранови структури, и, което е по-важно, ще доведат до построяване на такъв модел за коя да е дадена логическа програма, че атомарните формули, тъждествено верни в него, са тъждествено верни и във всеки модел за програмата.
Нека P е една хорнова програма. Някои атомарни
формули ще наречем изводими от P. Дефиницията е индуктивна и се
състои от следните две точки:
а) винаги, когато клаузата
A°.
е частен случай на факт от P, атомарната формула A° е
изводима от P;
б) винаги, когато клаузата
A°:-
B1°,
B2°, ..., Bm°.
е частен случай на правило от P и всяка от атомарните формули
Разбира се, ако P не съдържа нито един факт, то никоя атомарна формула не ще бъде изводима от P. В по-интересните случаи някои атомарни формули ще бъдат изводими от P, а други няма да бъдат.
Пример 2. Нека единствените функционални символи
от сигнатурата са два едноместни функционални символа f и m,
а
единственият предикатен символ е един двуместен предикатен символа
d
(интуитивно можем да си представяме, че допустими стойности на променливите
са всевъзможните хора, и да четем
d(X,f(X)).
d(X,m(X)).
d(X,Z) :- d(f(X),Z).
d(X,Z) :- d(m(X),Z).
Атомарните формули, изводими от P, могат да бъдат охарактеризирани
по следния начин: това са думите от вида
f(T),
m(T),
f(f(T)),
m(f(T)),
f(m(T)),
m(m(T)),
f(f(f(T))),
m(f(f(T))),
f(m(f(T))),
m(m(f(T))),
f(f(m(T))),
m(f(m(T))),
f(m(m(T))),
m(m(m(T))),
. . . . . . . . . . .
. . .
Забележка 1. В Strawberry Prolog при изпълнение
на програмата от горния пример върху целта
?- d(U,V), write(d(U,V)).
получаваме атомарните формули
Да се върнем отново към общия случай, когато P
е произволна логическа програма. Отбелязваме най-напред, че атомарните
формули, изводими от P, са тъждествено верни във всеки модел
за
От втората основна лема за разширените ербранови структури следва съществуване на точно една разширена ербранова структура със свойството, че в нея са верни при Ербрановата оценка на променливите онези и само онези атомарни формули, които са изводими от P. Разширената ербранова структура с това свойство ще наричаме разширена ербранова структура, породена от P, и ще я означаваме с SPў. Ще установим някои други нейни свойства, като за целта най-напред ще докажем едно помощно твърдение. Както в подобно твърдение за случая на ербранови структури пак ще става дума и за оценки на променливите, и за субституции, но сега оценките ще бъдат в SPў. Очевидно всяка субституция е оценка в SPў на променливите, но обратното не е вярно - има оценки в SPў, които не са субституции (а именно онези оценки, които преобразуват безбройно много променливи в термове, различни от самите тях). Върху всяко крайно множество от променливи обаче всяка оценка в SPў съвпада с някоя субституция.
Лема за свеждане на оценките в породената разширена
ербранова структура към субституции. Нека A е дадена атомарна
формула,
v е някоя оценка в SPў
на променливите и
s е такава субституция, че
A
Доказателство. Да означим с s(A)
A.
От друга страна обаче
s(A)
Сега ще докажем едно много съществено твърдение за
разширената ербранова структура, породена
Теорема за минималния разширен ербранов модел.
Структурата SPў е модел за
P
и при всеки избор на атомарната формула A следните три условия са
равносилни помежду си:
Доказателство. За да докажем, че SPў
е модел за P, да разгледаме произволна клауза C от P.
Ще покажем, че C е тъждествено вярна в структурата SPў.
Да разгледаме първо случая, когато C е някой факт
A.
Нека v е произволна оценка в SPў
на променливите. Разглеждаме такава субституция s,
че A
A.
A
:-
B1,
B2, ..., Bm.
Нека v е оценка в SPў
на променливите, при която в SPў
е изпълнено тялото на C, т.е. Bi
A
s(A):-
s(B1),s(B2),
...,s(Bm).
От казаното преди малко е ясно, че тя е частен случай на C и
всички членове на нейното тяло са изводими от P. При това положение
A.
Теоремата, която току-що доказахме, показва, че измежду всички модели за хорновата програма P разширената ербранова структура, породена от P, има най-малко множество на тъждествено верните атомарни формули. По тази причина ще наричаме тази структура минимален разширен ербранов модел за P.
Сега ще дадем аналог на доказаната в предходния въпрос
теорема за характеризация на изпълнимите цели с помощта на минималния ербранов
модел. За да направим това по-удобно, уславяме се да казваме, че една хорнова
цел е изпълнена тъждествено в дадена структура S, ако тази
цел е изпълнена в S при всяка оценка в S на променливите
(очевидно това е равносилно с изискването всички членове на целта да са
тъждествено верни в S). Уславяме се още да казваме, че една хорнова
цел е изпълнена тъждествено при дадена хорнова програма, ако целта
е изпълнена тъждествено във всеки модел за програмата. От направеното дотук
е ясно, че ако една цел е изпълнена тъждествено в минималния разширен
ербранов модел за P, тя е изпълнена тъждествено във всеки модел
за P.
Теорема за характеризация на изпълнимите цели
с помощта на минималния разширен ербранов модел. Нека G е дадена
хорнова цел. Тогава следните четири условия са равносилни:
Доказателство. Това, че от
Забележка 2. Ако сравним горната теорема с
аналогичната теорема от предходния въпрос, виждаме, че
Четирите равносилни помежду си
Синтактична характеризация на изпълнимите цели
посредством изводимост. За да бъде една хорнова цел G изпълнима
при дадена хорнова програма P, необходимо и достатъчно е да съществува
частен случай на G, на който всички членове са изводими
Забележка 3. Когато с помощта на Strawberry
Prolog изпълним една хорнова програма P върху дадена хорнова цел
G
и получим отговор "Yes", всъщност компютърът ще е намерил субституция,
преобразуваща целта G в някой неин частен случай, на който членовете
са изводими от G. Ако VAR(G)={X1,...,Xm},
можем да накараме компютъра да ни даде информация и за тази субституция,
като добавим в края на целта G например допълнителния член write([X1,...,Xm]).
Ако да речем P е програмата от пример 2, това би означавало да я
изпълним върху целта
?- d(U,V), write([U,V]).
(вместо върху целта от забележка 1). При изпълнението ще получаваме
последователно (с натискане на клавиш F5 в началото и F8 след това)
[_0,f(_0)]Yes.
[_0,m(_0)]Yes.
[_0,f(f(_0))]Yes.
[_0,m(f(_0))]Yes.
[_0,f(f(f(_0)))]Yes.
[_0,m(f(f(_0)))]Yes.
. . .
Съответните субституции разбира се са [_0,f(_0)=:U,V],
[_0,m(_0)=:U,V], [_0,f(f(_0))=:U,V],
[_0,m(f(_0))=:U,V] и т.н. (за съжаление Пролог
ще пропусне безбройно много други не по-сложни субституции - например няма
да се получат субституции от вида [T,f(m(T))=:U,V],
[T,m(m(T))=:U,V] и пр.).
Забележка 4. При повечето други софтуерни
реализации на Пролог сведения за намерената субституция се получават без
прибавяне на допълнителни членове към целта. За жалост при немалко от тези
други реализации наред с непълнотата, за каквато стана дума в горната забележка,
има и случаи, когато при изпълняване на дадена хорнова програма върху дадена
хорнова цел се получава положителен отговор и без целта да е изпълнима
при програмата (малко повече подробности относно причината за това ще дадем
по-нататък) . Например споменатата неприятност може да се срещне при изпълнение
на програмата от пример 2 върху целта
?- d(X,X).
(въпреки че никой частен случай на атомарната формула d(X,X)
не е измежду изводимите от тази програма атомарни формули - те бяха изчерпателно
описани в споменатия пример). Да речем Arity Prolog, версия 5.1 (една доста
стара реализации на езика), показва в този случай на екрана като резултат
следното:
X = f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(...))))))))))) ))))))))))))))))))) -> |
Последно изменение: 28.04.2000 г.
|
|