ХОРНОВИ ДИЗЮНКТИ
Ще установим известна връзка между въпроса за изпълнимост
на една хорнова цел при една хорнова програма и въпроса за изпълнимост
на подходящо множество от дизюнкти. За целта първо ще дефинираме представяне
на хорновите цели и на хорновите клаузи посредством един специален вид
дизюнкти. Един дизюнкт се нарича хорнов, ако най-много един от принадлежащите
му литерали е положителен (хорнови са да речем дизюнктите от пример
2 и пример 3, а дизюнктът от пример 1
не е хорнов). Онези хорнови дизюнкти, в които има положителен литерал,
ще наричаме положителни, а останалите - отрицателни. За всяка
хорнова цел G да означим с dis(G) множеството,
състоящо се от отрицанията на членовете на G. Това множество очевидно
е един отрицателен хорнов дизюнкт; ще го наричаме дизюнкт, представящ
G. За всяка клауза C полагаме dis(C)=dis(B)И{H},
където B и H са съответно тялото и главата на C. Това
множество е положителен хорнов дизюкт; ще го наричаме дизюнкт, представящ
C. На всяка хорнова програма P можем да съпоставим множеството
от дизюнктите, които представят нейните клаузи. За това множество ще казваме,
че представя P и ще го означаваме с setofdis(P).
Пример 1. Програмата от пример
1 от въпроса "Минимални ербранови модели" се представя от множеството,
състоящо се от следните дизюнкти:
{Шp(Y,X),d(X,Y)}, {Шp(Y,X),Шd(Y,Z),d(X,Z)},
{p(c1,c3)}, {p(c2,c5)}, {p(c3,c5)}, {p(c4,c6)},
{p(c5,c7)}.
При сигнатурата от същия пример целта
?- p(U,c7),
d(U,c1).
би се представила чрез дизюнкта {Шp(U,c7),Шd(U,c1)}.
Основните семантични свойства на представянето на
хорновите цели и на хорновите клаузи чрез дизюнкти, както и на програмите
чрез множества от дизюнкти, се изказват посредством следните твърдения:
а) една хорнова цел G
не е изпълнена в дадена структура S при дадена оценка v на
променливите точно тогава, когато S,vdis(G);
б) една хорнова клауза C
е тъждествено вярна в дадена структура S точно тогава, когато дизюнктът
dis(C)
е тъждествено верен в S;
в) една структура е модел
за дадена хорнова програма
P точно тогава, когато в нея са тъждествено
верни всички дизюнкти от множеството
setofdis(P).
Първото от горните твърдения може да се докаже като
се забележи, че G не е изпълнена в S при оценката v
точно тогава, когато някой член на G не е верен в S при оценката
v,
а това означава някой литерал от дизюнкта dis(G)
да е е верен в S при оценката v. Второто от твърденията се
проверява така: при тяло B и глава H на C тъждествената
вярност на
C в S е равносилна с това при всяка оценка v
в S на променливите, за която в S е изпълнена целта B,
да имаме още и S,vH;
това условие от своя страна е равносилно с условието за всяка оценка v
в S на променливите целта B да не е изпълнена в S
или да имаме S,vH,
обаче (по първото от твърденията) целта B да не е изпълнена в S
е равносилно с S,vdis(G)
и остава само да се възпозваме от дефиницията на dis(C).
Третото от твърденията следва непосредствено от второто.
Сега сме готови да формулираме и докажем споменатата
преди малко връзка между изпълнимост на хорнова цел при хорнова програма
и неизпълнимост на подходящо множество от дизюнкти.
Теорема за свеждане на задачите на логическото
програмиране за изпълнимост към задачи за неизпълнимост на множества от
дизюнкти. Нека P е произволна хорнова програма, а G е
произволна хорнова цел. Нека M=setofdis(P)Иdis(G).
В такъв случай целта G е изпълнима при P точно тогава, когато
множеството M е неизпълнимо.
Доказателство. Целта G е изпълнима
при P точно тогава, когато G е изпълнима във всеки модел
за P, т.е. когато не съществува такава структура S,
че S е модел за P, но G не е изпълнена в S
при никоя оценка на променливите. Като се възползваме от току-що доказаните
твърдения в) и а), виждаме обаче, че за да бъде
една структура S модел за P, но G да не е изпълнена
в S при никоя оценка на променливите, необходимо и достатъчно е
в S да са тъждествено верни всички дизюнкти от множеството M.
Следователно структура S със споменатите свойства ще съществува
точно тогава, когато M е изпълнимо, и значи няма да съществува точно
тогава, когато M е неизпълнимо.
ї
В множеството M, за което става дума в горната
теорема, има точно един отрицателен дизюнкт - това е дизюнктът dis(G).
Въпросът за изпълнимостта на това множество би могъл да се изследва по
метода на резолюцията. Във връзка с това отбелязваме, че резолвента на
отрицателен и на положителен хорнов дизюнкт е винаги отрицателен хорнов
дизюнкт. Значи ако dis(G) има резолвента с някой
дизюнкт от setofdis(P), тя пак ще бъде отрицателен
хорнов дизюнкт. Ако и той има резолвента с някой дизюнкт от setofdis(P),
и тази резолвента ще бъде отрицателен хорнов дизюнкт и т.н.
Може да се докаже, че ако множеството M е неизпълнимо, този процес
на последователно получаване на отрицателни хорнови дизюнкти може да се
осъществи така, че да завърши с получаване на празния дизюнкт. Такъв начин
на установяване на неизпълнимостта на множеството M е в духа на
работата на Пролог при евентуалното установяване на изпълнимостта на G
при P (възможно е обаче G да е изпълнима при P, а
Пролог да не е в състояние да установи това).
Пример 2. Целта, спомената в пример
1, е изпълнима при споменатата там програма, и един неин изпълним
затворен частен случай е онзи, който се получава чрез субституцията [c5=:U]
(това заключение може да се направи например като се покаже, че членовете
на този частен случай са затворено изводими от програмата, а и използването
на Пролог води до същото заключение). Ако искаме да използваме горната
теорема, за да установим изпълнимостта на разглежданата цел при разглежданата
програма, ще трябва да покажем, че е неизпълнимо множеството, състоящо
се от дизюнктите
{Шp(Y,X),d(X,Y)}, {Шp(Y,X),Шd(Y,Z),d(X,Z)},
{p(c1,c3)}, {p(c2,c5)}, {p(c3,c5)}, {p(c4,c6)},
{p(c5,c7)}, {Шp(U,c7),Шd(U,c1)}.
Това ще направим по метода на резолюцията, работейки така, както бе описано
в предходния абзац. А именно, последните два от гореизброените дизюнкти
имат резолвента {Шd(c5,c1)}.
Тя от своя страна има с втория от изброените дизюнкти резолвента {Шp(Y,c5),Шd(Y,c1)}.
Нейна резолвента с дизюнкта {p(c3,c5)} е дизюнктът
{Шd(c3,c1)}, който от своя
страна има с първия от гореизброените дизюнкти резолвента {Шp(c1,c3)}.
Тя обаче дава с дизюнкта {p(c1,c3)} като непосредствена
резолвента празния дизюнкт. Добре е да отбележим, че полученият в хода
на работата дизюнкт {Шp(Y,c5),Шd(Y,c1)}
има резолвента и с дизюнкта {p(c2,c5)}, но с нея не
бихме могли да направим нещо аналогично на това, което направихме
преди
малко с дизюнкта {Шd(c3,c1)}.
Последно изменение: 21.06.2000 г.