Книга
Книга
Глава 1. КРАТКИЙ ОБЗОР ПОНЯТИЙ ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ И БАЗ ДАННЫХ
Книга посвящена интеграции логического программирования и баз данных, которая позволяет образовать системы нового типа, расширяющие границы информатики как науки и позволяющие удовлетворять требованиям новых применений. Для таких систем используются следующие названия:
дедуктивная база данных (отражает использование стиля логического программирования для реализации дедукции на основе содержимого базы данных);
система управления базами знаний (отражает управление (сложными) знаниями, а не (простыми) даными);
экспертная система баз данных (отражает использование опыта экспертов в определенной прикладной области для решения класса задач при сохранении доступа к большой базе данных).
Слияние логических программ и баз данных происходит в соответствии с общей тенденцией в информатике - совместное исследование различных областей с целью генерации новых идей и получения материального выигрыша за счет использования общих концепций.
В 70-е годы логическое программирование и базы данных развивались одновременно. Пролог - самый популярный язык программирования в ЛОГике - появился как результат упрощения более общих методов доказательства теорем для достижения возможности эффективного программирования. Аналогично реляционная модель данных возникла в результате упрощения сложных иерархической и сетевой моделей для обеспечения возможности непроцедурного манипулирования множест-7 венными данными. На протяжении 70-х и в начале 80-х годов Пролог и реляционные базы данных получили широкое распространение не только в академической или научной среде, но и в деловом мире.
Интенсивные исследования взаимосвязи логического программирования и реляционных баз данных проводились с конца 70-х годов главным образом с теоретической точки зрения. Успеху интеграции способствовало то обстоятельство, что Пролог был выбран в качестве парадигмы языка программирования в японском проекте ЭВМ 5-го поколения. Целью этого проекта является разработка "ЗВМ следующего поколения", ориентированных на применение в области искусственного интеллекта и, следовательно, способных выполнять исключительно большое число логических выводов в единицу времени. Проект также предусматривает использование реляционной
модели данных для хранения больших совокупностей данных.
Поэтому были проведены исследования в пограничной области между логическим программированием и реляционными базами данных.
Изучение логического программирования и управления базами данных позволяет обнаружить следующие общие их черты:
Базы данных. Системы логического программирования управляют небольшими однопользовательскими базами данных, располагаемыми в оперативной памяти и содержащими правила вывода и фактическую информацию. Системы баз данных, напротив, управляют большими, находящимися в коллективном пользовании совокупностями данных в массовой памяти и обеспечивают технологию поддержки эффективного поиска и надежного изменения долговременно хранимых данных.
Запросы. Запрос обозначает процесс, с помощью которого релевантная информация извлекается из базы данных. В логическом программировании запрос (или цель) реализуется построением цепочек логических выводов, комбинирующих правила и фактическую информацию для доказательства истинности или отрицания справедливости первоначального утверждения. В системах баз данных запрос (выражаемый с помощью специализированного языка манипулирования данными) обрабатывается при использовании наиболее эффективных путей доступа в массовой памяти к большим совокупностям данных для извлечения релевантной информации.
Ограничения.- Ограничения задают условия правильности баз данных. Проверка ограничения - процесс, с помощью которого обеспечивается правильность базы данных и предотвращается помещение неправильных данных в базу данных. В логическом программировании ограничения выражаются с помощью универсальных правил, активизируемых при модификации базы данных. В системах баз данных лишь небольшое число типовых ограничений обычно выражается на языке определения данных.
Логическое программирование обладает большей выразительной способностью задания запросов и ограничений в сравнении с языками определения данных и манипулирования данными систем баз данных. Более того, представление запросов и ограничений возможно при этом в однородном формализме, и их проверка требует одних и тех же механизмов вывода, что позволяет вести более сложные рассуждения о содержимом базы данных. Вместе с тем системы логического программирования не обеспечивают технологии управления большими, надежными,
долговременно хранимыми совокупностями данных с коллективным доступом.
Естественное расширение логического программирования и управления базами данных заключается в построении новых классов систем, расположенных на пересечении этих двух областей. Такие системы основаны на использовании логического программирования в качестве языка запросов и соединяют формулирование запросов и ограничений в стиле логического программирования с технологией баз данных для эффективного и надежного запоминания данных в массовой памяти.
Логическое программирование как язык запросов
Дадим неформальное представление о том, как логическое программирование может использоваться в качестве языка запросов. Рассмотрим реляционную базу данных с двумя отношениями
PARENT(PARENT, CHILD) и PERSON(NAME, AGE, SEX).
Кортеж отношения PARENT fРОДИТЕЛЬ) содержит пары субъектов, находящихся в отношении родитель - ребенок (CHILD), кортежи отношения PERSON fЛИЧНОСТЬ) содержат триплеты, первым, вторым и третьим элементом которых соответственно являются имя (NAME), возраст (AGE) и пол (SEX) личности. Содержимое баз данных приведено на рис. 1. 1. Представим простые запросы к базе данных на языке логического программирования. При использовании Пролога предполагается, что читатель имеет некоторое представление о нем. В примере используются два специальных предиката базы данных parent и person в предположении, что базовые дизъюнкты (факты) для этих предикатов хранятся в базе данных.
Применяются стандартные соглашения Пролога относительно прописных и строчных букв при обозначении переменных и констант. Например, кортеж <johnt jeff> отношения базы данных PARENT соответствует базовому дизъюнкту
parentfJohn,jeff)•
Запрос "Кто дети Джона?" выражается с помощью следующей цели Пролога:
? - parent(johntX).
PARENTPARENTCHILDjohnjeffjeffmargaretmargaretanniejohnanthonyanthonybillanthonyjanetтагуjeffclairebilljanetpaulPARENTPARENTCHILDjohnjeffjeffmargaretmargaretanniejohnanthonyanthonybillanthonyjanetтагуjeffclairebilljanetpaulPERSONNAMEAGESEXpaul7malejohn78malejeff55malemargaret32femaleannie4femaleanthony58malebill24malejanet27femaleтагу75femaleclaire45femalePERSONNAMEAGESEXpaul7malejohn78malejeff55malemargaret32femaleannie4femaleanthony58malebill24malejanet27femaleтагу75femaleclaire45female
PARENT
PARENT
CHILD
john
jeff
jeff
margaret
margaret
annie
john
anthony
anthony
bill
anthony
janet
тагу
jeff
claire
bill
janet
paul
PARENT
PARENT
CHILD
john
jeff
jeff
margaret
margaret
annie
john
anthony
anthony
bill
anthony
janet
тагу
jeff
claire
bill
janet
paul
PERSON
NAME
AGE
SEX
paul
7
male
john
78
male
jeff
55
male
margaret
32
female
annie
4
female
anthony
58
male
bill
24
male
janet
27
female
тагу
75
female
claire
45
female
PERSON
NAME
AGE
SEX
paul
7
male
john
78
male
jeff
55
male
margaret
32
female
annie
4
female
anthony
58
male
bill
24
male
janet
27
female
тагу
75
female
claire
45
female
Рис. 1.1. Пример реляционной базы данных.
Ожидаемый в результате применения этого запроса к базе данных ответ:
X = {jefft anthony}.
Рассмотрим теперь, какие ответы будут образованы интерпретатором Пролога, оперирующим фактами для двух предикатов parent и person, соответствующих кортежам базы данных; предполагается, что факты заданы в основной памяти в указанном выше порядке.
Ответ формируется следующим образом. При реализации Цели переменная X вначале устанавливается равной Jeff; если пользователь требует новых ответов, переменная X устанавливается равной anthony; если пользователь снова требует новых ответов, поиск терпит неудачу и интерпретатор отвечает по. Заметим, что Пролог возвращает результат по одному кортежу, а не как множество результирующих кортежей.
Запрос "Кто родители Джеффа?п выражается следующим образом:
? - parentfX, jeff).
Множество всех ответов включает
X = {john, тагу)
Еще раз рассмотрим, как Пролог формирует ответ. При реализации этой цели переменная X устанавливается равной john; если пользователь требует дополнительных ответов, переменная X устанавливается равной шагу; если пользователь снова требует новых ответов, поиск терпит неудачу.
Можно представить запросы, в которых все аргументы являются константами. Например,
? - parentfJohn, jeff). В этом случае ожидается положительный ответ, если кортеж <johnt jeff> принадлежит базе данных, и отрицательный результат в противном случае. В нашем примере система Пролог продуцирует ответ yes.
Правила можно использовать для построения интенсиональной базы данных (ИБД) из экстенсиональной базы данных (ЭБД). ЭБД - это просто реляционная база данных. В нашем примере она включает отношения PARENT и PERSON. ИБД строится из ЭБД с помощью правил, определяющих ее содержимое, а не с помощью явного хранения ее кортежей. Далее мы построим ИБД, которая будет включать отношения FATHER fOTEIJ), MOTHER fMATb), GRANDPARENT f ДЕ ДУШКА или БАБУШКА) , SIBLING (ДЕТИ ОДНИХ РОДИТЕЛЕЙ) , UNCLE fДЯДЯ) , AUNT (ТЕТЯ), ANCESTOR (ПРЕДОК) и COUSIN fКУЗЕН или КУЗИНА). Интуитивно указанные отношения личностей можно построить на основе отношений ЭБД PARENT и PERSON.
Начнем с определения отношений FATHER и MOTHER, указывая просто, что отец является родителем-мужчиной, а мать - родителем-женщиной.
father(Xt Y):- person(Xt __, male)t parent (Xt Y). mother (Xt Y):- per son (X, __, female 9, parent (X, Y).
На основе этого определения из ЭБД нашего примера можно вывести ИБД, показанную на рис. 1. 2.
Заметим, что здесь мы показываем кортежи отношений ИБД, как если бы они фактически существовали. В действительности, кортежи ИБД не хранятся. Можно рассматривать приведенные выше определения правил father и mother как определения взглядов, т. е. программ, хранящихся в базе данных и позволяющих строить кортежи отношения father из кортежей отношений parent и person.
ИБД можно также задавать запросы. Например, мы можем сформулировать запрос "Кто мать Джеффа?п следующим образом:
? - mother(Xt jeff).
FATHERFATHERCHILDjohnjeffjeffmargaretjohnanthonyanthonybillanthonyjanetFATHERFATHERCHILDjohnjeffjeffmargaretjohnanthonyanthonybillanthonyjanetРис. 1.2. Отношения ИБДРис. 1.2. Отношения ИБДMOTHERMOTHERCHILDmargaretannieтагуjeffclairebilljanetpaulMOTHERMOTHERCHILDmargaretannieтагуjeffclairebilljanetpaulFATHER и MOTHER.FATHER и MOTHER.
FATHER
FATHER
CHILD
john
jeff
jeff
margaret
john
anthony
anthony
bill
anthony
janet
FATHER
FATHER
CHILD
john
jeff
jeff
margaret
john
anthony
anthony
bill
anthony
janet
Рис. 1.2. Отношения ИБД
Рис. 1.2. Отношения ИБД
MOTHER
MOTHER
CHILD
margaret
annie
тагу
jeff
claire
bill
janet
paul
MOTHER
MOTHER
CHILD
margaret
annie
тагу
jeff
claire
bill
janet
paul
FATHER и MOTHER.
FATHER и MOTHER.
Интерпретатор Пролога после выполнения этого запроса устанавливает X равным тагу. Заметим, что интерпретатор не вычисляет отношение ИБД MOTHER целиком для ответа на запрос, а находит кортеж, который принадлежит ответу.
• Определим теперь отношения GRANDPARENT, SIBLING, UNCLE и AUNT, придавая им очевидный смысл:
grandparent (X, Z; : - parent (X, Г;, parent (Yt Z;.
sibling(X, Y) : - parent (Z, X), parent (Zt Y;,not(X=Y).
uncle(X, У; : - personfX, __, male;, sibling(Xt Z9, parent(Z, Y).
aunt(Xt У) : - person(X, _, female)t sibling(Xt Z9, parent(Z, Y).
Сложные запросы к ЭБД и ИБД могут формулироваться с помощью новых правил, включающих ЭБД- и ИБД-предикаты, и затем представлением целей для этих правил. Например, запрос "Кто дядя племянника?" можно сформулировать так:
query(X; : - uncle(Xt У;, personfУ, __, male;.
? - query(X).
Более сложные отношения ИБД конструируются с помощью рекурсивных правил, т. е. правил, в которых предикат головы включается в тело правила (более точно рекурсивные правила будут определены ниже). Известными примерами рекурсивных правил являются отношения ANCESTOR или COUSIN.
Отношение ANCESTOR включает в качестве кортежей все пары предок - потомок, начиная от родителей:
ancestor(X, У) :- parent(XtY). ancestor(Xt Y) : - parentfX, Y), ancestor(Z, Y).
Отношение COUSIN включает в качестве кортежей либо двух детей одних родителей (sibling), либо рекурсивно двух детей двух ранее определенных кузенов (cousin):
cousin(Xt У; : - parent (XI t X;, parent (Ylt У;, sibling(Xlt Y1).
cousin(Xt У) : - parent (XI t X9, parent (Ylt У9, cousin(Xlt Y1).
ИБД - результат этих двух правил - показана на рис. 1. 3.
Из этого примера видно, что рекурсивные правила могут генерировать довольно большие отношения ИБД. Более того, процесс генерации кортежей ИБД весьма сложен. Например, интерпретатор Пролога, обрабатывающий запрос ancestor(X, У9, будет генерировать некоторые из кортежей ИБД более одного раза. Поэтому эффективное вычисление рекурсивных правил является довольно критичным. С другой стороны, рекурсивные правила важны» поскольку они позволяют выводить полезные отношения МЕД, которые не могут быть выражены иначе.
Правила могут также выражать ограничения целостности. Рассмотрим отношение ЭБД PARENT; мы хотели бы выразить следующее ограничение:
SelfParent <Саморождение): индивидуум не может быть своим собственным родителем.
Это ограничение на языке Пролог формулируется следующим образом:
a) incorrectdb :- parent(X, X).
Такая формулировка утверждения позволяет проверять правильность базы данных. Рассмотрим, например, цель Пролога:
? - incorrectdb.
Если йет индивидов X, удовлетворяющих телу правила, ответом на этот запрос будет по. В этом случае база данных верна. Если же, наоборот, такой индивид существует, то ответом будет yes.
ANCESTORANCESTORDESCENDENTjohnjeffjeffmargaretmargaretanniejohnanthonyanthonybillanthonyjanetmar уjeffclairebilljanetpauljohnmargaretmar уmargaretjeffanniejohnbilljohnJanetanthonypauljohnanniemar уanniejohnpaulANCESTORANCESTORDESCENDENTjohnjeffjeffmargaretmargaretanniejohnanthonyanthonybillanthonyjanetmar уjeffclairebilljanetpauljohnmargaretmar уmargaretjeffanniejohnbilljohnJanetanthonypauljohnanniemar уanniejohnpaulcbusiNPERSONIPERSON2margaretbillmargaretjanetanniepaulcbusiNPERSONIPERSON2margaretbillmargaretjanetanniepaul
ANCESTOR
ANCESTOR
DESCENDENT
john
jeff
jeff
margaret
margaret
annie
john
anthony
anthony
bill
anthony
janet
mar у
jeff
claire
bill
janet
paul
john
margaret
mar у
margaret
jeff
annie
john
bill
john
Janet
anthony
paul
john
annie
mar у
annie
john
paul
ANCESTOR
ANCESTOR
DESCENDENT
john
jeff
jeff
margaret
margaret
annie
john
anthony
anthony
bill
anthony
janet
mar у
jeff
claire
bill
janet
paul
john
margaret
mar у
margaret
jeff
annie
john
bill
john
Janet
anthony
paul
john
annie
mar у
annie
john
paul
cbusiN
PERSONI
PERSON2
margaret
bill
margaret
janet
annie
paul
cbusiN
PERSONI
PERSON2
margaret
bill
margaret
janet
annie
paul
Рис. 1.3. Отношения ИБД ANCESTOR и COUSIN.
Рассмотрим другие примеры ограничений. Например,
OneMother fEдинственностьМатери): каждая личность имеет единственную мать;
Personparent (РодительЛииность): каждый родитель является личностью;
Personchild fPe6eH0KJIn4H0CTb) : каждый ребенок является личностью;
AcyclicAncestor fЛцикличностьПредка) : личность не может быть своим собственным предком.
Эти ограничения формулируются следующим образом:
incorrectdb : - mother(X, Z;, mother(Y, Z;, not(X=Y).
2—1417
incorrectdb :- parent(Xt _)t not(person(Xt
r) incorrectdb : - parent(_t Y9, not(person(Y, _,_)).
incorrectdb :- ancestor(XtX).
Заметим, что ограничения б) и д) используют в своих формулировках некоторые из отношений ИЕД, тогда как ограничения а),в) и г) ссылаются только на отношения ЭБД. Эти два случая не различаются структурно. Более того, ограничение б) есть классическая функциональная зависимость, тогда как ограничения в) и г) выражают зависимость включения (называемую также референциальной целостностью).
Рассмотрим совокупность ограничений последнего вида. Вычисление ограничений можно использовать либо для сохранения целостности исходно правильной базы данных, или для определения (с последующим устранением) всех источников противоречивости.
Рассмотрим первое применение ограничений: как сохранить целостность правильной базы данных. Напомним, что содержимое базы данных изменяется под действием выполняемых транзакций. Транзакция представляет собой атомарную единицу выполнения, содержащую несколько операций, которые включают новые кортежи, удаляют существующие кортежи или изменяют содержимое некоторых кортежей. Атомарность транзакций означает, что их выполнение может быть завершено с помощью либо abort, либо commit. Abort оставляет исходное состояние базы данных неизменным; commit оставляет базу данных в конечном состоянии, в котором все операции транзакции успешно выполнены. Таким образом, для сохранения непротиворечивости мы должны признать commit fфиксацию) транзакции тогда и только тогда, когда конечное состояние базы данных не нарушает никаких ограничений. Для проверки правильности конечного состояния транзакции разработаны эффективные методы. Эти методы предполагают, что исходная база данных правильна, и проверяют ограничения целостности на части базы данных, которая была модифицирована транзакцией.
Рассмотрим применение ограничений для восстановления правильного состояния базы данных. Приведенная выше формулировка ограничений обеспечивает ответ yes/по, который не слишком полезен для таких целей. Однако мы могли бы, например, сформулировать ограничения следующим образом:
incorrectdb(selfparent» [X]) :- parent(X, X).
incorr ectdb( oneraother t [X,YtZ] ) :- mother (X, Z ), mother(Yf Z), notfX = Y).
incorrectdb(personparent, [X]) :- parent(Xt_),
notfpersonfX, 一, _))・
incorrectdb( personchi Id, [Y] ) : - parent (_, Y), not(person(Yt _, _))・-
incorrectdb(acyclicancestor, [X]):- ancestor(X, X).
В этой формулировке голова правила имеет два аргумента: первый аргумент содержит имя ограничения, а второй - список переменных, которые нарушают это ограничение. Такая формулировка ограничения позволяет нам осуществлять запрос причин неправильности базы данных. Рассмотрим, например, цель Пролога:
? incorrectdb(X, У).
Если не существует ограничений X, которые были нарушены, то ответом на этот запрос будет по. В этом случае база данных верна. Наоборот, если одно из таких ограничений существует, переменные X и У устанавливаются равными имени ограничения и списку значений переменных, вызывающих нарушение ограничения. Например, ответ
X = personparent, У = [Karen] определяет, что Karen принадлежит отношению PARENT и не принадлежит отношению PERSON; это можно исправить, добавив кортеж для Karen в отношение PERSON.
Однако, ответ на приведенный выше запрос может быть недостаточным для понимания действий, требуемых для восстановления правильности базы данных.
Таблица 1.1. Соответствие понятий логического программирования и баз данных
ПОНЯТИЯ БАЗ ДАННЫХ
ПОНЯТИЯ ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ
Отношение
Предикат
Атрибут
Аргумент предиката
Кортеж
Базовый дизъюнкт (факт)
一 Взгляд
Правило
—Запрос
Цель
Ограничение
Цель (возвращающая ожидаемое значение истинности)
Это может произойти для правил б) ид), выражающих ограничения отношений ИБД. Мы уже заметили, что отношения ИБД обычно не хранятся явно; они определяются правилами, и их значения зависят от отношений ЭБД, встречающихся в этих правилах.
Таким образом, нарушения ограничений б) и д) можно было бы компенсировать действиями, применяемыми к определяющим их отношениям ЭБД.
Соответствие аналогииных понятий логического программирования и баз данных, о которых мы уже говорили, иллюстрируется табл. 1. 1.
Пролог и Дейталог
Выше мы показали, как интерпретатор Пролога оперирует базой фактов, и продемонстрировали, что Пролог может работать как мощный язык баз данных. Выбор Пролога для иллюстрации использования логического программирования в качестве языка баз данных практически не вызывает сомнений, поскольку Пролог является наиболее популярным языком логического программирования. Однако использование Пролога в данном контексте иллюстрирует ряд недостатков, которые частично обнаружились в нашем примере. К ним можно отнести следующее:
Покортежная обработка. Хотя мы ожидали, что результатом запросов к базе данных должно быть множество кортежей, Пролог возвращает отдельные кортежи по одному.
Процедурность и чувствительность к порядку. Обработка в Прологе зависит от порядка правил или фактов в базе данных и от порядка предикатов в теле правила. В действительности программист на Прологе использует чувствительность к порядку для построения эффективных программ, жертвуя, таким образом, декларативной природой логического программирования в пользу процедурности. Напротив, языки баз данных (такие, как SQL или реляционная алгебра) являются непроцедурными: выполнение запросов к базе данных не^ зависит от порядка поисковых предикатов или кортеже^ базы данных. 彳
Специальные предикаты. Прогаммисты на Пролог^ управляют выполнением программ с помощью специальнызй предикатов (используемых, например, для ввода-вывода,1 отладки или для воздействия на бэктрекинг). В это>® заключается другая важная причина потери декла-| ративной природы языка, не имеющей аналогов в языкаж программирования. 'I
Функциональные символы. Пролог содержит функциональные символы, используемые обычно для построения рекурсивных функций и сложных структур данных; эти функции не требуются для манипулирования плоской реляционной базой данных, хотя они могли бы
оказаться полезными для оперирования сложными объектами в базах данных. Мы не будем рассматривать эти вопросы в данной книге.
Альтернативой Прологу как языку баз данных и логического программирования оказался новый язык дейталог, который сконструирован для использования в качестве языка баз данных. Он является непроцедурным,
множественным, нечувствительным к порядку, не имеющим специальных предикатов и функц и о наль них символов. Таким образом, в Дейталоге устранены четыре указанных выше недостатка Пролога.
Синтаксически Дейталог напоминает чистый Пролог.
приведенные в предыдущемприведенные в предыдущемВсе прологовские правила,
приведенные в предыдущем
приведенные в предыдущем
разделе для представления запросов и ограничений, являются также правильными правилами Дейталога. Их выполнение приводит к образованию множества кортежей; например, после реализации цели
? - parent(johntX)
мы получим
X = {jeff, anthony}.
В качестве примера различной чувствительности Пролога и Дейталога к порядку рассмотрим следующие две программы:
Программа Предок1:
ancestor(X, У) : - parent(X, У/
ancestor(Xt Y) :- parent (X, Z), ancestor(Z, У),
Программа Предок2:
ancestor(X, У) : - ancestor(Z, У九 parent(X, Z) ancestor(Xt Y) :- parent (Xt У).
Входная цель:
? - ancestor(X, Y).
Обе программы Предок1 и Предок2 являются синтакси- иедки правильными как на Дейталоге, так и на Прологе. Дейталог нечувствителен ни к порядку правил, ни к
порядку предикатов в правилах; поэтому он производит правильный ответ (список пар предок - потомок) в обоих вариантах. Наоборот, интерпретатор Пролога демонстрирует ожидаемое поведение в версии Предок1 (первую пару предок - потомок), но он зацикливается в версии Предок2. В действительности программист на Прологе должен следить за тем, чтобы программа не зацикливалась, тогда как программист на Дейталоге может не заботиться об этом.
Процесс, который привел к созданию Дейталога, показан на рис. 1. 4 (Sigmod 1984). Из него видно, что эволюция от Пролога к Дейталогу состоит в движении от процедурного ориентированного на обработку записей языка к непроцедурному языку, ориентированному на обработку множеств, и что такой процессе характерен для эволюции языков баз данных от иерархических и сетевых баз данных к реляционным базам данных. Хотя Дейталог является декларативным языком и его определение не зависит от какой-либо стратегии поиска, цели Дейталога обычно вычисляются с помощью стратегии поиска ,г сначала вширь", которая порождает множество всех ответов, а не с помощью стратегии поиска Пролога "вглубь" , порождающей ответы в рамках покортежного подхода. Это согласуется с множественным подходом реляционных языков запросов. Более того, в Дейталоге программист не задает процедуры доступа к данным, что является прерогативой системы; это снова хорошо согласуется с реляционными языками запросов, которые являются непроцедурными.
Однако эти особенности ограничивают мощность Дейталога как универсального языка программирования. В действительности Дейталог образуется в результате исключения некоторых функций из Пролога (удаляемых не навсегда) и добавления к нему средств, относящихся к классическим языкам баз данных.
Процедурные языки, ориентированные на обработку записейПроцедурные языки, ориентированные на обработку записейИЕРАРХИЧЕСКИЕИЕРАРХИЧЕСКИЕПРОЛОГПРОЛОГИ СЕТЕВЬЕ БАЗЫДАННЫХИ СЕТЕВЬЕ БАЗЫДАННЫХ
Процедурные языки, ориентированные на обработку записей
Процедурные языки, ориентированные на обработку записей
ИЕРАРХИЧЕСКИЕ
ИЕРАРХИЧЕСКИЕ
ПРОЛОГ
ПРОЛОГ
И СЕТЕВЬЕ БАЗЫДАННЫХ
И СЕТЕВЬЕ БАЗЫДАННЫХ
гРЕЛЯЦИОННЕЕ БАЗЫ ДАННЫХгРЕЛЯЦИОННЕЕ БАЗЫ ДАННЫХгДЕЙТАЛОГгДЕЙТАЛОГ
г
РЕЛЯЦИОННЕЕ БАЗЫ ДАННЫХ
г
РЕЛЯЦИОННЕЕ БАЗЫ ДАННЫХ
г
ДЕЙТАЛОГ
г
ДЕЙТАЛОГ
Непроцедурные языки, ориентированные на обработку множеств
Рис. 1.4. Дейталог как эволюция Пролога.
Таблица 1.2. Сравнение Пролога и Дейталога
ПРОЛОГ
ДЕЙТАЛОГ
Поиск сначала вглубь
Поиск сначала вширь (обычно)
Покортежная обработка
Множественная ориентация
Чувствительность к порядку
Нечувствительность к порядку
Специальные предикаты
Отсутствие специальных предикатов
Функциональные символы
Отсутствие функци о наль ных символов
Поэтому Дейталог рассматривается главным образом как хорошая абстракция, иллюстрирующая использование логического программирования как языка баз данных, а не универсального языка. Можно, однако, ожидать, что Дейталог будет эволюционировать в направлении приобретения некоторых других средств и превратится в универсальный язык в ближайшем будущем.
В табл. 1.2 приведены характерные особенности Дейталога и Пролога.
Альтернативные архитектуры
Для превращения Дейталога и Пролога в языки баз данных требуется разработка новых систем, интегрирующих функции логического программирования, и систем баз данных. Для этой цели был предложен ряд альтернативных архитектур.
Ниже мы представляем предварительную классификацию подходов. Существенные различия определяются на основе взаимосвязи логического программирования и реляционных систем.
Мы называем связыванием разработку интерфейса между двумя различными подсистемами, системой логического программирования и системой баз данных. Согласно этому подходу, вначале имеются две различные системы, которые затем связываются для создания единой системы. Обе подсистемы сохраняют свою индивидуальность ;интерфейс между ними обеспечивает процедуры, необходимые для переноса данных из долговременной среды хранения системы баз данных в основную память исполнительной среды логического программирования с
целью вычисления запросов или проверки ограничений.
Мы называем интеграцией разработку единственной системы, реализующей логическое программирование над системой баз данных с массовой памятью. Этот подход соответствует разработке совершенно нового класса структур данных и алгоритмов, специально сконструированных для использования логического программирования как языка баз данных.
В рамках указанных альтернатив естественно ожидать, что системы, базирующиеся на Прологе, будут преимущественно использовать подход, основанный на связывании, тогда как системы, базирующиеся на Дейталоге, будут использовать главным образом подход, основанный на интеграции. Действительно, было разработано большое число эффективных Пролог-систем, которые могут быть связаны с той или иной степенью сложности с известными системами баз данных. Уже существует ряд исследовательских прототипов и даже несколько коммерческих систем, принадлежащих этому классу. Язык Дейталог, специально сконструированный как язык баз данных, удобно использовать при разработке принципиально новых интегрированных систем, хотя в проекте ЭВМ пятого поколения разрабатывается интегрированная система, базирующаяся на параллельной версии Пролога.
Подход, основанный на связывании, проще в реализации, но менее эффективен, чем интеграционный подход. Действительно, нельзя ожидать той же эффективности от интерфейса, требуемого при связывании, что и от специально сконструированной системы. Более того, степень сложности интерфейсов может быть различной. Так, одним из предельных решений является простейший интерфейс между Пролог-системой и реляционной системой, предполагающий генерацию отдельного SQL-образного запроса при любой попытке унификации каждого предиката базы данных. Этот подход очень прост, но неэффективен.
Итак, мы ожидаем, что связывание в ряде случаев будет достаточным, тогда как другие применения потребуют интеграции. При связывании можно ожидать роста эффективности за счет введения произвольных запросов наряду со стандартным интерфейсом, что будет способствовать реализации ряда специальных применений.
При связывании мы будем различать два альтернативных подхода:
Слабое связывание. Взаимодействие между системой логического программирования и системой баз данных возникает независимо от фактического процесса вывода. Обычно связывание выполняется в процессе компиляции (или во время загрузки программы интерпретатором) с помощью извлечения из базы данных всех фактов, которые
могли бы понадобиться программе; иногда связывание реализуется по отношению к каждому правилу перед его активизацией. Слабое связывание называется также статическим связыванием, поскольку оно выполняется независимо от фактической схемы выполнения каждого правила.
Сильное связывание. Взаимодействие системы логического программирования и систем баз данных реализуется в процессе вывода с целью извлечения конкретных фактов, необходимых для ответа на текущую цель или подцель. При этом связывание осуществляется, когда системе логического программирования требуются дополнительные данные от системы баз данных для продолжения вывода. Сильное связывание называется также динамическим связыванием, поскольку оно выполняется в рамках реализации каждого правила.
Из этого следует, что слабое и сильное связывания различаются сложностью, селективностью, требуемой памятью и производительностью. При слабом связывании исполняется меньше запросов к базе данных, так как каждый предикат или правило рассматривается один раз и навсегда, тогда как при сильном связывании каждое правило или предикат могут рассматриваться несколько раз. Однако запросы в слабо связанных системах менее селективны, чем запросы в сильно, связанных системах, поскольку при выполнении запросов переменные являются неозначенными (не связанными константами). Если связывание происходит в момент компиляции или загрузки, запросы задаются заранее независимо от фактической схемы выполнения логической программы. Так, вполне возможна загрузка данных в момент компиляции или загрузка для правила или предиката, который не будет использован при фактическом выполнении.
Отсюда следует, что объем основной памяти, который требуется для хранения данных, извлекаемых в слабо связанных системах, больше объема, требуемого в сильно связанных системах. Однако эти соображения не позволяют заключить, что производительность сильно связанных систем всегда выше; в общем случае сильное связывание требует более частых взаимодействий с базой Данных, а это приводит к большим затратам на интерфейсе и частым переключениям контекста двух систем. Таким образом, сравнение двух подходов затруднительно и требует анализа компромисса между используемой памятью и временем выполнения.
В табл. 1. 3 приведено сравнение слабого и сильного связывания.
Таблица 1.3. Сравнение слабого и сильного связывания
СЛАБОЕ СВЯЗЫВАНИЕ
СИЛЬНОЕ СВЯЗЫВАНИЕ
меньше запросов
больше запросов
менее означенные запросы
более означенные запросы
реализуются все запросы
реализуются только
релевантные запросы
требуется больше памяти
требуется меньше памяти
Применения
Известно большое число новых применений, в которых требуются интегрированные системы (на стыке баз данных и логического программирования). Ниже описаны особенности таких применений.
Потребность в базах данных. Требуется доступ к данным, хранимым в базах данных. Это означает доступ к долговременно отказоустойчиво хранимым разделяемым данным, при котором могут конкурентно извлекаться и изменяться данные в других применениях. В большинстве известных в настоящее время экспертных систем или баз знаний имеется доступ к долговременно хранимым файлам данных, но последние являются локально используемыми и управляемыми, без соблюдения правил разделяемого с другими применениями использования, конкурентного доступа или надежности.
Селективный доступ. Нельзя утверждать, что вся база данных будет анализироваться во время работы программы или мы имеем дело с объемами выборки данных, превышающими наблюдаемые в традиционных применениях баз данных. Вместо этого можно утверждать, что при выполнении программы применение извлекает только ограниченную порцию базы данных, являющуюся
результатом селективного доступа к данным.Ограниченное рабочее множество. В результатерезультатом селективного доступа к данным.Ограниченное рабочее множество. В результатеселективного доступа рабочее требуемые в основной памяти ограниченным. Это требование связанных систем, так какселективного доступа рабочее требуемые в основной памяти ограниченным. Это требование связанных систем, так какмножество данных (данные, в данное время) является особенно важно для слабо при слабом связываниямножество данных (данные, в данное время) является особенно важно для слабо при слабом связываниянельзя использоватьдоступа, не заданной вВысокие требованияВажно понимать, что дедуктивных выводовнельзя использоватьдоступа, не заданной вВысокие требованияВажно понимать, что дедуктивных выводовпреимущества селективности момент компиляции.к характеристикам баз данных, системы, выполняющие миллионы в 1 с (требования проекта ЭВМпреимущества селективности момент компиляции.к характеристикам баз данных, системы, выполняющие миллионы в 1 с (требования проекта ЭВМ
результатом селективного доступа к данным.
Ограниченное рабочее множество. В результате
результатом селективного доступа к данным.
Ограниченное рабочее множество. В результате
селективного доступа рабочее требуемые в основной памяти ограниченным. Это требование связанных систем, так как
селективного доступа рабочее требуемые в основной памяти ограниченным. Это требование связанных систем, так как
множество данных (данные, в данное время) является особенно важно для слабо при слабом связывания
множество данных (данные, в данное время) является особенно важно для слабо при слабом связывания
нельзя использовать
доступа, не заданной в
Высокие требования
Важно понимать, что дедуктивных выводов
нельзя использовать
доступа, не заданной в
Высокие требования
Важно понимать, что дедуктивных выводов
преимущества селективности момент компиляции.
к характеристикам баз данных, системы, выполняющие миллионы в 1 с (требования проекта ЭВМ
преимущества селективности момент компиляции.
к характеристикам баз данных, системы, выполняющие миллионы в 1 с (требования проекта ЭВМ
пятого поколения), будут, вероятно, предъявлять весьма высокие требования к базам данных. Например, для вычисления рекурсивных правил требуется большое число взаимодействий с базой данных. Это отличает их от типичных транзакционных систем баз данных, обслуживающих тысячи транзакций в 1 с, каждая из которых ответственна за выполнение небольшого числа операций ввода-вывода.
Поддержка названных выше особенностей расширяет спектр применения экспертных систем и других методов искуственного интеллекта; при этом решаются также классические задачи на базах данных (такие, как задачи о комплектующих и антитрестовского законодательства). Эти задачи описаны в гл. 3.
Литература
Взаимосвязь логического программирования и баз данных исследуется с ноября 1977 г. , когда в Тулузе состоялась конференция по логике и базам данных; за этим событием последовали две конференции по перспективам теории баз данных в 1979 и 1982 гг. Труды конференций [Gall 78, Gall 81, Gall 84а] содержат фундаментальные работы в этой области. Возможно, наилучший обзор результатов в логике и базах данных, достигнутых до 1984 г. , содержится в работе [Gall 84b]・
Два события характеризуют интерес к этой области:
японский проект архитектуры ЭВМ пятого поколения, базирующейся на Прологе как основном языке программрования и на реляционной модели представления
данных [Itoh 86];
рост интереса сообщества, занимающегося теорией баз данных, к логическим запросам и обработке
рекурсивных запросов [Ullm 85а]•
Одновременно интерес к экспертным системам баз данных, характеризующихся более прагматическим подходом, был представлен новой серией конференций по экспертным системам баз данных (EDS), организованным Л. Кершбергом [Kers 84, Kers 86, Kers 88].
Рабочие семинары по системам управления базами знаний и дедуктивным системам баз данных были проведены в Исламораде [Brod 86], Вашингтоне [Mink 88 ], Венеции [Epsi 86] . Хорошие обзорные статьи по методам обработки рекурсивных запросов
представлены Гардареном и [Roel 87]. проектов по работе [Zaniпредставлены Гардареном и [Roel 87]. проектов по работе [ZaniБансилоном и Рамакришнаном [Banc 86b], Саймоном [Gard 87], а также Роелантсом Сравнение выполняемых исследовательских интеграции баз данных и логики дано в 87]・
представлены Гардареном и [Roel 87]. проектов по работе [Zani
представлены Гардареном и [Roel 87]. проектов по работе [Zani
Глава 2. ВВЕДЕНИЕ В РЕЛЯЦИОННЫЕ БАЗЫ ДАННЫХ И
ЯЗЫК ПРОЛОГ
Обзор реляционных баз данных
Реляционная модель была предложена в 1970 г. Коддом и представляет собой fнаряду с сетевой и иерархической) одну из трех моделей данных, поддерживаемых в настоящее время большинством систем управления базами данных бСУБД). Многие понятия данной книги применимы,к любой системе баз данных, но реляционная модель была выбрана из-за ее простоты и формализованности.
Реляционная модель
В реляционной модели данные организованы в отношения, которые определяются следующим образом: пусть и】D^ - множества, называемые доменами (не обязательно различными), D - декартово произведение %% тогда отношением R, определенным на
D D , является любое подмножество D (п
п
представляет собой арность R).
Мы предполагаем, что домены являются конечными множествами данных. Таким образом, если специально не оговорено, мы считаем, что отношения конечны. Элементы отношений называются кортежами; пусть <d^dn> - кортеж отношения R и d wD d wD. Число 11nn
кортежей в R называется кардинальностью отношения. Заметим, что отношение представляет собой множество, поэтому все кортежи в отношении различны и упорядочены произвольным образом. Пустое множество представляется специальным нулевым fили пустым) отношением. Отношения также можно рассматривать как таблицы; при этом кортежи представляют собой строки таблиц. Имена колонок отношений называются атрибутами.
Упорядоченное множество всех атрибутов отношения R есть схема R. Мы будем обращаться к атрибутам отношений по имени или по занимаемой в схеме отношения позиции fномеру столбца/
Ключом отношения R называется подмножество К атрибутов R, значения которых являются уникальными в отношении; с помощью ключа, таким образом, можно идентифицировать кортежи отношения. Ключ должен быть
минимальным: он не должен включать атрибуты, не требующиеся для уникальной идентификации кортежей отношения. Поскольку отношения есть множества кортежей, ключ должен существовать всегда fno крайней мере множество всех атрибутов отношения составляет ключ). Каждое отношение может иметь несколько ключей. Наличие ключа является семантическим свойством, которое должно поддерживаться для любых значений кортежей отношения.
Пример 2.1. В университете имеются группы студентов, профессора, предметы, курсы, факультеты, на которых предметы изучаются, оценки. Назовем эти домены соответственно STUDENT, PROFESSOR, COURSE, YEAR, DEPARTMENT, GRADE. На рис.2.1 представлены два отношения OFFERING и EXAM, определенные на этих доменах.
OFFERING
PROFESSOR
COURSE
YEAR
DEPARTMENT
Date
Databases
1987
Computer Science
Saunders
Geometry
1985
Mathenmatics
Floyd
Automata Theory
1987
Computer Science
Brill
Chemistry
1986
Chemistry
Brill
Chemistry
1887
Chemistry
EXAM
STUDENT
COURSE
YEAR
GRADE
Jones
Automata Theory
1987
Z
Smith
Databases
1987
В
Delsey
Chemistry
1986
Л
Carey
Chemistry
1986
В
Jones
1
Geometry
1887
С
Рис.2.1. Отношения OFFERING и EXAM.
Схемы отношений OFFERING и EXAM:
OFFERING(PROFESSOR, COURSE, YEAR, DEPARTMENT). EXAM (STUDENT, COURSE, YEAR, GRADE).
В приведенном примере мы подразумеваем, что каждый предмет в течение года преподает один и тот же профессор fтак как это является семантическим -войством рассматриваемого университета): следова- гельно, ключом отношения OFFERING является пара
атрибутов COURSE, YEAR. Каждый профессор может преподавать один и тот же предмет на протяжении многих лет и несколько предметов в течение одного года, следовательно, пары
PROFESSOR, COURSE и PROFESSOR, YEAR
не являются ключами. Поскольку мы предполагаем, что каждый студент сдает экзамен по конкретному предмету не более одного раза, ключом отношения EXAM является пара STUDENT, COURSE.
Реляционные языки
Рассмотрим теперь языки, предназ каченные для манипулирования отношениями и поиска в базе данных. Запрос, выраженный на некотором языке запросов, определяет порцию данных, содержащуюся в базе данных. Для выражения запросов над отношениями существуют два основных формальных аппарата.
Реляционная алгебра: Определяется с помощью нескольких операторов, применяемых к отношениям и дающих в результате другие отношения. Этот формальный аппарат ориентирован на множества, поскольку каждый оператор применяется к отношению в целом. Порядок, в котором операции реляционной алгебры указаны в запросах, определяет также порядок применения этих операций к баз е данных. В действительности многие процедуры оптимизации запросов основаны на эквивалентных преобразованиях, позволяющих одни выражения реляционной алгебры заменять другими, выполняемыми СУБД более эффективно.
Реляционное исчисление: Запросы выражаются с помощью формул логики предикатов первого порядка над кортежами базы данных; результатом запроса является множество кортежей, удовлетворяющих формуле. Этот формальный аппарат ориентирован на покортежную обработку, так как каждая формула определяет свойства, характеризующие кортеж результата. Реляционное исчисление представляет собой непроцедурный язык запросов, поскольку выражение запроса в исчислении не предлагает метода вычисления результата запроса.
Ниже мы определим операции реляционной алгебры, которые в дальнейшем используются в книге для выражения запросов над реляционной базой данных. Каждая операция реляционной алгебры имеет одно или два отношения-операнда и вырабатывает одно результирующее отношение. Операции реляционной алгебры могут быть скомпонованы в алгебраические выражения
произвольной сложности, которые используются для задания запросов.
Простейшими (базовыми) операциями реляционной алгебры являются: выборка fселекция), проекция, декартово произведение, объединение и разность. Набор реляционных операторов является реляционно полным в том смысле, что его выразительная мощность эквивалентна мощности реляционного исчисления. Если мы исключим из перечисленных выше операторов разность, мы получим подъязык, называемый Положительной реляционной алгеброй (ЯЛ* ).
Выборка. Пусть F - допустимая формула, выражающая предикат выборки. При выборке допустимые формулы представляются комбинациями простых предикатов, каждый из которых есть сравнение либо двух атрибутов, либо атрибута и константы. Таким образом, результатом выборки из отношения R будет множество кортежей R, для которых формула F приобретает значение истина.
Проекция. Пусть R имеет п атрибутов. Предположим, что i]1 k, k s n - имена f или порядковые номера) атрибутов R. Пусть D^- домен 1-го атрибута. Тогда результатом проекции ПRбудет
отношение, имеющее к атрибутов i】1к, Кортежи результирующего отношения получаются из кортежей отношения-операнда с помощью исключения значений атрибутов, не принадлежащих указанному списку. Отметим, что кардинальность результата проекции может измениться, поскольку одинаковые кортежи выбрасываются.
Декартово произведение. Пусть R имеет г атрибутов и S имеет s атрибутов; тогда R х S будет отношением с r+s атрибутами со схемой, полученной с помощью конкатенации схем R и S, и кортежами, образованными конкатенацией кортежей R и S всеми возможными способами.
Объединение. Данная операция применяется к двум отношениям с одинаковой схемой и в результате дает отношение с той же схемой. Для данных отношений R м S R и S представляет собой множество кортежей, пр и надлежащих объединению f в теоретике-множественном смысле) R и S.
Разность. Эта операция также применяется к отношениям с одинаковой схемой и в результате дает отношение с той же схемой. Для данных отношений R и S, R-S представляет собой множество кортежей, пр и на дл ежащих Разности fв теоретике-множественном смысле) R и S.
Следующие операции являются производными от операций, которые мы определили выше.
Соединение. Пусть 尸 一 формула, представляющая
собой логическую комбинацию сравнений атрибутов из. двух отношений-операндов. Соединение определяется на основе декартова произведения и выборки:
RXf S = j(R х S)
Если формула F включает только предикаты равенства, то операция называется соединением по равенству (equi- join). Естеств енно е соединение R и S (RS)
соответствует соединению по равенству только в том случае, если все атрибуты обозначень! их именами и все пары с одинаковыми именами включены в равенства. В естественном соединении одна из пары входящих в равенство столбцов исключается из результата.
Полусоединение. Пусть F - предикат соединения. Полу соединение R и S (R XI S) определяется как
= nschema(R)гкх^;.
где Schema(R) обозначает схему отношения R. Из данного определения следует, что результат операции полусоединения есть отношение, содержащееся в отношении - первом операнде операции. Естественное полусоединение определяется как
R X S = П ,口、(R XS) •Schema ( R)
На рис. 2. 2 показаны примеры применения каждой из операций.
Рассмотрим теперь запросы, соответствующие алгебраическим выражениям, включающим более одной операции. Будем использовать определенные в примере 2. 1 отношения OFFERING и EXAM.
Пример 2.2. Рассмотрим следующие запросы к базе данных:
а) Мы хотим знать всех студентов, получивших оценку Л в 1987 г.:
П(аEXAM)
STUDENT I GRADE = A A YEAR= 1 987丿
Ответом на этот запрос будет отношение с единственным кортежем:
STUDENTJones
Исходные отношения:
R
Al
A2
A3
a f f
b d e
c h h
Базовые операции;
43
^А1,АЗ^
Л1 I Л2
f
d
h
a
c
f
e
力
h
R x S
Al
A2
Z3
Bl
B2
a
b
c
d
e
a
b
c
g
h
a
b
c
f
m
f
d
h
d
e
f
d
h
g
h
f
d
h
f
m
f
e
h
d
e
f
e
h
g
h
f
e
h
f
m
旧 Z2=H2 S
Al
A2
A3
Bl
B2
f
e
h
d
e
Производные операции:
S и Т
Bl I В2
b g
ehm e md gfb g
"К A3=B2 s
Al
Л2
A3
f
d e
h h
Рис.2.2. Примеры алгебраических операций.
6) Мы хотим знать имена и оценки всех студентов, которые сдали экзамены по одному из предметов, преподаваемых на .факультете Computer Science.
吗TUDENiRADE
(EXAM X (JOFFERING))
Ответом на этот запрос будет отношение
STUDENT
GRADE
Jones
л
Smith
В
Заметим, что естественное соединение EXAM и OFFERING соответствует формуле COURSE = COURSE Л YEAR = YEAR, включающей два атрибута с одинаковыми именами из двух отношений-операндов.
в) Мы хотим знать всех студентов, занимающихся с профессором Бриллом. Запрос, выраженный в реляционной алгебре, будет таким:
П a (EXAM IX OFFERING) STUDENT PROFESSOR = Brl 1 丿
Заметим, что это выражение эквивалентно следующему:
nsTUDENT(EXZM х %r°fessor=be】 OFFERING)
Второе выражение вычисляется более эффективно, поскольку условие выборки непосредственно применяется к отношению OFFERING и сокращает, таким образом, его размер перед соединением. Это служит примером использования эквивалентных преобразований алгебраических выражений с целью повышения эффективности вычислений. Результатом запроса является отношение
STUDENT
Delsey Carey
Реляционная алгебра не является ,г др у же ст в еиным,г языком, поскольку выражения реляционной алгебры (или исчисления) не всегда понятны среднему пользователю. Обычно реляционная алгебра используется для внутреннего представления запросов, а для взаимодействия с базой данных были разработаны языки запросов, ориентированные на пользователя. В общем случае наиболее популярным реляционным языком запросов является SQL, ставший стандартом фактически для реляционных СУБД. Представим кратко так называемый блок запроса - наиболее типичный оператор языка. В языке SQL блок имеет форму
SELECT < список_дтрибутов >
FROM < отношения > WHERE < предикат >
Блок SQL имеет простую интерпретацию в реляционной алгебре: он эквивалентен выполнению операции выборки с предикатом из предложения WHERE над декартовым произведением отношений, указанных в предложении FROM» и последующей проекции результата на список атрибутов из предложения SELECT. Очевидно, что если предикат из предложения WHERE включает условие соединения, декартово произведение заменяется соединением; декартово произведение не требуется, если предложение FROM содержит одно отношение.
Выразительная мощность языка SQL обеспечивается возможностью вложения блоков друг в друга с помощью включения целых блоков в предикат предложения WHERE. Ниже приводится пример вложения блоков:
SELECT < спи сок атрибутов > FROM < отношения > WHERE < атрибут > IN
SELECT < спи сок _атри бутов > FROM < отношения > WHERE < предикат >
Как мы уже отмечали, SQL является наиболее популярным реляционным языком запросов; другими языками запросов являются QUEL и QBE.
Пример 2.3. Переведем в SQL предыдущие алгебраические выражения. Запрос а) выражается в SQL следующим образом:
SELECT STUDENT FROM EXAM WHERE GRADE=A AND YEAR=1987
Запрос б) выражается с помощью вложенных блоков следующим образом:
SELECT STUDENT, GRADE FROM EXAM WHERE <COURSEtYEAR>= SELECT COURSE, YEAR FROM OFFERING WHERE DEPARTMENT=Computer Science
Взглядом называется отношение, которое не хранится в базе данных непосредственно, а определяется с помощью некоторого выражения языка запросов. Такое
выражение может ссылаться на отношения базы данных или другие взгляды. Если взгляд определен, он может использоваться для поиска данных так же, как обычное отношение базы данных. СУБД обрабатывает композцию запросов, объединяя пользовательский запрос с определением взгляда и получая новое выражение запроса, которое оперирует только с отношениями базы данных.
Пример 2.4. Примером взгляда, определенного над университетской базой данных и содержащего сведения об оценках по математике, является выражение:
МО=П(EXAM Xlf<r —… OFFERING))
Этот взгляд эквивалентен отношению с атрибутами STUDENT, COURSE и GRADE, представляющему все оценки студентов по предметам, изучаемым на математическом факультете. Поскольку взгляд MG определен, его можно использовать в запросах как и другие отношения. Например,
П”MG)
STUDENT’ course=geometryagrade=c 丿
запрашивает имена всех студентов, получивших оценку С по геометрии. В нашем случае ответом на этот запрос будет
STUDENTJones
Заметим, что MG не хранится непосредственно, но его определение объединяется с запросом, чтобы переформулировать запрос в терминах отношений OFFERING и EXAM; преобразованный запрос затем выполняется.
Пролог: язык программирования в логике
Ниже кратко описаны некоторые особенности языка Пролог. Структура языка основана на понятиях атома, переменной, функтора, предиката, терма, литерала и дизъюнкта.
Атомом называется строка буквенно-цифровых символов конечной длины, начинающаяся со строчной буквы. Примерами атомов являются: book, gearge, 'George', х12ор.
Константой называется атом или число fтакое, как О, 1213, 4).
Переменной называется строка буквенно-цифровых символов конечной длины, начинающаяся с прописной буквы. Примерами переменных лвляются: Book, X, Var. Считается, что специальная переменная 一 , называемая анонимной, обозначает любую неименованную переменную.
функтор характеризуется своим именем fкоторое есть атом) и арностью, т. е. числом аргументов. Функтор может быть оператором (например, +), или же именем предиката (^ или ancestor). Каждый предикат определяет отображение домена D, на котором он задан, в множество значений {true, false}. Например, мы можем применить ancestor к паре (bill, joe9, и его значение будет true, если Bill является предком Joe, и false, в противном случае.
Атомы и переменные являются термами. Структурированные термы строятся рекурсивно с помощью применения функторов к другим термам. Следовательно, предикаты Пролога также являются термами. Терм или его отрицание называется литералом, если самым внешним символом терма является предикат. Примеры литералов: likes(georgetтагу) или member(XtL).
Дизъюнкт Пролога представляет собой совокупность литералов. Пролог-программа есть совокупность дизъюнктов. Переменные являются локальными по отношению к дизъюнктам, т. е. область действия каждой переменной ограничена предложением, в котором она появляется. Существуют три типа дизъюнктов:
Правила. Правилом называется дизъюнкт, состоящий из головы, представляющей собой положительный литерал, из тела, образуемого несколькими литералами, разделенными запятыми. Голова отделяется от тела символом :-. Правило выражает условный дизъюнкт. Например, правило
likes(georget У) : - voman(Y)t likes(Yt books).
утверждает, что Джорджу нравится любая женщина при условии, что она любит книги. Подразумевается, что переменные из головы правила связаны квантором всеобщности, в то время как переменные из тела связаны квантором существования. Запятая между литералами в теле правила означает конъюнкцию. Тело правила может быть также и в дизъюнктивной форме. Например, правило
likes(mary, У) :- nice(Y);loves(Yt cats).
утверждает, что Мэри нравятся те, кто хороши собой или любят кошек.
$акты. Фактом называется дизъюнкт, состоящий из единственного литерала. Такое утверждение является аксиомой, поскольку истинно вне зависимости от каких- либо условий. Например, likes(деогде, тагу), говорит, что тот факт, что Джорджу нравится Мэри, является истинным в программе.
Цели или дизъюнкты без головы представляют собой запросы. Когда цель поступает в механизм Пролога, последний пытается доказать истинность цели, используя при этом факты и правила, присутствующие в программе. Цели в Прологе всегда предшествует символ ?-. Например, likes(george, 1ису). предписывает механизму Пролога попытаться доказать, что Джорджу нравится Люси, используя правила и факты программы.
Механизм Пролога есть машина вывода, оперирующая данной Пролог-программой, с тем, чтобы доказать истинность данной цели. Цель считается доказанной, если она сопоставляется голове некоторого дизъюнкта и каждый из литералов тела этого дизъюнкта fесли таковые имеются), рассматриваемых как цель, также доказан.
В этом смысле цели упорядочены в дерево доказательства. Вычисления выполняются интерпретатором Пролога путем нисходящего обхода этого дерева методом псначала вглубь". В этом контексте сопоставление двух литералов следует неформально трактовать как факт существования такого варианта означивания переменных в обоих литералах, которое делает их значения равными.
Наиболее важными особенностями Пролога являются рекурсия и бэктрекинг (backtracking).
Пролог позволяет определять рекурсивные предикаты. Предикат называется рекурсивным, если его определение содержит сам предикат. Примером является следующая программа определения принадлежности элемента списку:
member(X, /Х|」)•
member (X, [__\Y] ) : - member (X, Y).
Первый аргумент предиката member представляет собой переменную, второй - список, обозначаемый заключением его элементов в квадратные скобки / J. Первый факт сообщает, что X является элементом списка, если он является его заголовком. Второй дизъюнкт говорит, что X является элементом списка, если он является элементом его хвоста. Заметим, что здесь используются анонимная переменная — и оператор связывания списка I.
Если во время обхода дерева доказательства Пролог встречает цель, которая невыполнима, он вновь просматривает свой собственный путь с помощью дви-
жения назад вдоль последней ветви дерева и продолжает затем обход, стараясь снова удовлетворить цель слева от ветви, которая только что дала отрицательный результат. Этот процесс называется бэктрекингом.
Назначение бэктрекинга состоит в обеспечении обхода дерева вывода со всеми возможными вариантами означивания переменных. Тем не менее иногда это существенно замедляет вычисления. Для компенсации подобных ограничений в Пролог были введены конструкции процедурного типа. Это так называемые нелогические примитивы, содержащие управляющую информацию относительно того, как должен выполняться поиск.
Наиболее важным из этих примитивов является cut (!), используемый для управления бэктрекингом. Его действие состоит в том, что переменные, появляющиеся в текущем правиле слева от cut, после означивания становятся неизменяемыми: означивания, выполненные механизмом Пролога по достижении cut больше не могут быть изменены.
Другими нелогическими примитивами являются, например, предикаты retract и assert, которые соответственно удаляют и добавляют дизъюнкты в программу, и предикат fail, который вызывает при выполнении правила неудачу.
Пример 2.5. Ниже мы приведем несколько примеров в стиле Пролога. Более сложные примеры, демонстрирующие мощность Пролога как языка программирования и как языка баз данных, будут даны в гл. 3.
Рассмотрим следующее определение факториала:
fact (Ot 1).
fact(Nf F) : - М is N-2, fact(Mt G)t multiply(Gt N, F).
Первый дизъюнкт определяет, что факториал от О есть 1. Второй дизъюнкт говорит о том, что мы можем вычислить факториал F от N как факториал G от М, где М= N-2, с помощью рекурсивного вызова для вычисления G и последующего умножения G на N для вычисления F.
Предположим теперь, что мы имеем цель fact(1, Answer). В этом случае программа будет работать бесконечно, пытаясь рекурсивно определить
fact(^2, G).
fact(-3, G,)•
fact (-4, G" ). •.• и т. д.
Следующая исправленная версия этой программы присваивает значение 1 факториалу от всех отрицательных чисел:
fact(Nt 1):二 Nv=。
fact(NtF) :~
not(N<=0), Я is N-l, fact(M, G), multiply(Gt N, F).
Другая, более эффективная версия программы использует cut :
.fact(Nt 1) := NV=。, / • fact(NtF) : - M is N-2, factfЯ, G)t multiply(Gt N, F)
В первом правиле cut блокирует поиск решений для отрицательных N. Второе правило используется, если только литерал "N<=0" недоказуем. Эта версия не допускает двойного вычисления Nv=。, но ухудшает наглядность отдельных дизъюнктов. Заметим, что в обеих правильных версиях программы мы могли бы определить if-then-else с помощью отрицания или наоборот, с помощью cut.
Литература к главе
Реляционная модель данных была определена Коддом [Codd70]. Понятия баз данных и систем, включающие систематическое рассмотрение реляционной модели и алгебры, описываются в нескольких учебниках Дейта [Date83, Date86], Корса и Зильбершатца [Kort86], Ульмана [Ullm82], и Видерхольда [Wied87]. Систематический подход к теории баз данных представлен Мейером [Maie83]. Ахо, Сэгив и Ульман [Aho79b] исследуют свойства эквивалентности алгебраических выражений. Язык запросов SQL представлен Чемберленом и др. [Cham7 б]; трансляция SQL в реляционную алгебру описана Чери в [Ceri85].
Основания математической логики можно найти в фундаментальных книгах Клини [К1ееб7] и Мендельсона [Mend64]. Основы автоматического доказательства теорем и принципа резолюции можно найти в статьях Робинсона [Robi68] и в книге Ченя и Ли [Chan73 ] . Основные понятия логического программирования даны в статьях Ван Емдена и Ковальского [VanE76] и в книге Ллойда [Ыоу87] . Хорошим введением в язык программирования Пролог является статья Колмироо [Colm85] и в учебниках Клоксина и Меллиша [С1ос81], а также Стерлинга и Шапиро [Ster86].
Часть I. СВЯЗЫВАНИЕ ПРОЛОГА С РЕЛЯЦИОННЫМИ
БАЗАМИ ДАННЫХ
Ниже показано, что Пролог представляет собой мощный формализм для выражения запросов и алгоритмов. Рассматриваются две классические задачи - антитрестовская проблема и задача о комплектующих - которым присуща рекурсия. Следовательно, они не могут быть реализованы с помощью стандартных языков запросов. Определены архитектура и механизмы, необходимые для связывания механизма Пролога и системы управления базой данных. Для простоты выбрана реляционная модель данных, поскольку многие существующие интерфейсы между Прологом и базами данных в настоящее время используют реляционные базы данных. Реляционная модель данных и соответствующий ей язык являются наиболее удобными средствами для выражения свойств этих интерфейсов. Данные методы связывания легко распространить на нереляционные системы. Наконец, дан обзор некоторых существующих прототипов связанных систем, разработанных в основном в промышленных и академических центрах.
ГлаваГлава3. ПРОЛОГ КАК3. ПРОЛОГ КАКЯЗЫК ЗАПРОСОВЯЗЫК ЗАПРОСОВ
Глава
Глава
3. ПРОЛОГ КАК
3. ПРОЛОГ КАК
ЯЗЫК ЗАПРОСОВ
ЯЗЫК ЗАПРОСОВ
В гл. 1 рассмотрены основные причины для интеграции технологии баз данных и логического программирования, установлено соответствие между основными чертами реляционных баз данных и языков логического программирования. Здесь мы напомним некоторые важные свойства Пролога как языка запросов, которые существенно увеличивают выразительную мощность классических языков запросов, основанных на реляционной алгебре или исчислении.
интенсиональное определение базы данных. Правила в языке Пролог являются мощным средством для определения и использования отношений, полученных путем логического вывода fтакже называемых взглядами). Множество выведенных отношений, определенных с помощью правил Пролога, образуют интенсиональную базу данных (MEJJ). Примеры приведены в следующем разделе.
Рекурсия. Предикаты и правила в Прологе могут задаваться рекурсивно. Поэтому выразительная мощность Пролога как языка запросов строго выше выразительных возможностей традиционных языков запросов.
Неполная информация. Можно отмечать несуществен-
ные значения в правилах и фактах программы с помощью анонимной переменной __.
Упорядоченность правил и фактов в базе. Программист^ использующий Пролог, может упорядочить факты и правила наиболее подходящим образом с точки зрения вычислительной эффективности. Механизм Пролога чувствителен к порядку правил и фактов.
Управление выводом. Пролог позволяет программисту увеличить эффективность программ с помощью некоторых процедурных средств, таких, как предикат отсечения.
Отрицательная информация. Пролог позволяет выразить отрицательную информацию. Например, такие литералы, как not(likes(george, vanessa)) или not(member(Xt 1)), являются допустимыми в правой части правила. .
Первые два свойства присущи любому языку логического программирования, тогда как остальные - только Прологу. Конечно, как показано в гл.2, Пролог расширяет возможности ,гчистого,г логического программирования за счет нелогических средств, таких, как предикат отсечения. Более того, использование отрицания в теле правил приводит к программам, не являющимся хорновскими. Нелогические средства вводят процедурные элементы, например, для упрощения записи альтернативных условий в программах fконструкции if then-else^ см. упр. 2.5). Процедурные элементы придают программам на Прологе большую выразительность, но также и меньшую надежность, так как проверка корректности ложится на программиста, и, как это видно из гл. 2, неверно построенные программы на Прологе могут даже не завершаться.
В главе представлены два примера типичних задач, которые могут быть решены весьма естественным образом, если использовать всю вычислительную мощность Пролога. Эти задачи существенно рекурсивные. Более того, они содержат процедурные элементы fобработку списков, арифметические операции, альтернативные участки), которые отличают их от чисто хорновской реализации. Обе задачи подразумевают наличие базы данных, которая может хранить большое количество данных.
Антитрестовская задача
Допустим, что некоторая фирма производит товары, которые продаются в определенном географическом районе или на рынке. Тогда, можно считать, что эта фирма владеет определенной квотой на данном рынке. Фирма также может контролировать квоту рынка, если ей
принадлежит основная часть акций другой фирмы, которая в свою очередь контролирует часть рынка.
Многие страны используют стратегии экономического регулирования, не позволяющие фирмам непосредственно или косвенно контролировать квоту рынка более заданной. Фирмы, пытающиеся обойти это правило, образуют трест. Несмотря на антитрестовские ограничения, фирмы часто нарушают закон, так как косвенное владение акциями может включать сложные цепочки из различных фирм, каждая из которых контролирует следующую в цепочке, поэтому определить наличие треста очень не просто вследствие запутанной схемы отношений собственности.
Например, рассмотрим граф на рис.3.1, показывающий отношения собственности внутри упрощенной коммерческой системы, состоящей из 11 фирм. Каждая фирма имеет в качестве названия имя цветка и функционирует на рынке игрушек. Для каждого узла, представляющего фирму, число в скобках после названия - квота рынка в процентах, пр и надлежащая фирме непосредственно. Направленная дуга fстрелка) <Л, В> графа определяет, что фирма Л владеет акциями фирмы В, а метка этой дуги задает процент акций, принадлежащий Л.
Так, например, фирма violet fфиалка) имеет непосредственную квоту рынка 8%. Кроме того, она владеет акциями фирм hyacinth fгиацинт) (51%), orchid fорхидея) (20%), gardeniafгортензия) ,30%) и lily fлилия) (51%). Фирма orchid fорхидея) владеет непосредственно 13% рынка игрушек, но не имеет акций других фирм.
Рис.3.1. Пример схемы отношений собственности.
Напротив, фирма gardenia fгортензия) не имеет непосредственной квоты на рынке, но владеет 60% акций фирмы тюльпан (tulip), которая в свою очередь имеет 12% непосредственной квоты на рынке и акции двух других фирм - бегонии (begonia)(25%) и азалии
(azalea) (20%). Так как бегония сама имеет акции азалии, то тюльпан участвует в деятельности азалии как непосредственно, так и косвенно fnepes бегонию/
Информация, содержащаяся в графе отношений собственности, может быть представлена с помощью предикатов Пролога, соответствущих отношениям базы данных. Предикат company(atbt п) означает, что а является фирмой, которая имеет непосредственную квоту п% на рынке товаров Ъ. Предикат
has__shares ( compl t comp2t n ) означает, что фирма compl владеет nW акций фирмы сотр2. Наконец, предикат trust__limit(at b) означает, что для рынка а задана предельная квота Ь, достижение которой приводит к возникновению треста.
Если фирма Л непосредственно владеет более чем 50% акций фирмы В, то говорят, что Л контролирует В. В этом случае Л контролирует все квоты рынка, которыми владеют В, и фирмы, контролируемые В. Таким образом, задача определения нарушения антитрестовских ограничений данной фирмой явлется существенно рекурсивной. Ниже приводится Пролог-программа, которая вычисляет суммарную квоту рынка для заданной фирмы fс помощью правила market) и определяет нарушения антитрестовских ограничений fс помощью правила findtrust).
Правило findtrust можно применять для запуска программы, во время которого последовательно генерируются названия и проценты рынка для фирм, образующих трест на некотором рынке Mrkt. Это правило очень простое: во-первых, извлекается величина предельной квоты для рынка Mrkt, во-вторых, вызывается цель market для вычисления суммарного процента рынка, принадлежашего фирме Comp; в-третьих, сравнивается полученная сумма с предельным значением. Цель успешна, если антитрестовские ограничения нарушены, и неуспешна в противном случае.
Выполнение цели market приводит к вычислению квоты рынка Total, принадлежащей фирме Compl. Сначала определяется непосредственная квота рынка Quota, принадлежащая фирме, а затем генерируется список List всех фирм, непосредственно контролируемых фирмой Compl. После чего выполняется анализ для каждой фирмы из списка List с помощью вызова цели inquire.
Список List создается встроенным предикатом
findall, который отыскивает все фирмы Сошр2, контролируемые фирмой Compl. Встроенный предикат findall является системным предикатом, который всегда вычисляется успешно и имеет только одно решение (т.е. при бэктрекинге повторный вызов всегда неуспешен). Его первый аргумент должен быть неозначенной переменной X. Второй аргумент должен быть предикатом, содержащим ту же переменную X. Третий аргумент является списком всех значений X, которые удовлетворяют этому предикату. Пролог-машина рассматривает предикат как цель, а значения, удовлетворяющие предикату, собираются в список. В данном случае Сотр2 - неозначенная переменная, а предикат controlled имеет значение "истина", если значением его первого аргумента является фирма, контролируемая фирмой, заданной вторым аргументом, так как последняя владеет более чем 50% акций первой.
controlled(Сотр2,Compl):-
has__shares(Compl, Comp2, N), N>50.
market(Compl,Mrkt,Tot al;:-
company(Compl,Mrkt,Quata), findall(Comp2, controlled(Comp2,Compl), List), inquire(Li st,Mrkt,Quota,Total).
inquired ],Mrkt, Quota, Quota ).
1 nqui re( [Head /Tail ],Mrkt, Quota, Total ):-
market (Head, Mrkt,Quota2 ), Quota3 is Quota2^Quota, inquire(Tail,Mrkt,Quota3,Total).
findtrust(Mrkt,Comp,Total):-
trust_limit(Mrkt,Thershold), market(Comp,Mrkt,Total), Total>Thershold.
Рассмотрим граф на рис.3. 1. Предположим, что Compl =violet. Тогда List = [hyacinth, Шу]. Отметим, что список будет содержать только имена фирм, непосредственно контролируемых данной фирмой, т. е. только тех, которые удалены на расстояние одной дуги от фирмы Compl.
Два правила, определяющие предикат inquire, являются основными правилами программы. Второе правило просматривает список фирм, контролируемых анализируе мой фирмой, с помощью прохода первого уровня графа, показанного на рис.3.1. Анализ списка выполняется как обработка головы списка и рекурсивного вызова правила inquire для хвоста списка. В начальный момент переменная Quota содержит квоту рынка, непосредственно принадлежащую анализируемой фирме. Рекурсивные вызовы цели market внутри цели inquire последовательно обрабатывают все фирмы, содержащиеся в списке, суммируя их акции. Первое правило завершает рекурсию, присвоив последней переменной последнее вычисленное значение квоты.
Отметим, что это - взаимная рекурсия, так как цель inquire вызывает цель market» которая в свою очередь опять вызывает цель inquire. На каждом шаге рекурсии вызов цели market сдвигает пространство поиска на один уровень графа вниз, в то время как вызов inquire просматривает вершины графа, лежащие на одном уровне. Для этой программы взаимная рекурсия не является строго необходимой, так как правила можно записать в виде, не требующем взаимной рекурсии. Но это приведет к более запутанной программе.
Наконец отметим, что эта программа предполагает ацикличность отношения has__share. Тем самым предполагается, что отображение отношения собственности фактически является ориентированным ациклическим графом. На самом деле программа также является корректной при менее жестких ограничениях, а именно при условии ацикличности отношения controlled. Это условие непосредственно следует из предыдущего.
Рассмотрим выполнение программы для экстенсиональной базы данных. Информация, соответствующая рис. 3. 1, изображена в форме отношений на рис. 3. 2.
Ниже приводится сеанс интерактивного взаимодействия с этой Пролог-программой:
?- findtrust(toys, gardenia. Total). Total=25.
?- findtrtist(toys, violet. Total ). Total=33.
?- findtrust(toys, tulip. Total). no.
?~ findtrust(Market, begonia. Total). Market=toys Total=34.
HAS]
3HARES
COMPANY
TRUSTJLIMIT
violet
hyachint
51
violet
toys
8
toys
|20
violet
orchid
20
hyachint
toys
7
cars
38
violet
gardenia
30
opel
cars
33
gasoline
40
violet
lily
51
orchid
toys
13
11
1
hyachint
daisy
30
gardenia
toys
0
hyachint
iris
70
tulip
toys
12
gardenia
orchid
51
ford
cars
30
fiat
opel
2
daisy
toys
8
gardenia
tulip
60
iris
toys
12
lily
rose
59
lily
toys
2
tulip
azalea
20
rose
toys
4
tulip
begonia
25
azalea
toys
19
begonia
azalea
60
begonia
toys
15
—
fiat
cars
35
Рис.3.2. Реляционное представление графа отношений собственности, изображенного на рис.3.1.
Задача о комплектующих
Список комплектующих деталей некоторого изделия - это описание всех частей, из которых состоит изделие. Список построен сверху вниз до уровня минимальной детализации, где уже какая-либо декомпозиция невозможна. Компонента изделия может встречаться несколько раз в списке комплектующих данного основного изделия, причем на различных уровнях дерева компонент. Производящие фирмы широко используют списки комплектующих, так им требуется хранить информацию о компонентах их изделий. Сильно упрощенное представление компонент двигателя внутреннего сгорания показано на рис.3.3.
Двигатель (engine; состоит из четырех клапанов (valve9, четырех свечей зажигания (sparkpklug9, одного коленчатого вала (crankshaft) и четырех цилиндров (cylinder). Эти элементы в свою очередь также декомпозируются. Цилиндр содержит поршень (piston) и тягу (connecting - rod). Поршни содержат винты (sere”) и прокладки (gasket)• Тяга содержит винты и болты (bolt)• Элементы графа отмечены числом, обозначающим число вхождений подэлемента в элемент.
Ниже приведена программа, которая вычисляет для каждой вершины дерева комплектующих список его подчастей и суммарное число вхождений каждой компоненты.
Рис.3.3. Комплектующие для двигателя сгорания.Рис.3.3. Комплектующие для двигателя сгорания.внутреннего
Рис.3.3. Комплектующие для двигателя сгорания.
Рис.3.3. Комплектующие для двигателя сгорания.
Предикат сотр(prodl, prod2tqty, flag) утверждает, что изделие prodl содержит qty экземпляров изделия prod2. Для флага flag подразумевается значение b fосновной элемент) или с fсоставной элемент). Основные элементы -листья дерева, а составные элементы - внутренние вершины. На самом деле флаг не является необходимым: он используется только для упрощения.
Программа нахождения элементарных компонент запускается с помощью цели lookfor с переменной Prod, означенной именем изделия, которое требуется проанализировать. Переменная для начального значения списка IL означена пустым списком ([] )t а переменная Factor имеет значение 1. На верхнем уровне рекурсии значение Factor есть число вхождений текущего изделия Prod в изделие, являющееся его непосредственным предшественником. Программа помещает в переменную FL список компонент данного изделия, причем для каждой из них указывается соответствующее полное число вхождений.
Например, если требуется узнать элементарные компоненты для двигателя (рис.3.3), то достаточно запустить цель
? - 1 ookfor(engine, / J, FL, 1 )•
lookfor(Prod,IL,FL,Factor):- findall( (Prl,Qty, Flag), comp(Prod,Prl,Qty, Flag), CL), inquire(CL,IL,FL,Factor).
inquire( [ ], List, List,
inquired (Prl, Qty, Flag; /TC], List, FL, Fact):-
WWif%% ((Flag =^ c, /, Fact is Fact^Qty, lookfor(Prl,List,ML,Factl)); %%elseif%%
(memberf(Prl,_),List), !, update(List,ML,Prl,Qty,Fact)); %%e工se%%
(QI is Qty^Fact, add((Prl,Ql),List,ML)), WWanyvay^W
inquire(TC,ML,FL,Fact).
updated (1^, Q1)IT],[(N, Q2) /Т J, N, Q, Fact):- Q2 is Ql^Fact.
update([HIT],[H/Tl],N,Q,Fact;:- update(T,T1,N,Q,Fact).
add(E,[],[E])・
add(E,[H,T],[El[HIT]]).
member (H, [Hl_]).
member(E, [__IT] ) :- member (E, T).
costs(Prod,Cost) :- lookfor(Prod,/],FL,1), examine(FL, Cost).
examine ( [ ] ,0 )• examined (El,Numb) IT],Cost):-
price(El,Costl), examine(T,Cost 2), Cost is Costl^Numb + Cost2.
Правило lookfor использует специальный предикат findall, определенный в предыдущем разделе, для нахождения всех компонент первого уровня Prl для изделия Prod вместе с их Flags и числом вхождений Qty
4—1417
компоненты Prl в изделие Prod. Тройки <Prl, Qty, Flag> помещаются в список CL. Затем вызывается рекурсивная цель inquire. В конце рекурсивного списка переменная FL, входящая в inquire» будет содержать результат вычислений в соответствии с тем, как это было рассмотрено выше, т. е. список пар, содержащий все компоненты вместе с их числом вхождений.
Первое правило рекурсивного предиката inquire определяет условие завершения. Второе правило получает в качестве входных данных список троек CL. Анализ списка выполняется, как и в антитрестовской задаче, с помощью обработки головного элемента списка и рекурсивного вызова inquire для хвоста списка. Различаются три случая по типу компоненты в текущей тройке:
Если компонента в Prl может быть в свою очередь декомпозирована, то запускается цель lookfor еще раз, и, таким образом, выполняется спуск на один уровень дерева комплектующих. Переменная Factl означивается произведением числа вхождений Qty для компоненты Prl и числа Fact, равного числу вхождений компоненты Prl в ее родительскую компоненту.
Если Prl является элементарной компонентой и уже была найдена в списке, который требуется построить, то число вхождений для Prodi в списке должно быть модифицировано. Это выполняется с помощью специального правила update, которое здесь не рассматривается.
Если не выполняется ни одно из этих двух условий, то Prl является новой элементарной компонентой, которая должна быть добавлена в список. Число ее вхождений определяется произведением значения Qty и числа Fact, равного числу вхождений компоненты Prl в родительскую компоненту.
Отметим эффективное использование отсечения для реализации альтернатив. Если какая либо из первых двух альтернатив успешна, поиск других решений блокируется. Как и выше, программа содержит взаимную рекурсию, причем inquire используется для просмотра дерева вдоль одного уровня, в то время как lookfor вызывается для спуска на один шаг вниз по дереву.
Предикат costs вычисляет суммарную стоимость заданной компоненты, начиная с элементарных ее частей. Для этого вызывается цель lookfor, а затем используется цель examine для суммирования стоимостей компонент. Стоимости представлены бинарным предикатом price(Comp, Cost), содержащим стоимость каждой элементарной компоненты. В рамках данного алгоритма вычисления стоимости цены промежуточных компонент не учитываются.
COMPONENT
PRICE
enjine
sparkplug
4
b
sparkplug 10
enjine
cylinder
4
c
sere”2
enjine
valve
4
c
gasket3
enjine
crankshaft
1
c
bolt2
cylinder
piston
1
c
11
cylinder
connecting-rod
1
c
valve
gasket
1
b
valve
hanger
2
c
crankshaft
joint
8
c
piston
screw
2
b
piston
gasket
3
b
connect 1ng-rod
screw
4
b
connect 1ng-rod
bolt
4
b
hanger
screw
4
b
hanger
bolt
2
b
joint
screw
10
b
Joint
bolt
20
b
Рис.3.4. Представление списка комплектующих для двигателя внутреннего сгорания в виде отношений.
Выполним эту программу для заданной экстенсиональной базы данных. Данные, изображенные на рис. 3. 3, представлены в виде отношений на рис. 3. 4.
Как и выше, продемонстрируем сеанс работы в Пролог-системе:
?~ 1 ookforf engine, / J, FL, 1).
FL=[ (sparkplug, 4),
(screv, 1363 (gasket, 16 ), (bolt, 192)].
?- 1 ookfor(cyl 1 nder, / J, FL, 1).
FL=[ ( screw, 6 ;,
(gasket, 3), (bolt, 4)].
?~ coasts(engine. Cost).
Coast=744.
Заключение
Из рассмотренных в данной главе примеров следует, что полная вычислительная мощность Пролога может увеличить возможности традиционных языков запросов.
Более того, Пролог сочетает средства задания запросов к базе данных и вычисления в рамках одной лингвистической парадигмы. Это обеспечивает более высокую прозрачность программы и универсальность.
Таким образом, достигается существенный выигрыш по сравнению с системами баз данных, где необходимы два различных языка - один непосредственно для программирования, а другой - для запросов к базе данных.
Литература к главе
Несложное введение в Пролог как язык запросов можно найти в работах Парсайса [Pars 83], Нагви [Nagv 84] и Заниоло [Zani 84] . Броди и Ярке [Brod 84] оценивают логику, логическое программирование и Пролог применительно к базам данных. Скооре и Уоррен [Scio 84, Warr 81] рассматривают методы реализации эффективных механизмов Пролога для работы с большими базами данных, основанных на применении специальных методов доступа (таких, как индексирование) и эффективном использовании буферизации. Этот подход дает программисту мощные средства управления методами доступа. Две задачи, представленные в этой главе, были разработаны в дипломных проектах Гоцци и Лульи [Gozz 87].
Упражнения
Измените программу решения антитрестовской задачи (разд. 3.1) так, чтобы допускалось образование треста группой фирм.
Измените программу решения антитрестовской задачи (разд. 3. 1}, изменив понятие контроля за счет учета не только непосредственного владения акциями. Другими словами, для того, чтобы решить действительно ли фирма Compl контролирует фирму Сотр2, надо добавить к акциям, принадлежащим фирме непосредственно, еще все акции, которые принадлежат другим фирмам СотрЗ, контролируемым фирмой Compl.
Измените программу расчета комплектующих
(разд. 3. 2), включив в стоимость цену промежуточных компонент.
Напишите Пролог-программу, которая может работать с большой базой данных, содержащей расписания движения поездов. .Пусть база данных имеет следующую схему для отношения SCHEDULER:
SCHEDULER(TRAIN_NUMBt DEP_CITYt DEP_TIMEt ARRjCITY, ARRJTIME). ----
Предположим, что все поезда отправляются ежедневно. Тогда каждый кортеж соответствует одному сегменту пути. Поезд, отправляющийся из Милана в Рим с двумя промежуточными остановками в Болонье и Флоренции, представлен в виде следующего отношения
ТПА1Ы_ШМВ
DEPJCITY
DEPJTIME
ARRJCITY
ARRJTIME
567
Milano
7. 50
Bologna
9. 30
567
Bologna
9. 32
Firenze
10. 30
567
Firenze
10. 32
Roma
12. 15
Напишите программу для нахождения наиболее быстрого маршрута, связывающего два заданных города, предположив что известно время отправления. Программа должна генерировать список кортежей в формате отношения SCHEDULE, показывающих все необходимые участки пути от начального пункта до пункта назначения при условии, что все пересадки допустимы, т. е. пункт назначения сегмента i совпадает с пунктом отправления сегмента i+N и время прибытия сегмента i меньше, чем время отправления сегмента i+1.
Простое решение приемлемо. Но следует подумать о врзможных модификациях программы, которые обеспечат большую эффективность.
Глава 4. СВЯЗЫВАНИЕ ПРОЛОГ-СИСТЕМ И РЕЛЯЦИОННЫХ БАЗ ДАННЫХ
Из гл. 3 следует, что Пролог является довольно выразительным языком запросов. На нем можно формулировать запросы, не прибегая к реляционным языкам (таким, как алгебра или исчисление). В этой главе показано, как создавать системы, которые реализуют интерфейс Пролога с базами данных, обеспечивая при этом эффективный доступ к данным. С этой целью рассмотрены компоненты и альтернативные архитектуры систем для связывания Проло г-систем и реляционных баз данных. В рамках альтернативных архитектур обсуждены методы организации интерфейса между базой данных и Пролог-системой. Введено понятие базовой конъюнкции как единицы взаимодействия между Прологом и средой баз данных. Описаны разнообразные методы повышения эффективности такого интерфейса. Главное, на чем мы здесь остановимся, - экономия операций доступа к базе данных. В частности, при запоминании данных и пр омежут оч ных запросов используется кэш-память. Это позволяет устранить повторение одних и тех же операций во время выполнения программы.
Концепции и методы, рассмотренные в этой главе, основываются на нескольких существующих прототипах и системах, включая PRO-SQL, EDUCE, прототип системы ESTEAM, BERMUDA, PRIMO и QUINTUS-PROLOG. В ГЛ. 5 приведен обзор указанных систем.
Архитектуры для связывания Пролога и
реляционных систем
Напомним общие черты систем, связывающих Пролог и реляционные базы данных. Будем называть их СРК-системами (Coupling Prolog to Relational databases).
При связывании между существующими Пролог-системами и системами баз данных создается некоторый интерфейс. При этом сохраняется пиндивидуальностьп как первых, так и вторых. Этот интерфейс содержит процедуры, осуществляющие перемещение данных из внешней памяти базы данных в основную память среды выполнения логической программы.
Соглашения и терминология
Перед тем как приступить к более детальному рассмотрению СРК-смстем, введем некоторые соглашения и терминологию.
Важным подмножеством предикатов Пролог-программ, рассматриваемых в этой главе, являются предикаты базы данных. Каждый из таких предикатов соответствует хранящемуся во вторичной памяти отношению. Не допускается появление предикатов базы данных в левой части правила. Отметим, что данное соглашение не ограничивает вычислительной мощности Пролог-программы.
Будем предполагать, что порядок фактов во внешней памяти базы данных не имеет значения. Когда же факты помещаются в основную память базы данных Пролога, их порядок становится существенным. Таким образом, сохраняется традиционная семантика Пролога, что особенно важно при организации бэктрекинга.
Мы ограничимся рассмотрением только процедур поиска, не затрагивая при этом вопросов, связанных с рбновлением. Последние находятся под управлением СУБД. Мы покажем, как можно предоставить Пролог-программе необходимые данные путем генерирования подходящего множества запросов. Сериализуемость выполнения таких запросов по отношению к другим прикладным программам, использующим эту же базу данных, можно обеспечить при помощи любого метода управления конкурентным доступом. На рис. 4. 1 показаны некоторая Пролог-программа, использующая предикат базы данных rel, и соответствующее отношение REL, хранящееся в базе данных.
В приведенном примере предикат базы данных ге2 имеет три вхождения (по одному на каждое правило). Пометкой является отображение, ставящее в соответствие каждому аргументу предиката признак п связан11 или "свободен". Если аргумент является константой, ему соответствует признак п связан11. Если же это переменная, ему соответствует признак " свободен11. Пометка предиката базы данных, которую можно определить перед выполнением, называется статической. Во время выполнения при означивании переменных пометка изменяется. Статической пометкой предиката rel(a, Z, X, X, Т) является (связан, свободен, свободен, свободен, свободен).
Если два и более вхождений одного предиката базы данных имеют одинаковые пометки, одинаковые константы в соответствующих связанных позициях, а также соответственно одинаковые переменные,то они
производят одну и ту же формулу базы данных dbf (database formula).
Фрагмент Пролог-программы:
Р(Х) :- re工(a,X,Z,Z,Y)J(y)・ q(X) :- ге1(а^, X, Х,Т),д(Т). t(X) :- rel(b, X, Y,c,f),q(X).
Рис. 4.1. Пример взаимодействия Пролога и реляционной базы данных.
Два первых вхождения предиката базы данных rel fpMc. 4. 1) соответствуют одной и той же dbf. Соответствующий запрос при помощи реляционной алгебры представляется следующим образом:
Во время выполнения Пролог-программы каждое вхождение предиката базы данных может иметь несколько активных экземпляров. Это означает, что на различных уровнях рекурсии можно производить сопоставление с различными активациями одного предиката базы данных. Каждый активный экземпляр некоторого предиката базы данных может использовать разные константы и, следовательно, отображаться в разные dbf. Даже пометки различных активаций одного предиката базы данных могут отличаться друг от друга.
4.N.2. Компоненты CPR-систены
В архитектуре CPR-системн различают четыре отдельные подсистемы.
Механизм Пролога, который вьтолняет Пролог-
программы при помощи стандартного механизма вывода языка Пролог.
интерфейс Пролога, способный распознавать предикаты базы данных и обрабатывать их некоторым специальным образом.
Один и более интерфейсов базы данных для обеспечения связи между механизмами базы данных и Пролога.
Механизм базы данных, осуществляющий поиск и обновление данных в базе данных во внешней памяти.
Хотя все эти модули должны присутствовать в любой CPR-системе, их функциональные возможности существенно зависят от вида связываемых систем. Рассмотрим теперь каждую подсистему отдельно.
Механизм Пролога
Механизм Пролога представляет собой некоторую Пролог-систему, способную выполнять цели языка Пролог. Хотя мы и не намерены при связывании изменять базовое поведение механизма Пролога (поиск по стратегии псначала вглубь", унификация, бэктрекинг), однако в этом механизме могли быть расширены некоторые средства с целью их адаптации к среде конкретной системы баз данных.
Некоторые Пролог-системы обеспечивают быстрые методы доступа к основной памяти для поиска в большом количестве фактов одинакового формата. Эти методы используют сложные механизмы индексации и хеширования.
Некоторые Пролог-системы обеспечивают улучшенные методы выборки и управления памятью, разработанные с целью повышения эфективности хранения фактов в резидентной в оперативной памяти базе данных Пролога. Эта операция применяется главным образом к результату выборки из массовой памяти базы данных. Кроме, того во многих существующих Пролог-системах она реализована неудовлетворительно.
Наконец, еще одна модификация ряда механизмов Пролога касается возможности получения множества всех ответов на запросы (цели) над предикатами базы данных. Этого можно достичь с помощью стандартной для Пролога стратегии поиска "сначала вглубь". При этом организуются повторные выполнения цели до тех пор, пока очередной шаг вычислений не приведет к неудаче. После этого система предоставляет нам множество всех полученных к данному моменту ответов.
Интерфейс Пролога
интерфейс Пролога способен распознавать предикаты базы данных и обрабатывать их некоторым специальным образом. С точки зрения программиста на Прологе этот интерфейс может иметь различные степени прозрачности
При полной прозрачности предикаты базы данных
распознаются без помощи пользователя. В этом случае специальный анализатор программы имеет доступ к справочникам базы данных. Анализатор активизируется либо во время загрузки Пролог-программы, либо при каждой операции сопоставления.
При промежуточной прозрачности пользователь должен каким-то образом декларировать предикаты базы данных. После того как предикаты базы данных декларированы, пользователь может работать с ними как с любыми другими предикатами. Тот факт, что во время сопоставления с предикатом базы данных используется интерфейс с СУБД, оказывается скрытым.
Некоторые интерфейсы Пролога обеспечивают выборочную обработку предикатов базы данных, основанную на доп ол нит ел ь ных декларациях. Например, можно декларировать, что предикаты базы данных обрабатываются с помощью таблицы расширений, т. е. все найденные для данного предиката значения хранятся в основной памяти. Соответствующие управляющие директивы становятся частью интерфейса Пролога. Аналогично можно указать, что данные предикаты базы данных всегда выполняются с константой в некотором аргументе. интерфейс Пролога во время выполнения должен контролировать соответствие фактически выполняемой цели такому ограничению.
При отсутствии прозрачности программист на Прологе вынужден явно формулировать запросы с хпомощью языка запросов механизма базы данных. Например, в некоторых системах для написания запросов используются языки SQL или QUEL.
Интерфейс базы данных
интерфейс базы данных разрабатывается для организации взаимодействия с базрй данных и для извлечения из нее определенных кортежей. В многозадачной среде может существовать несколько одновременно активных интерфейсов базы данных, каждый из которых соответствует конкретному запросу. При разработке интерфейса базы данных возможно несколько альтернатив:
Основные возможные различия связаны с типом рассматриваемых в рамках данного интерфейса запросов:
Однопредикатный запрос (селекция) формулируется отдельно для каждого предиката базы данных. Каждый запрос при этом соответствует простой операции селекции.
Мяо г опредикатный запрос (соединение) формулируется для нескольких предикатов базы данных одновременно. Эти предикаты принадлежат правой части некоторого правила и содержат общие переменные, соответствующие условиям соединения.
Агрегатные запросы формулируются для специальных
предикатов, вычисляющих агрегатные функции на множествах и мультимножествах. В Прологе эти запросы соответствуют вариациям предикатов setof и bagof. При их выполнении с использованием механизма базы данных требуются операции group-by и вычисление агрегатных функций. Эти средства поддерживаются в большинстве реляционных языков запросов.
Рекурсивные запросы формулируются для рекурсивно определенных предикатов, в определение которых включается один и более предикатов базы данных. В этом случае передаваемый в механизм базы данных запрос содержит рекурсию. Этот случай не является типичным для CPR-систем и может быть реализован, если механизм базы данных сам является расширенной системой. В настоящий момент в некоторых механизмах базы данных поддерживается определенное подмножество рекурсивных запросов. Это запросы, ответ на которые можно получить путем вычисления транзитивного замыкания бинарных отношений.
Другая важная особенность интерфейса базы данных касается того, каким образом возвращаются результирующие кортежи. Здесь имеются две альтернативы:
Кортежи возвращаются по одному. Как правило, это реализуется с помощью разделяемых средой Пролога и интерфейсом базы данных переменных. При каждом взаимодействии с интерфейсом базы данных разделяемым переменным присваиваются новые значения. На практике соспоставлением этих переменных управляет не механизм Пролога, а интерфейс базы данных. Это означает, что интерфейс базы данных должен сохранять текущий контекст поиска и обеспечивать возможность присвоения разделяемым переменным очередных значений при бэктрекинге.
Множество кортежей возвращается целиком. При этом кортежи помещаются в резидентную в оперативной памяти базу данных Пролога, после чего работа механизма Пролога возобновляется с первого кортежа множества. При бэктрекинге механизм Пролога обнаружит следующий кортеж, удовлетворяющий заданной цели, уже в основной памяти. Следовательно, в этом случае сопоставление и бэктрекинг на предикатах базы данных находятся под управленем механизма Пролога.
Механизм базы данных
Механизм базы данных - любое програмное обеспечение баз данных, способное обрабатывать запросы к базе данных или обновлять ее. Механизм базы данных может поддерживать на различных уровнях некоторый язык манипулирования данными.
В языках низкого уровня (процедурных) программист механизма базы данных должен указать
стратегию доступа к данным. При этом возможно управление доступом к базе данных на физическом уровне. Например, может быть выбран метод доступа или реализовано управление потоками кортежей. Иерархические и сетевые СУБД, как правило, поддерживают язык манипулирования данными низкого уровня.
В языках высокого уровня (непроцедурных) программист должен указать только свойства необходимых данных. Стратегия выполнения поиска определяется системой. Типичным для этих языков является множественно-ориентированное взаимодействие с базой данных, хотя имеются также средства для управления потоками кортежей. Наиболее представительным (и распространенным) языком данного вида является SQL. В общем случае в реляционных системах поддерживаются языки высокого уровня.
Наконец, расширенные языки поддерживают дополнительные средства обработки запросов специального вида. Например, в некоторых системах реализована операция транзитивного замыкания бинарных отношений. В случае расширенных языков возможно перемещение части действий по обработке рекурсивных целей из среды Пролога в среду базы данных. Системы, которые мы уже рассмотрели, и их особенности приведены в табл. 4.1.
Таблица 4.1. Компоненты СРЯ-системы
Механизм Пролога
С механизмами быстрого доступа /без них
С улучшенными методами выборки управления основной памятью /без них
Возвращаетсяединичный ответ
/множество ответов
Интерфейс Пролога
Прозрачность: полная, промежу - точная, отсутствует
Интерфейс базы данных
Запросы: однопредикатные, многопредикатные, агрегатные, рекурсивные Возвращается один кортеж /множество кортежей
Механизм базы данных
Язык: низкого уровня, высокого уровня, расширенный
4.2.3. Архитектура CPR-систем
Теперь, когда мы проанализировали отдельные компоненты, рассмотрим, как они могут быть связаны при создании СРР-системы. Вспомним, что в главе 1 было выделено два основных подхода: слабое связывание и сильное связывание.
Слабое связывание
В слабо связанных системах LCPR (loosely coupled systems) взаимодействие реализуется независимо от процесса вывода в Прологе. Слабое связывание называют также статическим, поскольку процесс связывания осуществляется независимо от реальной схемы выполнения правил. *
На рис. 4. 2 показана общая схема LCPP-системы. Отметим, что действия по связыванию (1) происходят во время загрузки, когда файл, содержащий Пролог- программу, считывается механизмом Пролога. После того как релевантные базовые факты загружены в память Пролога, выполнение Пролог-программы происходит независимо от базы данных.
ПРОЛОГ- ПРОГРАММА
=』>
ИНТЕРФЕЙС ПРОЛОГА (Распознает неинициализированные предикаты базы данных)
==>
ИНТЕРФЕЙС БАЗЫ ДАННЫХ (Передает запросы в среду БД, трансформирует кортежи в факты, загружает факты)
<=> БД
Рис. 4.2. Архитектура LCPP-системы. Цифра 1 над стрелкой обозначает связывание во время загрузки.
Сильное связывание
В сильно связанных системах TCPR (tightly coupled systems) взаимодействие между Прологом и СУБД управляется процессом вывода Пролог-системы. Сильное связывание называют также динамическим, поскольку связывание осуществляется при выполнении цели.
На рис. 4.3 показана общая схема ТСРР-систем. Действия по связыванию (2) происходят либо во время представления цели, когда новая цель вводится пользователем в механизм Пролога, либо во время выполнения правила, когда некоторое правило активизируется механизмом Пролога, либо во время сопоставления с предикатом базы данных, когда возможно сопоставление с каждым отдельным предикатом базы данных. Эти альтернативы соответственно приводят к ситуациям с уменьшенной степенью связанности.
ПРОЛОГ- ПРОГРАММА
-2〉
ИНТЕРФЕЙС ПРОЛОГА
(Распознает. неинициализированные предикаты базы данных)
==>
ИНТЕРФЕЙС БАЗЫ ДАННЫХ (Передает запросы в среду БД, трансформирует кортежи в факты, загружает факты)
<==> БД
Рис. 4.3. Архитектура ТСРР-системы. Цифра 2 над стрелкой обозначает связывание во время выполнения.
Отметим, что в литературе нет согласованного мнения по поводу четких различий между слабым и сильным связыванием. Слабо связанными часто называют либо системы, не обеспечивающие прозрачности, либо системы, которые работают во время представления цели, либо, наконец, системы, которые, вместо того чтобы организовывать доступ из Пролог-программы к кортежам, полученным в результате выполнения запроса через разделяемую память, хранят их в виде фактов в основной памяти. Наличие всех этих интерпретаций свидетельствует о том, что термины "слабое" и п сильное связывание" использовались не совсем корректно.
4.2. Базовые конъюнкции
В СРР-системах большинство типичных взаимодействий между Прологом и СУБД организуется для базовых конъ-
юнкций. Базовая конъюнкция - некоторая последовательность предикатов базы данных и арифметических предикатов сравнения. Например, следующая последовательность является базовой конъюнкцией:
bj: db](Xj а, Х3), db2fX3, X. Х5), (Xjb), 吗鸣,Xd Х7), qc).
Базовая конъюнкция может быть частью правила Пролога; она также может быть получена в результате композиции правил Пролога. Например, рассмотренную выше базовую конъюнкцию Ьс^ можно получить в результате композиции следующих правил:
吟(A,XJ : - db^X^ а, Х3), р№,XJ.
P"% 儿):一叫(J % %), 3产3 ь工,口).
P/z^zp :- db^Z^Z^ zp, (Z=C).
В следующем разделе мы рассмотрим использование композиции правил для генерирования больших базовых конъюнкций.
Базовая конъюнкция называется соединенной тогда и только тогда, когда ее нельзя разделить на две части, не содержащие общих переменных. В дальнейшем будем полагать, что базовая конъюнкция является соединенной. Если некоторая базовая конъюнкция не является соединенной, будем рассматривать каждую соединенную часть как отдельную базовую конъюнкцию. Рассмотрим следующую последовательность базовых и арифметических предикатов:
db (X а, X ), db (X X , X ), (X =b), у, % %3(%=с)
Ее можно разбить на две соединенные базовые конъюнкции:
bc2: dbfX, а, Х2;, db/X2, Xg, XJ, (X=b) be : db (Y Г Г ), (Y=c)
Соединенная базовая конъюнкция be называется цепной, если ее предикаты базы данных d^, ...»db^ можно упорядочить таким образом, что каждый предикат db】 в Ьс имеет общие переменные только с db^ ^ (где
1 < i п) и с dJb]T (где 1 ^ i < п). В противном случае базовая конъюнкция называется циклической. Рассмотренная базовая конъюнкция bcj является цепной, в то время как приведенная ниже базовая конъюнкция Ьс^ является циклической:
be : db (X , X 3 db (X X 3 db (X X )
Переменные в be называются экспортируемыми, если они входят также в оставшуюся часть правила. Например, в следующем правиле:
go fX ) :- db (X X ), db (X X ), db (X X ),
которое содержит базовую конъюнкцию Ьс^ экспортируемыми переменными в Ьс^ являются X】и X?. Правило д。? можно записать путем введения отдельного правила для базовой конъюнкции, содержащего в качестве головы предикат Ьс^(Х^ Хз9, а в качестве тела - последовательность предикатов базовой конъюнкции:
g%(XJ :- bcJXvX3)tPi(X3).
bcjxex3):- db^x^xp, db2fx2, x3)tdb3(xvx3).
Подобным образ ом можно записать до^ :
до^Х^хр :- bcgXJ be (X X ):- db (X a, Xdb (X b, X ),
c?b3fX5, c, Xp.
Заметим, что мы исключаем предикаты равенства путем подстановки констант вместо переменных внутри предикатов.
Каждая баз овая конъюнкция соответствует запросу- соединению (называемому также конъюнктивным запросом) к базе данных. Запросы-соединения формулируются в виде выражений реляционной алгебры, содержащих такие компоненты, как операторы селекции над отношениями, соответствующими предикатам базы данных (при этом аргументы в предикатах базы данных либо означены константами, либо являются переменными, которые
содержатся в арифметических предикатах), операцию соединения любых двух отношений, соответствующих предикатам базы данных, имеющим общие переменные, и операцию проекции на атрибуты, соответствующие экспортируемым переменным базовой конъюнкции. Цепная базовая конъюнкция соответствует цепному запросу- соединению, а циклическая базовая конъюнкция соответствует циклическому запросу-соединению, в главе 8 при рассмотрении языка программирования Дейталог будет представлен метод отображения целей логического программирования в запросы реляционной алгебры.
Например, запросы соединения jc^ и jc^ соответствуют базовым конъюнкциям Ьс^ и Ьс? в правилах gj и д%・ Будем использовать следующие обозначения: предикатам базы данных dpj соответствуют отношения базы данных % а переменным Xi соответствуют атрибуты 4.
jc : П (8 R)X” к ; ; X f ст R) 丿 12=а 1 7 3=1' 2=b 26=1 ' 2=с
%2: % 6а及喝4)图/) V1 I О工 V— IV 1 — 1 о
Большинство CPR-систем (включая PRO-SQL, EDUCE, ESTEAM, PRIMO, и QUINTUS-PROLOG, см. гл. 5) отображают базовые конъюнкции в запросы, формулируемые на реляционных языках SQL и QUEL. Например, следующие запросы на SQL соответствуют базовым конъюнкциям Ьс^ и Ьс2 (и алгебраическим запросам jq и jcj:
SELECT R .A tR .А 1137
FROM 0,%% WHERE R • 4 = a AND R • 4 = b AND R • 4 = C 1 22 43 6
AND R . Л = R • 4 AND R . A = R .A 13232535
SELECT %・仆 R3-A3
FROM R , R , R
113
WHERE R. A - R.A AND R 人 11311222
AND R .= R .
2333
Оптимизации запросов-соединений - характерная черта всех реляционных СУБД. Программное обеспечение СУБД выбирает наиболее эффективный метод вычисления
результирующего множества кортежей. Поскольку СУБД достаточно эффективны, максимальная эффективность CPR-снстем достигается при использовании больших базовых конъюнкций.
В CPR-системах интерфейс Пролога решает задачу определения максимальных базовых конъюнкций, интерфейс базы данных формирует соответствующий запрос-соединение и управляет его выполнением. Когда результирующие кортежи извлечены из базы данных, интерфейс базы данных передает их либо по одному, либо все вместе (как обсуждалось в разд. 4. 1. 2) в механизм Пролога. Следует отметить, что сборка базовых конъюнкций изменяет семантику программы Пролога, поскольку при этом модифицируется выполнение по отношению к первоначальной программе. Предложенные трансформация программы влияют на порядок и повторяемость кортежей в результирующем множестве, хотя само результирующее множество остается тем же. Таким образом, механизм Пролога, возвращающий множество ответов, должен маскировать указанные различия, тогда как в традиционном механизме Пролога этого делать не нужно.
N. Определение базовых конъюнкций в LCPR-систенах
Рассмотрим, каким образом определяется базовая конъюнкция в интерфейсе Пролога. Для представления поддерживаемых в LCPR-системе трансформаций будем использовать статическую пометку правил. Ниже мы обсудим в этой связи преимущества TCPR-смстем.
Разные интерфейсы Пролога обладают различными возможностями для конструирования базовых конъюнкций. Мы рассмотрим случаи, в которых при конструировании базовых конъюнкций необходимо использовать композицию правил, перестановку предикатов, специальный предикат отсечения, дизъюнкцию, отрицание и рекурсию. Не все интерфейсы Пролога способны обрабатывать каждый из перечисленных случаев.
Композиция правил
Композиция правил - основная операция, используемая при построении базовых конъюнкций. Пример композиции правил приведен в предыдущем параграфе:
g。(X X ):- @b(X а, X ), р (X X ).
114.113134
р (У У ) db (Y Y Y )t (Y = b)tp (Y Y ).
P2^,芍):一若华产/)^Z = C;.
Путем композиции правил для предикатов р j получим единственное правило:
g。(X X ):- db (X а, X ), db (X b, X ),
db3fX3, с, хр.*
Отметим, что переменные после композиции переименовываются, а предикаты равенства (Y2 = b) и (Z2 = с) трансформируются путем введения констант Ь и с внутрь предикатов базы данных db2 и d% на место переменных Y и Z . После этого можно определить базовую 22<
конъюнкцию JbC](X],XJ. Правило goi запишется следующим образом:
gj(X],XJ :- Ьс/Х,Х4;.
be (X X ):- db (X a, XJ, db (X b, X ),
114112223
db3fX3, c, XJ・
Правило be】 с помощью интерфейса базы данных транслируется в запрос к базе данных.
Перестановка предикатов в телах правил
При конструировании базовых конъюнкций может оказаться полезным изменение порядка предикатов в правилах. Для примера рассмотрим правило до^
до (X Y .Y ) db (X atX )tdb (Y Y )t
'db3fx2, x3,b;,db4fc, гр.
4 различных базовых общую переменную X?, Таким образом, если можно выделить двеДостигается это путем д%:4 различных базовых общую переменную X?, Таким образом, если можно выделить двеДостигается это путем д%:В теле правила д。? имеется предиката: d% и dg используют a db】и db2 - переменную %• поменять местами db? и db^t соединенные базовые конъюнкции, следующего переписывания правила
4 различных базовых общую переменную X?, Таким образом, если можно выделить две
Достигается это путем д%:
4 различных базовых общую переменную X?, Таким образом, если можно выделить две
Достигается это путем д%:
g。(X У Y ):- be (X )t be (Y Y ).
be fX ):- db (X a, X 3 dbjx X b).
be (У Y ):- db (Y У J, db (ct Y ).
Отметим, что be】и Ьс? передаются в интерфейс базы данных, который транслирует их в запросы к базе данных. Эти запросы могут быть выполнены параллельно.
Отсечение
Специальный предикат отсечения ( ! ) используется в Прологе для управления бэктрекингом. Отсечение как цель удовлетворяется немедленно. Его действие состоит в том, что значения переменных, которые встречаются слева от отсечения в теле правила, выполняемого в качестве текущей цели» "замораживаются" (т. е. в дальнейшем не изменяются). Поскольку бэктрекинг на этих переменных не выполняется, механизм Пролога отбрасывает все альтернативные сопоставления.
Отсечение не может появляться внутри базовой конъюнкции. Таким образом, отсечение делит правило на две части: до и после отсечения. Базовые конъюнкции цтыскиваются внутри каждой из этих частей. Рассмотрим, например, правило до^
g。(X X ) :- db (X а, X ), db (X X ), 3 1 4 1 1 2 2 2 3
/,db3fX3, X^.db^c. XJ・
Хотя db? и db3 имеют общую переменную Х^ их нельзя включить в одну базовую конъюнкцию, поскольку они находятся по разные стороны относительно предиката отсечения. Поэтому правило доз запишется следующим образом:
' 吟鸣〜:-Ьс/Х ,Хз;, / ,JbC2fX3,Xp.
Ь%(Х],Хз):- dbfXr a,X2;t db/X2, Х^. be (X X ) :- db fX X )tdb (ct X ).
В TCPR-системах, где интерфейс Пролога активизируется при выполнении правила до^ также используются специальные стратегии для базовых конъюнкций, заключающиеся в приостановке выполнения запроса после получения первого результирующего кортежа. Фактически, когда выполняется предикат отсечения, связывания переменных X】и Хз становятся неизменяемыми. После этого запрос, соответствующий be? выполняется со связанной переменной Хз,
Поскольку отсечения влияют на механизм вывода Пролога, нельзя производить перестановки предикатов базы данных, которые находятся по разные стороны
относительно предиката отсечения. Рассмотрим правило до2‘,полученное из дог добавлением отсечения:
до/ (X У Y ):- db (X , а, Xdb (У Г),
/, db(X. X.b)tdb(ct Г ).
23/4
В рассмотренном примере любые перестановки предикатов недопустимы.
Дизъюнкция
Дизъюнкции внутри правил порождают очевидные проблемы. Решение, принятое в большинстве интерфейсов Пролога, состоит в построении дизъюнктивной нормальной формы, содержащей максимальные базовые конъюнкции. В качестве примера рассмотрим следующие правила:
go4fX ,Хз;:- pi(XitX2)tp2(X2t Хз;.
P1(yVy2)•-叫(% а, %);%%%)•
p/z,z2; :- db3fz,b, zp;db4fz,z2, с;.
В предикатах р1 и р? имеется по одной дизъюнкции Дизъюнктивную нормальную форму получим, представив первое правило в виде дизъюнкции предикатов, каждый из которых соответствует базовой конъюнкции:
g。(X , X ):- be (X X);bc(X X );
bc3(xitx3);bcjxvx3).
bj(Xy Х3):- db](X], a, xp, db3fX2> b, Xp.
be (X X ):- db (X a, Xdb (X X c).
bc3(xvx3):- db2(xex2)tdb3(x2t b, xp. be (X X ) :- db (X X )t db fx X c). 413212423
После этого предикаты be】, bc^ JbCj и bc^ пере
даются в интерфейс базы данных для трансляции и выполнения, причем соответствующие запросы можно выполнять параллельно. Возможно также организовать выполнение всей цели до^ под управлением механизма базы данных. Для этого достаточно вычислить отношения ВС】, ВС2, ВС3 и ВС4, соответствующие рассмотренным выше базовым конъюнкциям, после чего вычислить следующее алгебраическое выражение:
叫 и ВС2 и ВСз и BJ
Результирующие кортежи, возвращаемые механизмом базы данных, являются ответами для цели до
Отрицание
В правилах Пролога отрицание может относиться к базовым предикатам. Например, в правиле gog отрицание применяется к конъюнкции предикатов db^ и db^:
吟(XJ :- dbfx,x2;,dbfx2,хр, not(db3(X3t Х4), db4(XJ )•
Базовые конъюнкции могут собираться отдельно из отрицательных и положительных предикатов:
叫鸣):-bcx(XvX3)tnot(bc2(X3)).
be fX X ):- db (X XJ, db (X X )•
吃鸣)db3fx3, xp,叫(XJ.
В рассмотренном подобно отсечению:В рассмотренном подобно отсечению:примере отрицание обрабатывается хотя положительные и отрицательные
В рассмотренном подобно отсечению:
В рассмотренном подобно отсечению:
предикаты разделяют некоторые переменные, включаются они в разные базовые конъюнкции. Однако такая схема не очень удобна.
Отметим, что базовая конъюнкция Ьс , исключая неко
торые кортежи, соответствующие Ьс】, действует подобно фильтру, что обусловлено общей переменной Хз в Ьс^ и Ьс?. Кроме того, это - естественное использование отрицания в правилах Пролога. Для обеспечения корректных вычислений необходимо, чтобы все экспортируемые переменные в базовой конъюнкции отрицания появлялись слева от отрицания. Таким образом, в процессе выполнения отрицания они окажутся связанными.
В данной ситуации фильтрующее действие отрицания можно реализовать с помощью механизма базы данных. Пусть POS и NEG представляют два отношения, соответствующие базовым конъюнкциям слева от отрицания и в области действия отрицания. Пусть также pj и п^ - позиции общих переменных Х^ в POS и NEG, при этом каждой переменной г^ соответствует одна переменная Тогда необходимо, чтобы все кортежи, чьи проекции на Pi появляются в проекциях на г^ отношения NEG, были
удалены из отношения POS, Это можно записать с помощью
следующей, включающей операцию полусоединения, формулы реляционной алгебры:
POS - (POS >< NEG) pi ~ni
Напомним, что операция полу соединения сохраняет такие кортежи POS, проекции которых на р〔 появляются в проекциях на п^ отношения NEG. Требуемая фильтрация состоит в вычитании указанных кортежей из отношения POS. Отметим, что рассмотренная выше формула не эквивалентна следующей:
POS >< NEG ₽i*ni
Отметим также, что выражение отрицания в SQL несколько естественнее, поскольку два подзапроса можно соединять блочным коннектором NOT IN ( ^ ALL). Каждый блок в SQL представляет при этом базовую конъюнкцию. Пусть R/ является отношением, которое соответствует предикату базы данных d%, и пусть % представляет атрибут, соответствующий переменной Х「 Тогда запрос, возвращающий кортежи для до^ имеет следующий вид:
SELECT 々у FROM R , R 12
WHERE R • 4 = R .A 1222
AND R • Л NOT IN 23
SELECT R • A 33
FROM R3, R4 WHERE %4 = & 4
Как мы уже говорили, в корректной Пролог-программе экспортируемые переменные отрицательных базовых конъюнкций должны появляться слева от отрицания. Это ограничение выполняется в правиле до^ :
до$' (ХМ) :- dbi(XeX2)tnot(db2(Xita))t db3fX2, Х3), not(dbJX3t b).
Это правило транслируется в следующее алгебраическое выражение:
(J一 鸣 高"2.居)))园鸣 一(% ^(%一菖)))
С помощью перестановки в до^ предикатов db2 и db3 можно создать большую положительную базовую конъюнкцию:
до/ (X X ):- be (X X ), not(db (X а)),
notfdb4fX3, b).
b*(X,,Хз):-叫鸣气)隐鸣气).
Этот набор правил можно было бы естественно оттранслировать в следующее алгебраическое выражение:
ВС ・(ВС 氏” 2-居))~ fBCi ^/а2-ъ &)3
где ВС】=q ^^/з* Неясно, однако, будет ли эта версия эфективнее предыдущей.
Вообще говоря, отрицания можно отложить (переместить вправо), и, таким образом, выполнить самые большие базовые конъюнкции перед отрицанием. Такая перестановка предикатов приводит к тому, что базовые конъюнкции становятся большими, но, возможно, менее ограниченными. Уместность такой трансформации следует оценивать в каждом конкретном случае.
Рекурсия
Обработка рекурсии - самая серьезная проблема CPR-систем. Рассмотрим рекурсивные предикаты гр】и гр? fони являются синтаксическими вариантами общеизвестных задач определения предка и лиц одного поколения, которые рассмотрены в гл. 1):
事3戸/:-叫(XjXJ
гр】(А,Х/ :- dbfX,X3;, rpd・
*鸣,X/叫(XjXJ.
rP2(x】,x/db2fx,xp,db3fx2, x^rp2(x3t x4;.
При свободном связывании предикаты базы данных ограничить нельзя : d% db? и d% передаются в интерфейс базы данных, где полностью вычисляются соответствующие им отношения. Ясно, что для получения ответов на конкретную, заданную пользователем цель необходимы только некоторые кортежи из d% db^ и
d%. Следовательно, при слабом связывании рекурсивные предикаты обрабатываются неудовлетворительно. Мы рассмотрим эту проблему в следующем разделе, где представим ряд усовершенствований, возможных при сильном связывании. Для повышения эффективности выполнения программ с рекурсией, можно использовать трансформации программ. Для примера рассмотрим следующую программу, содержащую взаимную рекурсию:
до (X X ) :- db (X a;X )trp (X X ).
rp3fX,X2;:-叫(XjbXJ.
rp3(XitX2):- db3(XitX3)rpJX3t X2).
rP/X/X?) db4fX,X3;,go6fX3, X2;.
Композиция грз (первого и второго правила) генерирует базовую конъюнкцию bq. Композиции грз fпервого и третьего правила) и гр《(третьего и четвертого правила) генерируют базовую конъюнкцию Ь、 После этого программа содержит только простую (линейную) рекурсию на предикате д%:
до^Х^хр :- Ьс^Х^хр.
д°б(А,Х/ :- bc2(XitX^go6(XeX2).
JbC](X], X?) :- db/X], а, Х2;, db^X^ Ь, Х^.
be (X X ) :- db (X а, Xdb (X X ), db (X X ).212112434
Теперь при слабо связанном интерфейсе базовые конъюнкции Ьс^ и Ьс^ передаются в интерфейс базы данных, а все результирующие кортежи помещаются в резидентную в оперативной памяти базу данных Пролога.
Улучшение базовых конъюнкций в TCPR-системах
В TCPR-cистемах определение базовых конъюнкций происходит так же, как и в LCPR-системах. Однако при сильном связывании можно использовать дополнительную информацию либо о наличии констант в цели, либо о начальных связываниях правил, т. е. используется динамическая пометка правил. Таким образом, улучшение базовых конъюнкций достигается за счет перемещения констант из головы в тело правил. Это сделать не-
сложно в случае нерекурсивных правил: пусть переменная Х| связана целевой константой qc^ в голове нерекурсивного правила. Тогда константу можно можно переместить в тело правила, заменяя все вхождения переменной Х^ константой qc^.
Рассмотрим все нерекурсивные правила, с которыми мы имели дело в предыдущем разделе. Предположим, что пременная X】связана целевой константой qc^ fзапишем это как X/qcJ. Покажем, что данное связывание распространяется в базовых конъюнкциях подстановкой в их тела qc^ вместо X】. В результате такой подстановки базовые конъюнкции становятся более ограниченными:
go^X^qc^XJ :- bcJX^gc^XJ.
be (X /qc .X ) :- db (qc a,X ),db (X b,X ),1114112223
db3(X3,cfXJ.
go^X^qc^Y^Y^ bc^X^/qcJ be (Y tY ) 2 I 1 ' 2 'go^X^qc^Y^Y^ bc^X^/qcJ be (Y tY ) 2 I 1 ' 2 'bci(Xi/qci/bc2(Yi/Y2).
go^X^qc^Y^Y^ bc^X^/qcJ be (Y tY ) 2 I 1 ' 2 '
go^X^qc^Y^Y^ bc^X^/qcJ be (Y tY ) 2 I 1 ' 2 '
dbi(qc^a,X2),db3(X2,X3,b).
db2(YeY2)tdb^(cfY2).
go (X /qc ),X ) :- be (X /qc X ),!, be (X X ). bc(X /qc X ) :- db (qc a,X )db (X X ).
go^X^qc^X^:-bc^X^qc^X^ :- bc^X^/qc^X^ :- bc^X^qc^X^ :- bc^X^/qc^X^ :-go^X^qc^X^:-bc^X^qc^X^ :- bc^X^/qc^X^ :- bc^X^qc^X^ :- bc^X^/qc^X^ :-go5(Xi/qci):-bci(Xi/qci,X3):-be (X ):-2 I 3丿go5(Xi/qci):-bci(Xi/qci,X3):-be (X ):-2 I 3丿be (X ,X ) :- db (X ,X ),db (c,X )•2、3'4 '3'3'4
go^X^qc^X^:-
bc^X^qc^X^ :- bc^X^/qc^X^ :- bc^X^qc^X^ :- bc^X^/qc^X^ :-
go^X^qc^X^:-
bc^X^qc^X^ :- bc^X^/qc^X^ :- bc^X^qc^X^ :- bc^X^/qc^X^ :-
go5(Xi/qci):-
bci(Xi/qci,X3):-
be (X ):-
2 I 3丿
go5(Xi/qci):-
bci(Xi/qci,X3):-
be (X ):-
2 I 3丿
be (X /qc .X ;bc (X /qc .X ); be (X /qc ,X ;bc (X /qc .X ).
31134113
dbx(qceafX2)db3(X2fbfX3) dbi(qc^a,X2)db^(X2,X3,c) db2(qceX2)tdb3(X2fbfX3). db2(qci,X2),db^(X2,X3,c).
be г(Х ^qc ^X3), not (be 2(X3)). db (qc .X ),db (X X ).
db^X^XJ.dbJXJ.
Базовые конъюнкции bc(X^/qc^), содержащие только одну связанную переменную, означают, что если существуют кортежи базы данных, удовлетворяющие пали bc(qc^), то цель выполняется успешно, иначе выполнение завершается неудачей.
Рассмотренные выше случаи являются примерами распространения связываний в результате выполнения целей, у которых определенные аргументы означены константами. Распространение связываний осуществляется интерфейсом Пролога во время выполнения цели.
В предыдущих примерах показано "механическое'' распространение связываний, что, однако, не всегда корректно в рекурсивных правилах. Для правила дс^ связывание переменной X】распространиться не может, а связывание переменной Х^ может распространиться только в Ьс2, Методы распространения связываний в рекурсивных правилах (т. е. , перемещение констант внутрь рекурсивных правил) рассмотрены в гл. 10. Чтобы показать, что константу qj цели до^(qci,Х^) нельзя переместить ни в be】, ни в Ьс2, снова рассмотрим цель до^ :
доб(Х^Х2):- bcJX^xp.
до (X X ) :- be (X X ). до (X X ).
612214642
Пусть кортежи bc^(qc^ а9, bc2f а, Ь) и Ьс^(Ь, с) извлечены из базы данных. Проверим сначала, что эти кортежи позволяют определить, принадлежит ли кортеж go^(qc^ с) результату выполнения цели. Однако эти кортежи не будут получены, если для каждой из базовых конъюнкций Ьс и Ьс выполнить селекцию сг и в 12l=qcl
процессе вывода использовать только кортежи, полученные в результате этой селекции. Распространение же связывания переменной Х^ в первом правиле предиката
9。6, как показано ниже, произойдет успешно (гл. 10):
до (X X /qc ) :- be (X X /qc ).
goJX^X^ :- bc2(XvXJtgoe(XeX2).
bc^X^ X2/qc29 : - db^X^ a, qc2)t d^fX^ b, qc^),
be (X X ) :- db (X a, X ), db (X X ), db (X X ).
214112313434
Отсюда следует, что работающие во время пред-
ставления цели TCPR-системы могут улучшить только некоторые базовые конъюнкции рекурсивных правил, при этом анализ существенно усложняется. Можно, однако, обрабатывать рекурсивные правила во время их выполнения. Рассмотрим снова предикат гр】 из предыдущего раздела:
гр/ХуХ?) :- db^X^X^.
rp/Х^хр :- db/X], X3), rPifX3> xp.
Пусть 0 - отношение базы данных, соответствующее dbj и пусть следующие кортежи пренадлежат R^:
R^ = { <а, Ь>, <Ь, о, <а, d>, <b, е>, vf, д>, <д, е>, <д> h>> <f> h>, <5 р>, <р, q>, <5 q> }.
Рассмотрим цель:Рассмотрим цель:? - rp/а.хр.? - rp/а.хр.
Рассмотрим цель:
Рассмотрим цель:
? - rp/а.хр.
? - rp/а.хр.
базы данных. В извлекаются фактыбазы данных. В извлекаются фактыdb^a.b) и db^a.d), X =d.2После этого второе подцель гР](а,Х/・ Этоdb^a.b) и db^a.d), X =d.2После этого второе подцель гР](а,Х/・ Этооткуда получаем ответы Х^Ь иоткуда получаем ответы Х^Ь иправило предиката гр^приводит к генерацииправило предиката гр^приводит к генерациигенерируетгенерируетдвух новыхдвух новых
базы данных. В извлекаются факты
базы данных. В извлекаются факты
db^a.b) и db^a.d), X =d.
2
После этого второе подцель гР](а,Х/・ Это
db^a.b) и db^a.d), X =d.
2
После этого второе подцель гР](а,Х/・ Это
откуда получаем ответы Х^Ь и
откуда получаем ответы Х^Ь и
правило предиката гр^приводит к генерации
правило предиката гр^приводит к генерации
генерирует
генерирует
двух новых
двух новых
Выполним эту цель с помощью механизма Пролога, Для ее удовлетворения активизируется первое правило предиката гр^ При этом генерируется запрос d^fа, Х^),
который передается в интерфейс результате его выполнения из 0
подцелей гр^(Ь, Х^) и rpifd, Х^) на втором уровне рекурсии. Подцель rpifb, Х^) в свою очередь генерирует запрос db^fb, Х2), который передается в БД-интерфейс. В результате его выполнения из R】 будут извлечены факты d^fb, с) и db^fЬ, е9 и получены ответы Х^=с и Х2=е.
Под управлением механизма Пролога этот процесс продолжается генерированием запросов d^fd, Х2), db^c. Х2; и db](e, Х2), которые передаются в интерфейс базы данных. Однако ни один из этих запросов не производит ответов, и механизм вывода заканчивает свою работу.
Таким образом, взаимодействие с базой данных состоит из пяти различных запросов, но механизм Пролога рассматривает только релевантные исходной цели
кортежи. Следует, однако, отметить, что используемая механизмом Пролога процедура доказательства не является минимальной. Любой из рассмотренных выше ответов может генерироваться много раз, используя различные пути в пространстве поиска, определяемом исходной целью. Это означает, в частности, что одни и те же запросы к базе данных могут выполняться несколько раз, что приводит к увеличению стоимости вычислений. Для решения этой проблемы были разработаны методы, которые обсуждаются ниже.
4.3 Оптимизация интерфейса Пролог/База данных
Эффективность интерфейса Пролог/База данных можно рассматривать с двух сторон.
Со стороны Пролога хорошая эффективность достигается за счет минимизации вызываемых интерфейсом задержек. Другими словами, хороший интерфейс должен маскировать тот факт, что некоторые данные находятся во вторичной памяти. Эффективность поиска этих данных и поиска данных в резидентной в оперативной памяти базе данных Пролога должна быть сравнимой.
Со стороны базы данных хорошая эффективность достигается за счет минимизации времени выполнения и стоимости запросов, генерируемых интерфейсом. СУБД рассматривает СРР-систему как любого другого своего прикладного пользователя.
Эти точки зрения не являются противоречивыми. Их можно сформулировать с позиции интерфейса Пролог/База данных, потребовав, чтобы запрос к базе данных был максимально ограниченным и выполнялся только тогда, когда это необходимо.
* Мы видели, что запросы максимально ограничены, если интерфейс Пролога производит наибольшие базовые конъюнкции. В случае рекурсивных правил сильное связывание, при котором вместо большого некон- кретизированного . запроса производится несколько конкретизированных запросов, является более эффективным. Ниже мы рассмотрим механизмы, позволяющие избегать повторных выполнений запроса. Для этого часть информации может храниться в буферах основной памяти, или в резидентной в оперативной памяти базе данных Пролога. Мы проанализируем три альтернативных подхода: кэширование данных, кэширование запросов, кэширование данных и запросов.
Кэширование данных
Первая из рассматриваемых схем кэширования заключается в том, что все найденные для базовых конъюнкций кортежи помещаются в резидентную в оперативной памяти базу данных Пролога. По этой схеме кортежи для базовых конъюнкций сначала отыскиваются в основной памяти, куда они могли быть перемещены в результате выполнения предыдущего запроса, а затем во внешней памяти (при этом активизируется интерфейс базы данных). Управление этим процессом должно осуществляться интерфейсом Пролога, Одна из возможных реализаций рассмотренной выше схемы может быть описана на Прологе с помощью следующих двух метаправил:
match(BC) :- ВС.
mat ch(ВС; :- call^database_interface(BC).
В первом правиле производится попытка сопоставить текущую базовую конъюнкцию с данными в основной памяти. Заметим, что базовая конъюнкция может быть конкретизированной, т. е. некоторые экспортируемые переменные могут быть означены константами. Первое правило удовлетворяется, если в памяти Пролога имеются унифицируемые с текущей базовой конъюнкцией кортежи, иначе попытка выполнения правила завершается неудачей.
Второе правило активизирует интерфейс базы данных. Предположим, что второе правило удовлетворяется, когда запросу к базе данных соответствует непустой ответ; при этом новые результирующие кортежи загружаются в резидентную в оперативной памяти базу данных Пролога и производится унификация текущей базовой конъюнкции с первым из них. Чтобы предотвратить неоднократные сопоставления с одними и теми же фактами, загружаться должны только кортежи, отсутсутвующие в резидентной базе данных Пролога. Это означает, что отношения базы данных рассматриваются не как мультимножества кортежей (как принято в большинстве реализаций реляционных БД), а как множества кортежей, что согласуется с понятием отношения.
Для активизации метаправила достаточно выполнить подстановку терма match(bc(. . )) для каждого вхождения базовой конъюнкции Ьс(..). Например, предикат гр】 из разд. 4.2.2 запишется следующим образом:
гр^Х^хр :- matchfdb^X^X^).
гр^Х^хр :- matchfdb^X^ Х^Л rP/x3* Х2^
Кэширование данных и запросов
Приведенная выше схема улучшается путем кэширования не только результирующих кортежей, но также выполненых уже запросов к базе данных. Предикат queried(bc(.. )) указывает, что данный экземпляр Ьс(..) некоторой базовой конъюнкции уже передавался в интерфейс базы данных. и, следовательно, повторять этот запрос не нужно. Если такая дополнительная информация доступна, набор действий будет следующим:
Процесс сопоставления кортежей в основной памяти осуществляется до тех пор, пока он не завершится неудачей.
После неудачи производится проверка, чтобы определить, был ли текущий экземпляр базовой конъюнкции уже запрошен из базы данных. Если это так, повторное взаимодействие с базой деСнных было бы бесполезным. Следовательно, попытка сопоставления в этой точке терпит неудачу.
Наконец, активизируется интерфейс базы данных. После окончания загрузки кортежей в память Пролога сюда же помещается метаинформация queried(bc(,.)), что позволит в будущем предотвратить выполнение того же запроса.
Такая схема реализуется следующими тремя метаправилами под управлением интерфейса Пролога:
(1; match(BC) :- ВС.
match(BC) :- queried(BCJ, /, fail.
match(BC) :- call_database_interface(BC), assert(queried(BC)),
например, дляв разд. 4. 2. 2например, дляв разд. 4. 2. 2Эти правила могут использоваться, выполнения цели гргfa, Х^), рассмотренной
например, дляв разд. 4. 2. 2
например, дляв разд. 4. 2. 2
(см. определение гр〔 в конце раз д. 4.2.2).
добавляетсядобавляетсяПри первом взаимодействии с механизмом базы данных в результате выполнения метаправила (3) в основную память перемещаются кортежи rp^а, Ь) и rp^a, d) и
добавляется
добавляется
метаинформация queriedf rp^а, X) ). Затем в
результате выполнения подцели гр】(Ь, X) в память
и грг(Ь. е) и метаПосле этого прине производятся новые дополнительная мета- queried(rp^ (d, X) )ии грг(Ь. е) и метаПосле этого прине производятся новые дополнительная мета- queried(rp^ (d, X) )ипомещаются кортежи гр^(Ь, с) информацияqueried(rp^b, X)).
и грг(Ь. е) и мета
После этого при
не производятся новые дополнительная мета- queried(rp^ (d, X) )и
и грг(Ь. е) и мета
После этого при
не производятся новые дополнительная мета- queried(rp^ (d, X) )и
взаимодействии с базой данных кортежи, однако производится информацияqueried(rp^с, X)),
queried(rp^(e, X)), что позволяет предотвратить дополнительные обращения к базе данных.
Цсполъзование обобщения (subsumption)
Рассмотренную выше схему можно улучшить за счет использования отношения обобщения между литералами. Сначала дадим точное определение этого отношения. Литерал L обобщает литерал М тогда и только тогда, когда существует подстановка 6, такая, что, применив ее к L, получим М : L8 = М. Другими словами, литерал L является более общим, чем литерал М. Отношение обобщения между родовыми предикатами формально определяется в гл. 6. Например,
predfX, a, b) обобщает pred(с, а, Ь;.
predfX, a.Y) обобщает predfb, a, Z).
pred(X, Y, с) обобщает predfZ, Y, с) и наоборот. predfX, a, b) не обобщает pred(a, a, Z).
Обобщение используют в правиле (2). Чтобы избежать дополнительных обращений к базе данных, достаточно среди предикатов queried найти такой, который обобщает текущий. Если он найден, к базе данных формулировался запрос, содержавший более общие условия, чем текущий запрос. Следовательно, кортежи, являющиеся ответом на текущий запрос, уже загружены в память. Следующие правила реализуют эту новую схему:
match(BC) :- ВС.
matchfBC; : - queried(BC), 8иЬ8ите8(0, ВС), /, fail.
match(BC) :- call_database_interface(BC), assert(queried(ВС;)•
Отметим также, что проверка отношения обобщения между единичными литералами сводится к простому сопоставлению, которое реализуется механизмом Пролога. Здесь оказывается полезным следующее свойство: если L и Я - литералы, то L обобщает М тогда и только тогда, когда L сопоставим с Ml, где Ml получается из М подстановкой вместо каждой переменной некоторой новой константы. Пример, приведенный на рис. 4. 4, поясняет это свойство.
В данном примере отыскивается образец предиката queried, обобщающий predl(c, Т, е). Видно, что кортеж predl (c.Y.Z) удовлетворяет этому условию.
ФАКТЫ QUERIED
ТЕКУЩАЯ БАЗОВАЯ КОНЪЮНКЦИЯ
queried(pred2(e. 8)).
predl (с, Т.上)・
queried(predl (d,X,e)).
queried(predl (c,Y,Z)).
queried(pred2(j. 91)).
queried(pred(e,a,Z)).
Рис.4.4. Проверка отношения обобщения между
единичными литералами.
Используя рассмотренное выше свойство, сначала заменим все переменные в predl(ct Tt е) новыми константами. Предположим, что переменная Т заменяется константой spec^const. Получим predl(ct spec^const, е). Далее сопоставим этот основной литерал с кортежами с функтором queried. Сопоставление с третьим кортежем завершается успешно с подстановками Y/spec_const и Z/c. Таким образом, проверка обобщения также завершается успешно.
4.3・ 4. Кэширование4.3・ 4. Кэшированиезапросовзапросов
4.3・ 4. Кэширование
4.3・ 4. Кэширование
запросов
запросов
Основная проблема при кэшировании данных - хранение в основной памяти потенциально больших наборов данных. Следовательно, существует риск, что доступная память окажется исчерпанной. Эту проблему можно решить путем организации виртуальной памяти и механизмов страниц, однако такое решение неэффективно. Исходя из этих соображений, была разработана еще одна схема взаимодействия с базой данных, при которой производится только кэширование запросов. Данные извлекаются из БД и помещаются во внешние файлы, где к ним осуществляется доступ (возможно, неоднократно) без обращения к базе данных.
Когда некоторый запрос завершается, предикат queried(bc(,.), filename) указывает, что данный запрос Ьс(. . ) выполнен и результирующие кортежи помещены в файл» имя которого является вторым аргументом предиката. После этого с помощью специального предиката
unify(Predicate, File) можно извлекать кортежи из указанного внешнего файла по одному и унифицировать их с текущим предикатом Predicate, При последующих обращениях к предикату unify извлекаются очередные кортежи. Когда достигается конец файла (метка end_pf_file). предикат unify завершается неудачей. Рас- смотренную схему реализуют следующие правила:
(2 ; match(BC) :- queried(BC, FILE), unify (ВС, FILE). (3) match(BC) :-call_database_interface(BC, FILE;,
assert(queried(BC, FILE)). unify(BC, FILE).
Недостатком этой схемы является большое число файлов, генерируемых в процессе выполнения Пролог- программы, что приводит к загромождению внешней памяти. Файлы могут быть большими (заметим, что одинаковые кортежи могут в них повторяться, поскольку запросы могут содержать одинаковые фрагменты). Если основная память исчерпывается, метаинформация о предикатах queried может быть удалена без влияния на корректность взаимодействия: следствием удаления одного такого факта было бы повторение запроса к базе данных. Предполагается, что наибольшей вероятностью повторения обладают последние запросы, поэтому при сжатии основной памяти удобно удалять факты предиката queried fвместе с соответствующими файлами), которые сформированы первыми. При этом можно управлять объемом памяти, требуемым для хранения фактов предиката queried.
4.3.5. Параллелизм и4.3.5. Параллелизм ибазы данныхбазы данныхпредвыборка в интерфейсахпредвыборка в интерфейсах
4.3.5. Параллелизм и
4.3.5. Параллелизм и
базы данных
базы данных
предвыборка в интерфейсах
предвыборка в интерфейсах
Обсудим теперь параллелизм и предвыборку - два разных подхода к повышению эффективности интерфейса Про- лог/База данных. Параллелизм достигается путем использования нескольких интерфейсов базы данных, работающих одновременно. При предвыборке заранее определяются данные, необходимые механизму Пролога. Следствием обоих этих подходов является уменьшение задержки со стороны Пролога за счет дополнительных требований к базе данных.
Очевидно, что в LCPP-системах параллельное выполнение запросов возможно, поскольку каждую базовую конъюнкцию можно выполнить независимо от остальных перед активизацией механизма Пролога. Чтобы не "перегружать" базу данных, можно зафиксировать число интерфейсов базы данных, каждому из которых
соответствует очередь ожидающих выполнения запросов.
В ТСРР-системах управление взаимодействием осуществляется механизмом Пролога, который управляет выполнением правил. Схема вычислений, реализованная в классических Пролог-системах, является последовательной, хотя и существует несколько версий Пролога, использующих параллелизм.
Таким образом, интерфейс Пролога поддерживает параллелизм в следующих случаях:
Если правило содержит несколько независимых базовых конъюнкций (например, когда правило содержит дизъюнкции или отсечения, см. разд. 4.2.1), каждая из них может быть передана в разные интерфейсы базы данных для параллельного выполнения.
Если при помощи некоторого интерфейса базы данных извлекается первый факт (что позволяет произвести унификацию с ним текущей базовой конъюнкции), интерфейс Пролога может возобновить работу механизма Пролога. В то же время интерфейс базы данных продолжает загружать остальные факты в основную память. Это уменьшает задержку при вычислениях в Прологе и в тоже время создает возможности для организации параллелизма (поскольку механизм Пролога может продолжать обработку других целей, которые, в свою очередь, могут вызвать выполнение различных запросов, активизируя при этом другие интерфейсы базы данных).
Факты могут загружаться интерфейсом базы данных поблочно либо постранично. В этом случае интерфейс базы данных активизируется при каждом страничном прерывании, т. е. когда операция сопоставления произведена над всеми фактами одной страницы, интерфейс Пролога может предвидеть страничные прерывания и асинхронно осуществить предвыборку очередной страницы данных, используя традиционные механизмы операционных систем.
Заключение
CPR-системы можно рассматривать как первый шаг на пути развития основанных на логике баз данных и баз знаний. Мы показали, что подход к разработке CPR-систем в виде надстройки над существующими СУБД является вполне приемлемым. Был рассмотрен также ряд методов оптимизации эфективности такого интерфейса с базой данных. Несмотря на наличие соответствующих методов оптимизации, CPR-системы по сути не поддерживают специализированные механизмы для работы с логическими
программами (в частности с рекурсией). Таким образом, эфективность CPR-систем все еще нуждается в оценке. В интегрированных логических базах данных, которые описаны в ч. 3 книги, можно достичь более высокой эфективности.
Литература к главе
Различие между слабым и сильным связыванием обсуждается во многих статьях, например, Миссиков м Вмдерхольд [Miss84], Бокка и др. [ВоссвбЬ], Гардарен х Саймон [Garde7]. Вагнер-Дитрихом и Уорреном [Wagn86] определяются таблицы расширений. Этот метод позволяет программисту определить предикат в виде таблицы расширений, в результате чего все факты, полученные для данного предиката, помещаются в резидентную в оперативной памяти базу данных Пролога. Определение базовой конъюнкции обсуждается в статьях Каппенса и Демоломба [Сир86] (в контексте слабого связывания) м Деноела, Роелантса и Воклера [Deno86] (в контексте сильного связывания). Бри [Вгу89] ввел новый алгебраический оператор, называемый дополнительным соединением, результатом выполнения которого являются
все кортежи, исключенные в результате выполнения соответствующего соединения. Этот оператор можно использовать для улучшения обработки правил с отрицанием, поскольку дополнительное соединение применяется вместо пары операций полусоединения м разностм. Метод кэширования запросов и данных и его усовершенствование с помощью отношения обобщения разработаны Чери и Видерхольдом ([Ceri86b] и [Ceri89]). Метод кэширования запросов, реализованный в системе BERMUDA, описан Иоанидисом, Ченом, Фридманом м Ценгерисом [Ioan87b]. В этой статье обсуждается также использование механизмов базы данных с параллелизмом и предвыборки.
Упражнения
Определите наибольшие соединенные базовые конъюнкции в следующих Пролог-программах:
R(X X ) dbp (X X )tdbp (X X )t
р (X X ) :- dbp (X bt X )tp (X ).
Рз(Х/ :- dbp/XjEXJ.
Р/Х,Х2; :- dbPifX,X3;,P2fX3, XJ,
dbp2(Xe b, X2;.
P2fX,X2; :- dbp3fX,a,X2;.
P2(Xj X2;:- dbp/X], а, Хз;, р"Хз, Х?)・
Pd) :- ((P2(\;, /, Р/X2 ;, dbPi f X2, a;;; fnotfp2fxn,dbp/x, xp, P2(x3))).
P2(XJ :- dbp2(xv^ X;.
Оттранслируйте базовые конъюнкции, полученные в у пр. 4. 1, в SQL. Предположите, что имеет место следующее соответствие:
dbP] <===> J ( 4, & )
喚<===> %唱宀,%)
^Ьр3 <===> %0,%С3) dbp& <===> %(%%%)
Пусть заданы цель ? - pifa, X; и программы из упр. 4. 1. Осуществите распространение запросной константы для нерекурсивных случаев.
Рассмотрим Пролог-программу определения лиц одного поколения:
sgfx,xp :- fx = хр.
sg(X X ) :- par(X X ), sg(X X ), par(X X ).
Пусть отношение, содержащее информацию о родителях, имеет вид
PAR = { <а, Ь>, <а, о, <с, е>, <f, е>, <д, е>, vd, b>, <е, h>, vm, n>, <о, р>, <р, q>, <r, q>, <r, р>, <о, s>, vx, у>, vx, z>, в, z> }
Определите все ответы для следующей цели:
? - sgSI), (X] = Х2;.
(Указание: используйте графическое представление или интерпретатор Пролога). После этого рассмотрите следующие цели:
? - sg(at X). , начиная с пустой резидентной базы данных Пролога.
? - sg(at f). , начиная с пустой резидентной базы данных Пролога.
? - sg(atX)., за которой следует ? - sgfа,е)., за которой следует ? - sg(f, е / , за которой следует ? - sg(f, У)., выполняя все цели в одном сеансе (т. е. не стирая содержимое памяти Пролога между выполнениями целей).
Для каждой цели выполните приведенные ниже упражнения 1-4 :
Имитируйте пошаговое выполнение запросов к базе данных, используя при загрузке фактов в память метод кэширования данных. Укажите, какие запросы повторяются.
Имитируйте пошаговое выполнение запросов к базе данных, используя при загрузке фактов в память метод кэширования запросов и данных. Укажите окончательное число фактов queried, помещаемых в основную память
Можно ли улучшить выполнение программы для случая 2, используя отношение обобщения между литералами?
Имитируйте пошаговое выполнение запросов к базе данных и содержимое внешних файлов при методе кэширования запросов. Укажите окончательное число требуемых файлов.
5. Напишите метаинтерпретатор интерфейса Пролога, осуществляющий кэширование данных и обеспечивающий возможность хранения в кэш-памяти только последних 100 фактов, загруженных из основной памяти. Используйте специальные предикаты assert и retract. Указание: это классическая задача управления памятью в операционных системах. С фактами должны ассоциироваться временные метки, указывающие время помещения их в память.
6. Напишите мета-интерпретатор интерфейса Пролога, реализующий кэширование запросов, исходя из предположения, что основная память для хранения фактов queried может быть исчерпана.
Глава 5. ОБЗОР СИСТЕМ ДЛЯ СВЯЗЫВАНИЯ ПРОЛОГА И РЕЛЯЦИОННЫХ БАЗ ДАННЫХ
Ниже описаны следующие CPR-системы и прототипы, разработанные для связывания Пролога и реляционных баз данных:
•PRO-SQL - система, связывающая Пролог с системой SQL/DS и разработанная исследовательским центром IBM (IBM Research Center at Yorktown Heights).
•EDUCE - система, связывающая Пролог с СУБД INGRES и разработанная Европейским исследовательским центром компьютерной индустрии в Мюнхене (European Computer Industry Research Center).
•Интерфейс ESTEAM, разработанный в рамках проекта Esprit ESTEAM для связывания разнообразных реализаций Пролога и СУБД.
•BERMUDA - прототип, разработанный в Висконсинском университете, связывающий Пролог и машину баз данных IDM500 (Britton-Lee).
•CGV - архитектура для связывания Пролога и систем баз данных, разработанная в Станфордском университете, и PRIMO - прототип интерфейса между системой Arity-PROLOG и СУБД ORACLE, разработанный в университете г. Модены (Италия).
•Интерфейс QUINTUS между системой QUINTUS-PROLOG и СУБД Unify, разработанный корпорацией Quintus Computer Systems (Маунтейн Вью, Калифорния).
Хотя в этих системах организован интерфейс с разными реляционными базами данных (SQL/DS, Ingres, Oracle, Unify и IDM500), их архитектура в большинстве случаев системно независима. В некоторых проектах отмечается, что выбор СУБД мало влияет на общую архитектуру. Шесть подходов, перечисленных выше, способствовали написанию предыдущей главы по CPR-системам.
PRO-SQL
Существенная особенность системы PRO-SQL - полное отсутствие прозрачности. Предполагается, что программы PRO-SQL должны писать люди, хорошо знающие как язык Пролог, так и язык SQL. Для определения операторов, которые выполняются в среде СУБД SQL/DS, используется специальный предикат SQL:
SQLf<SQL-onepaTop>).
В качестве SQL-операторов можно использовать операторы для определения данных, помещения и поиска данных, а также операторы управления транзакциями. Ниже приведен пример использования предиката SQL для определения запроса к отношению EMPLOYEE (служащие):
SQL('SELECT NAME, SAL FROM EMPLOYEE WHERE SAL>50^ ).
В результате выполнения этого запроса все кортежи» удовлетворяющие заданному условию, помещаются в резидентную базу данных Пролога. В качестве имени предиката для полученных фактов берется имя первого отношения в операторе FROM. Выполнение SQL-запроса происходит синхронно: механизм Пролога приостанавливается до тех пор, пока выбранные кортежи полностью не загрузятся в основную память.
Рассмотрим второй пример использования предиката SQL:
SQL「SELECT CHILD, PARENT INTO X, У FROM EMPLOYEE WHERE SAL>50^ ).
В этом случае переменные X и Y после выполнения получают значения, извлеченные из первого найденного в базе данных кортежа. После того как первый кортеж получен, управление передается механизму Пролога. При этом загрузка остальных кортежей выполняется асинхронно.
Выполнение рекурсивных программ осуществляется путем итеративных вызовов предиката SQL. В таких вызовах используется информация о пометке предикатов запроса (т.е. о позициях, которые будут связаны константами запроса). В качестве примера рассмотрим программу, которая производит вычисление отношения ancestor fпредок). Она выполняется корректно только при поиске предков заданного лица, но не его потомков:
ancestorfX, Y) :- SQL(f SELECT CHILD, PARENT INTO X, У FROM FATHER WHERE CHILD = X’)•
■ ancestor(Xt Y) : - father(X, Z;, ancestor(Z, Y).
В данном случае Пролог-программа взаимодействует с базой данных только во время выполнения первого правила. Во втором правиле производится попытка унификации с фактами, находящимися в основной памяти, которые были загружены первым правилом. Таким образом, второе правило просто выполняется под управлением механизма Пролога. PRO-SQL поддерживает управление транзакциями. По умолчанию каждая активизация пре-
диката SQL рассматривается как транзакция и защищается системой восстановления и управления конкурентным доступом от влияния ошибок и конкурентного выполнения других транзакций. Операторы SQL, которые следует выполнить как одну транзакцию, программист может выделить с помощью двух операторов SQL/DS: COMMIT WORK и AUTOCOMMIT OFF. Ниже приведен пример транзакции:
transaction :- SQL(f COMMIT WORK'),
SQL('AUTOCOMMIT OFF9 ;, SQLf* Оператор SQL 1/), SQLf* Оператор SQL 2,), SQL,’Оператор SQL 3’), SQL(f COMMIT WORK^ ).
В этом примере первый оператор завершает предыдущую транзакцию, второй оператор указывает, что PRO-SQL управляет фиксацией транзакции, третий, четвертый и пятый операторы составляют транзакцию, и наконец, шестой оператор осуществляет фиксацию данной транзакции. Другой пример использования операторов управления транзакциями содержит следующий запрос, который выполняет определенную выше программу ancestor:
? - SQL(* COMMIT WORK* ), SQL(^ AUTOCOMMIT OFF'), ancestor(John, X;, SQL(^ COMMIT WORK')・
В этом случае все активизации предиката SQL в первом правиле программы ancestor составляют транзакцию.
PRO/SQL реализована в среде ОС VM/CMS. Механизм Пролога и SQL/DS выполнены в виде двух независимых виртуальных машин на одной физической машине. Запросы, передаваемые в SQL/DS, обрабатываются подсистемой ^обработки динамически определяемых запросов11, которая обычно используется для случайных запросов.
EDUCE
EDUCE - один из многих проектов интеграции логического программирования и баз данных, разрабатываемых Европейским исследовательским центром компьютерной индустрии (ECRC). EDUCE является CPR-системой, поддерживающей как слабое, так и сильное связывание. Другой проект, называемый DEDGIN, представляет собой интегрированный подход к логике и базам данных. EDUCE используется в качестве ядра системы баз знаний PROLOG-КВ, поддерживающей семантическую модель данных.
Все эти системы используют СУБД INGRES и язык запросов QUEL. Такое разнообразие работ позволяет считать ECRC одним из наиболее активных исследовательских центров в данной области. В EDUCE поддерживаются различные пользовательские языки и стратегии реализации. С лингвистической точки зрения здесь имеются два разных языка: свободный язык, который является непроцедурным, и непосредственный язык, по стилю напоминающий Пролог. В EDUCE также имеются две альтернативные стратегии выполнения: множественно-ориентированная и кортежеориентированная. Они могут комбинироваться, порождая гибридные стратегии, хотя обычно запросы на свободном языке выполняются с помощью множественно-ориентированной стратегии, а запросы (цели) на непосредственном языке - с помощью кортеже-ориентированной стратегии.
Непосредственный язык полностью прозрачен. Базовые предикаты могут комбинироваться с другими предикатами, при этом допускаются рекурсивные цели. Со свободным языком дело обстоит сложнее, поскольку он содержит некоторые встроенные предикаты со своеобразными синтаксисом и семантикой. Например, предикат query может иметь в качестве аргумента любой запрос на языке QUEL. Данный предикат завершается успешно, когда после выполнения запроса результирующие кортежи загружены в основную память. Более сложный предикат retrieve допускает запросы с общими переменными. Прозрачность, таким образом, теряется.
Архитектура системы EDUCE обеспечивает два типа связывания, называемых слабым и сильным, хотя смысл этих терминов отличается от определений гл. 4. При слабом связывании организуются два отдельных процесса (называемые интерфейсом Пролога и интерфейсом базы данных). Первый передает запрос второму, а второй возвращает результирующие кортежи. Такой механизм является подходящим для нерекурсивных запросов на свободном языке. При сильном связывании в механизм Пролога включаются некоторые методы доступа к базе данных на диске. Для выполнения сложных рекурсивных запросов используются специальные методы. При этом обеспечивается прямая трансляция запросов (целей) непо средственног о языка. Оптимизатор системы EDUCE способен выбрать подходящую стратегию, иногда даже нарушая рассмотренное выше соответствие.
ESTEAM
Интерфейс ESTEAM разработан в рамках проекта Esprit Р316 исследовательской лабораторией фирмы Philips в Брюсселе и Onera-Cert в Тулузе. Подход, исполь-
зованный в интерфейсе ESTEAM, заключается в распознавании больших базовых конъюнкций, которые следует рассматривать как единицы взаимодействия с базой данных. Алгоритмы для определения базовых конъюнкций подробно рассмотрены в разделе 4. 2. В качестве СУБД в ESTEAM используется система INGRES с языком запросов QUEL. Рассмотрим следующую базовую конъюнкцию:
bc(X X ) :- dbp (X X X ), dbp/X a, X ), X >5. 1411232342
Пусть R"%%%) и r2(b^ в2» b3) - отношения базы данных, которые соответствуют предикатам dbp^ и dbp2, Результат трансляции рассматриваемой базовой конъюнкции в QUEL:
range of “] is &
range of 嗅 is R^
retrieve into be(“].仆 嗅・ %)
where % . Z > 5 12
and "「/ = 〃2, %
and ” % = ”
последова- начиная с все взаи- активациейпоследова- начиная с все взаи- активациейИнтерфейс ESTEAM включает алгоритм тельного построения базовых конъюнкций, целей Пролога. При слабом связывании модействия с базой данных происходят перед
последова- начиная с все взаи- активацией
последова- начиная с все взаи- активацией
механизма Пролога, базовых конъюнкциймеханизма Пролога, базовых конъюнкцийПри сильном связывании построение запросов происходит одновременно с
механизма Пролога, базовых конъюнкций
механизма Пролога, базовых конъюнкций
вычислением Пролог-программы. Интерфейс ESTEAM допускает дизъюнкцию, отрицание, рекурсию и специальный предикат отсечения (рассмотренный в разд. 4.3). Допу
скаются также агрегатные запросы.
BERMUDA
Прототип BERMUDA разработан в Висконсинском университете. BERMUDA - сокращение от английского словосочетания Brain Employed for Rules, Muscles Used for Data Access fмозг работает с правилами, мускулы используются для доступа к данным). Основное внимание в данном проекте сосредоточено на особенностях архитектуры, в частности на тех особенностях, которые возникают при работе нескольких интерфейсов базы
данных одновременно. Параллелизм достигается за счет двух основных механизмов.
•Механизм Пролога активизируется, как только первый кортеж извлечен из базы данных, интерфейс базы данных и интерфейс Пролога продолжают загружать данные асинхронно. Это позволяет механизму Пролога производить другие запросы до того, как ответ на текущий запрос будет получен полностью.
•Каждый интерфейс базы данных получает результат выполнения запроса из БД не полностью, а по нескольку блоков (страниц) данных, которые помещаются в основную память. Перед тем как механизм Пролога использует всю страницу данных, интерфейс базы данных будет активизирован повторно, в результате чего получается следующая страница (страницы) данных. Такие средства предвыборки разработаны для уменьшения объема данных, загружаемых в память, а также для уменьшения времени ожидания механизма Пролога. Предвыборка может использоваться для повышения степени параллелизма, так как при этом могут быть активными одновременно несколько интерфейсов базы данных.
BERMUDA распознает базовые конъюнкции в некоторых из тех случаев, которые были описаны в разд. 4.3, и передает каждую базовую конъюнкцию в интерфейс базы данных в виде одного запроса. Выполнение нелогического предиката cut вызывает управляющее сообщение, которое приостанавливает процессы загрузки для предикатов слева от отсечения до тех пор, пока соответствующие переменные не получат значения, не изменяющиеся при возвратах.
BERMUDA кэширует запросы, как это описано в разд. 4.3.4: кортежи результирующих отношений запоминаются во внешнем файле, а система отслеживает уже выполненные запросы для того, чтобы при повторном их выполнении извлекать результирующие кортежи прямо из файла. Отношение обобщения между предикатами не используется, поэтому распознаются только идентичные запросы. Однако отношение обобщения в том виде, как это описано в разд. 4.3.4, система BERMUDA использовать может. Как мы видели в гл. 4, при кэшировании запросов вторичная память загромождается большим числом результирующих файлов.
С точки зрения архитектуры существует единственный интерфейс Пролога, называемый BERMUDA AGENT (агент), который получает запросы, определяемые механизмом Пролога, и передает их в интерфейсы базы данных, называемые LOADERS fзагрузчики). Имеется фиксированное число таких загрузчиков, которые создаются во время вызова системы и существуют до конца сеанса. Когда число запросов превышает число загрузчиков,
запросы помещаются в очередь и исполняются по принципу ппервым пришел - первым обслуживается11 (FIFO). BERMUDA AGENT располагает информацией о том, какие запросы сформулированы и какие файлы для хранения результатов выполнения созданы с момента активизации системы. Следовательно, он обладает достаточной информацией для организации кэширования запросов. Одновременно могут быть активными несколько механизмов Пролога, при этом каждый выполняет собственную программу и взаимодействует С BERMUDA AGENT.
5・5・ CGW и PRIMO
Подход CGW был развит в рамках проекта KBMS в Стан- фордском университете. Идея его состоит в уменьшении числа обращений к базе данных за счет кэширования запросов и данных так, как это было изложено в разд.
При этом для взаимодействия с базой данных используются интерфейс низкого уровня и управление доступом к страницам данных. Для того чтобы указать, сколько страниц данных доступно в текущий момент времени при заданном методе доступа, используются специально разработанные структуры данных Пролога - трассеры. Роль интерфейса Пролога играет специальный метаинтерпретатор, управляющий сопоставлением отдельных предикатов базы данных. Ниже приведена упрощенная версия метаправил, используемых данным метаинтерпретатором :
match(DBP) :- DBP.
match(DBP) :- queried(DBQ9, subsumes(DBQ, DBP), /,fail.
(3; match(DBP; :- traccer(DBQtPAGE), subsumes(DBPtDBQ)t call_dat abase_int erface(DBQ).
match(DBP; :- cal 1_database_inter face(DBP).
Смысл правил 1 и 2 пояснен в разд. 4. 3. 2. Вначале производится попытка сопоставления с резидентными фактами. После этого выполняется тест, целью которого является проверка: был ли ранее выполнен более общий запрос, и сформирован ли для него предикат queried. Правила 2 и 4 используют трассеры. Вначале правило (3) пытается использовать путь доступа, который уже был отслежен для предиката DBQ, включаемого текущим запросом (т.е. являющегося менее общим). Если правило 3 подходит, для DBQ активизируется интерфейс базы данных. В противном случае правило 4 активизирует
интерфейс базы данных для текущего предиката DBP, Правило 3 осуществляет поиск фактов, потенциально полезных для других предикатов базы данных, и уничтожает текущие трассеры (таким образом уменьшая число частично выполненных запросов).
интерфейс базы данных извлекает одну страницу данных из базы данных и помещает ее в резидентную базу данных Пролога. Если запрос выполнен, интерфейс базы данных помещает туда же предикат queried(dbp). В противном случае он помещает в базу данных Пролога предикат traccer(dbptpage), второй аргумент которого указывает идентификатор текущей (загруженной с диска^ страницы.
Подход CW также показывает, что отношение обобщения в двух рассмотренных выше случаях можно свести просто к сопоставлению. В его рамках описана техника работы с трассерами, которая при использовании формальных свойств трассеров является достаточно эффективной. И наконец, рассматривается вопрос о том, как нужно осуществлять управление памятью, если основная память переполнена фактами базы данных и метаинформацией fпредикатами queried и traccer).
Основное ограничение подхода состоит в том, что вместо сопоставления со всей базовой конъюнкцией происходит раздельное сопоставление с каждым базовым предикатом. В результате операция соединения выполняется не в среде СУБД, а в основной памяти Пролога. Практически каждый предикат базы данных в среде СУБД обрабатывается отдельно от других. Этот подход эффективен в том случае, когда один и тот же предикат базы данных соединяется с различными предикатами базы данных в одной программе. Однако он может оказаться и неэффективным, поскольку избирательность операции соединения теряется, и, следовательно, возникает необходимость хранения больших объемов данных.
За CGW последовала разработка системы PRIMO - Prolog-Relatinal Interface developed at the University of Modena (интерфейс Пролога и реляционных баз данных, разработанный в университете г. Модены). Основные иели при разработке системы PRIMO - мобильность, модульность и прозрачность. Благодаря мобильности интерфейс PRIMO можно организовать между любой Пролог-системой и любой системой реляционных баз данных, при условии что в первой существует возможность вызова функций операционной системы, а во второй поддерживается язык SQL. Текущая реализация системы PRIMO использует Arity-PROLOG и СУБД Oracle. Система PRIMO полностью прозрачна, в ней используется чистый Пролог. Прозрачность достигается за счет использования программы-анализатора, которая трансформирует исходную
программу Пролога в модифицированную, способную взаимодействовать с PRIMO без вмешательства пользователя. В частности, этот анализатор имеет доступ к каталогу базы данных, что позволяет ему распознавать предикаты базы данных, т. е. предикаты, основные правила (факты) которых хранятся в базе данных.
Система PRIMO использует слабое и сильное связывание. Слабое связывание используется тогда, когда базовый предикат в программе пользователя обладает высокой избирательностью и необходимо выполнить поиск только немногих фактов. В этом случае для хранения требуемых программой пользователя фактов достаточно небольшого объема оперативной памяти. Сильное связывание используется для всех остальных предикатов. Общая архитектура для подхода CGW была модифицирована (улучшена) по следующим направлениям:
•интерфейс базы данных работает на высоком уровне, используя язык SQL. Таким образом, не требуется непосредственное управление •механизмом доступа к страницам. Система PRIMO не использует трассеров и кэширует запросы и данные с помощью метаинтерпретатора, описанного в разделе 4.3.2. Это обеспечивает ее мобильность.
•Система PRIMO рассматривает базовые конъюнкции как единичные запросы типа соединения. Таким образом, интерфейс базы данных использует избирательность оператора соединения для уменьшения числа кортежей, загружаемых в основную память. С другой стороны, факты помещаются в память в том же формате, что и исходные предикаты базы данных, и механизм Пролога повторяет выполнение соединения в основной памяти. Этим достигается максимальная прозрачность: механизм Пролога выполняет исходную программу пользователя, а не трансформированную программу с явными правилами для базовых конъюнкций.
•Система PRIMO поддерживает несколько вариантов интерфейса Пролога, которые реализованы с помощью стандартного Пролога (в частности, с использованием для загрузки фактов в память предиката assert). Различные альтернативы сравниваются с точки зрения эффективности доступа и размера используемой памяти.
QUINTUS-PROLOG
Система QUINTUS-PROLOG, разработанная корпорацией Quintus Computer Systems, организует интерфейс с СУБД Unify. Система реализована на рабочей станции Sun и на машинах Vax-Unix. Интерфейс работает на двух уровнях:
на уровне отношений, обеспечивающем непосредственное извлечение кортежей из отношений БД по одному, и на уровне взглядов, на котором происходит трансляция целого Пролог-правила в единичный запрос к базе данных» включающий соединения и агрегатные операции. Связь с базой данных осуществляется с помощью специального предиката db_connect. Перед его вызовом в базу данных Пролога необходимо поместить некоторые факты» декларирующие отношения и взгляды. Эта информация используется предикатом db_connect для организации связи. После установления связи предикаты отношений и взглядов могут использоваться как любые другие предикаты, при этом поддерживается полная прозрачность.
Проиллюстрируем связь с .базой данных emp_dbt используя два известных отношения етр и dept. Предикат db_name используется для указания того, что существуют база данных и физический файл» содержащий базы данных в системе Unify:
db_name(emp_dbt unify, ^ unify/emp_db/fHe. db‘ ).
Схема каждого отношения базы данных определяется фактом db:
db(empt emp_dbt етр(я Empnum, : integer 'Name' : string * Salary^ : integer ,Depnumf : integer)). db(dept, emp_dbtdept(я Depnum^ : integer Production^ : string * Location^ : string;;.
В этом определении имена атрибутов должны совпадать с их именами в каталогах базы данных. Некоторые атрибуты отношений могут быть опущены. Для одного отношения может быть определено несколько фактов db, в которых рассматриваются различные проекции заданного отношения.
Определения начинают работать после установления связи с помощью предиката db^connect:
db^connect(empjdb).
Интерфейс взглядов можно использовать для выполнения правил» чьи тела состоят только из предикатов базы данных и агрегатных предикатов (определены ниже). В этом случае правило транслируется в сложный запрос к базе данных, при выполнении которого используются все преимущества обработки запросов в СУБД.
Каждое определение взгляда дополняется спецификацией режима, состоящей из терма, основной функтор которого формируется с помощью имени головного предиката правила взгляда. Аргументы данного предиката содержат информацию о динамической пометке данного предиката взгляда: либо символ +, либо символ -. Символ + указывает на то, что соответствующая позиция при выполнении предиката взгляда будет означена константой. Эта информация позволяет осуществить оптимизацию при компиляции взгляда. Если при вызове предиката взгляда его динамическая пометка отличается от определенной в спецификации режима, возникает ошибочная ситуация и выполнение предиката завершается неудачей.
Рассмотрим пример, в котором приведено определение простого взгляда, представляющего собой соединение предикатов етр и dept. Этот взгляд позволяет определить место расположения и продукцию отдела, в котором работает данный служащий. Предполагается, что во время выполнения первый аргумент предиката vievl будет означен константой:
:-db_jnodev i evl ( +1 -, - J. vievl(Empnumt Loc, Prod) : - emp(Empnumt __, _, Dept), dept (Dept, Prod, Loc).
Интерфейс взглядов поддерживает также агрегатные предикаты. Для этого используется тернарный предикат aggregate. Его первый аргумент определяет агрегатную функцию (функции), которую следует вычислить и которая обычно является одной из следующих функций: min, max, average, sum или count. Второй аргумент указывает, каким образом агрегатная функция должна использоваться, и наконец, третий аргумент указывает имя (имена) переменных головы правила взгляда» значения которых должны стать равными результату вычисления функции. Рассмотрим, например, взгляд, определяющий среднюю зарплату для всех служащих» работающих под началом данного руководителя:
:- dbjmodeview2f+,-,-)・ view2(Mgr, Depnum, Sums al ) : - dept (Deptnum, Mgr, aggregat e f sum(Sal), (E, N), emp(Et ^, Sal, Depnum ),
Sums al).
Декларации взглядов необходимо добавить к декларациям отношений, для того, чтобы они могли обрабатываться при выполнении предиката db_connect. С
помощью специального предиката compile_yiev можно добавить дополнительные определения взглядов. Заметим, что в данном интерфейсе не осуществляется ни кэширование данных, ни кэширование запросов. При каждом обращении к отношению базы данных или взгляду взаимодействие реализуется с помощью общих переменных, означиваемых при обращении. Интерфейс базы данных управляет результатом выполнения запросов и обеспечивает унификацию со следующим кортежем при бэктрекинге. Тем не менее система производит компиляцию запроса и связывание во время выполнения предиката db_connect. В данном интерфейсе имеется возможность добавления и удаления фактов из базы данных на диске при помощи предикатов db_assert(DBP;, db_retract__f irst (DBP; и db_retractual 1 (DBP). В результате выполнения второго предиката удаляется только один (случайно выбранный) сопоставимый кортеж. Третий предикат удаляет все сопоставимые кортежи.
Литература к главе
Система PRO-SQL описана в статье Чанга и Уокера [Chan 84]. Система EDUCE описана в статьях Бокка [Восс 86а] и Бокка и др. [Восс 86b]. Проект Esprit ESTEAM описан в статьях Каппенса и Демоломба [Cupp 86], а также Деноэла, Роэланца и Воклера [Deno 86]. Система BERMUDA описана в статье Иоанидиса, Ченя, Фридмана и Цангариса [Ioan 87b]. Подход CGW описан в статьях Чери, Готлоба и Видерхольда [Ceri 86b], [Ceri 89] . Система PRIMO описана в статье Чери, Гоцци и Лульи [Ceri 88с]・ Интерфейс QUINTUS-PROLOG описан в справочном руководстве [Quin 87].
Часть II. ОСНОВЫ ЯЗЫКА ДЕЙТАЛОГ
Дейталог представляет собой сравнительно недавно разработанный язык логического программирования» позволяющий выражать сложные запросы к базе данных.
Сначала мы рассмотрим синтаксис Дейталога и введем несколько полезных понятий из области логического программирования и автоматического доказательства теорем. Затем строго определим теоретике-модельную семантику языка и представим полную и обоснованную теорию доказательства для Дейталога, которая непосредственно приводит к процедуре восходящих вычислений программ Дейталога. Мы рассмотрим также теорию неподвижной точки Дейталога и покажем, как программы Дейталога могут вычисляться обратным выводом при помощи нисходящего метода.
Здесь нас в основном будут интересовать логические основы языка Дейталог и некоторые основополагающие принципы и алгоритмы вывода фактов. Мы не будем придавать значения многим понятиям, непосредственно относящимся к поиску во внешней базе данных и эффективности доступа к базе данных. Все методы и алгоритмы, представленные в этой части, сформулированы независимо от структуры базы данных. Подразумевается, что все необходимые в процессе работы программы Дейталога данные доступны непосредственно.
В части 3 книги мы покажем, каким образом эти принципы могут быть объединены с технологией реляционных баз данных, чтобы запросы Дейталога к базе данных во вторичной памяти выполнялись эффективно. В частности, будет показано, какую выгоду можно получить, применяя множественные операции fреляционную алгебру9, и как могут быть оптимизированы программы и алгоритмы с целью минимизации времени доступа к базе данных.
Глава 6. СИНТАКСИС И СЕМАНТИКА ЯЗЫКА ДЕЙТАЛОГ
В этой главе мы дадим точное синтаксическое и семантическое определение языка запросов Дейталог.
Сначала в разд. 6. 1 мы формально определим несколько понятий и введем программы Дейталога как множества хорновских дизъюнктов. Объясним такие важные понятия, как базис Эрбрана, экстенсиональная база данных, подстановка и унификация.
Затем в разд. 6. 2 мы целиком определим логическую семантику программ Дейталога, используя понятия теории моделей. Эта теория позволяет определять понятия
логической истинности и логического следствия в очень элегантном и доступном виде. Пользуясь теорией моделей, мы можем точно охарактеризовать, что вычисляет прграмма Дейталога. Однако мы не объясняем, каким образом может быть вычислен результат программы Дейталога (см. гл. 7).
Отметим, что во многих отношениях Дейталог представляет собой упрощенную версию логического программирования. В процессе нашего обсуждения мы выделим некоторые важные различия между этими двумя формализмами. Некоторые наши определения и результаты представляют собой упрощение соответствующих понятий в контексте логического программирования.
Основные определения и предположения
Алфавиты, термы и дизъюнкты
Сначала мы определим три бесконечных алфавита Var, Const и Pred для обозначения переменных, констант и предикатов.
•Var содержит все строки алфавитно-цифровых символов конечной длины, начинающиеся с прописной буквы. Например, элементами Var будут X, XI, Dog, САТСНЗЗ.
•Const содержит все строки алфавитно-цифровых символов конечной длины, которые состоят только из цифр, либо начинаются со строчной буквы, за которой следуют ноль или несколько строчных букв или цифр. Элементами Const будут 10, a, xylophone, Zanzibar, 115, alb2c3.
•Pred содержит все строки алфав ит но-ц ифр о вых символов конечной длины, которые начинаются со строчной буквы. Pred и Const имеют непустое пересечение, тем не менее в дизъюнктах и программах Дейталога из контекста всегда понятно, яляется ли данный символ предикатом или константой. Каждый символ предиката обозначает предикат, т. е. отображение области Dn в множество значений истинности {true, false}, где п - положительное целое.
В логическом программировании существует другая важная категория символов - функциональные символы. Отсутствие функци о нальных символов является одной из наиболее важных характеристик Дейталога.
Мы предполагаем, что существует отображение arity из Pred в множество ^+ всех целых положительных чисел. Если arity(pJ=n, то р есть символ для обозначения п-арных предикатов, т. е. отображений множества Dn в {true, false}. Функция arity является зависимой от системы и сессии, поскольку предикаты определяются пользователями и администраторами баз данных. Заметим,
что в логическом программировании О-арные предикаты также допускаются, хотя в Дейталеге этого нет.
Терм представляет собой константу или переменную. Таким образом, множество Term всех термов Term = Const U Var, Терм t называется основным тогда и только тогда, когда он не содержит переменных. В контексте Дейталога это означает, что терм является основным тогда и только тогда, когда он является константой. Множество Const всех основных термов называется также универсумом Эрбрана. Заметим, что в контексте логического программирования вообще термом может быть сложная структура, построенная из функци о нальных символов, переменных и констант. В этом контексте основные термы не обязательно константы и универсум Эрбрана не совпадает с множеством всех констант.
Атом p(t],...,tn) состоит из n-арного предикатного символа р и списка аргументов (亡],...,亡门), где каждый 亡1 является термом. Примеры термов: fatherof(john, henry),ancestorof fEverybody, eve), tired(susan),
q(a, X, 12, Y). Основным атомом называется атом, все аргументы которого есть константы.
Литералом называется атом pf 11J) или отрицание атома 叩(亡]t^ J. Соответственно основным литералом называется основной атом или отрицание основного атома. Примеры литералов: fatherof(john, henry ), nfatherof ( joe, тагу), eats( joe. Food J, -^eats (тагу, X). Два первых литерала - основные, а два последних -нет, поскольку они содержат переменные. Литералы, являющиеся атомами, называются положительными, в то время как литералы, являющиеся атомами с отрицанием, называются отрицательными.
Дизъюнктом (clause) называется конечный список литералов. Дизъюнкты часто определяются как множества и изображаются в множественной нотации, например, {npf X, a J, p(Yt b)}. Такую нотацию мы также будем использовать для представления дизъюнктов. Тем не менее мы не исключаем возможность дублирования литералов в дизъюнкте. Кроме того, в процессе манипулирования дизъюнктами Дейталога с помощью алгоритмов нас будет интересовать порядок литералов в дизъюнктах (в то время как с точки зрения семантики порядок литералов в дизъюнкте не имеет значения). Поэтому мы всегда считаем дизъюнкт списком или, что одно и то же, упорядоченным множеством с возможостью дублирования элементов, а не просто множеством. Определенные выше хорновские дизъюнкты могут также быть представлены в прологовской нотации.
До настоящего момента наши определения были чисто
синтаксическими. В данном случае важно, чтобы читатель почувствовал значение понятия дизъюнкта. С этой целью мы временно используем формализм логики предикатов первого порядка, с которой, мы полагаем, читатель знаком. В соответствии с данным формализмом каждому дизъюнкту С соответствует формула С логики предикатов первого порядка С имеет форму Q(M), где Q - префикс, содержащий все кванторы, и Я - бескванторная часть (называемая также ^матрицей11). Для каждой переменной, появляющейся в С, в Q содержится квантор всебщности, а М представляет собой дизъюнкцию всех литералов С. Рассмотрим, например, дизъюнкт C={npfX, a )t p(Yt b) }. Этот дизъюнкт соответствует формуле логики предикатов первого порядка
С: VX VZ 5р(Х, a) v p(Yt b)).
Продолжим определение синтаксиса Дейталога. Основным называется дизъюнкт, не содержащий переменных. Другими словами, основной дизъюнкт есть конечный набор основных литералов. Пример основного дизъюнкта: D={p(а, b, с), q(r2 ), 〕р(>, j, к)}・ Соответствующая ему формула D: р(at bt с) v q(rl) v rp(i,j,k)・ Дизъюнкты, состоящие из единственного литерала, называются простыми. Дизъюнкты, содержащие только отрицательные литералы называются отрицательными, а дизъюнкты, содержащие только положительные литералы называются лоложительными. Дизъюнкт {р(а, X, с)}, например, является положительным и простым, а дизъюнкт frq(a,b)}- отрицательным основным.
Хорновский дизъюнкт содержит по крайней мере один положительный литерал. Существуют три типа хорновских дизъюнктов:
а) $акты. Факты представляют собой положительные простые дизъюнкты, например: {father(john, harry)}» {eats(joe, X)}. Мы также можем представлять факты в нотации Пролога, т. е. без скобок, обозначающих множество, но с точкой в конце, следующим образом:
father(john, harry). eats( joe, X).
б) Правила. Правило - положительным литералом отрицательным литералом, знание следующего вида : истинно11. Пример правила:б) Правила. Правило - положительным литералом отрицательным литералом, знание следующего вида : истинно11. Пример правила:это дизъюнкт с единственным и по крайней мере с одним Правило представляет собой "если р истинно, то и gэто дизъюнкт с единственным и по крайней мере с одним Правило представляет собой "если р истинно, то и g
б) Правила. Правило - положительным литералом отрицательным литералом, знание следующего вида : истинно11. Пример правила:
б) Правила. Правило - положительным литералом отрицательным литералом, знание следующего вида : истинно11. Пример правила:
это дизъюнкт с единственным и по крайней мере с одним Правило представляет собой "если р истинно, то и g
это дизъюнкт с единственным и по крайней мере с одним Правило представляет собой "если р истинно, то и g
R: {^grandparent (X), grand!ather(X), -^nale(X) }•
Поскольку данная форма представления не совсем интуитивно понятна, мы часто записываем правила в прологовской нотации. Предыдущее правило будет выглядеть так:
grandfather(X) :- grandparent(X), male(X).
Это читается как
"grandfather(X) если grandparent(X) и male(x)n.
Действительно, нетрудно видеть, что правило R соответствует такому предположению. Рассмотрим логическую формулу R, соответствующую R:
R: VXf ^grandparent (X) v grandfather(X) v -imale(X)).
Заменяя литералы в R и вынося отрицание по закону Де Моргана, получим следующую эквивалентную R формулу первого порядка:
R,: VXf -лf grandparent (X) л male(X) ) л grandfather(X)),
Теперь, поскольку гА ^ В одно и то же, что А ^ В, можно записать эту формулу как импликацию:
RM : MX ( (grandparent (X ; Л male(X ; ) =» grandfather (X ;).
Прологовская нотация - это только другой способ выражения такой импликации. Данный пример поясняет, почему любое правило в форме
{р( • . . 9» "'Р^ (•••)»••• » ПРk (• • • ) }
может быть записано на Прологе в виде
р(...) : - Р](・・・)Р^(…•),
Литерал слева от знака ":-" называется головой правила, а множество всех литералов справа от знака ":-"называется телом правила.
в) Целевые дизъюнкты. Целевой дизъюнкт (или цель)- это отрицательный дизъюнкт, т. е. дизъюнкт, состоящий только из отрицательных литералов. Простыми называются целевые дизъюнкты, содержащие единственный литерал. Пример простого целевого дизъюнкта:
{nfatherof(john, X)}.
Этот дизъюнкт в прологовской нотации может быть представлен следующим образом:
?- fatherof(John, X),
Термин ^целевой дизъюнкт" заимствован из метода резолюции, где для доказательства некоторой формулы рассматривается ее отрицание и доказывается, что это ведет к противоречию. Например, если мы хотим доказать формулу ЗХ (fatherof(john, X))t мы предполагаем, что отрицание этой формулы, т. е. VX (^fatherof(johnt X))t истинно. Последняя формула представляется целевым дизъюнктом "?-fatherof(John, X).". Для понимания термина ^целевой дизъюнктм на данный момент этого достаточно. Мы вернемся к методу резолюции в разд. 7. 3.
Очень важно понять, что дизъюнкты, в частности хорновские дизъюнкты, представляют собой замкнутые формулы, т. е. формулы, не содержащие свободных переменных. Действительно, как мы видели, все появляющиеся в дизъюнкте переменные квантифицированы в соответствующей формуле первого порядка квантором всеобщности. Из этого следует, что имя переменной, появляющейся в дизъюнкте С, имеет смысл только в этом дизъюнкте и ее значение не распространяется на что-либо вне дизъюнкта. Рассмотрим, например, два дизъюнкта С и D:
С: grand!atherof(X, Y) :- fatherof(XtZ), fatheroffZ, Y).
D: grandfatherof(X, Y) :- motherof(X, fatherof,Z, Y).
Здесь переменные X, У, Z из дизъюнкта С не имеют ничего общего с переменными X, У, Z из дизъюнкта D. Чтобы подчеркнуть это, мы можем записать дизъюнкт D так, что эквивалентные ему дизъюнкты D' и С не будут иметь общих переменных:
DJ : grand!atherof(U, V) :- motherof(Ut V), fatherof (Wt 0).
Ясно, что D логически эквивалентно 豆‘ и, поскольку D и DJ отличаются только именами переменных, D н D' называются вариантами. Вообще мы говорим, что два дизъюнкта Е н Е‘ эквивалентны тогда и только тогда, когда соответствующие им формулы R н 旦' логически эквивалентны. Мы говорим, что Е‘ есть вариант В тогда и только тогда, когда Е‘ отличается от В только именами переменных, и разным переменным в В взаимно однозначно соответствуют разные переменные в Е‘ . Если В есть вариант Е‘, то Е‘ есть вариант В,
следовательно, мы можем просто сказать, что Е н Е‘ - варианты. Если В и BJ - варианты, то В н Е‘ эквивалентны. Заметим, что обратное не верно: пусть дизъюнктом С будет nh(a):-pfX)t P(Y)."t а дизъюнктом D будет "p(a) :-p(Z)・", тогда С и D эквивалентны, но ни одно из них не является вариантом другого.
Если S=fC]CJ - множество дизъюнктов, то S соответствует следующая формула первого порядка:
S : J Л・・・Л Sn・
Экстенсиональные базы данных и программы Дейталога
Мы предполагаем, что алфавит Pred разделен на два множества ЕРred и IPred так, что EPred и IPred = Pred и EPred л IPred = 0. Элементы EPred обозначают экстенсиональные предикаты, т. е. предикаты, соответствующие хранимым в базе данных отношениям, а элементы IPred обозначают интенсиональные предикаты, которые соответствуют отношениям, определенным программами Дейталога. Фактическое деление Pred на IPred и EPred может различаться от системы к системе.
Если S есть множество положительных простых дизъюнктов, то E(S) обозначает экстенсиональную часть S, т. е. множество всех простых дизъюнктов из S, предикаты которых являются элементами EPred. С другой стороны, 工(S) = S - E(S) обозначает интенсиональную часть S, т. е. множество всех простых дизъюнктов, предикаты которых принадлежат IPred.
Базис Эрбрана представляет собой множество всех положительных основных простых дизъюнктов, которые могут быть образованы с использованием предикатных символов из Pred и констант из Const. Мы будем обозначать экстенсиональную часть Е(НВ) базиса Эрбрана как ЕНВ и интенсиональную часть 1(НВ) как IHB.
Эк стенсионалъная база данных EDB есть конечное подмножество ЕНВ. Другими словами, экстенсиональная база данных - это конечное множество положительных основных фактов.
Пример 6.1. Определяемое ниже множество Е1 представляет собой EDB:
{par( john, mar у ), par( johnt reuben ), par( terry, john ), par( terry, lisa ), par (lisa, david ), par( lisa, joe), par( joe, jeff ), parf joe, susan), lives( john, wash), lives(maryt ny), lives(terryt paris),
lives(reuben, ny), lives(lisa, ny), lives(davidtathens)
lives( joe, Chicago), lives( jeff, ny)}
Здесь мы предполагаем, что оба предикатных символа par и lives являются элементами EPred.
Экстенсиональная база данных представляет данные, которые в действительности хранятся в отношениях реляционной базы данных. EDB также называется экземпляром реляционной базы данных. Если Е представляет собой EDE, то все дизъюнкты из Е, имеющие один и тот же предикатный символ, хранятся в одном отношении. Соответствие отношений и предикатов рассматривалось в ч.I книги и будет рассматриваться в ч.III, а для наших целей в гл. 6 и 7 понятия EDB как множества основных фактов вполне достаточно.
Программа Дейталога Р представляет собой конечное множество хорновских дизъюнктов, так что для любого С w Р, либо С € EDB, либо С есть правило, удовлетворяющее следующим условиям:
Предикат, появляющийся в голове С, принадлежит IPred;
Все переменные, появляющиеся в голове С, появляются также и в теле С.
Условие а) гарантирует, что эстенсиональная база данных не может быть изменена с помощью правил программы Дейталога. Условие б) называется условием безопасности. Мы увидим дальше, что это условие вместе с нашим требованием принадлежности каждого факта из программы Дейталога множеству основных фактов обеспечивает конечность числа фактов, выводимых из программы Дейталога. Каждый дизъюнкт, являющийся или основным фактом или удовлетворяющим условиям а) и 6), называется дизъюнктом Дейталога.
При написании программ Дейталога мы обычно опускаем фигурные скобки и размещаем каждый дизъюнкт на отдельной строке. Поскольку программа Дейталога Р представляет собой конкретный набор дизъюнктов, логическая формула Р соответствующая Р, состоит из конъюнкции всех формул С, таких, что каждое С есть дизъюнкт из Р.
Пример 6.2. Пример программы Дейталога:
Pl : anc(Xt Y):- anc,X, Y):- ancfX, adam)Pl : anc(Xt Y):- anc,X, Y):- ancfX, adam)par(X, Y).par(Xt У), anc(Z, У). :-person(X),par(X, Y).par(Xt У), anc(Z, У). :-person(X),person(X; :- lives(Xt Г),person(X; :- lives(Xt Г),
Pl : anc(Xt Y):- anc,X, Y):- ancfX, adam)
Pl : anc(Xt Y):- anc,X, Y):- ancfX, adam)
par(X, Y).
par(Xt У), anc(Z, У). :-person(X),
par(X, Y).
par(Xt У), anc(Z, У). :-person(X),
person(X; :- lives(Xt Г),
person(X; :- lives(Xt Г),
Здесь предикаты person и anc принадлежат IPred, a par и lives принадлежат EPred,
Целевым утверждением (целью) Дейталога является простой целевой дизъюнкт. Заметим, что мы не требуем, чтобы целевой предикат появлялся внутри программы Дейталога. Однако в более интересных случаях целевой предикат появляется в голове одного из дизъюнктов. Цель - это дополнительная спецификация, которую мы можем добавить к программе Дейталога. Например, цель ?-anc(terry, X) указывает, что мы интересуемся только предками terry. Результат программы Р^, инициированной этим целевым дизъюнктом над EDB Е^ из примера 6. 1, записывается в виде:
{апс(terry» john ), anc(terryt lisa ), anc(terry, тагу), anc(terry, ruben), anc(terry, david), anc(terry, joe), anc(terry, jeff ), anc(terry, susan), anc(terry, adam)}.
Мы часто будем рассматривать программы Дейталога без целевых дизъюнктов. В таких случаях нас интересуют все основные дизъюнкты из 工НЕ, которые программа вычисляет на основе данной EDB.
Входными данными для программы Дейталога с целевым дизъюнктом либо без него служит EDE, а на выходе вычисляется подмножество 工НЕ, т. е. множество положительных основных простых дизъюнктов, предикатные символы которых принадлежат IPred. Строгое определение семантики программ Дейталога и различных алгоритмов вычислений дано в следующем разделе главы.
Подстановки, обобщение и унификация
Подстановкой е называется конечное множество вида {X]/亡]X^/t^}, где все переменные Х^ различны и каждый терм 亡^ таков, что Х^ * 亡±・
Элементы Х^/^^ подстановки 8 называются связываниями. Множество переменных {Х^ } называется доменом 8, а множество термов {t1 t^} называется содоменом 8.
Вспомним, что в нашей модели термами могут быть константы или переменные в отличие от общепринятого в логическом программировании подхода, когда термы могут включать вложенные структуры, состоящие из переменных, констант и функци о нальных символов. Если все термы t tявляются константами, то 8 называется
п
основной подстановкой.
Если е - подстановка Mt- терм, то te обозначает терм, который определяется следующим образом:
t , если t/t € Q;
亡 8 =• i1
t, в противном случае.
Если L - литерал, то L8 обозначает литерал, который получается из L последовательной заменой каждой переменной X соответствующим термом t ^ в том и только том случае, когда X^/t - элемент в. Например, пусть L литерал rp(a,X, Y, Ь) и пусть е «{Х/с, Y/X}, тогда
L8 = npfa, с, X, b),
Если С ={L^, . . . L^}- дизъюнкт, то
С8 ={L 0L 0}. Если С и D - дизъюнкты и 1п
существует подстановка 8, такая, что Се = D, то D называется экземпляром С. Например, простой дизъюнкт Р(Х, а) является экземпляром простого дизъюнкта Р(Х, Y).
Пусть 8 = {X /tX /t } и сг= {У /иУ /и } 11nn‘11mm'
подстановки. Композиция Фог подстановок 屮 н сг получается из множества
fXJ亡严,Xn/JGYJL,Л/ "J
для некоторых j.для некоторых j.которых Y^ = Xjкоторых Y^ = Xjисключением всех связываний вида g/g и Y ^/и для
для некоторых j.
для некоторых j.
которых Y^ = Xj
которых Y^ = Xj
Если С - дизъюнкт, то применение ест к С имеет тот же эффект, что и применение е сначала к С и затем применение сг к Се. Следовательно, С( да) = (СВ )ь. Нетрудно видеть также, что композиция подстановок ассоциативна, т. е. если 8, П и сг - подстановки, то (еП)а = 8(Т1сг). Отметим, что в общем случае еП * ПФ,
т. е. подстановка не коммутативна.
Пример 6.3. Рассмотрим дизъюнкт
С: anc(Xt У; : - parfX, Z), anc(Zt Г;.
и подстановки
8 = {Х/У, Y/Ut Z/Y} и сг= {Y/john, U/Tt 7/Т, X/reuben}.
Имеем
бог = {X/john, Y/Tt Z/Tt U/T, V/T}
ce = anc(Yt U) :- par(Yt U), anc(Vt U).
(Се)а = С(е(т; = anc( John, Т; : - par( johnt Т;, anc(Tt Т), С(ест) = апс(reuben, john) : - parf reuben, V), anc(Vt john)・
Заметим, что в предыдущем примере се является вариантом С. Используя концепцию подстановки, можно дать элегантное определение вариантов: С является вариантом D тогда и только тогда, когда существуют такие подстановки 0 и сг , что С0 =D и Da = С.
Дизъюнкт С обобщает1 дизъюнкт D, что обозначается как С t> D, тогда и только тогда, когда существует такая подстановка 8, что Се £ D.
Пример 6.4. Рассмотрим следующие дизъюнкты:
С :р(Х, Z) :- р(Х, У), Р(У, z)・ D :pfa, а) :- р(а,а), p(bt b).
и подстановку
0= fX/а, У/a, Z/a}・
Ясно, что СФ £ D, поэтому С [> D.
Если для пары литералов L и Я существует подстановка 8 л L8 =8, то говорят, что L и М
унифицируемы, а подстановка е называется унификатором Очевидно, для пары литералов может существовать несколько (возможно, и бесконечно много) различных унификаторов.
Пример 6.5. Рассмотрим литералы L = р(Х, a,Z) и Я = Р(0, %, Ь). Приведенные ниже подстановки являются унификаторами для L и Я:
%= {X/a,Z/b,V7a,W/a},
©2= {X/b,Z/b,V7b,W/a},
©3= {Х/7, Z/b, W/a},
84= fZ/b, Р/Х, W/a}, %= {Х/с, Z/b, 7/с, W/a}t 86= {X/U, Z/b, V7U, W/a, Т/д, U/k},
Далее иногда наряду с термином пользуется термин >D конкретизируе
>С обобщает D> ист С>. - Прим. ред.
Ва={Х/а, Z/b, V/a, W/a}, для любой константы или переменной а.
С другой стороны, нетрудно видеть, что литералы N : q(X, а, X, Ь) и Я : q(Y, a, a, Y) неунифицируемы.
Пусть ©и/ -подстановки. Подстановка е называется более общей (по отношению к #) тогда и только тогда, когда существует подстановка 入, такая, что 0Л = /. Пусть L и Я - литералы; наиболее общим унификатором (НОУ) L и М называется более общий по отношению ко всем прочим унификатор.
Заметим, что свойство " более общий11 не антисимметрично, т. е. существуют унификаторы % и %, такие, что 01* е^ и 8] более общий, чем 8^, и 8^ более общий, чем %. Таким образом, отношение " более общий11 не является отношением порядка fв традиционном понимании) на множестве всех унификаторов L и Я. Поэтому, если существует НОУ для двух литералов L и Я, он не обязательно единственный.
Пример 6.6. Унификатор 0з из примера 6. 5 более общий, чем унификатор %, поскольку существует подстановка х = {V/a} и %= 832r. Кроме того, нетрудно видеть, что если а - переменная, то 8a будет НОУ для L и М・ Следовательно, L и Я имеют бесконечно много НОУ.
Концепция НОУ использовалась в значительно более общих контекстах, в которых термы могут содержать функциональные символы. В таких контекстах проблема унификации не столь тривиальна, как в Дейталоге. В контексте Дейталога существует чрезвычайно простой алгоритм генерации НОУ для каждой пары литералов L и М, если они унифицируемы, и выдающий пустой символ V в противном случае. Алгоритм первоначально сравнивает предикатные символы и арности L и Я, затем последовательно все аргументы L и Я. Если предикатные символы или арности не равны или некоторые аргументы на соответствующих местах не соответствуют друг другу, алгоритм останавливается и выдает V. В противном случае с помощью динамического объединения частичных подстановок конструируется НОУ. Подстановки генерируются шаг за шагом в процессе унификации термов в соответствующих позициях аргументов. Наш алгоритм сформулирован в псевдокоде как функция:
ФУНКЦИЯ MGU(L, М)
INPUT:литералы L=山(亡]亡П), и M=W‘(亡;,•••,亡:) OUTPUT: НОУ 山 для L и Я, если они унифицируемы,
иначе пустой символ V.
BEGIN
IF ^ * ^J OR П * 171 THEN RETURN V ELSE BEGIN
e := {}; /* Инициализация пустой подстановкой */ 1 : =1 ;
unifies:=true;
REPEAT
IF t e * tJe ii
THEN IF 亡;8 переменная
THEN 0:= 8(亡:8/亡]8)
ELSE IF 亡]8 переменная then e := eft^e/t^e} ELSE unifies := false;
1:=1+1;
UNTIL i>n OR NOT unifies;
L : р(Х, Z, a, U) и MGU(Lt М). Ниже % программной итерацией циклаL : р(Х, Z, a, U) и MGU(Lt М). Ниже % программной итерацией циклаIF unifies THEN RETURN 8 ELSE RETURN V END END.
L : р(Х, Z, a, U) и MGU(Lt М). Ниже % программной итерацией цикла
L : р(Х, Z, a, U) и MGU(Lt М). Ниже % программной итерацией цикла
Пример 6.7. Рассмотрим два литерала Я : pfУ, YtVtW) и обращение к функции приведены последовательные значения переменной е непосредственно перед 1-й vhile:
%={}, е2={У/Х}, e3={Y/X}{X/Z} ={Y/Z, X/Z}, e={Y/^ X/Z}{V/a} = {Y/Zt X/Z, 7/a}, %=fY/Z, X/Z, V/a }{W/U} = fY/Z, X/Z, О/a, W/U}.
Следовательно, НОУ, вычисленный алгоритмом для L и Я, будет
fY/Z, X/Z, 7/а, W/U}・
Теория моделей Дейталога
В данном разделе мы дадим точный ответ на вопрос: ° Что вычисляет программа Дейталога ?". Мы считаем программу Дейталога запросом, оперирующим над экстенсиональной базой данных и вычисляющим некоторый результат. Результат программы Дейталога Р, примененной к EDB Е, состоит из всех основных фактов,
которые являются логическим следствием множества дизъюнктов Pzu Е и предикатные символы которых принадлежат IPred. Следовательно, смысл (или семантику )программы Дейталога можно описать с помощью отображения, связывающего подмножество IHB со всеми возможными EDB, т. е. со всевозможными подмножествами ЕНВ.
Программа Дейталога действительно подобна тому, что
принято называть запросом, так как каждому экземпляру базы данных ставит в соответствие результат (мы уже отмечали эквивалентность EDB и экземпляра реляционной базы данных / Единственным существенным отличием является то, что результат программы Дейталога может содержать факты для нескольких интенсиональных предикатов, в то время как результат запроса обычно состоит из одного-единственного отношения. Тем не менее, если в дополнение к программе Дейталога мы задаем цель, результат состоит из основных фактов только для одного предиката.
Ниже мы уточним высказанные выше суждения. Прежде всего нам необходимо формально определить, что подразумевается, когда мы говорим, что основные факты являются логическим следствием множества основных дизъюнктов и правил Дейталога. Для этой цели мы сначала введем понятия интерпретации Эрбрана и модели Эрбрана. Затем мы покажем, что среди всех моделей Эрбрана программы Дейталога существует наименьшая модель Эрбрана, называемая пминимальной моделью Зр- брана". Мы покажем, что концепция минимальной модели Эрбрана тесно связана с семантикой программ Дейталога.
Допустимые миры, истинность и интерпретации Эрбрана
В математической логике имеются два подхода к определению истинности: теоретике-модельной и теоретике- доказательной. В теории моделей логическое предложение истинно тогда и только тогда, когда оно истинно во всех возможных ситуациях или во всех допустимых мирах. В теории доказательства предложение истинно тогда и только тогда, когда оно может быть выведено из данного набора аксиом с помощью некоторых заданных правил.
С формальной точки зрения оба этих подхода эквивалентны: одни и те -же предложения признаются истинными в обоих методах. Тем не менее считается, что теория моделей имеет более интуитивный подход к определению истинности. Теория доказательства часто обеспечивает более эффективные методы вычисления истинности фактов для данного формализма.
Как мы уже видели,Как мы уже видели,В данном разделе нас интересует теория моделей дейталога. Сначала нам необходимо определить понятие интерпретации или допустимого мира.
Как мы уже видели,
Как мы уже видели,
символов символов,символов символов,различныхпеременныхразличныхпеременныхинтерпретируются как некоторые константыинтерпретируются как некоторые константыязык Дейталог построен на основе типов, в частности предикатных и констант. Переменные всегда "ячейки11 для констант. Однако и предикаты могут интерпре-
символов символов,
символов символов,
различныхпеременных
различныхпеременных
интерпретируются как некоторые константы
интерпретируются как некоторые константы
тироваться разными программистами по-разному. Рассмотрим, например, дизъюнкт Дейталога:
С : l(ttX) :- g(X, f, t)・
Для программиста Л символы констант и переменных могут обозначать животных или людей. В частности, появляющиеся в дизъюнкте С символы констант и предикатов обозначают следующее:
t;кошка
Интерпретация Л: « *;пища
2(а,В):а любит В
lg(a,B,?): а дает В /.
же символы могут иметь Константы и переменные частности, символы из Сже символы могут иметь Константы и переменные частности, символы из Сцелое число 10целое число 5а меньше Ва + В больше /целое число 10целое число 5а меньше Ва + В больше /Для другого программиста В те совершенно другие, значения, могут быть целыми числами, в могут обозначать следующее:
же символы могут иметь Константы и переменные частности, символы из С
же символы могут иметь Константы и переменные частности, символы из С
целое число 10
целое число 5
а меньше В
а + В больше /
целое число 10
целое число 5
а меньше В
а + В больше /
f:
Интерпретация В
g(a,B,J ):
Таким образом, в мире Л дизъюнкт С интерпретируется как "кошка любит всех, кто дает ей ттнщу". Зная характер кошек, можно предположить, что в мире Л этот дизъюнкт является истинным. Другими словами, интерпретация А удовлетворяет утверждению С. С другой стороны, для программиста В дизъюнкт С обозначает следующее • VX е Z : (Х+ 5> 10 今 10 v X), где Z обозначает множество целых чисел. Очевидно, это неверный дизъюнкт (достаточно взять X = 6), следовательно, интерпретация В не удовлетворяет дизъюнкту С. Таким образом, дизъюнкт С является истинным в одной интерпретации и ложным в другой. Следовательно, мы не можем сказать, что С истинно вообще.
В качестве определения общей fтавтологичной) истинности мы можем принять следующее: дизъюнкт является истинным вообще тогда и только тогда, когда он является истинным в любой допустимой интерпретации.
Пример истинного вообще дизъюнкта Дейталога: р(а) :- Р(а)・ Другой пример тавтологии: q(X) : - р(а;, q(X;, r(b;. Заметим, что такие факты, как {р(а)}, никогда не могут быть тавтологией, поскольку для каждого из них всегда можно найти опровергающую интерпретацию.
Мы можем обобщить наше понятие истинности единственного дизъюнкта на множества дизъюнктов. Множество дизъюнктов S истинно в некоторой интерпретации 3 fили удовлетворяется в интерпретации J) тогда и только тогда, когда каждый дизъюнкт из S является истинным в 3.
Если дизъюнкт С удовлетворяется в интерпретации J, мы говорим также, что 3 является моделью для С. Аналогично, если множество дизъюнктов S удовлетворяется в интерпретации J, мы говорим, что 3 является моделью для S. Следовательно, дизъюнкт С является тавтологично истинным тогда и только тогда, когда любая интерпретация является моделью для С. Множество дизъюнктов S тавтологично истинно тогда и только тогда, когда любая интерпретация является моделью для S.
При определении семантики программ Дейталога нас интересует не только абсолютная fтавтологичная) истинность дизъюнктов и множеств дизъюнктов, нам необходимо установить обстоятельства, при которых некоторый факт 尸 следует из множества S дизъюнктов Дейталога. Рассмотрим сначала следующее простое определение.
Основной факт 尸 является следствием из множества S f4To обозначается как S 1= F) дизъюнктов Дейталога тогда и только тогда, когда любая интерпретация, удовлетворяющая каждому дизъюнкту из S, удовлетворяет также F. Другими словами,尸 является следствием из S тогда и только тогда, когда любая модель для S есть модель для 尸・
В качестве примера рассмотрим множество S, состоящее из дизъюнктов С1 : {р(а, Ь)} и С2 : р(Х, У):- р(У, X), и рассмотрим факт F: {р(а, Ь)}. Ясно, что для любой допустимой интерпретации данных символов, констант и предикатов, когда бы С1 и С2 ни удовлетворялись, 尸 также удовлетворяется, следовательно, S 1= F.
До настоящего момента мы давали неформальные определения понятий истины и следствия. Будучи интуитивно ясными, эти определения тем не менее не позволяют нам производить конкретные вычисления. Для проверки того, что данный факт Дейталога следует из
данной программы, мы вынуждены проверять бесконечное множество интерпретаций, связанных с кошками, колибри, целыми числами и мириадами муравьев. Для решения этой проблемы мы сначала дадим точное формальное определение понятий минтерпретация11 и "модель" с целью строгого определения семантики программ Дейталога. Затем (в следующем разделе) мы обратимся к проблеме вычислимости. Наше понятие "интерпретациип можно формализовать с помощью математической теории множеств, охватывая формально соответствующие аспекты всех возможных миров. Однако такое обобщенное понятие не является необходимым.
Два известных логика, Дж. Эрбран и Т. Сколем, независимо друг от друга показали, что можно без потери общности ограничиться рассмотрением интерпретации определенного типа, более приспособленной для этого, чем все другие. Такие специальные интерпретации мы будем называть интерпретациями Эрбрана. Все интерпретации Эрбрана дают символам констант одни и те же значения: каждый символ константы (т.е. элемент Const) интерпретируется как лексикографическая строка, составляющая символ. Каждый одноместный предикатный символ из Pred интерпретируется как отображение множества Const на множество значений истинности {true,false}, и в более общем случае каждый n-местный предикатный символ из Pred интерпретируется как отображение Constп на множество {true, false}. Таким образом, разные интерпретации Эрбрана всегда интерпретируют символы констант одинаково и отличаются только в интерпретации предикатных символов. Например, в одной интерпретации Эрбрана 3 литерал p(at Ь) может давать значение true, в то время как в другой интерпретации Эрбрана J' тот же литерал p(atb) может давать false. Это означает, что интерпретации Эрбрана отличаются одна от другой только значениями истинности положительных основных литералов (или, что одно и то же, значениями истинности простых основных положительных дизъюнктов или основных фактов). Присвоив значение истинности каждому основному факту, мы тем самым определим некоторую интерпретацию Эрбрана.
Это замечание позволяет элегантным образом охарактеризовать интерпретации Эрбрана: каждая интерпретация Эрбрана определяется множеством всех основных фактов, значения которых истинны. Отметим, что множество всех простых основных дизъюнктов называется базисом Эрбрана НВ. Таким образом, разные интерпретации Эрбрана соответствуют различным подмножествам НВ. Следовательно, мы можем отождествить интерпретации Эрбрана с подмножествами НВ, следуя
другому определению: всякая интерпретация Эрбрана есть подмножество базиса Эрбрана НВ・
Для данной интерпретации Эрбрана J £ НЕ определим истинное значение фактов или правил Дейталога в 3 следующим образом:
•Если G - основной факт, то истинное значение G в 3 есть true, если G € 3; иначе истинное значение G в 3 есть false.
•Пусть К правило Дейталога вида Lq :- L】L^. Истинное значение К в 3 есть true тогда и только тогда, когда для любой основной подстановки 8 для К, такой, что, если {L^O} w J 八.・.八{L^e} w J, то и 任。。} € J. Иначе истинное значение К в 3 есть false. fЗаметим, что это определение основывается на предположении, что правило Дейталога представляет собой импликацию и переменные находятся в области действия квантора всеобщности.)
Если дизъюнкт С имеет истинное значение true в интерпретации Эрбрана J, говорят, что 3 удовлетворяет С. Соответственно, если 3 удовлетворяет всем дизъюнктам из множества S, говорят, что 3 удовлетворяет S. Интерпретация Эрбрана, которая удовлетворяет дизъюнкту С или множеству дизъюнктов S, называется моделью Эрбрана С или соответственно S. Из результатов Сколема и Эрбрана (которые применяются для существенно более общего контекста, чем Дейталог) следует, что мы можем рассматривать только модели Эрбрана, пренебрегая всеми другими типами моделей.
Пример 6.8. Рассмотрим следующие интерпретации Эрбрана % и % :
J]= {{loves(billtтагу)}, {loves(тагу, bill)}}.
?2= {{loves(billtтагу)}, {loves(тагу, tom), floves(tom, тагу)}},
Нетрудно видеть, что правило Дейталога R: loves(Xt У) :- loves(Yt X) истинно в интерпретации 3】, следовательно, 3】-модель Эрбрана для R. Это же правило ложно в интерпретации %. Рассмотрим основную подстановку е = {X/mary, Y/bill}. Получим {loves(Y/X)6} с % но {loves(X/Y)6} w 弓・ Следовательно, истинное значение К в 3 есть false и 3 не является моделью 22
Эрбрана R.
В свете этих результатов понятие логического следствия можно переформулировать следующим образом:
основной факт 尸 является следствием множества S дизъюнктов Дейталога (обозначается как S F) тогда и только тогда, когда каждая интерпретация Эрбрана, удовлетворяющая всем дизъюнктам из S, удовлетворяет также 尸. Другими словами, 尸 есть следствие S тогда и только тогда, когда любая модель Эрбрана для S является моделью Эрбрана для 尸.
Хотя мы не вводили строгой формализации общих моделей, наше определение модели Эрбрана математически правильно. Таким образом, мы наконец познакомились с точной характеристикой концепции "/-'. Эта концепция позволяет строго определить семантику программ Дейталога.
Как отмечалось раньше, программа Дейталога Р имеет на входе экстенсиональную базу данных EDB и выдает на выходе множество интенсиональных основных фактов. Выходом являются точно те факты, которые логически следуют из основных фактов, принадлежащих Р и EDB. Следовательно, мы представляем семантику программы Дейталога Р как функцию М на множестве всех подмно- р жеств ЕНВ в множество всех подмножеств IHB так, что:
V7 £ ЕНВV7 £ ЕНВМ (V) = fG I G е IHB (Р и V) рМ (V) = fG I G е IHB (Р и V) р1= G}・1= G}・Когда в программе Дейталога определена цельКогда в программе Дейталога определена цель"?-Н","?-Н",
V7 £ ЕНВ
V7 £ ЕНВ
М (V) = fG I G е IHB (Р и V) р
М (V) = fG I G е IHB (Р и V) р
1= G}・
1= G}・
Когда в программе Дейталога определена цель
Когда в программе Дейталога определена цель
"?-Н",
"?-Н",
выходом являются все экземпляры цели, которые следуют
мз Р и EDB. Другими словами, выход состоит из всех
основных которые программе семантикамножествеосновных которые программе семантикамножествефактов, являющихся следствиями из Р и EDB, обобщаются Н. Более формально, если в
основных которые программе семантика
множестве
основных которые программе семантика
множестве
Дейталога Р определена цель “?-Н", то пары <Р, Н> определяется функцией Мр н на всех подмножеств ЕНВ в множество всех
подмножеств IHB так, что:
0) |=С Л и >С}・0) |=С Л и >С}・V7 с ЕНВ :
0) |=С Л и >С}・
0) |=С Л и >С}・
Мр J。)= fC I С w НВ 八(Р и
Заметим, что, когда указана цель Н, пространство решений Мр нf7J содержит или только интенсиональные основные факты, или только экстенсиональные основные факты в зависимости от того, является ли предикатный символ Н интенсиональным или экстенсиональным. Мы допускаем использование экстенсиональных предикатных символов в целевых дизъюнктах, поскольку не исключаем возможности выполнять простые запросы непосредственно над EDB.
Теперь семантика программ Дейталога определена строго. К сожалению, несмотря на строгость определения, оно не содержит намека на то, как следует
вычислять запрос программы Дейталога. Хуже того, данные определения не обеспечивают даже приемлемого метода проверки факта логического следования данного основного факта 尸 из множества дизъюнктов Дейталога S. Действительно, при попытке перебрать все интерпретации Эрбрана, чтобы проверить, удовлетворяет ли 尸 каждая интерпретация, удовлетворяющая S, мы встречаемся с неопределенностью трех различных типов:1) число
интерпретаций Эрбрана, которые нам необходимо проверить, может быть бесконечным;2) многие интер
претации имеют неограниченое число элементов; 3) если правило R н3s содержит переменные, мы должны рассмотреть бесконечное число основных подстановок для R.
Чтобы преодолеть эти трудности, покажем сначала, что среди всех моделей Эрбрана для множества S дизъюнктов Дейталога существует одна замечательная модель Эрбрана, называемая минимальной моделью Эрбрана S.
2・ 2・ Минимальная модель Эрбрана
Если S - множество дизъюнктов Дейталога (т. е. основных фактов и правил Дейталога), то пусть cons(S) обозначает множество всех основных фактов, являющихся следствиями S, т. е.
cons(S) = { F \ F е НВ ^ S 1= F}.
Если мы будем знать, как вычислить cons(S) для конечных множеств S, то мы сможем вычислить результат Мр(EDB) применения программы Дейталога Р к экстенсиональной базе данных EDB, Действительно, и Р, и EDB представляют собой конечные множества дизъюнктов, следовательно, их объединение Р и EDB также конечно и результатом Mp(EDB) применения Р к EDB будет
Mp(EDB)= 1(cons(Р и EDB)) = cons(P и EDB) л IHB.
cons(S) можно определить по-другому, что более интересно.
Теорема 6.1. * cons(S) = л {3 | 3 - модель Эрбрана S} Другими словами, cons(S) эквивалентно пересечению всех моделей Эрбрана S.
Доказателъство. Пусть 尸-элемент cons(S). Поскольку 尸 следует из S, 尸 удовлетворяет любая интерпретация Эрбрана S. Так как 尸-основной факт, это означает, что 尸 一 элемент каждой интерпретации Эрбрана S. Следовательно, 尸 принадлежит пересечению всех интерпретаций Эрбрана S. С другой стороны,
предположим, что 尸- элемент каждой интерпретации Эрбрана S. Тогда 尸一основной факт и каждая модель S является также моделью 尸,и, следовательно, S 1=尸, т. е. F € cons(S).
Множество cons(S) представляет собой множество основных фактов. Тем самым cons(S) - подмножество НВ и, следовательно, само является моделью Эрбрана S. Заметим, что по определению cons(S) есть подмножество любой модели Эрбрана S. По этой причине cons(S) называется наименьшей моделью Эрбрана S.
Теорема 6.2. cons(S) является моделью Эрбрана S.
Доказательство. Нам нужно показать, что z cons(S) удовлетворяет каждому дизъюнкту из S. S может содержать дизъюнкты двух типов: основные факты и правила Дейталога. Каждый основной факт принадлежит каждой модели S и, следовательно, пересечению cons(S) всех моделей S. Предположим теперь, что в S есть правило Дейталога R вида L。:- % L^. Пусть е -
основная подстановка для R. Предположим, что VI 1 i п: {L^e} с cons(S), Тогда для каждой модели Эрбрана 3 для S, VI 1 ^ i ^ n : {L0Q} е J • Следовательно, для любой модели Эрбрана 3 (для R) {Lq6} е 3. Поскольку каждая модель Эрбрана 3 для S является также моделью Эрбрана R, {^Q6} - элемент каждой модели
Эрбрана S. Следовательно, (L0Q} является элементом пересечения cons(S) всех моделей S. Таким образом, cons(S) - модель Эрбрана R. Таким образом, cons(S) является моделью Эрбрана для каждого правила и каждого факта из S. Отсюда следует, что cons(S) является моделью Эрбрана для S.
Теорему 6.1 нетрудно обобщить и показать, что пересечение произвольного числа моделей Эрбрана для множества дизъюнктов Дейталога S само является моделью Эрбрана S. Это ^свойство пересечения моделей11 имеет место не только в контексте Дейталога, но и в более общем случае логического программирования. Это свойство является одной из характеристик хорновских дизъюнктов. Для множеств дизъюнктов произвольного вида это свойство не имеет места.
Заключение
В данной главе мы формально определили Дейталог. Нашей основной целью было строгое определение семантики этого языка. Для этого мы ввели некоторые основные понятия теории моделей и определили вывод
программ Дейталога, используя модели Эрбрана. В частности, мы показали, что множество cons(S) всех основнь1Х фактов, являющихся логическим следствием из множества S дизъюнктов Дейталога, идентично минимальной модели Эрбрана S.
Основные результаты данной главы имеют чисто описательный характер и не ведут к конструктивным методам вычисления программ Дейталога. Такие методы будут представлены в следующей главе.
Литература к главе
Многие определения данной главы заимствованы из теории автоматическогб доказательства теорем. [Chan73] и [Love78] - два распространенных учебника, представляющие превосходный обзор в данной области.
Хорновские дизъюнкты впервые были исследованы в чисто логическом контексте. В качестве основных составляющих логических программ они стали использоваться значительно позже. Фундаментальная теория семантики логических программ разрабатывается в [VanE86] и [Apt82]. Стандартным учебником по теории логического программирования считается [Ыоу84] . Эта книга дает очень хорошее представление по всем вопросам, связанным с логическим программированием. В частности, некоторые результаты, представленные в главах 6 и 7, можно в более обшем виде найти в [Ы1оу84] . Обобщение дизъюнктов обсуждается в [Gott85], [Gott85a] и [Gott87].
Важным событием, ликвидировавшим разрыв между логическим программированием и базами данных, стал симпозиум "Логика и базы данных11, который состоялся в 1977 году в Тулуз е, Франция. Труды этой конференции опубликованы в виде книги [Gall78]. В дальнейшем хорновские дизъюнкты без функций для выражения рекурсивных запросов к базам данных рассматривались несколькими авторами. Термин нДейталогп ("Datalog") был введен группой исследователей из Орегона (Oregon Graduate Center, МСС) и Станфордского университета (Stanford University)・ Первыми публикациями по Дейталогу являются [Ullm85a], [Banc86a], [Вапс86Ь] и [Maie88].
Упражнения
Что представляет собой логическая формула R】, соответствующая программе Дейталога Р1 из примера 6. 2?
6.2. Докажите,6.2. Докажите,что композ иция подстановок
6.2. Докажите,
6.2. Докажите,
ассоциативна.
Найдите такую пару дизъюнктов С н D, что С * D и С D н D С. Найдите такую пару правил R и S, чтобы голова R обобщала голову S, тело R обобщало тело S, но R не обобщало S.
а) Рассмотрим литералы L и М и унификаторы 8]・・・8б,8а из примера 6. 5. Выпишите все пары (3,3)унификаторов так, чтобы 0^ был более общим, чем е . Объясните полученный результат. 6) Покажите, что если L] - произвольный литерал н L^ - основной литерал, то для % и % существует не более одного НОУ.
Покажите, что существует интерпретация Эрбрана 3, которая является моделью Эрбрана для любого возможного дизъюнкта Дейталога. Покажите, что эта
интерпретация единственна.
Глава 7.ПАРАДИГМЫГлава 7.ПАРАДИГМЫТЕОРИЯ ДЕЙТАЛОГАТЕОРИЯ ДЕЙТАЛОГАДОКАЗАТЕЛЬСТВА И ВЫЧИСЛИТЕЛЬНЫЕДОКАЗАТЕЛЬСТВА И ВЫЧИСЛИТЕЛЬНЫЕ
Глава 7.
ПАРАДИГМЫ
Глава 7.
ПАРАДИГМЫ
ТЕОРИЯ ДЕЙТАЛОГА
ТЕОРИЯ ДЕЙТАЛОГА
ДОКАЗАТЕЛЬСТВА И ВЫЧИСЛИТЕЛЬНЫЕ
ДОКАЗАТЕЛЬСТВА И ВЫЧИСЛИТЕЛЬНЫЕ
Цель данной главы - научить вычислять ответ, соответствующий программе на Дейталоге. Для определения вычислительной модели Дейталога в разд. 7. 1 предложена теория доказательства для этого языка, показано, как новые факты могут быть выведены из экстенсиональной базы данных с помощью программы на Дейталоге. Предлагаемый теоретике-доказательный метод является корректным и полным, т. е. он вычисляет только то, что требуется в соответствии с теоретике-модельной семантикой Дейталога. Теория доказательства для Дейталога порождает первый алгоритм INFER для реализации программ на Дейталоге. Он итеративно вычисляет новые факты из фактов, которые уже были получены на основе техники прямого вывода.
После краткого описания основных элементов теории неподвижной точки в разд. 7. 2 будет показано, что семантика каждой программы Р на Дейталоге может быть определена как наименьшая неподвижная точка трансформации Тр. Алгоритм INFER, приведенный в разд. 7. 1, можно трактовать как итерацию наименьшей неподвижной точки, которая вычисляет наименьшую неподвижную точку Тр. Вместе с тем возможно определение более простой трансформации Тр', которая приводит к несколько более эффективному алгоритму. ДальнёНшая оптимизация этого алгоритма (его алгебраической версии) обсуждается в разд. 9. 1.
В разд. 7. 3 будет рассмотрена альтернативная
парадигма реализации программ на Дейталоге - способ обратного вывода, называемый также нисходящим способом вычисления. Этот подход особенно полезен в случаях, когда цель G задается вместе с Дейталог-программой, и нас интересуют лишь те факты, которые являются реализациями G. После описания примитивного общего метода обратного вывода представлен метод резолюции. Резолюция является важным методом, который был предложен в контексте автоматического доказательства теорем с дизъюнктами общего вида. Специальная резолюционная стратегия (SLD-XТПЙК. ВБЗ) используется в контексте логического программирования. SLD- резолюция определяется в контексте Дейталога и показано, как использовать ее для получения ответа на Дейталог-запросы.
Теория доказательства для Дейталога
Ниже( показано, как правила на Дейталоге можно использовать для вывода новых фактов из заданных. Определено понятие " вывода фактов11 и введена теоретике-доказательная схема, которая позволяет выводить все основные факты, являющиеся следствиями конечного множества дизъюнктов Дейталога. Таким образ ом будет получен алгоритм вычисления любой программы на Дейталоге.
Вывод фактов
Рассмотрим правило Дейталога R вида Lq: -L^L^ и список основных фактов 尸】F^. Если существует подстановка W такая, что для всех 1 si ^ п ^ 1^8 = 尸丁 то из правила К и из фактов 尸】F^ можно вывести за один шаг факт L^p. Выведенный факт может быть новым фактом или уже известным.
Это правило является общим правилом вывода, продуцирующим новые факты Дейталога из заданных правил и фактов Дейталога. Оно называется элементарной продукцией (ЭП). В некотором смысле ЭП может рассматриваться как метаправило, поскольку оно не зависит от каких-либо конкретных правил Дейталога и трактует такие правила, как синтаксические единицы.
Пример 7.1. Рассмотрим правило Дейталога R : р(Х, Z) :-р(Х, Y), p(Y, Z) и основные факты {pfa, b)} и {p(bt с)}. Тогда с помощью ЭП можно вывести за один шаг факт {р(а, с)},используяподстановку 0=
{Х/а, Y/b, Z/c}・ Это - новый факт. Теперь рассмотрим правило Дейталога R,: р(Х, Y):-р(У, X) и факт {pfа, в)}.
Очевидно, применяя ЭП, нельзя вывести ничего нового, кроме {р(at a) }t т. е. самого факта.
Ниже приведен алгоритм, который проверяет, применимо ли правило вывода ЭП к правилу Дейталога и списку основных фактов. Если ЭП применимо, алгоритм образует на выходе основные факты, продуцируемые ЭП ; иначе он образует на выходе символ V. Этот алгоритм использует функцию MGU (наиболее общего унификатора) в соответствии с определением в разд. 6. 1. 3. Функция MGU используется для отыскания унификатора основного факта и литерала, принадлежащего телу правила. (Заметим, что, если такой унификатор существует, он уникален; см. упр. 6. 4. б.)
АЛГОРИТМ PRODUCE fK, F^ . . F^;
INPUT: правило Дейталога R вида Lq: -L^L^ и список основных фактов q...%.
OUTPUT: основной факт, являющийся результатом применения ЭП, если ЭП применимо ; или символ V в противном случае.
BEGIN
FOR i : =。ТО n DO 勺:= % ; /* копирует правило R*/ FOR i:= 1 ТО п DO
BEGIN
入:=MGU(K],3); IF A = V
THEN RETURN V;
ELSE FOR j:= 。 TO П DO % := KX END RETURN К о
END.
Правильность алгоритма PRODUCE легко доказать. Пусть 入, обозначает подстановку 入, порожденную оператором "А := MGU(K^ F^)" при выполнении PRODUCE для каждого з начения 1. Если алгоритм завершается успешно (т.е. с результатом, отличающимся от V), то подстановка 入]入^・••入门 РеализУет подстановку 6 правила вывода ЭП. С другой стороны, нетрудно видеть, что в случаях, когда PRODUCE завершается неуспешно (т.е. с результатом V), ЭП неприменимо.
Пример 7.2. Применим алгоритм PRODUCE к правилу Дейталога R : р(Х, Z) : -pfX, У)t p(Yt Z) и к основным фактам {pfa, b)} и {р(Ь, с)}・ Получим п = 2, %=
р(Х, Z), L= р(Х, У), L= p(KZ),工=p(atb) и % = p(bt с). Вначале литералы R копируются в К。: р(Х, Z), К】: р(Х, У) и £: p(Y, Z). Теперь мы входим в первую итерацию второго цикла for при 1 = 1. Вычисляем 入:= МСи^К^,尸2), получая 入=fX/a, Y/b}. Применяя подстановку 入 к К-литералам, получаем К。 : = p(a,Z), Kj = р(a, bJ, К2 := p(b, Z). Теперь входим во вторую итерацию цикла for при i =2. Вычисляем 入 :=
MGU^K?,尸2), получая 入={Z/c}. Применяя подстановку 入 к К-литералам, получим К。:= pfa, с),勺:= p(a,b),
К? := р(Ь, с). Алгоритм затем завершается, возвращая основной факт К。: pfа, с).
Отметим, что правило ЭП, так же как и алгоритм PRODUCE, чувствительно к порядку поступления на вход основных фактов.•
Пример 7.3. Применим алгоритм PRODUCE к правилу Дейталога R : р(Х, Z) :-р(Х, У), р(У, Z) и к основным фактам {p(bt с)} и {р(at Ь)} в таком порядке. Первое сопоставление даст подстановку 入=fX/b, Y/c}. Однако других сопоставлений больше не будет получено. Алгоритм завершается, возвращая V.
Пусть S - множество дизъюнктов Дейталога, inferl(S) множество всех основных фактов, которые могут быть выведены за один шаг с помощью ЭП. Для конечного S это множество может быть вычислено следующим образом:
АЛГОРИТМ 工NFERl(S)
INPUT: конечное множество S дизъюнктов Дейталога OUTPUT: множество всех фактов, которые могут быть выведены за один шаг с помощью ЭП.
BEGIN result := О FOR EACH rule R : L . . .L OF S DO 0n
FOR EACH n-tuple <尸]..・尸门> 。工 ground facts of S DO BEGIN
ne“ : = PRODUCE(Rt F^ • .^;;
IF ne“ f V THEN result := result и {new} END; RETURN result END.
Очевидно, что приведенный алгоритм эффективно вычисляет все факты, которые могут быть выведены за один шаг из S с помощью правила вывода ЭП, поскольку
для каждого правила Дейталога из S он рассматривает каждую возможную комбинацию фактов и проверяет, совпадают ли (унифицируются ли) эти факты с литералами в правой части правила.
Пример 7.4. Рассмотрим множество S дизъюнктов дейталога, включающее правила R^ : p(Xt Z): -pfX, Y), p(Y, Z) и 及2 : Р(Х, У) :- р(У, X) и основные факты {p(a, b)}, {p(bt с)}, {р(с, d)}, {p(d, е)}・ Применяя алгоритм INFER1 к S, получим следующие основные факты:
inferl(S) = {{p(atc)}t {p(btd)}t {p(cte)}t {p(bt a)}t {pfc, b)}t {p(dt c)}, {p(e, d)}.
Определим, наконец, понятие выводимых основных фактов. Пусть S - множество дизъюнктов Дейталога. При неформальной трактовке основной факт G может быть выведен из S, что обозначается S 卜 G, тогда и только тогда, когда либо G е S, либо G можно получить, применяя правило ЭП конечное число раз. Отношение "「' более точно определяется с помощью следующих рекурсивных правил :
S 卜 G, если G е S.
S 卜 G, если правило R w S н существуют основные факты F ... F такие, что Ulwisn, SfF и G может 1 п1
быть выведено за один шаг применением ЭП к R и F…尸.
п
• Во всех других случаях S 卜 G не выполняется.
Пример 7.5. Рассмотрим снова множество S из примера 7. 4. Поскольку {p(at b)} w S, выполняется S 卜{p(at b)}. Как видно, можно вывести {p(bt а)} за один шаг, следовательно, S 卜 p(b, а). Применяя ЭП, можно вывести основной факт {p(at а)} из % и из двух основных фактов {p(at b)}t {p(bt а)}. Следовательно, S卜 fp(a, а)}.
Последовательность применений ЭП, которая используется для вывода основного факта G из S, называется доказательством G. Любое доказательство может быть представлено с помощью дерева доказательства с различными уровнями. В дереве доказательства различаются вершины двух видов: одни из них помечены дизъюнктами из s, а другие помечены основными фактами, выводимыми из s. Нижний уровень состоит из дизъюнктов S; следующий уровень состоит из дизъюнктов из S или дизъюнктов, которые могут быть выведены за один шаг из S, и т. д. Каждый уровень содержит только дизъюнкты, появляющиеся в S или на некотором более низком уровне, или те, которые могут быть выведены за один шаг из
дизъюнктов, расположенных на ближайшем более низком уровне.
Каждый шаг вывода представляется множеством дуг, соединяющих выведенный основной дизъюнкт с его антецедентами на ближайшем более низком уровне. Каждая вершина дерева доказательства соединена не более чем с одной вершиной ближайшего более высокого уровня. Если дизъюнкт используется в нескольких выводах, то несколько копий этого дизъюнкта появляются в дереве доказательства. Уровень может быть связан с ближайшим более высоким уровнем с помощью нескольких выводов. Глубина дерева доказательства есть число уровней минус 1. Любой основной факт, появляющийся в S, имеет дерево доказательства глубиной О.
Пример 7.6. Дерево доказательства для вывода {р(at а)} в соответствии с примером 7. 5 показано на рис. 7. 1. Это дерево имеет глубину 2.
Рис. 7.1. Дерево доказательства для р(а,а).Рис. 7.1. Дерево доказательства для р(а,а).
Рис. 7.1. Дерево доказательства для р(а,а).
Рис. 7.1. Дерево доказательства для р(а,а).
1= G тогда и только факт эквивалентности сначала покажем, что докажем правильность /= G a S 卜 G; другими ЭП.1= G тогда и только факт эквивалентности сначала покажем, что докажем правильность /= G a S 卜 G; другими ЭП.
1= G тогда и только факт эквивалентности сначала покажем, что докажем правильность /= G a S 卜 G; другими ЭП.
1= G тогда и только факт эквивалентности сначала покажем, что докажем правильность /= G a S 卜 G; другими ЭП.
Корректность и полнота правила вывода ЭП
После того как мы получили теоретике-доказательную схему, позволяющую выводить новые основные факты из первоначального множества дизъюнктов Дейталога S,
можно сравнить этот подход с теоретике-модельным подходом, представленным в последнем разделе. Оказывается, что оба подхода эквивалентны, поскольку
для каждого S н G справедливо S тогда, когда S 卜 G. Этот важный мы продемонстрируем в два этапа: S 卜 G a S /= G; другими словами, правила ЭП. Затем покажем, что S словами, докажем полноту правила
Теорема 7.1. (Полнота ЭП). Если S - множество дизъюнктов Дейталога и G - основной факт, то S 卜 G 》S / = G・
Доказателъство. Мы покажем методом индукции по глубине деревьев доказательства, что если основной факт G может быть выведен из S с помощью дерева доказательства, то S 1= G.
Базис индукции. Если G может быть выведен из дерева доказательства глубиной О, то G w S. В этом случае G принадлежит каждой модели Эрбрана S и, следовательно, S 1= G.
Шаг индукции. Пусть G имеет дерево доказательства глубиной 1+1. Тогда существуют правило Дейталога R : Lq : - L]...Ln на уровне i и основные факты F^. . . F^ на уровне 1, такие, что G может быть выведен с помощью ЭП за один шаг из R и F ... F . Это означает, что
1 п
существует подстановка 8 - такая, что при 1 < k < п L е = F и G = L е Поскольку факты F ... F появляются
kкО1 п
на уровне i дерева доказательства, существует дерево доказательства глубины* ^ i для каждого из этих фактов. Следовательно, по гипотезе индукции при 1 s k s п получим S 1=尸了 Таким образом, для каждой модели Эрбрана g множества S факты 尸丁..尸门^ 3- Другими словами, для каждой модели Эрбрана g множества S справедливо 々8 w g, L^ € gL^ew §.
Поскольку R w S, из определения модели Эрбрана следует, что для каждой такой модели g справедливо, что G = %8€ S. Следовательно, S /= G.
Теорема 7.2. (Полнота ЭП). Если S - множество дизъюнктов Дейталога и G - основной факт, то S /= Ga S卜G.
Доказательство. Рассмотрим множество infer(S)= {G I G — основной факт и S ь G}, т. е. множество всех основных фактов, которые могут быть выведены из S. Покажем вначале, что infer(S) - модель S. По определению 卜 каждый основной факт 尸 е S является также элементом infer(S). Рассмотрим любое правило R : L。:- L]. . . I^nиз S. Предположим, что для любой
подстановки 8 выполняется L^OL^ w inf er (S )t t. e. Si~ LQ S 卜 L#Si~ Lp Мз второго пра
вила в определении 卜 следует, что S 卜 %8 и, следовательно, LQe € infer(S). Таким образом, infer(S) представляет собой модель Эрбрана S. Для доказательства этой теоремы предположим, что S 1= G. Это
означает, что G является элементом каждой модели Эрбрана S. В частности, G является элементом infer(S). Следовательно, S 卜 G.
Теорема 7.3. Если S - множество дизъюнктов Дейталога и G - основной факт, то S 1= G тогда и только тогда, когда S 卜 G.
Доказательство. Теорема следует непосредственно из теорем 7. 1 и 7. 2.
Напомним (гл. 6), что cons(S) обозначает множество всех основных фактов, которые следуют из множества S дизъюнктов Дейталога. Приведенное ниже следствие дает прекрасную характеристику cons(S). Следствие вытекает непосредственно из теоремы 7. 3.
Следствие. Если S - множество дизъюнктов Дейталога и G - основной факт, то cons(S) = fG I G - основной факт и S ь G}.
Для конечных множеств S cons(S) может быть вычислено с помощью следующего простого алгоритма INFER:
АЛГОРИТМ INFER(S)
INPUT: конечное множество S дизъюнктов Дейталога OUTPUT: cons(S) BEGIN old:= О; ne“:= S; WHILE new * old DO BEGIN old := new\ ne“ := new и INFERI(new) END; result : = все факты nei/; RETURN result END.
Теорема 7.4. Для конечных S алгоритм INFER завершается с результатом cons(S).
Доказательство, Во время каждого выполнения цикла (за исключением последнего) новые основные факты добавляются к множественной переменной new. Эти факты построены из конечного словаря предикатных символов и символов констант : только предикатные символы и символы констант, входящие в S, могут встречаться в каждом из генерируемых фактов. Таким образом, лишь конечное число новых фактов можно вывести из S. Все выведенные факты накапливаются в "new". Следовательно, после конечного числа повторений цикла пе“ и inferl(new) = пе“ алгоритм останавливается. Из структуры алгоритма INFER очевидно, что выход INFER(S) состоит из множества всех основных фактов, которые
могут быть выведены из S. Согласно следствию из теоремы 7. 3, это множество равно cons(S).
Следствие. Если S конечно, то cons(S) также конечно.
Пример 7.7. Рассмотрим снова множество дизъюнктов Дейталога S, используемых в примере 7.4. Покажем, как работает INFER, перечислением значений, которые принимает переменная пе“ при вычислении INFER(S) после каждого вычисления цикла. Пусть new обозначает
значение пе“ после i-ro повторения цикла. Получим
ne%= S и inferl(S) = {{р( a, b)}, {p(b, с)},
{р(с, d)},{p(d. е",{р(а, с)},{p(b, d)},
{р(с, е)}, {p(b, а)}, {р(с, b)}, {p(d, с)}, {p(etd)}};
пе“2= ПС"】и "p(a,d)},{р(а, а)},{р(Ь, е;},
{р(Ь, Ь)}, {р(с, с)}, {p(d, d)}, {р(с, а)}, {p(d, Ь)}, {р(а, е)}, {р(е, е)}, {р(е, с)}}-, ne% = ле% и < (р(е, a)}, {p(d, а)}, {р(е, Ь)} }; пе“ = пе“ . 4 з
Алгоритм останавливается после четырех повторений цикла.
Вычисление, реализуемое с помощью алгоритма INFER, называется восходящим вычислением, поскольку алгоритм начинается с рассмотрения основных фактов S, которые составляют "нижнюю" часть деревьев доказательства, и осуществляет движение "вверх", продуцируя вначале все факты, которые могут быть вычислены за один шаг из самых нижних дизъюнктов, затем все факты, которые могут быть вычислены за один шаг из самых нижних дизъюнктов или из фактов, которые были выведены за один шаг, и т. д. После i-ro повторения цикла будут накоплены все основные факты, для которых существует дерево доказательства с числом уровней i или меньше.
Алгоритм INFER1 называется также прямым выводом, поскольку, если правила Дейталога представляются как импликации (разд. 6. 1. 1) , они обрабатываются в "прямом" направлении в смысле знака импликации.
Теперь, после того как у нас появился алгоритм для вычисления cons(S) для конечных множеств S дизъюнктов Дейталога, мы можем построить примитивный процессор программ на Дейталоге. Пусть Р - программа на Дейталоге, которую следует применить к экстенсиональной базе EDB. Для вычисления результата применим INFER в начале к Р и EDB и затем возьмем все дизъюнкты Результата к I(infer(PvEDB)), Алгоритм INFER, составляющий ядро интерпретатора, называется также механизмом вывода.
7.2. Итерация накменьше員 неподвижной точки
Теория неподвижной точки первоначально создавалась в теории рекурсии - подраздела математической логики - как средство объяснения рекурсивных функций. Позднее она была использована в ряде других областей математики -таких, как алгебра и функциональный анализ. В информатике эта теория может с успехом применяться, когда требуется формальное описание семантики рекурсивных программ или систем. В частности, денотационная семантика основана на теории неподвижной точки.
Одной из главных особенностей языков логического программирования является их способность изображать рекурсию. Следовательно, теория неподвижной точки пригодна для определения семантики этих языков. Этот вид семантики, называемой обычно семантикой неподвижной точки, имеет ряд достоинств, таких, как непроцедурность, совмещаемая со способностью точного изображения вычислений.
Ниже мы представим сначала элементарные результаты теории неподвижной точки в весьма общем виде. Затем покажем, как эти результаты связаны с Дейталогом. В частности, результат каждой программы на Дейталоге может быть описан как наименьшая неподвижная точка преобразования, а алгоритм INFER соответствует вычислению этой неподвижной точки методом вычислений, называемым " итерацией наименьшей неподвижной точки11.
Основные результаты теории неподвижной точки
Пусть V - множество. Частичный порядок 三 на V есть бинарное отношение V, удовлетворяющее требованиям:
рефлексивности: Vx е У : )
антисимметричности : Vx, у е V: ((х$у л у$х) => х=у)
транзитивности: Vx, у, z е V : ((х$у л y$z) => x$z)
Если V - множество н $ - частичный порядок на 7, то V называется частично упорядоченным множеством. Для изображения частично упорядоченного множества задается пара, состоящая из множества и частичного порядка (Р, $)•
Пример 7.8. Пусть Н - множество, а У - множество, элементами которого являются некоторые подмножества Н. Теоретике-множественное включение & есть частичный порядок на V.
Пусть (V, $) - частично-упорядочеиное множество и пусть R Q V - подмножество V. Элемент а множества V есть верхняя грань R тогда и только тогда, когда для каждого элемента х е R х $ а. Если а - верхняя грань R и для каждой другой верхней грани Ь множества R
а , Ь, то а называется наименьшей верхней гранью R. Очевидно, если наименьшая верхняя грань R существует, то она единственна. Обозначим наименьшую верхнюю гранц R (если она существует) sup(R/ Элемент а множества V называется нижней гранью R тогда и только тогда, когда для каждого элемента х w R а ^ х. Если а - нижняя грань R и если для каждой нижней грани b множества R справедливо Ь^а, то а называется наибольшей нижней гранью R. Очевидно, если наибольшая нижняя грань существует, то она единственна. Обоз начим наибольшую нижнюю грань R ( если она существует) inf(R/
Пример 7.9. Рассмотрим множество N* всех строго положительных натуральных чисел. Отношение I, такое, что х|у тогда и только тогда, когда х делится на у, является частичным порядком на N. Нетрудно видеть, что каждое конечное или бесконечное подмножество Р множества N* имеет наибольшую нижнюю грань по отношению к I ; inf(V) - наибольший общий делитель целых чисел, входящих в 7. С другой стороны, только конечные подмножества №*" имеют наименьшую верхнюю грань.
Частично упорядоченное множество (Р, $) является решеткой тогда и только тогда, когда для каждой пары элементов а, Ь е У существует как inf ({at b} 9, так и sup( (а, Jb})・
Пример 7.10. (N^, /) является решеткой.
Частично упорядоченное множество (V, ^) является полной решеткой тогда и только тогда, когда для каждого подмножества R множества V существует как inf (R), так и sup(R). Каждая полная решетка (Р, s) имеет нижний элемент 丄。= inf(V) и верхний элемент
= sup(V).
Пример 7.11. Отметим прежде всего, что (N*, /) не является полной решеткой, поскольку бесконечные подмножества не имеют наименьшей верхней грани. Рассмотрим множество V^ всех делителей 12, т. е. , 。〔^ = {1, 2, 3, 4, 6, 12}. Легко видеть, что (匕?,')образует полную решетку. Имеем 丄 =1 и т = 12.
Приведенный пример показывает, что проблема полноты может возникать только в случае бесконечных частично упорядоченных множеств. Это предположение подтверждается следующей теоремой.
Теорема 7.5. Каждая конечная решетка является полной.
Доказательство. Пусть (匕 §- конечная решетка.
Пусть W - подмножество V. Так как V - конечно, W имеет вид W = {а^ . . . , а^}. Пусть S]= sup({a^, ^2} и для 2 s i s n-1 S]= sup( {s^ 『 а]*,}). Из определения sup и из гипотезы индукции следует, что $门】=sup(W). Аналогично, полагая 亡】=inf ((а^ а2?} и при 2sjwn-l t -inf ({t , a }) можно показать, что t = inf (W),
Отметим, что теорема, обратная теореме 7. 5, не верна. Из теоремы 7. 6 следует, что существуют бесконечные решетки, являющиеся полными. Если U - множество, то подрешетка U состоит из степени множества ^(U) для U, упорядоченной отношением включения множествто есть она состоит из
упорядоченного множества (P(U), £).
Теорема 7.6. Любая подрешетка полна.
Доказательство. Рассмотрим подрешетку (p(U),G) множества U. Любое подмножество R для P(U) состоит из совокупности подмножеств U: R = {U W / i w I}. Легко проверить, что для любого такого Rsup(R; = и R =
и R и inf(R) = л R = л К. i€I 1i€I i
Если (0,三)-решетка, то преобразование Т на Р есть отображение из V в V. Преобразование Т на 0 называется монотонным тогда и только тогда, когда для всех а, Ь е 7 из а Ь следует Т(а) w T(b).
Пример 7.12. Рассмотрим следующее преобразование Т. , определенное на решетке (»*, /) : для каждого n е N*, Т (п) есть наибольший общий делитель 17 и самого п. Например, TJ5) = 1, TJ20) = 1, TJ34) = 17, TJ35) = 1.Нетрудно видеть, что Т^ - монотонное
преобразование. Предположим, что n/m . Т огда все делители п являются также делителями тп . Таким образом, Т](п) - наибольший общий делитель п и 17 - является также общим делителем ш и 17. Однако, вообще говоря, наибольший общий делитель тип мог бы существовать. Следовательно, TJn) w TJm). С другой стороны, рассмотрим преобразование Т на (N*, /), 2+
определяемое следующимобраз ом: для каждого n е N
Т2(п) = п + 2. Нетрудно видеть, что преобразование q немонотонно : верно, что 5/25,но не
выполняется Т(5) / Т (25) , так как 6 не является 22
делителем 26.
Неподвижная точка преобразования Т, определенного
на частично упорядоченном множестве (7, 三), есть элемент a е V, такой, что Т(а) = а. Если Т имеет неподвижную точку Ь, такую, что для всех других неподвижных точек х преобразования Т b х, то Ь называется наименьшей неподвижной точкой Т+. Если Т имеет наименьшую неподвижную точку, эта точка единственна и обоз качается lfp(T).
Пример 7.13. Рассмотрим, преобразования Ти Т^ из предыдущего примера. Преобразование Т^ имеет две неподвижные точки : 1 и 17. Поскольку 1 | 17, 1 есть наименьшая неподвижная точка Т, Преобразование Т^ не имеет неподвижной точки.
Теорема 7.7. (Теорема о неподвижной точке). Пусть Т - монотонное преобразование на полной решетке (7, 三) Тогда Т имеет непустое множество неподвижных точек. В частности, Т имеет наименьшую неподвижную точку lfp(T), такую, что lfp(T) = inf ({х е V / Т(х) $ х}).
Доказательство. Пусть U = {х е V / Т(х) s х}. Для каждого х е U inf(U)三 х. Из монотонности Т следует, что для каждого х е U Т(inf (U)) 三 Т(х)・ Следовательно, Т(inf(U)) - нижняя грань U и, таким образом, Т(inf(U)) w inf(U), Заметим, что inf(U) удовлетворяет условию быть элементом U, следовательно, inf(U) е U. Более того, поскольку Tfinf(U)) w inf(U), из монотонности Т следует, что Т(Т(inf(U))) w $ Т(inf(U))t следовательно, T(inf(U)) e U. Согласно определению inf, inf(U) w T(inf(U)) и, таким образом, inf (U) = T(inf(U) ;.• Следовательно, inf (U; - неподвижная точка T. Поскольку все неподвижные точки Т являются элементами U и inf(U) меньше, чем каждый другой элемент U, inf(U) меньше любой другой неподвижной точки Т, т. е. inf(U) - наименьшая неподвижная точка Т.
Вернемся к проблеме вычисления наименьших неподвижных точек. Заметим, что не всегда возможно вычислить наименьшую неподвижную точку данного преобразования: например, если наименьшая неподвижная точка состоит из бесконечного множества, невозможно перечислить элементы этого множества за конечное число шагов. Однако мы представим алгоритм L尸Р, обладающий следующим свойством: входом LFP является преобразование Т; если LFP завершается, его выход содержит неподвижную точку Т. Принцип, лежащий в основе алгоритма L 尸 Р, известен как итерация наименьшей неподвижной точки, или коротко - LFP- итерация.
АЛГОРИТМ LFP(Т)
INPUT : монотонное преобразование Т на полной решетке (Р±)
OUTPUT : lfp(T) ( если алгоритм останавливается) BEGIN
old:=丄户 ne“:=T(%); WHILE new =/= old DO BEGIN old := nei/; new := T(new); END;
RETURN new END.
Теорема 7.8. Если LFP завершается, его результатом является lfp(T),
Доказательство, Пусть алгоритм завершается после п реализаций цикла vhile. Пусть Т°(丄^)=丄。и пусть для любого целого i > О 7^(丄^) = TfT1'1 fi^; ;. После n реализаций цикла urhile алгоритм завершается при Т”(丄^) = Tn+1 f 1^/ Конечно, Тп(1у) - неподвижная точка Т, поскольку
Т(Тп(1у)) = Тп^(1у) = Tn(iy).
Теперь остается показать, что для каждой неподвижной точки а для Т обеспечивается условие Т”(丄^) < а. Покажем по индукции, что для любого i№, Т‘(丄。)w а.
Базис индукции. Для Т°(丄^) = 丄^ предположение очевидно, поскольку 丄р - наименьший элемент V.
Шаг индукции. Пусть Т,(丄)^ а. Ввиду монотонности Т Т(Т^ (±v)) w T(a). Поскольку а является неподвижной точкой Т, Т(а) = а н отсюда, в частности, Т”(丄 Р)三 а. Это доказывает, что Т”(丄 ^) - наименьшая неподвижная точка Т.
Нами введены все понятия и результаты теории неподвижной точки, необходимые для определения семантики программ на Дейталоге в терминах наименьших неподвижных точек. Заметим, что теория неподвижной точки может быть использована для определения семантики большинства языков, в которых используется рекурсия. В частности, в гл. 9 теория неподвижной точки будет применена для решения рекурсивных уравнений реляционной алгебры.
2. 2. Неподвижные точки и программы на Дейталоге
для установления семантики неподвижной точки программ на Дейталоге рассмотрим решетку V^ = (Р(НЕ), 4), где Р(НЕ) обозначает степень множества базиса Эрбрана НВ и 〃£" обозначает предикат включения множеств. Очевидно, что V^ - подрешетка. Покажем, что для каждого множества S дизъюнктов Дейталога существует монотонное преобразование Т^ на %ат, такое, что cons(S; = lfp(Ts).
Если S - множество дизъюнктов Дейталога, пусть FACTS(S) обозначает множество всех (основных) фактов S и пусть RULES(S) обоз начает множество всех правил Дейталога S. Очевидно, имеем S = FACTS(S) и RULES(S), Преобразование Т^ связанное с S, есть отображение р(НВ) в р(НВ), определяемое следующим образ ом:
VW £ НЕ: Ts(W)=W и FACTS(S) и inferl (RULES (S) и 2)・
Теорема 7.9. Для каждого множества S дизъюнктов Дейталога Т$ является монотонным преобраз ованием на V . DAT
Доказателъство. Прежде всего отметим, что inferl является монотонным на °dat; это следует непосредственно из определения inferl. Предположим теперь, что qs 叱£ НВ. Нам нужно показать, что 丁§册)£ T^(W2). Ясно, что RULES(S) и 21s RULES(S) и ^, и, следовательно, ввиду монотонности inferl:
inf er 1( RULES (S ) и %) £ inf erl (RULES (S ) и “)・
TS(W1)= 4 и FACTS(S) и inferl(RULES(S) и Q)
£ %2 и FACTS(S) и inf erl (RULES(S; и ^; = Т$(“)・
В следующей теореме показана интересная связь между моделями Эрбрана S и неподвижными точками Т^.
Теорема 7.10. Пусть S - множество дизъюнктов Дейталога и пусть 工 £ НВ.工一 модель Эрбрана S тогда и только тогда, когда 工-неподвижная точка Т$・
Доказателъство. Сформулируем иначе понятие модели Эрбрана:工-модель Эрбрана S тогда и только тогда, когда
FACTS(S) £ 工 и inferl(RULES(S) и 工)£ 工・
модели Эрбрана и изи RULES(S). Теперьнеподвижная точка Т^,=工 и FACTS(S) имодели Эрбрана и изи RULES(S). Теперьнеподвижная точка Т^,=工 и FACTS(S) иЭто следует из определения определения inferl, FACTS(S) докажем теорему.
модели Эрбрана и изи RULES(S). Теперь
неподвижная точка Т^,
=工 и FACTS(S) и
модели Эрбрана и изи RULES(S). Теперь
неподвижная точка Т^,
=工 и FACTS(S) и
Необходимость. Пусть 工- т. е. Т$(工)=工. Тогда I
и inferl(RULES(S; и 工).Таким образом, FACTS(S; £ 工 и inferl(RULES(S) \j I) Q I, Следовательно,工-модель Эрбрана S.
Достаточность. Пусть 工- модель Эрбрана S. Тогда FACTS(S) £ 工 и inf er 1 (RULES (S) и I; S I. Следовательно,
Ts(I)=工 и FACTS(S) и inferl(RULES(S) и 工)=工・ Таким образ ом, 工-неподвижная точка Т$・
Среди различных неподвижных точек Т§ наименьшая неподвижная точка является особенно важной. Как показано в следующей теореме, эта неподвижная точка содержит множество cons(S) всех основных фактов, которые являются логическими следствиями S.
Теорема 7.11. Для любого множества S дизъюнктов Дейталога cons(S) = Ifp(T^).
Доказательство. Напомним (разд. 6.2.2), что среди моделей Эрбрана S cons(S) является наименьшей по отношению к упорядочению по включению множеств s . По теореме 7. 10 модели Эрбрана S совпадают с неподвижными точками Т$・ Следовательно, cons(S) - наименьшая неподвижная точка Т$ по отношению к частичному порядку £, т. е. cons(S) является наименьшей неподвижной точкой Т$ в решетке V^ .
Для произвольного множества S дизъюнктов Дейталога cons(S) может быть получено с помощью LFP-итерации вычислением LFP(T^). Если Р - программа на Дейталоге и EDB - экстенсиональная база данных, то Р и EDB - (конечное) множество дизъюнктов Дейталога; следовательно, Guedb - монотонное преобразование на ^dat" Следствие из теоремы 7. 11 определяет семантику 5Шр программы Р.
Следствие. Для любой конечной EDB S Е(НВ)
3R (EDB) = lfp(T ) с IHB ・
丿puEDB’
Доказательство. Следствие вытекает непосредственно из теоремы 7. 11 и из факта, что
^p(EDB) = cons(P и EDB) с IHB.
Неудивительно, что результирующий алгоритм LFP напоминает алгоритм INFER. Б самом деле, переменные old и пе“ обоих алгоритмов на каждом шаге содержат одни и те же факты. Оба алгоритма на каждом шаге применяют INFER1 для образования новых фактов и присоединения новых фактов к тем, что были образованы на предыдущих шагах.
Отметим, что преобразование % может быть упрощено, т. е. можно построить более простое, чем Т , преобразование 丁嚷 на 7dat, такое, что Ifp(T^) = Ifp(T^). Вычисление LFP(Tg) несколько эффективнее, чем LFP(T^) по алгоритму LFP.
Определим 丁嚷 для множества S дизъюнктов Дейталога следующим образом:
V V S НВ : TJs(W)=FACTS(S) и inferl(RULES(S) и W).
Таким образом, 丁嚷 отличается от q тем, что в объединении отсутствует терм W .
Теорема 7.12. Для любого множества S дизъюнктов Дейталога Т^ является монотонным преобразованием на 々ат так что lfp(T;) = lfp(Ts)= cons(S).
Доказательство. Монотонность Т; можно показать аналогично доказательству монотонности q (теорема 7.9). Покажем теперь, что оба преобразования имеют одну и ту же наименьшую неподвижную точку. По теореме о неподвижной точке (теорема 7. 7) получим
lfp(Ts)= inf{W £ НВ /2 и FACTS(S; и inferl(RULES(S) и (W)) с ^},
Согласно основным законам теории множеств,
2 и FACTS(S) и inferl(RULES(S) и (2)) $ % эквивалентно более простому условию
FACTS(S) и inferl(RULES(S) и (W)) S 2
Следовательно, lfP(Ts)= inf{W £ НВ / FACTS (S ; и inf erl (RULES (S ; и и (W)) £ 叫=Ifp(T^).
Отсюда следует, что cons(S) = lfp(T^). Таким образом, если S - конечно, можно вычислить cons(S) с помощью LFP-итерации преобразования Т‘. Соответ
ствующий алгоритм LFP(T;) приведен ниже:
АЛГОРИТМ LFP(T;);
INPUT : Т; определено на конечном множестве S дизъюнктов Дейталога
OUTPUT : cons(S; BEGIN old:=0;
ne“:= FACTS(S);
WHILE new н old DO BEGIN old := nei/; ne“ := FACTS (S ; и inf er 1 (RULES (S ) и old); END;
RETURN new END.
Видно, что алгоритм LFP(T^) вычисляет на каждом шаге
то же множество фактов, что и алгоритмы LFP(T^) и INFER. Однако в отличие от двух других алгоритмов алгоритм LFP(T;) на каждом шаге после генерации новых фактов выполняет объединение множества новых фактов с множеством FACTS(S), а не с большим множеством old. В результате можно получить более эффективные вычисления.
Обратный вывод и резолюция
Ниже рассматривается важная альтернатива восходящему вычислению (или прямому выводу) программ на Дейталоге. Показано, как правила Дейталога могут обрабатываться в обратном направлении (начиная с целевого дизъюнкта) путем построения дерева доказательства нисходящим образом. Этот метод называется также обратным выводом. Показано также, как известный метод резолюции можно использовать для ответа на запросы Дейталога.
Принцип обратного вывода
Пусть Р - программа на Дейталоге, EDB - экстенсиональная база данных и G : ? - р(t^亡门) - цель,
где р обозначает интенсиональный предикат. Требуется узнать, какие основные экземпляры G удовлетворяются Р и EDB,
Одна из возможностей ответа на этот вопрос могла бы состоять в том, что вначале с помощью восходящего вычисления определяется множество ^^(EDB) всех интенсиональных основных фактов, являющихся следствиями Р и EDB, а затем отбрасываются все те факты, которые не являются конкретизациями G. Этот метод, однако, весьма неэффективен, поскольку обычно будет вычисляться значительно больше фактов, чем требуется. Во-первых, 5Лр (EDB) может содержать большое число основных фактов, предикаты которых отличаются от р. Во-вторых, константы в составе цели G не используются для уменьшения числа образуемых фактов, т. е. , если цель G имеет вид ? - р(а, У, b), вначале вычисляются все ответы для цели более общего вида ? - р(X, У, Z), а затем удаляются те ответы, которые не являются конкретизациями G.
Интересные методы могут быть использованы для уменьшения числа нерелевантных фактов, образуемых при восходящем вычислении. Эти методы (нмагические множества11, ,,подсчетп и ряд других) рассмотрены в части III этой книги как методы оптимизации. В этом разделе обсуждается совершенно иная вычислительная парадигма, называемая нисходящим вычислением или обратным выводом.
При нисходящем вычислении дерево доказательства конструируют, начиная с верхнего уровня от целевого дизъюнкта G и заканчивая на нижнем уровне, содержащем вершины, помеченные дизъюнктами из Р и EDB. Начнем с рассмотрения цели G. Если некоторые реализации G присутствуют как основные факты в Р и EDB, то для каждого из таких основных фактов строится отдельное дерево доказательства, состоящее из единственной вершины, помеченной основным фактом. Каждое из этих деревьев доказательства имеет глубину О и продуцирует единственный ответ по нашему целевому запросу.
Как только мы получили все деревья доказательства глубиной 0, для образования большего числа решений осуществляется поиск деревьев доказательства глубиной 1 с помощью следующего расширения G. Выберем правило Дейталога R : - LL из Р, такое, что G и L
1кО
являются унифицируемыми. Пусть е = mgu(G, %)・ Присоединим к дочерних вершин, помеченных %8”巳 к вершине, помеченной G. Кроме того, присоединим Дочернюю вершину, помеченную R, к вершине, помеченной G・ Проделав это, получим дерево глубиной 1. Корневая
вершина, помеченные
помеченная
G,
шинами; дочерняя
вершина G,
и ее дочерние вершины» 彳 называются целевыми вер-]
помеченная А,
называется
идентификатором правила. Для различных
R получим! различные деревья глубиной 1. Эти деревья называются t
поисковыми деревьями и в общем случае отличаются от, деревьев доказательства. s
Для трансформации поисковых деревьев в деревья доказательства отыскиваются подстановки 入, такие, что;, для каждого листа-цели дерева, помеченного некоторым!
дизъюнктом С,
применяя 入 поискового
выполняетсяС入 w Р и EDB. Затем»
ко всем меткам листьев-целей всего
дерева, получим дерево доказательства^ Для различных подстановок 入 получим доказательства. 时 подстановки 入, G 入“
глубиной 1. общем случае различные деревья
частности,
для каждой подходящей
является ответом на запрос ”? - G".
Пусть известны все поисковые ветствующие деревья доказательства генерации деревьев доказательства
деревья и соот*{ глубиной 1. Дл«| глубиной i + 11
расширим деревья доказательства глубиной i аналогичным] образом, добавляя подходящие дочерние вершины к!;|
некоторым или
подстановки 入,
ко всем листьямтакие, что для
и определяя все%
каждого
нового дерева поиска, помеченного некоторым С, выполняется СА w Р и EDB.
При выборе правила К для расширения листа поискового дерева Т нужно следить за
листа-целм1 дизъюнктон]
некоторого] тем, чтобвд
переменные, входящие можно всегда достичь которые также входят В любом поисковом главной целью. Все
в R н в Т, были различными. Этогц!
переименованием в Т.
дереве метка G
переменных в R,彳
называются некоторая
подцелями.
остальные меткиОтметим, что
корня называется целевых вершищ здесь произошла]
подмена понятия "цель", так как в раз д.|
6. 1. 1 мы определили цель как отрицательный дизъюнкт.(
Отметим, поисковое
что цели и подцели, входящие как метки
дерево, не должны логически
тироваться как позитивные утверждения
интерпре*|
с квантором) всеобщности в соответствии с интерпретацией познтнвньо^ единичных дизъюнктов (разд. 6. 1. 1). Вместо этого их? следует рассматривать просто как неинтерпретируемы^ структуры данных. j
Пример 7.14. Рассмотрим программу Р на Дейталоге>
включающую правила
R : 2
EDE,
р(Х, Y):-p(Yt X),
J: p(X,Z):- p(Xt Y). р(У, Z) К и экстенсиональную базу данных;!
состоящую из основных фактов:
{р(а, Ь)}, {р(Ь, с)}, {р(с, d)}, {p(d, е)}・
(заметим, что множество дизъюнктов S = Р и EDB уже использовалось в некоторых примерах раздела 7. 1 для иллюстрации принципов прямого вывода.)
рассмотрим цель 11 ? - р(а, X/*. Единственным деревом доказательства глубиной О для этой цели является дерево, состоящее из единственной вершины, помеченной р(а,Ь)・ Существуют две возможности расширения вершины, помеченной {р(а, X)}, в поисковое дерево глубины 1. Прежде всего мы можем унифицировать p(at X) с левой частью правила %. Однако перед этим мы запишем
j как &: р(Х‘,Z) :-р(Х‘,У), р(У, Z) для того, чтобы исключить конфликт имен переменных. Результирующее поисковое дерево Т^ 】показано на рис. 7. 2.
Другая возможность заключается в том, чтобы унифицировать р(а, X) с левой частью правила R?. Перед этим снова запишем 纟 как R?: p(XJ tY) :- р(У, X,), так как имя переменной X уже входит в р(а, X). Результирующее дерево поиска Т^ 2 показано на рис. 7.2.
Дерево поиска Т^ 】 может быть однозначно преобразовано в дерево доказательства: единственной подстановкой 入 для переменных X м У, такой, что p(at Y)X е Р и EDB и р(У, Х)А е Р и EDB, является 入= ={Х/с, Y/b). Результирующее дерево доказательства G^ 】 показано на рис. 7. 2. С другой стороны, не существует способа трансформации Т в дерево доказательства, поскольку ни один основной дизъюнкт EDB не может быть соспоставлен с fp(X, а)}. На рис. 7. 2 показаны также два дерева поиска глубиной 2 : Т^ 1 и Т^ 2> Дерево q 】 является расширением Т^ 1 и может быть однозначно преобразовано в дерево доказательства для {р(at а)}7 это дерево показано на рис. 7. 1. Дерево Т является расширением Т】^ н может быть однозначно преобразовано в дерево доказательства для {р(а, Ь)}. Отметим, однако, что {pfa, b)} уже был доказан с помощью дерева доказательства глубиной О.
Заметим, что не все потенциально существующие Деревья доказательства можно сгенерировать с помощью обратного вывода. Могут быть получены лишь те деревья, все листья которых помечены основными фактами, принадлежащими к Р и EDB. Такие деревья доказательства называются полными. Нетрудно видеть, однако, что если Для основного факта G существует дерево доказательства, то существует также полное дерево Доказательства для G.
Интуитивно понятно, что каждый основной факт, который может быть выведен из Р и EDB восходящим методом путем конструирования полного дерева доказательства G, может быть также выведен нисходящим методом ( с помощью обратного вывода) вначале путем конструирования дерева поиска Т, а затем путем трансформации Т в G. Поскольку для каждого основного факта, который является следствием Р и EDB, существует полное дерево доказательства, мы приходим к заключению, что каждый такой факт может быть получен с помощью обратного вывода. Этот результат, известный так же как "полнота обратного выводан, может быть формально доказан по индукции по глубине G. Более того, можно показать, что каждый основной факт вида р(а】 ^п〉, который логически следует из Р и EDB, может быть получен обратным выводом путем конструирования дерева поиска, начиная от главной цели р(а^а^) или от произвольной главной цели, более общей, чем р(а^㊀门),и, в частности, от наиболее
общей цели р(Х】Х^/
С другой стороны, очевидно, что если основной факт G выводится с помощью обратного вывода из Р и EDB, то G € cons(P и EDB), так как в этом случае существует дерево доказательства для G. Этот простой результат известен так же как пкорректность обратного выводан. Следовательно, корректный и полный обратный вывод является альтернативой прямому выводу при получении основных фактов из программы на Дейталоге и EDB. Формальное доказательство полноты и корректности концептуально просто, но содержит довольно утомительную техническую аргументацию, которую мы хотели бы здесь опустить. Однако мы сформулируем наши выводы в виде теоремы.
Обозначим BACK (G) множество всех основных p,edb' 丿
фактов, получаемых с помощью обратного вывода из заданной программы на Дейталоге Р и заданной экстенсиональной базы данных EDB (начиная с главной Цели G). Заметим, что если G - основной факт, то BACK (G) либо пусто, либо состоит из одноэле
ментного множества {G}.
Теорема 7.13. Пусть Р - программа на Дейталоге, а EDB - экстенсиональная база данных.
Для любого основного факта G справедиво (Р и EDB) I = G тогда и только тогда, когда ВЛСК= {G}・
Если цель G специфицирована вместе с Р, то
叫,g(EDE) = EZCKp,EDB(G)・
в) Пусть P - встречающихся вв) Пусть P - встречающихся вмножествоР, тогдамножествоР, тогдаинтенсиональных предикатов,интенсиональных предикатов,
в) Пусть P - встречающихся в
в) Пусть P - встречающихся в
множество
Р, тогда
множество
Р, тогда
интенсиональных предикатов,
интенсиональных предикатов,
叫(Е2 \ X i『ZCJa(P(X|一 ・・,Xarity(p)n.
Часть а) теоремы 7. 13 утверждает, что обратный вывод является полным и корректным. Часть б) рассматривает случай, когда некоторая цель G задана совместно с программой Р, и нас интересуют лишь реализации G. Часть в) утверждает, что каждый основной факт, логически следующий из Р и EDE, может быть получен с помощью нисходящего вывода, начиная с главной цели, аргументами которой являются переменные.
Теорема 7.13 предлагает следующий метод вычисления ^p(EDB): пусть RESULT - множественная переменная, накапливающая шаг за шагом основные факты из 5Пр (EDB). RESULT первоначально пусто. Вначале
рассматриваются главные цели р(Х】Xarity(p)Для всех интен- сиональных предикатов, входящих в Р. Конструируются все деревья доказательства глубиной О, начиная от таких целей. Метки вершин таких деревьев включаются в RESULT. Расширяются главные цели во все поисковые деревья глубиной 1. Полученные поисковые деревья преобразуются всеми возможными путями в деревья доказательства глубиной 1. Все метки всех полученных деревьев доказательства вносятся в RESULT.
Расширяются поисковые деревья глубиной 1 в поисковые деревья глубиной 2 всеми возможными путями, эти поисковые деревья преобразуются всеми возможными
путями в деревья доказательства, и т. д.
К сожалению, теорема 7. 13 не определяет, как остановить этот процесс. Отметим также, что этот процесс сам в общем случае не останавливается: существуют поисковые деревья, которые могут быть расширены до любой произвольной глубины (рассмотрим, например, дерево q рис. 7.2). Конечно, в определенный момент RESULT содержит все основные факты ^р(ЕВВ). Но как об этом узнать?
Покажем, что для каждой программы Р на Дейталоге и для каждой экстенсиональной базы данных EDB существует верхняя грань, ограничивающая глубину всех поисковых деревьев (и соответственно всех деревьев доказательства) , которые следует рассматривать. Пусть nconstfP, EDB) - число различных константных символов,
которые встречаются в Р и EDB, npreds(P) - число различных предикатных символов, которые встречаются в р, и maxargs(Р) - максимальная арность всех предикатов в Р・ Пусть
maxdepth(Pt EDB)=npreds(P) х nconst(Pt EDB严xargs(p?
Теорема 7.14. Обратный вывод сохраняет полноту, если глубина рассматриваемых деревьев поиска ограничена maxdepth(PtEDB).
Схема доказательства. Отметим вначале, что maxdepth(PtEDB) составляет верхнюю грань числа различных основных фактов, которые могут появляться в качестве меток в дереве доказательства, построенном из р и EDB. В самом деле, все основные факты, помечающие вершины любого такого дерева доказательства, построены из предикатных символов, встреч ающихс я в Р, и из констант, которые входят в Р и EDB. Очевидно, может существовать не более maxdepth(PtEDB) различных основных фактов этого типа. (Заметим, однако, что несколько вершин могут быть помечены одним и тем же основным фактом).
Кроме того, ограничим наше внимание полными деревьями доказательства, содержащими на каждом уровне по крайней мере один "новый факт", т. е. вершину, помеченную основным фактом, который не входит в качестве метки ни на одном из нижележащих уровней: если дерево доказательства содержит уровень, на котором нет новых фактов, этот уровень является бесполезным, и существует эквивалентное полное дерево доказательства, содержащее меньшее число уровней.
Поскольку существует максимально maxdepth(PtEDB) различных основных фактов, которые могут встречаться в качестве меток, то любое полное дерево, содержащее по крайней мере один новый факт на каждом уровне, не может иметь более maxdepth(PtEDB) уровней. Отсюда следует, что мы можем ограничиться рассмотрением деревьев, глубина которых не превышает maxdepth(PtEDB),
Генерация всех поисковых деревьев и деревьев доказательства глубиной, не превышающей maxdepth(P и EDB), может быть реализована в соответствии с различными стратегиями управления. Одна из возможностей з аклю- чается в том, чтобы вначале генерировать все деревья глубиной О, затем все деревья глубиной 1, затем все деревья глубиной 2, и т. д. , пока не будут образованы все деревья глубиной, не превышающей maxdepth(P и EDB). Такая стратегия называется стратегией насыщения уровня, что соответствует методу поиска, называемому поиском сначала вширь. Другая возможность могла бы
заключаться в генерации всех деревьев в порядке сначала вглубь при помощи рекурсии и бэктрекинга.
В литературе описаны различные методы нисходящего вычисления программ и целей на Дейталоге с помощью обратного вывода. Эти методы, в принципе, аналогиины описанному выше и могут различаться следующими характеристиками :
Деревья вывода. Не все методы могут быть адекватно описаны на основе раздельных понятий дерева поиска и дерева доказательства. Некоторые методы конструируют несколько иные виды деревьев. Например, метод резолюции, который описан в следующем разделе, конструирует единственный тип дерева, объединяющий черты деревьев поиска и доказательства. В большинстве методов не поддерживается информация о правилах, используемых в процессе вывода (такая, как идентифицируемые правилами вершины в наших деревьях поиска).
Структуры данных. Поисковые деревья, деревья доказательства и другие типы деревьев удобны, поскольку с их помощью может быть концептуально описан процесс вычисления. Однако часто они не реализуются как непосредственные структуры данных. В большинстве систем подцели (т.е. метки, которые появляются на листьях поискового дерева), ответы на запросы на Дейталоге и все промежуточные результаты организованы в виде множеств или списков.
Обход деревьев. В одних методах применяется поиск сначала вширь, в других - поиск сначала вглубь. Последниё используют бэктрекинг (слева - направо), и лишь некоторые из них - более сложные эвристические подходы.
Условия остановки. Представленные здесь условия остановки, т. е. грань maxdepth(Pt EDB), ограничивающая глубину генерируемых деревьев, могут рассматриваться как (весьма слабое) статическое условие остановки, поскольку эта грань устанавливается до выполнения программы на Дейталоге и не зависит от процесса вычисления. Многие нисходящие стратегии используют более совершенные динамические условия остановки, чувствительные к процессу вычисления и жестко зависящие от значений, принимаемых переменными в процессе вычислений. Мы уже использовали условия остановки в алгоритмах прямого вывода (например, условие ne“ * old алгоритма INFER). В случае обратного вывода условие остановки обычно формулируется в терминах множества исследованных подцелей и множества результатов, сгенерированных в процессе реализованных вычислений.
Выделение поддеревьев. Подцель может входить в различные места дерева поиска, порождая идентичные
поддеревья. Можно избежать повторных вычислений таких идентичных поддеревьев, если помнить в каждый момент времени все подцели, обработанные до этого момента. Аналогично, хотя и в более общем виде, можно избежать вычисления поддеревьев, соответствующих подцелям, которые являются конкретизациями других подцелей, встречавшихся ранее в вычислениях. Такая стратегия устранения избыточных вычислений называется пвыделением поддеревьев11. Хорошо известной стратегией, в которой используется выделение поддеревьев, является метод запрос-подзапрос (QSQ). Существует итеративный и рекурсивный вариант этого метода; рекурсивный вариант рассмотрен в гл. 9.
В следующем разделе мы опишем особенно интересный класс нисходящих стратегий вычисления - метод резолюции.
2. Резолюция
Это - известный метод, который первоначально использовался для автоматического доказательства теорем в контексте общих дизъюнктов (а не только хорновских дизъюнктов). Теоретический базис резолюции, т. е. корректность и полнота принципа резолюции для общих дизъюнктов, был разработан Д. А. Робинсоном в его основополагающей статье [Robi 65 ]. С тех пор метод резолюции, как никакой другой метод, завоевал мир символических вычислений; были исследованы и реализованы разнообразные уточнения этого метода [Chan 73, Love 83 ]. В частности, вся область логического программирования основана на парадигме резолюции. Специальный метод резолюции, применяемый в логическом программировании, называется SLD-резолюцией [Vane 76, Ыоу 87] . Это целый класс алгоритмов. Среди различных методов резолюции, этот класс является также наиболее подходящим для вычисления ответов на запрос в Дейталоге.
Ниже кратко описано, как можно вычислять ответы на запросы на Дейталоге на основе SLD-резолюции. В работе [Ыоу 87 ] содержатся доказательства большинства приведенных ниже теорем.
Перед тем как дать формальное определение SLD- резолюции, приведем основные характеристики метода.
интерпретация логических целей. В контексте метода резолюции цели являются отрицательными дизъюнктами, которые должны быть опровергнуты системой. Например, если имеется программа на Дейталоге Р, экстенсиональная база данных EDB и цель
п? - р(а, X)", то эта цель представляет утверждение VX чр(а, X). С помощью метода резолюции предпринимается попытка опровержения этого утверждения путем генерации контрпримеров, т. е. с помощью поиска констант а, таких что (Р и EDB) I= р(а,а). Очевидно, существование любой такой а противоречит утверждению VX : -tp(a, X). В таких случаях говорят, что р(а, ©) - контрпример нашей цели. Множество {р(а, ©)} всех контрпримеров цели п? - р(а,Х)" является ожидаемым ответом на наш запрос. Каждый различный способ опровержения цели п? - р(а,Х)" приводит к получению единственного элемента множества решений. Если п? - р(а,Х)" не может быть опровергнута с помощью резолюции, то решение представляет собой пустое множество. Каждое доказательство ложности цели G, т. е. каждый вариант доказательства несправедливости G, называется опровержением G на основе Р и EDB.
Линейное дерево опровержения. Для отыскания опровержения цели G на основе Р и EDB строится линейное дерево опровержения (рис. 7.3).
Рис.7.3. Общая форма линейного дерева опровержения
Отметим, что такие деревья, в отличие от большинства других типов деревьев графически представляются весьма естественным способом, когда корень дерева - внизу. Однако линейные деревья опровержения строятся сверху вниз, начиная с верхней вершины, помеченной первоначальной целью G = G。 (верхняя цель). Их построение заканчивается корневой вершиной, помеченной символом 口, обозначающим логическое противоречие (действительно, нашей целью является опровержение цели G, демонстрация того, что из этой цели можно вывести опровержение). Все дизъюнкты G】состоят только
из отрицательных литералов и представляют производные
цели, которые можно получить на основе правила резолюции. С] являются дизъюнктами из Р и EDB или полученными на их основе вариантами. Линейные деревья опровержения или их части объединяют функции деревьев поиска и доказательства. Каждое такое дерево соответствует опровержению определенной цели с помощью SLD-резолюции. Точное определение приведено ниже.
Обход дерева и условия остановки. Способ обхода дерева, используемый для отыскания всех деревьев
опровержения цели, зависит от реализации и не определяется принципом резолюции. Большинство систем используют поиск сначала вглубь. Аналогично условия остановки являются также системно-зависимыми. Некоторые системы, такие, как интерпретаторы Пролога, не используют каких-либо условий остановки вообще. В таких системах отсутствуют гарантии полноты; вопросы полноты и завершения решаются программистом.
Опишем более формально основные понятия метода резолюции. Напомним, что цель есть литерал, состоящий из одного или более отрицательных литералов, функция выбора есть отображение, соотносящее каждой цели один из ее литералов. Интуитивно выбираемый литерал - тот, который должен рассматриваться следующим в процессе реализации процедуры опровержения.
Пример 7.15. Наиболее часто используется функция выбора, соотносящая каждой цели ее самый левый (т.е. ее первый) литерал. Такая функция выбора используется интерпретаторами Пролога. Можно определить другую Функцию выбора, извлекающую наиболее означенный литерал из каждой цели, т. е. литерал, содержащий наибольшее количество констант (если существует несколько таких литералов, выбирается самый левый).
Теперь мы определим понятие резольвенты. В Дейталоге цель И (возможно, составная) может производить резольвенту с помощью либо правила Дейталога, либо факта Дейталога. Резольвента - это (возможно, составная) цель, или пустой дизъюнкт.
Пусть Е = fiKj ...,叫rKJ -( возможно,
составная) цель и пусть R - правило Дейталога вида L。:- L^ . . . , L^. Пусть s 一 функция выбора, такая, что s(E) = К]. Предположим также, что mgu е для К^ и L。 существует (понятие mgu введено в разд. 6.1.3). Резольвентой цели Е и факта F в соответствии с функцией выбора s является цель:
1-11ni + lк 丿
Если Р = {L} - факт и mgu для 勺 и L существует, то резольвента цели Е и правила F в соответствии с функцией выбора s состоит из дизъюнкта J .: ,гК]8гК”]8,гК^е「底°3 Т・ & это цель,
полученная из Е удалением 勺 и применением 0 ко всем
литералам.
Поскольку для пары литералов можно найти более одного mgu, существует, вообще говоря, более одной резольвенты Е и R (или Е и F). Однако пока мы используем одну и ту же функцию выбора, все резольвенты являются вариантами друг друга, т. е. они равны с точностью до переименования переменных. В то же время если используется конкретный алгоритм определения mgu (например, алгоритм mgu из раздела 6.1.3), то резольвента двух дизъюнктов в соответствии с функцией выбора s определяется однозначно.
Напомним, что переменные, встречающиеся в различных дизъюнктах, являются полностью независимыми. Для устранения конфликта имен в процессе резолюции достаточно убедиться, что дизъюнкты, являющиеся кандидатами для получения резольвенты, не содержат общих переменных. Это условие легко выполнить переименованием переменных.
Пример 7.16. Рассмотрим следующую цель Е и дизъюнкты R и F :
Е : f「p(a, X),「p(b, X*.
R : р(Х, Z) р(Х, У), р(У, Z). Р : {p(bt с)}.
Пусть S] обозначает функцию выбора, которая всегда выбирает самый левый литерал цели, a s「 обозначает функцию выбора, которая всегда выбирает самый правый литерал цели. Отметим прежде всего, что переменная X из R входит также в Е. Поэтому переименуем X в составе R в XI и получим вариант R' для R:
R,: pfXl, Z) :- pfXl, Y)t p(Y, Z).
При применении нашего алгоритма mgu легко видеть, что первый литерал Е унифицируется с головой R' с помощью mgu {Х1/а, Z/Х}. Поэтому существует резольвента Н для Е и R' в соответствии с s^ :
И : f「p(a,Y),「р(КХ),「р(У, X)}.
для тех же дизъюнктов Е и R' при использовании функции выбора s= образуется резольвента Н‘, определяемая следующим образом:
Н,: f「p(a,X),「p(b, У),叩(У, X),.
Рассмотрим теперь пару дизъюнктов Е и Р. Ясно, что единственный литерал факта Р не унифицируется с первым литералом Е. Следовательно, Е и F не образуют никакой резольвенты при s】. Напротив, при использовании функции выбора s Е и Р образуют резольвенту J:
J : f〕p(a, с)}.
Пусть S - множество дизъюнктов Дейталога, G - цель Дейталога ms- функция выбора. SLD - опровержение для S и {G} при s состоит из конечной последовательности целей G = G。G^ = □, последовательности дизъюнктов С\ , . . . , С и последовательности подстановок 8,...,8 , 1п1п
каждый дизъюнкт С^каждый дизъюнкт С^таких, что выполняются следующие условия:
каждый дизъюнкт С^
каждый дизъюнкт С^
(iwjwn) есть либо дизъюнкт S,
либо вариант дизъюнкта из S;
каждая цель G^ (l^i^n) является резольвентой дизъюнктов G] ] и % при функции выбора s;
ри lwiwn % есть mgu, используемый при резолюции G и С . i-l i
Если используемое множество дизъюнктов Дейталога ясно, можно говорить о SLD - опровержении G вместо SLD - опровержения S и {G}.
Каждое SLD - опровержение можно представить линейным деревом опровержения (рис. 7.3).
Пример 7.17. Рассмотрим снова программу Дейталога Р, состоящую из правил %: р(Х, Z) :- р(Х, У), p(Y, Z ; и % : Р(Х, У) : - р(У, X) и экстенсиональную базу данных EDB, содержащую основные факты
fp(a,b),,{p(bt c)}t {p(ct d)}t {p(d, e)}.
Рис. 7.4 а. Дерево опровержения RT1.
На рис. 7. 4а и 7. 4б показаны два различных дерева опровержения RT^ и RT^ для цели G ?-р(а,Х). RT^ - дерево опровержения в соответствии с функцией выбора s , которая всегда выбирает самый правый литерал из
дизъюнкта.
Рис. 7.4 6. Дерево опровержения RT2.
RT? представляет опровержение в соответствии с функцией выбора s】, которая из каждой цели выбирает самый левый литерал. Интуитивно можно видеть, что RT^ соответствует опровержению цели ?-р(а,Х), т. е. дизъюнкта {^р(ау Х)}у доказательством того, что факт {р(а, а)} является контрпримером правильности нашей цели G, которая утверждает, что для всех X выполняется гр(а,х). Кроме того, RT^ представляет опровержение той же цели доказательством того, что {р(а, с)} следует из Р и EDB. Факт {pfа,с)} является другим контрпримером этой цели.
Опровержение цели Дейталога G = {^P(t^亡卜))с помощью SLD-резолюции эквивалентно доказательству
того, что основная реализация {р(^】t^j} может быть выведена из заданного множества дизъюнктов Дейталога. Такой основной дизъюнкт называется контрпримером цели G. В самом деле, существование такой реализации противоречит утверждению цели G. Как показано в примере 7. 17, различные опровержения одной и той же цели могут вести к различним контрпримерам. При каждом
опровержении генерируется только один контрпример, который состоит из основной реализации {р(t^亡卜)),
образуемой последовательным применением всех встречающихся в процессе вывода унификаторов 6『6? 6门 к
fp(t]tk)}. Другими словами, контрпример равен fp(jtk;j0> где е = е1е2. .. еп.
Пример 7.18. Рассмотрим два опровержения, показанные на рис. 7. 4а и 7. 4б. Для первого, соответствующего дереву RT】, имеем е 二^]%%%=
{X" /bt Z/a, У^/а, Х/а, Y/b}, и, следовательно, сгенерированный контрпример представляет собой pfа, X)6 = р(а,а / Для второго вывода (дерево RT?) имеем 6'= 6;6;6; = {Х/с, Х^/а, Y/bt Z/c}t и, следовательно, сгенерированный контрпример есть pf а,с).
Пусть подстановка 6 = б^б^-••6八, связанная с данным
SLD-опровержением, называется ответной подстановкой, генерируемой этим опровержением. То, что уже было сказано выше об опровержениях, может быть представлено в виде теоремы, известной как теорема корректности SLD-резолюции. Доказательства теоремы 7. 15 и следующей за ней теоремы 7. 16 опущены. Их можно найти в литературе [Chan 73, Love 78, Vane 76, Lloy 87].
Теорема 7.15.(Корректность SLD-резолюции.) Пусть S
-множество дизъюнктов Дейталога, a G - цель вида frp(t]^к))・ Для любого SLD-опровержения S и {G} и ответной подстановки 6 S | ={р(t^亡卜))^^б?. • • 6门・
Теперь обратимся к полноте SLD-резолюции. Полнота в данном контексте означает, что если существует контрпример для цели Дейталога G на основе множества дизъюнктов Дейталога S, то SLD-опровержение S и {G}, генерирующее тот же контрпример, также существует. В частности, можно показать, что SLD-рез олюци я остается полной при использовании конкретной функции выбора.
Теорема 7.16 (Полнота SLD-резолюции.) Пусть S - множество дизъюнктов Дейталога, G - цель Дейталога вида {^p(t^ tk;}, as- функция выбора. Если существует основная реализация С для {р(t^ t^)},
такая, что S |= С fт. е. если существует контрпример С для G), то существует SLD - опровержение S и {G} в соответствии с s и ответной подстановкой 0, такой, что
С = {pft^ . . . , tjej.
полезно для вычисления Р, оперирующей экстен- на основе заданной целиполезно для вычисления Р, оперирующей экстен- на основе заданной целиSLD-опровержение особенно ответов программы Дейталога сиональной базой данных EDBt
полезно для вычисления Р, оперирующей экстен- на основе заданной цели
полезно для вычисления Р, оперирующей экстен- на основе заданной цели
дейталога G.
Назовем множеством успехов и обозначим через success(St Gt s) множество всех контрпримеров для G,
которое можно сгенерировать с помощью всех возможных опровержений S и {G} в соответствии с функцией выбора s. Напомним (гл. 6), что результат выполнения программы на Дейталоге Р для цели G, оперирующей на экстенсиональной базе данных EDBt обозначается как 5Шр q(EDB). Приведенное ниже следствие можно легко вывести из теорем 7. 15 и 7. 16.
Следствие (теорем 7. 15 и 7. 16). Пусть Р - программа на Дейталоге, G - цель Дейталога, EDB - экстенсиональная база данных. Для каждой функции выбора s справедливо, что 5n (EDB) = success(P и
и EDB> Gy S ).
Очевидным методом вычисления ЗЛр gfEDB) с? помощью SLD-резолюции является фиксация функции выбора s и генерация всех возможных опровержений G в соответствии с s при использовании итерации или рекурсии. Конечно, при реализации этого возникает уже известная "проблема остановки" подобно общему методу обратного вывода. Эта проблема в контексте резолюции может быть решена аналогично демонстрацией того факта, что для каждой Дейталог-программы Р и для каждой экстенсиональной базы данных EDB существует константа maxdepth,(Р, EDB), такая, что достаточно рассматривать лишь такие деревья опровержения, глубина которых меньше maxdepth^ fP, EDB). Отметим, однако, что большинство систем, основанных на методе резолюции, не использует такой грани. Они либо используют более совершенные условия остановки, действующие на основе динамического поведения программы (например, метод QSQ, описанный в части III данной книги), либо совсем не используют условий остановки, отвергая полноту.
Заметим, что метод резолюции аналогичен общему нисходящему методу, описанному в предыдущем разделе. Нетрудно видеть, что в линейном дереве опровержения множество всех шагов резолюции, в которых цель или подцель разрешается относительно правила, соответствует дереву поиска. В самом деле, при выполнении этих шагов цель или подцель расширяется. С другой
стороны, разрешение подцели относительно основного факта (и сжатие в размере) соответствует трансформации элемента дерева поиска в элемент дерева доказательства. "Поисковые шаги*1 и пшаги доказательства** SLD-опровержения в общем случае перемежаются. Кроме того, из-за линейной структуры SLD-опровержения можно ожидать, что глубина линейного дерева опровержения в худшем случае экспоненциально зависит от глубины соответствующего дерева доказательства.
Заключение
В этой главе рассмотрены различные парадигмы вычисления программ на Дейталоге, в том числе алгоритм INFER, представляющий собой простейшую стратегию восходящего вычисления. Представлены основные результаты теории неподвижной точки и показано, что выполняемые алгоритмом INFER вычисления соответствуют вычислению наименьшей неподвижной точки. Описан класс нисходящих методов, использующих принцип обратного вывода. Принципы и алгоритмы формулируются независимо от вопросов поиска данных и обращения к базе данных. Важно вместе с тем понимать, как эти методы могут быть применены, когда факты EDB хранятся в массовой памяти.
В этом случае необходимы специальные методы для минимизации числа обращений к внешней памяти. Эти вопросы обсуждаются в гл. 8 - 10.
Литература к главе
Введение в технику вычисления программ на Дейталоге содержится в обзорной статье Гардарена и Саймона [Gard 87]. Публикации по теории доказательства для Дейталога, развитой в разд. 7.1, отсутствуют.
Теорема о неподвижной точке (теорема 7.7) сформулирована в работе [Tars 55], где она дана в более общем виде. Исторический обзор развития теории неподвижной точки дан в [Lass 82 ]. Семантика неподвижной точки для логических программ впервые была описана в работе [VanE 76 ], ее хорошее объяснение содержится в работе [Ыоу 87].
Интересная статья по обратному выводу опубликована в [Smit 86] . В ней особое внимание уделено вопросу, насколько нужно расширять деревья, чтобы образ овать все ответы на данный запрос. Представлен алгоритм полного обратного вывода, использующий весьма совер-
шенные условия остановки.шенные условия остановки.Другим важным подходом к об
шенные условия остановки.
шенные условия остановки.
ратному выводу является метод "запрос-подзапрос" (QSQ) [Viei 86а,87], который детально рассмотрен в гл. 9.
Упражнения
Пусть S определено, как в примере 7.4. Найдите два различных дерева доказательства для S 卜{р(а, е)}・
Напишите процессор программ на Дейталоге, основанный на алгоритме INFER. В качестве языка программирования используйте Пролог или Лисп. Предполагается, что программа Р на Дейталоге и экстенсиональная база данных EDB представлены в виде списков дизъюнктов в основной памяти.
Пусть G - ориентированный граф с множеством вершин 0(G). Пусть ”一->” представляет бинарное отношение на v(G9, определяемое следующим образом. Для всех х и у вх-->у тогда и только тогда, когда х=
=у или существует путь от х к у. При каких условиях это отношение является частичным порядком на v(G) ?
Найдите конечное множество V и частичный порядок на 7, такие, что не все подмножества V имеют наименьшую верхнюю грань и не все подмножества V имеют наибольшую нижнюю грань.
Рассмотрите частично упорядоченное множество (0, s) как обобщение преобразования Т^ определенного в примере 7. 12, и покажите, что для любого а € 7 преобразование ?а, определенное посредством Vx е 7 : Т<х) = inf (а, х), является монотонным. Что можно сказать о пре образ овании Та, определенном как Vx е 7 : Ta(x) = sup(а, х) ? Указание, используйте индукцию по i и опирайтесь на монотонность Г.
i 7.6. Покажите, что значения 丄=(丄),т (1) Т (丄)..., вычисленные последовательно с помощью алгоритма LFP, по отношению к порядку s образуют цепь в решетке (0,三),т. е. i = Т°(丄)三 Т1 (i)^ ...s Т^~ 1fi;^ 0 尸(丄)s T1+1fi> • • • •
С помощью теоремы 7. 10 было показано, что для любого множества S дизъюнктов Дейталога неподвижные точки Tg являются в точности моделями Эрбрана S. Покажите, что подобное утверждение не выполняется для Т;・ Для описания моделей Эрбрана S в терминах Т: покажите, что 工 G НВ - модель Эрбрана S тогда и только тогда, когда Т^(I) £ I.
Модифицируйте процессор Дейталога, построенный в соответствии с упр. 7.2, заменой главного цикла while LFP-алгоритмом. Протестируйте оба алгоритма на примере и сравните их поведение при выполнении. (Заметим, что мы ожидаем лишь небольшого улучшения.)
На рис. 7.2 показаны не все поисковые деревья глубиной 2 согласно 'примеру 7. 14. Какие деревья глубиной 2 не изображены на рисунке?
Каждое из деревьев поиска, упомянутое в примере 7.14, 'может быть преобразовано не более чем одним способом в дерево доказательства. В рамках одной и той же экстенсиональной базы данных и одной и той же программы Р на Дейталоге, что и в примере, покажите, что существуют деревья поиска, которые могут быть преобразованы в различные деревья доказательства.
Указание. Примените другую главную цель.
Найдите дерево доказательства, которое не является полным, и укажите эквивалентное полное дерево доказательства.
Напишите метаинтерпретатор над интерпретатором Пролога, обрабатывающий дизъюнкты Пролога справа налево, т. е. в соответствии с функцией выбора s「, которая всегда выбирает самый правый литерал из каждой цели.
Пусть Р и EDB - такие же, как и в примере 7. 17. Укажите два различных дерева опровержения для цели р(а, с), которые используют одну и ту же функцию выбора.
Напишите на Прологе интерпретатор программ на Дейталоге, который использует рез олюционный механизм Пролога и для данной цели строит все линейные деревья опровержения до указанной глубины. Вызов этого интерпретатора имеет вид DatalogfGoal, Depth). Можно допустить, что все дизъюнкты программы на Дейталоге и экстенсиональной базы данных загружены, подобно регулярным дизъюнктам Пролога, в базу данных прологовских дизъюнктов.
Часть III. МЕТОДЫ ОПТИМИЗАЦИИ ДЛЯ ДЕЙТАЛОГА
В части II книги мы по существу определили смысл вычисления программы (или запроса) на Дейталоге и рассмотрели альтернативные модели и интерпретации. Некоторые из них (теоретике-доказательная модель, интерпретация, основанная на понятии неподвижной точки, обратный вывод) являются также основой для вычисления результата запроса. Наша цель, однако, состояла в определении операционной семантики, т. е. в понимании смысла вычислений, а не эффективности. В части III основной целью становится не смысл вычислений, а их эффективность.
Мы рассмотрим программы Дейталога, работающие с потенциально большими базами данных, и различные методы их эффективного выполнения (методы переписывания и выполнения, восходящая и нисходящая стратегии, алгебраические и логические методы).
Основное назначение этих методов состоит в формировании эффективных стратегий выполнения, при этом эффективность определяется в терминах взаимодействия с системой баз данных. Общей чертой таких методов является использование дополнительной избирательности, осуществление которой становится возможным после того, как пользователь определил запрос на существующем множестве правил Дейталога.
Предложенные методы используют все преимущества методов оптимизации запросов, разработанных для традиционных систем баз данных. Однако для Дейталога задачи оптимизации из-за наличия рекурсии оказываются гораздо более трудными.
После обз ора различных методов оптимизации мы введем некоторые расширения чистого Дейталога. В частности, рассмотрим использование встроенных предикатов, отрицания и сложных объектов в программах Дейталога. В гл. 12 (последней) дан обзор исследо- вательских прототипов для интеграции реляционных баз данных и логического программирования.
Глава 8. КЛАССИФИКАЦИЯ МЕТОДОВ ОПТИМИЗАЦИИ ДЛЯ ДЕЙТАЛОГА
методов оптиидентификации ортогональные каждый классметодов оптиидентификации ортогональные каждый классВ этой главе мы проведем классификацию мизации вычисления целей Дейталога. Для Различных классов методов используются классификационные критерии. После этого
методов оптиидентификации ортогональные каждый класс
методов оптиидентификации ортогональные каждый класс
будет рассмотрен в отдельном разделе. Требуется систематизация этих методов, поскольку оптимизация может быть достигнута с помощью различных методов, а взаимосвязь между ними не очевидна.
Эта глава построена следующим образом: сначала дано несколько критериев, которые можно использ овать для классификации методов оптимизации. Затем эти методы сгруппированы в однородные классы и представлен общий взгляд на оптимизацию целей Дейталога. Рассмотрен систематический метод трансляции логических правил и целей в уравнения реляционной алгебры. В конце главы приведена классификация структур правил и программ, встречаемых в Дейталоге, с точки зрения оптимизации. Эта классификация позволит определить специфические методы оптимизации для каждого класса.
Критерии классификации методов оптимизации
Мы будем классифицировать методы оптимизации по формализму, стратегии поиска, цели оптимизации и по типу рассматриваемой информации.
戸 ормализм
Как мы уже знаем, тело правила Дейталога можно тр*ан- слировать в алгебраическое выражение. В общем случае каждое множество правил Дейталога, которые определяют некоторый интенсиональный предикат (называемый также предикатом интенсиональной базы данных или предикатом IDB), соответствует уравнению реляционной алгебры, а программа Дейталога, определяющая некоторые предикаты IDB, соответствует системе уравнений реляционной алгебры. Это означает, что оптимизация целей Дейталога эквивалентна оптимизации поиска решения системы алгебраических уравнений. Таким образ ом, в этой книге мы рассматриваем два формализма: логический и алгебраический. Мы обсудим методы оптимизации как для первого, так и для второго формализма. В разд. 8. 3 описывается трансляция логического формализма в алгебраический. Следует отметить, что отображение в алгебраический формализм позволяет использовать такие классические результаты, как оптимизация конъюнктивных запросов, анализ общих подвыражений и количественное определение стоимости отдельной операции реляционной алгебры.
Стратегия поиска
Ограничимся логическими подходами. В гл. 7 мы показали, что выполнение цели Дейталога требует построения дерева доказательств. Построение этого дерева можно выполнить двумя способами: 1) снизу вверх (восходящий метод), начиная от существующих фактов и производя новые факты (приходя, таким образом, к заключениям) и 2) сверху вниз (нисходящий метод), пытаясь проверить истинность предпосылок, которые необходимы для проверки истинности заключения. Это различие введено в главе 7: алгоритм INFER, который вычисляет результат выполнения программы Дейталогас помощью прямого
вывода, является примером восходящего метода, а процедуры резолютивного опровержения являются примерами нисходящего выполнения. Ниже мы обсудим особенности этих двух подходов с точки зрения оптимизации.
По сути эти две стратегии выполнения представляют собой две различные интерпретации правила. При восходящем выполнении правила рассматриваются как продукции, которые применяют исходную программу к экстенсиональной базе данных и производят все возможные следствия из этой программы до тех пор, пока можно вывести новые факты. Ответом является подмножество множества следствий, которое состоит из кортежей, удовлетворяющих цели. Восходящие методы можно естественно использовать в множественно-ориентированном стиле, при котором в качестве входных данных используются полные отношения экстенсиональных баз данных. Такая особенность весьма желательна в контексте Дейталога, поскольку возникает необходимость извлечения из внешней памяти больших массивов данных.
С другой стороны, восходящие методы не используют непосредственно факт наличия связанных аргументов в целевом предикате.
При нисходящем вычислении, напротив, правила рассматриваются как генераторы задач. Каждая цель рассматривается как задача, которую необходимо решить. Исходная цель унифицируется с левой частью некоторого правила и генерирует другие задачи, соответствующие литералам правой части этого правила. Данный процесс продолжается до тех пор, пока дерево доказательств не будет построено полностью. В этом случае, если цель содержит некоторые связанные аргументы, в процесс вычисления включаются только те факты, которые имеют какое-либо отношение к константам цели. Таким образом, в этом режиме выполнения производится существенная оптимизация, поскольку при вычислении автоматически не рассматриваются многие из тех фактов,
которые не используются для получения результата. С другой стороны, при нисходящем методе более естественно вычислять ответ покортежно, что нежелательно в контексте Дейталога. /
В рамках нисходящего подхода можно выделить два метода поиска: сначала вширь и сначала вглубь.
При поиске "сначала вглубь11 генерация подзадач по правой части правила происходит в соответствии с некоторым упорядочиванием подцелей правой части, при этом порождаются деревья поиска, растущие вглубь. Недостатком такого подхода является то, что выбранный порядок литералов в теле правила сильно влияет на эффективность методов. Так происходит в Прологе, где не только эффективность, но даже завершение программ зависит от левостороннего порядка подцелей в телах правил.
При поиске "сначала вширь11 генерация всех подзадач из правой части правила происходит одновременно. Таким образ ом, обеспечивается сбалансированный рост дерева поиска. Цели Дейталога, оказывается, более естественно выполнять по стратегии "сначала вширь", поскольку при этом на процесс выполнения не влияет ни порядок предикатов в правой части (ПЧ) правил, ни порядок правил внутри программы.
Цели методов оптимизации Третий критерий оптимизации основывается на целях, преследуемых в методах оптимизации. Некоторые методы осуществляют трансформацию программы, т. е. преобразуют исходную программу в другую, записанную в том же формализме, но работающую более эффективно при применении одного из методов вычисления. Мы будем называть такие методы методами переписывания. Они отличаются от чистых методов выполнения, реализующих эффективные стратегии вычисления. При этом оптимизация осуществляется в самом процессе вычисления.
Поскольку входная программа и выходная программа, произведенная методом переписывания, записаны в одном формализме, их можно сравнить и, таким образом, определить эффективность трансформации. Некоторые методы применимы только для ограниченного класса входных программ. При этом производятся выходные программы, которые являются либо менее эффективными, либо такими же эффективными, как исходные программы. Однако их сложность гораздо выше, чем сложность исходных программ. В таких случаях рекомендуется с осторожностью относиться к результатам методов переписывания.
Тип рассматриваемой информации
Методы оптимизации различаются по типу информации, используемой при оптимизации. Наиболее распространена синтаксическая оптимизация. В этом случае при трансформации программ рассматриваются только их синтаксические особенности. В частности, различают два вида структурных свойств. Первый вид связан с анализом структуры программы, и, в частности, с типом правил, из которых она состоит. Например, некоторые методы при оптимизации используют линейность правил (разд. 8.4). Второй вид касается структуры цели и, в частности, селективности, вызванной наличием в цели констант. Эти два подхода не являются взаимно исключающими :можно разработать синтаксические методы, в которых возможны оба рассмотренных вьппе случая.
Семантическая оптимизация для получения эффективного ответа на запрос использует дополнительные семантические знания о базе данных. Комбинирование запроса с дополнительной семантической информацией выполняется автоматически. Семантическая оптимизация часто основывается на ограничениях целостности, которые выражают свойства корректных баз данных. Например, некоторое ограничение может утверждать, что "все самолеты, выполняющие межконтинентальные рейсы в Милан, садятся в аэропорту Малпенсан. Это ограничение можно использовать для вычисления цели, запрашивающей ''аэропорт прибытия межконтиненталь но г о рейса AZ747 из Нью-йорка в Милан11, без обращения к EDB. Хотя, по нашему мнению, семантическая оптимизация может существенно улучшить стратегии обработки запросов, далее в книге мы ее рассматривать не будем, оптимизации. Обзор литературы по этому вопросу приведен в разд. 8.6.
8・2・ Классификация методов оптимизации
Критерии классификации, рассмотренные в предыдущем разделе, приведены ниже в табл. 8.1. Поскольку семантическую оптимизацию мы не будем рассматривать, основные классификационные критерии связаны со стратегией поиска (восходящая или нисходящая), целями (переписывание или чистое выполнение) и с формализмом (логический или алгебраический). Комбинируя подходы и исключая альтернативы, которые не соответствуют релевантным классам методов, мы получим четыре класса, каждый из которых включает достаточно однородные методы:
восходящие методы выполнения;
нисходящие методы выполнения;
логические методы переписывания;
алгебраические методы переписывания.
Таблица 8.1. Критерии классификации
KPUTEPUO
АЛЬТЕРНАТИВЫ
Формализм
Метод поиска Порядок обхода Цель Подход Структура
Логика
Восходящий пСначала вглубь11 Переписывание Синтаксический Структура правила
Реляционная алгебра Нисходящий/
"Сначала вширь" Чистое выполнение Семантический Структура цели
Существенных различий между логическими и алгебраическими методами вычисления нет. В разд. 9 мы сначала рассмотрим алгебраические восходящие методы вычислений. По своей природе эти методы напоминают алгоритм INFER - логическую версию непосредственного вычисления (гл. 7). После этого мы рассмотрим нисходящие методы вычисления, которые используют смешанный логико-алгебраический формализм.
В табл. 8. 2 приведены методы, которые будут представлены ниже, вместе с указанием разделов, в которых они рассматриваются. Существование различных оптимизационных методов и формализмов порождает альтернативные подходы к вычислению цели Дейталога (рис. 8.1).
Рис. 8.1. Возможные подходы к выполнению цели.
Таблица 8.2. Методы оптимизации
восходящий
НИСХОДЯЩИЙ
Раздел 9. 1
Раздел 9. 2
МЕТОДЫ ВЫЧИСЛЕНИЯ
Непосредственный (Якоби, Гаусса- Зейделя) Полунепосредственный Хенсена-Накви
Запрос-подзапрос (и его варианты)
ЛОГИЧЕСКИЙ
АЛГЕБРАИЧЕСКИЙ
Раздел 10. 1
Раздел 10. 2
МЕТОДЫ ПЕРЕПИСЫ
ВАНИЯ
Магические множества Подсчет Статическая фильтрация Специальный полу- непосредственный
Редукция переменных Редукция констант
Пусть для некоторой программы Дейталога LP задана исходная цель Дейталога. Тогда возможны следующие шаги :
LP можно оптимизировать с помощью логических методов переписывания ЛМП (LRM) (одного или нескольких) .
LP можно прямо вычислить с помощью одного из логических методов вычисления ЛМВ (LEM), получая, таким образом, ответ для исходной цели.
LP можно транслировать в уравнения реляционной алгебры, преобразуя ее в алгебраическую программу АР.
ЛР можно оптимизировать с помощью алгебраических методов переписывания А МП (ARM)( одного или нескольких).
ЛР можно прямо вычислить с помощью одного из алгебраических методов вычисления АМВ (АЕМ), получая, таким образом, ответ для исходной цели.
В графе, представленном на рис. 8. 1, допустимы различные пути:
Логический подход состоит в последовательном применении методов ЛМП и ЛМВ. При этом, например, можно применить метод магических множеств или метод подсчета для получения логической программы LP', которая использует структуру констант цели и затем
вычисляется по восходящей стратегии, используя логическую версию непосредственного или полунепосредственно г о метода.
Алгебраический подход состоит в немедленном применении трансформации Е к исходной программе LP и в получении таким путем соответствующей исходной программы ЛР. После этого ЛР вычисляется последовательным применением методов АМП и АМВ (например, с помощью двух алгоритмов редукции переменных и констант, а затем итеративного метода Гаусса-Зейделя}.
Смешанный подход состоит в следующем. К исходной программе LP применяется метод переписывания ЛМП и получается оптимизированная программа LP'. Затем, с помощью трансформации т генерируется соответствующая алгебраическая программа ЯР'. И, наконец, вычисляется ЯР' с помощью метода вычисления АМВ.
Эти три случая представлены на рис. 8. 2.
LPLPLP ―^-^^р
ЛМПЛМПАМП
LP'LP> ЛР‘ЛР‘
ЛМВАМВАМВ
РЕЗУЛЬТАТРЕЗУЛЬТАТРЕЗУЛЬТАТ
Рис. 8.2. Обоснованные подходы к вычислению цели.
И наконец, будем предполагать, что методы оптимизации удовлетворяют трем важным условиям.
Корректность. В результат не должны включаться кортежи, которые ему (результату) не пренадлежат.
Полнота. Методы должны производить все кортежи результата.
Конечность. Вычисление должно выполняться за конечное время.
Все рассматриваемые нами методы этим условиям удовлетворяют.
8.3. Трансляция Дейталога в реляционную алгебру
В этом разделе мы формально рассмотрим трансляцию Дейталога в реляционную алгебру. Каждый дизъюнкт программы Дейталога транслируется алгоритмом
ситаксически управляемой трансляции в зависимость включения реляционной алгебры. Множество зависимостей включения, определяющее один предикат, далее интерпретируется как одно уравнение положительной реляционной алгебры R4*. Таким образом, программа Дейталога преобразуется в систему алгебраических уравнений. Каждый предикат IDB соответствует отношению-переменной. Каждый предикат EDB программы Дейталога соответствует отношению-константе. Нахождение решения этой системы соответствует определению значений отношений-переменных, которые удовлетворяют данной системе уравнений.
Рассмотрим дизъюнкт Дейталога:
С: Р( ^^,...,。门)• — q^CB], • • • , 8女)‘ • • • ’ q* В s’ • • •,' BJ •
Пусть Р Q]Qn обозначают интенсиональные и экстенсиональные отношения, соответствующие предикатам р, Qign- Заметим, что одним из q^ может быть сам р. При трансляции с С будет ассоциирована зависимость включения :
Expr(Q、Qm; £ Р.
Алгоритм синтаксически управляемой трансляции требует введения специальной нотации и двух функций переписывания термов:
-occurs(a^tRHS) типа boolean. Является истинным, если терм а^ появляется в правой части дизъюнкта, иначе является ложным.
corrf1) обозначает функцию, которая для любого а^ в левой части возвращает индекс j первой переменной 3^ в правой части (если она существует), такой, что 3…「
const(а^) типа boolean. Является истинным, если терм а^ является константой, иначе является ложным.
var(x^) типа bolean. Определяется как "^const(x)".
newar(x) - процедура, возвращающая при вызове новое имя переменной.
Пусть Е - строка, х и у - символы. Тогда Е<х, у> обозначает строку, полученную путем замены в Е первого вхождения х на у.
EQ(x, у) обозначает фиктивное бинарное отношение, содержащее один кортеж для значения каждой константы в EDB, такой, что первый и второй атрибуты имеют равные значения. EQ используется транслятором для выражения равенства двух атрибутов. Очевидно, что с точки зрения реализации EQ не является экстенсиональным отношением.
Следующие два рекурсивных правила применяются соответственно к левой и правой части С. Первое правило рассматривает два специальных случая:
Левая часть содержит в качестве аргументов константы.
Левая часть содержит более чем одно вхождение одной и той же переменной.
Правило 1 соответствующей трансформацией строк преобразует каждый из этих специальных случаев в эквивалентный, при этом все аргументы левой части (ЛЧ) являются различными переменными. После этого к правой части С применяется правило 2. Это правило генерирует условия выбора, которые определяются либо наличием констант, либо повторением переменных в правой части (ПЧ). При рассмотрении этих случаев правило 2 строит декартово произведение всех (интенсиональных или экстенсиональных) отношений, которые соответствуют предикатам правила. Декартово произведение отношений R , • •• , R обозначается xn R . 1п1=1 i
После применения второго правила получим зависимость включения между двумя выражениями реляционной алгебры. ЛЧ этой зависимости есть отношение-переменная, а его ПЧ - реляционное выражение, которое можно трансформировать с помощью обычных алгебраических преобразований. Например, операторы соединения можно заменить селекцией кортежей из декартова произведения.
АЛГОРИТМ ТРАНСЛЯЦИИ INPUT: дизъюнкт С = ЛЧ :- ПЧ
(=Р(%, . . . , q) : - 4](В], • • •,久3 • • • ‘ QmC^s» • • • 8" )•
OUTPUT: выражение Expr(Q^ . . . , Q^) из отношений, соответствующих предикатам q】,• • •,Qm-
BEGIN ПРИМЕНИТЬ ПРАВИЛО 1 К ДИЗЪЮНКТУ с END
ПРАВИЛО 1: Т(С)
BEGIN
IF 己工:const (a^ THEN /* случай a */ BEGIN
newar(x) ; RETURN T fJIHCa^ x> :- ПЧ, EQ(x, a^))
END
ELSEIF 31, j : «1 = «^ Kj THEN /* случай b */ BEGIN
newarfx;; RETURN T (JIUv、,x> :- ПЧ, EQ(x, %)) END ELSE RETURN И,、广(Ш)
согг(1),...,СОГГ(n)
END
ПРАВИЛО 2:T'(C)
BEGIN
IF 3i : const (p J THEN /* случай a */
BEGIN
newar(x); RETURN、呐 广 6ЛЧ<0Г x>) END
ELSEIF 3i, j : 8| = В『i<j THEN /* случай b */ BEGIN newvar(x) ; RETURN a •一 Г 6ЛЧ</3 , x>) 工=j1
END
ELSE RETURN 彳=冋 END
Заметим, что для выражения арифметических условий мы используем специальные предикаты EDB (например, lessequalfX,У) используется для записи терма X ^ Y). Синтаксическая трансляция этих предикатов требует введения экстенсиональных отношений, содержащих все пары констант базы данных, которые удовлетворяют данным арифметическим условиям (например, бинарное отношение LESSEQUAL). Такие встроенные предикаты рассмотрены более подробно в гл. 11. Тем не менее при выполнении трансляции можно выразить арифметические условия с помощью предикатов выбора. Так, например, ЛЧ правила
р(Х, Y) :- q(XtY)t lessequal(XtY) транслируется синтаксически управляемым алгоритмом в
% 2%八2-/Q х LESSEQUAL) и, после упрощения, в
4,2°\±2。
Пример 8.1. Рассмотрим систематическое применение алгоритма трансляции. Пусть задано правило
р(Х, X, Z) :- s(X, Y), r(Y, a,Z).
приприпомощи Т, случай Ь):помощи Т, случай Ь):T(p(NltXtZ) :- s(X,Y), r(YtatZ)t eq(NltX))T(p(NltXtZ) :- s(X,Y), r(YtatZ)t eq(NltX))приприпомощи T, последний рекурсивный вызов:помощи T, последний рекурсивный вызов:П6 ^^ (S(Xt Y), R(Y, a,Z), EQ(Nlt X))П6 ^^ (S(Xt Y), R(Y, a,Z), EQ(Nlt X))приприпомощи Т‘, случаи а) и Ь):помощи Т‘, случаи а) и Ь):П а 6,1,54=аЛ2=ЗЛ1=7EQ(Nlt X))П а 6,1,54=аЛ2=ЗЛ1=7EQ(Nlt X))丁(S(N2, N3 ), R(Y, N4, Z),丁(S(N2, N3 ), R(Y, N4, Z),помощи Т‘, последний рекурсивный вызов:помощи Т‘, последний рекурсивный вызов:при6,1,54=аЛ2=ЗЛ1=7После "перемещения внутрь" условий выбора и соединения получим盃(噎R))盾 EQ)Окончательное отношение включения%,5"S * (嘖卩)因EQ)…Преобразуем теперь алгебраические зависимости включения в алгебраические уравнения. Для каждого интенсионального предиката р соберем все зависимости включения типаExpqq,Qm) £ Р "三公修,полученные с помощью правил Т и Т‘. Из таких зависимостей включения генерируется алгебраическое уравнение, содержащее Р в качестве ЛЧ и Q в качестве объединения всех левых частей заданных зависимостей включения:Р = ExprifQ . . . . , Q ; и Expr(Q. . . . , Q ; 5. .и EXP%(Q],<<)•Такая трансформация нескольких неравенств в одно уравнение следует семантике программы Дейталога, основанной на минимальной модели Эрбрана. Она отражаетпри6,1,54=аЛ2=ЗЛ1=7После "перемещения внутрь" условий выбора и соединения получим盃(噎R))盾 EQ)Окончательное отношение включения%,5"S * (嘖卩)因EQ)…Преобразуем теперь алгебраические зависимости включения в алгебраические уравнения. Для каждого интенсионального предиката р соберем все зависимости включения типаExpqq,Qm) £ Р "三公修,полученные с помощью правил Т и Т‘. Из таких зависимостей включения генерируется алгебраическое уравнение, содержащее Р в качестве ЛЧ и Q в качестве объединения всех левых частей заданных зависимостей включения:Р = ExprifQ . . . . , Q ; и Expr(Q. . . . , Q ; 5. .и EXP%(Q],<<)•Такая трансформация нескольких неравенств в одно уравнение следует семантике программы Дейталога, основанной на минимальной модели Эрбрана. Она отражаетх р хх р х
при
при
помощи Т, случай Ь):
помощи Т, случай Ь):
T(p(NltXtZ) :- s(X,Y), r(YtatZ)t eq(NltX))
T(p(NltXtZ) :- s(X,Y), r(YtatZ)t eq(NltX))
при
при
помощи T, последний рекурсивный вызов:
помощи T, последний рекурсивный вызов:
П6 ^^ (S(Xt Y), R(Y, a,Z), EQ(Nlt X))
П6 ^^ (S(Xt Y), R(Y, a,Z), EQ(Nlt X))
при
при
помощи Т‘, случаи а) и Ь):
помощи Т‘, случаи а) и Ь):
П а 6,1,54=аЛ2=ЗЛ1=7
EQ(Nlt X))
П а 6,1,54=аЛ2=ЗЛ1=7
EQ(Nlt X))
丁(S(N2, N3 ), R(Y, N4, Z),
丁(S(N2, N3 ), R(Y, N4, Z),
помощи Т‘, последний рекурсивный вызов:
помощи Т‘, последний рекурсивный вызов:
при
6,1,54=аЛ2=ЗЛ1=7
После "перемещения внутрь" условий выбора и соединения получим
盃(噎R))盾 EQ)
Окончательное отношение включения
%,5"S * (嘖卩)因EQ)…
Преобразуем теперь алгебраические зависимости включения в алгебраические уравнения. Для каждого интенсионального предиката р соберем все зависимости включения типа
Expqq,Qm) £ Р "三公修,
полученные с помощью правил Т и Т‘. Из таких зависимостей включения генерируется алгебраическое уравнение, содержащее Р в качестве ЛЧ и Q в качестве объединения всех левых частей заданных зависимостей включения:
Р = ExprifQ . . . . , Q ; и Expr(Q. . . . , Q ; 5. .и EXP%(Q],<<)•
Такая трансформация нескольких неравенств в одно уравнение следует семантике программы Дейталога, основанной на минимальной модели Эрбрана. Она отражает
при
6,1,54=аЛ2=ЗЛ1=7
После "перемещения внутрь" условий выбора и соединения получим
盃(噎R))盾 EQ)
Окончательное отношение включения
%,5"S * (嘖卩)因EQ)…
Преобразуем теперь алгебраические зависимости включения в алгебраические уравнения. Для каждого интенсионального предиката р соберем все зависимости включения типа
Expqq,Qm) £ Р "三公修,
полученные с помощью правил Т и Т‘. Из таких зависимостей включения генерируется алгебраическое уравнение, содержащее Р в качестве ЛЧ и Q в качестве объединения всех левых частей заданных зависимостей включения:
Р = ExprifQ . . . . , Q ; и Expr(Q. . . . , Q ; 5. .и EXP%(Q],<<)•
Такая трансформация нескольких неравенств в одно уравнение следует семантике программы Дейталога, основанной на минимальной модели Эрбрана. Она отражает
х р х
х р х
то обстоятельство, что нас интересуют только те основные факты, которые являются следствиями нашей программы, т.е. необходимо вычислить только те факты, которые определяются с помощью зависимости, задаваемой программой.
Пример 8.2. Следующая программа Дейталога
Р(Х) :- p(Y), r(XtY).
Р(Х) :- s(Y,X)・ q(Xt Y) : - р(Х), r(X, Z), s(Y, Z)・
транслируется в
呼兇r)q p II S £ P
”P唱R)第S「£ Q
Из этих трех зависимостей включения получаем следующие два уравнения:
"PR^R) и n2S = Р
{б 点R)雙sj =Q
Заметим, что при построении окончательной системы уравнений использовались операции выбора, проекции, декартова произведения и соединения. Операция разности не использовалась. Таким образом, окончательная система уравнений записана с помощью положительной реляционной алгебры РЛ+ ( гл. 2).
Теперь логические цели транслируются в алгебраические запросы. Входные цели Дейталога транслируются в операции проекции и выбора над одним из отношений-переменных системы алгебраических уравнений. Для этого расширим оператор проекции таким образом, чтобы он в ключ ал проекцию пустого множества:
нет, если Е - пустое отношение; ПЕ =・ 0、
da , в противном случае.
Используем проекцию пустсго множества для выражения Целей без свободных аргументов.
Пусть р - предикат цели, аргумент i связан в цели константой с〕 Пусть Р обозначает отношение-переменную, соответствующее р. Константа с^ транслируется в селектирующий терм 1=0^.
Целевой выбор требуется тогда, когда по меньшей
мере один аргумент р связан константой. Он реализуется в виде селектирующих термов, соответствующих всем целевым константам.
Целевая проекция 110P генерируется только тогда, когда все аргументы целевого предиката связаны константами.
Ниже мы будем использовать специальный реляционный оператор композиции двух бинарных отношений. Композиция (о) отношений R и S определяется следующим образом:
R。S = % 瓷S)
Отметим, что композиция является ассоциативной.
Пример 8.3. а) Ниже приведены примеры трансляции логических целей в алгебраические запросы:
? - р(Х)・ а Р
? - р(а).。%(%=Р
? - q(a, X). е ai=aQ
? - q(a,b).。n0fai=aA2 = bQ;
Ниже приведена программа Дейталога, которая используется в качестве примера в последующих разделах:
р"Х, Y) :- c^X.Y).
P/X,Y) :- P](X,Z), P3(ZtY).
P/X,Y) :- p/X, У;.
P/X, Y) :- P](X,Z), P3(ZtY).
P/X, Y) :- J(X, Y)・
P3fX, Y) :- p/X.Z;, C2fZ, Y).
Рз(Х, У) :- *(X, У)・
Используя оператор композиции, эта программа транслируется в следующее множество зависимостей включения реляционной алгебры (здесь каждый предикат р】соответствует реляционной переменной Х^ и каждый базовый предикат с^ соответствует реляционной константе CJ.
Хз <
二 X 2
> С G X
23
;Хз
Отсюда получаем следующую систему уравнений:
W ГХ 。%) и %W ГХ 。%) и %
W ГХ 。%) и %
W ГХ 。%) и %
Запрос ? - р(а,Х) транслируется в 。^工^ \-
Можно также транслировать уравнения R4‘ в правила Дейталога, хотя трансляция из Дейталога в R4‘ является более полезной. Мы неформально продемонстрируем этот факт, показав, что можно транслировать все операции RA^. "eq(X, Y)" обозначает предикат равенства, который удовлетворяется тогда и только тогда, когда Х=К
Проекция. Рассмотрим уравнение X = И У, i 1,・・•》ih
где X - интенсиональное h-арное отношение, У - интенсиональное или экстенсиональное к-арное отношение к (h 三 к). Это уравнение соответствует следующему правилу Дейталога:
*(七j七2…… %3 :一 yq,%…… A'
Выбор. Рассмотрим уравнение X = Ьщд ди J, где X и У имеют одинаковую арность к, i j - номера атрибутов, tj - либо константы, либо номера атрибутов. Это уравнение соответствуют следующему правилу Дейталога:
хи】,а 2,…,气):- e(jfа. ,. . .,9* »
12к11J. П п
где
ттесли tесли t-константа;-константа;t jt jесли tjесли tjномер атрибута.номер атрибута.
т
т
если t
если t
-константа;
-константа;
t j
t j
если tj
если tj
номер атрибута.
номер атрибута.
ДекартовоX = У х. . . хУ .1пк - арностьДекартовоX = У х. . . хУ .1пк - арность
Декартово
X = У х. . . хУ .
1п
к - арность
Декартово
X = У х. . . хУ .
1п
к - арность
произведение. Рассмотрим уравнение
Пусть к - арность отношения X, отношений Y^ isjsn, 勺+£+・• • +£ =к. В
результате трансляции этого уравнения получим
Xia】,...,。卜):—
У](%, • • • ,Упбак_к +1» • • • » %)•
П*1
Объединение. Рассмотрим уравнение X =八 и %. X, Y] и 丫2 - отношения с одинаковой арностью к. Данное уравнение порождает два следующих правила Дейталога:
^^j»。2,• • • , %):-匕(%, о^, . . . , aj・ x(%,a2,…,aj :一 у2(%,a2
Заметим, что операция соединения выражается с помощью операций выбора и декартова произведения. Приведем пример трансляции соединения. Обозначим арность некоторого отношения R через arity(R). Рассмотрим следующее уравнение :
р = qG Q2 用 Q3
где arity(P)=6, arity(Qi)=arity(Q2)=arity(Q^)=2. Легко получить результат трансляции:
p(%,...,&):-%鸣,g342(鼻,3),43(七&),
叫鸣,xj, eq%, x6).
Пример 8.4. а) Рассмотрим следующее определение отношения R:
R = Q] и Q? и % 3Q3, где arity(R)=arity(Qi)=arity(Q2)= 2, arity(Q3) = 3. Правила Дейталога имеют следующий вид:
r(XtY) :- %(Х, У).
r(XtY) :- q2(XtY).
r(XtZ) :- 4з(Х, Y,Z)・
Рассмотрим следующее уравнение:
где arity(P)= arity(Qi)= arity(Q2)= arity(Q3) = 2. Это уравнение получается из рассмотренного выше уравнения (1) путем изменения арности Р и добавления проекции к ПЧ. Результант трансляции:
Р 鸣,鼻)%(%,£), q2(xf q3fx5, x6;, 气鸣,xj,也3, Х6).
Это правило можно упростить:
p(з,Х3):- %(%,£), 42(%,3),43(七 %).
Таким образом, мы неформально показали, что каждое определяющее выражение R4‘ можно транслировать в программу Дейталога.
Классификация правил Дейталога
Приведем классификацию правил Дейталога, которая используется в последующих разделах, где на основе класса правил заданной программы Дейталога будем выбирать методы оптимизации. Сначала введем некоторые полезные понятия. Пусть Р - программа Дейталога,
Р: PJ%, •Р: PJ%, •• , а• , а:П1) :- q】(В】‘
Р: PJ%, •
Р: PJ%, •
• , а
• , а
Qmf3s,外)・i=2・• • г
определяющая п X - множествоопределяющая п X - множестворсистемарсистемапредикатов IDB p^t ... t р^ (l^n^r). Пусть предикатов IDB программы Р. Пусть 2 -предикатов IDB p^t ... t р^ (l^n^r). Пусть предикатов IDB программы Р. Пусть 2 -уравнений, эквивалентная Р,уравнений, эквивалентная Р,
определяющая п X - множество
определяющая п X - множество
р
система
р
система
предикатов IDB p^t ... t р^ (l^n^r). Пусть предикатов IDB программы Р. Пусть 2 -
предикатов IDB p^t ... t р^ (l^n^r). Пусть предикатов IDB программы Р. Пусть 2 -
уравнений, эквивалентная Р,
уравнений, эквивалентная Р,
2 : 3 = Е\(Р] • • • , Р^), i=l. . . п,
и пусть X? - множество отношений-переменных (предика
тов IDB) системы S.
Определение 8.1. Гра« зависимостей программы Р - это такой направленный граф 專=<N, Е>, что
N = X рЕ = {<pv Pj> о Pj определяющего р(}Определение 8.2. Граф это такой направленный графN = X рЕ = {<pv Pj> о Pj определяющего р(}Определение 8.2. Граф это такой направленный графвходит в тело правила,зависимостей системы 2 - G? = VN, Е>, чтовходит в тело правила,зависимостей системы 2 - G? = VN, Е>, что
N = X р
Е = {<pv Pj> о Pj определяющего р(}
Определение 8.2. Граф это такой направленный граф
N = X р
Е = {<pv Pj> о Pj определяющего р(}
Определение 8.2. Граф это такой направленный граф
входит в тело правила,
зависимостей системы 2 - G? = VN, Е>, что
входит в тело правила,
зависимостей системы 2 - G? = VN, Е>, что
N = Xg
Е = {VP±, Pj> о Pj входит в Р( }
Из приведенных выше определений видно, что графы зависимостей для Р и S идентичны с точностью до
переименования вершин. Следовательно, мы можем использовать графы зависимостей как в логическом, так и в алгебраическом формализме. На рис. 8. 3 приведен граф зависимостей системы из примера 8. Зб.
из примераиз примера
из примера
из примера
Определение 8.3. Пусть задано правило Дейталога
С: р(а[,...,а ) • - Q f Д > • • .* Д 9» • • • » Q (8,・・・,8卜)・ 1п11кm Sп
Говорят, что оно рекурсивно, если в качестве по меньшей мере одного из q( используется р.
Например, правило ancfX, У) : - parfX, Z), anc(Z, У). рекурсивно, в то время как правило aunt fX, Z):-
parfX, У), sister(Yt Z). таковым не является.
Определение 8.4. Пусть задана программа Дейталога
Р : р f а , . . . ,(X ) : -q (В〕,• • •,Д. 9» • • • » Q 63 » • • • » Д. )• 1 1П11 1кm sп
"sisr )
Говорят , что Р рекурсивна, если ее граф зависимостей содержит по меньшей мере один цикл.
Программа, содержащая рекурсивные правила, является рекурсивной. При этом обратное не верно: существуют программы, которые являются рекурсивными, но не содержат рекурсивных правил.
Пример 8.5. Следующая программа, вычисляющая пары vx, Y>, у которых У является предком X, является рекурсивной:
anc(X, Y) : - par(X, Y).
ancfX, Y) : - parfX, Z), anc(Z, Y).
Второе правило является рекурсивным. Более того, его граф зависимостей, показанный на рис. 8.4,а, содержит циклы.
Следующая программа, как видно по ее графу зависимостей на рис. 8.4,6, является рекурсивной (однако рекурсивных правил она не содержит):
р(Х, Y) :- г(Х, У), “X, X).
р(Х, Y) :- “(X, Y).
rfX, Y) :- s(%X),p(", Y)・
r(Xt Y) :- “X, Y).
“(X, Y) s(% X), “Z, Y).
Определение 8.5. Пусть некоторая программа Дейталога Р содержит интенсиональный предикат р. Говорят, что р является рекурсивным, если соответствующая вершина графа зависимостей программы Р входит в цикл.
Определение 8.6. Пусть некоторая программа Дейталога Р содержит два интенсиональных предиката р и q. Говорят, что р и g взаимно рекурсивны, если соответствующие вершины графа зависимостей программы Р входят в один и тот же цикл.
Рис. 8.4. Графы зависимостей для рекурсивных программ.Рис. 8.4. Графы зависимостей для рекурсивных программ.
Рис. 8.4. Графы зависимостей для рекурсивных программ.
Рис. 8.4. Графы зависимостей для рекурсивных программ.
Таким образом, предикаты р и г из примера 8. 5 являются рекурсивными, и, в частности, взаимно рекурсивными, в то время как предикат w рекурсивным не является.
Определение 8.7. Пусть задано правило Дейталога
R: p(ot^t ...» %) : - 4](В], • • • , ")‘•••‘ Qmf3g» • • • > BJ•
Говорят, чтоГоворят, чтоправило R линейно по отношению к q± fили
Говорят, что
Говорят, что
относительно q・), если существует самое большее одно
вхождение q± в его тело.
Например, правило ancfX, У): - par(X, Z), anc(Z, Y).
линейно относительно апс. Правило ancfX, У) :- ancfX, Z), anc(Zt У). не линейно относительно апс.
Определение 8.8. Пусть задана программа Дейталога Р, содержащая правило
R: р(%, • • • , %) : - 4](储,Qj/Bs,BQ.
Говорят, что правило R линейно, если существует самое большее одно q〔 в теле правила (возможно, само р), которое взаимно рекурсивно к р в Р.
Заметим, что правило может быть линейным и рекурсивным. Из двух приведенных выше правил для предиката апс первое является линейным и рекурсивным, второе - только рекурсивным.
Определение 8.9・ Пусть задана программа Дейталога
Говорят, что программа Р линейна, если все ее правила линейны.
Пример 8.6. Рассмотрим программу
D Р](Х, У)
-м(х, у).
2) Р/Х, У)
-P1(Xt Z)tp3(ZtY)
3) Р】(Х, У)
-Р2(Х, У).
4) Р/Х, Y)
-p/x,z;,p3rz,r;
5)Р2(Х, Y)
-%(Х, У).
6) р/Х, Y)
-Рз(Х, Z), q(Z, Y)
7). р/Х, Y)
-Р"Х, У).
полученную из программы примера 8.Зб с помощью модификации правила 7. Ее граф зависимостей приведен на рис. 8. 5.
В этой программе предикаты р】, р2 и рз взаимно рекурсивны и, следовательно, рекурсивны. Более того, все правила линейны по отношению ко всем предикатам, однако правила ■ 2 и 4 не являются линейными. Тело правила 2 содержит одно вхождение предиката р】и одно
Рис. 8.5. Граф зависимостей программы из примера 8. 6.
вхождение предиката р2, Оба они взаимно рекурсивны по отношению к р^. Аналогииные наблюдения имеют место и для правила 4. Таким образом, рассмотренная программа является нелинейной.
Рассмотрим алгебраическую трактовку линейности.
Определение 8.10. Уравнение X = Е(Х , •・• , X ) алгебры RA линейно по отношению к X】 (или относительно X/) тогда и только тогда, когда оно получено из множества правил Дейталога, которые линейны относительно предиката р( соответствующего отношению Х(.
Например, уравнение ANC = PAR и PAR 。 ANC, полученное из программы апс, является линейным относительно отношения-переменной ANC.
Легко видеть, что если уравнение X = Е(Х,...,Х ) алгебры РА линейно по отношению к Х^, то для любых двух отношений X:) и Х^2) той же арности, что и Х±, выполняется следующее свойство математической линейности: '
Е(Ху ・・・,Х:)и Х;2), . . . , =
Е(Х^ X:),……
Обратное, однако, не верно: существуют нелинейные уравнения, удовлетворяющие свойству математической линейности, которое, таким образом, является более слабым условием, чем линейность.
Это более общее свойство полезно, поскольку
некоторые методы опимизации применимы к математически линейным уравнениям (т. е. к более широкому классу программ). Один из этих методов - метод полуне- посредственного вычисления (разд. 9.1.2). Эти два понятия часто путают. Происходит это потому, что различия между ними проявляются только в специальных случаях.
Пример 8.7. Рассмотрим правило
р(Х, Y) :- р(Х, Z),a(Z, Y),p(X, ")•
Очевидно, что оно нелинейно по отношению к р, следовательно, соответствующее алгебраическое уравнение
Р = %2〃Р。4)圏円
нелинейно по отношению к переменной Р, Тем не менее это уравнение удовлетворяет свойству математической линейности:
% и Р )。А)罔(Р и Р )]= о Л U р2 о л? ^ fPi U % 力=
И ' "Р 。4)纪и П [(Р 。А)图и %2“% ° 4)К%7 и П 2[(Р2。4)圏 P?J = (Р. 。4) и fP2。A)・
йй-^йй-^Последнее равенство получается из
йй-^
йй-^
р рX目Л Ло о2 1 。-r^v pl Р2 П1 П1 £ £ £ £р рX目Л Ло о2 1 。-r^v pl Р2 П1 П1 £ £ £ £%,2"匕 0 4) n292。") %2"p2 ° 4) n;2y ° 4)
р р
X目
Л Ло о
2 1 。-r^v pl Р2 П1 П1 £ £ £ £
р р
X目
Л Ло о
2 1 。-r^v pl Р2 П1 П1 £ £ £ £
С другой стороны,
И [(Р。А)圏и П [(Р。А)史= (Р. 。4) и (Р2 。А)・
Таким образом, это уравнение математически линейно относительно Р.
Определение 8.11. Уравнение X = Е(Х , . . . , X ) ■1 n
системы 2 алгебры RA является линейным, если оно линейно по отношению ко всем переменным системы 2, которые получены из рекурсивных предикатов.
Существует также аналогичное определение для системы уравнений реляционной алгебры..
Определение 8.12. Пусть задана система 2 处3 n уравнений
2 : X] = Е](Х]…・,XJ, i=?・・・ n.
Система 2 линейна тогда и только тогда, когда все ее уравнения линейны.
Другим важным понятием является стабильность. Пусть С - линейное рекурсивное правило Дейталога:
С: р(%,・・•,”):- q】(В】…・,"3…,qJB备,…,")•
Цепочка q^ . . . , q^ (l^k^m) вхождений предикатов в тело правила С называется цепочкой стабильности, если выполняются три следующих условия:
^1» • • • » ^к 1 являются предикатами базы данных и
Qk есть р;
q】содержит по меньшей мере одну переменную х】 в качестве аргумента, которая называется исходной переменной цепочки и сопоставима с одной переменной головного предиката р;
Для isk, ls/sk-1 предикат q^ содержит переменную Ху которая сопоставляется с переменной х^” предиката Qi”; х^ называется конечной переменной цепочки, которая соответствует исходной переменной х】.
Отметим, что в определении цепочки стабильности порядок предикатов q,...,q не обязательно совпадает
с порядком предикатов в теле правила.
Определение 8.13. Пусть С - линейное рекурсивное правило Дейталога рассмотренного выше вида. Тогда С является стабильным тогда и только тогда, когда для любой цепочки стабильности q^ . . . , q^ ( Isksm) и любой начальной переменной х】 переменная х】 и соответствующая ей конечная переменная х^ находятся на одном и том же месте соответственно в предикатах р и д^.
Пример 8.8. Ниже приведены примеры стабильных правил:
1)Р(Х, Y) :- qi(XiZ)tp(ZtY).
rfX, YfZ) :- s(X, X), r(X,匕"),“Z, W)・
sgc(Xt Y) : - par(X, X]), sgc(Xj 厶),par(Y, У/. Следующие правила, напротив, являются нестабильными
sgc(X,Y) : - par(X, XJ,sgc(JXJ,par(Y,厶).
s(X, Y.Z) : - r(X, Z), s(X, 土 W), 〃Z, Y).
p(X,Y) :- s(Z)tr(XtW)tp(ZtW).
Рассмотрим, например, правило 4. Здесь par(X, XJ, sgc(Y^, Xi) - цепочка стабильности. При этом X является исходной переменной (в предикате par), а X】一конечной переменной (в предикате sgc). Переменная X занимает первую позицию в предикате ЛЧ sgc, тогда как переменная X】занимает вторую позицию в предикате ПЧ sgc. Таким образом, правило 4 является нестабильным.
Стабильность - очень сильное условие. Однако удовлетворяющие ему правила, встречаются очень часто. Большинство программ на практике состоят только из стабильных правил.
Стабильность важна, поскольку некоторые алгоритмы применительно к стабильным правилам могут существенно упрощаться. В качестве примера можно рассмотреть алгоритм редукции констант, который описан в разд. 10.2.6.
8.5.8.5.ВыразительнаяВыразительнаямощность Де員талонамощность Де員талона
8.5.
8.5.
Выразительная
Выразительная
мощность Де員талона
мощность Де員талона
В разд. 8. 3 неформально показано, что каждое определяющее выражение алгебры К4‘ можно транслировать в программу Дейталога. Это означает, что Дейталог по
меньшей мере настолько же выразителен» как и RA •
Легко видеть, что нерекурсивный Дейталог в точности эквивалентен RA*. Таким образом, полный Дейталог строго более выразителен, чем R4‘, поскольку на Дейталоге можно выразить невыразимые в R4‘ рекурсивные запросы. Например, отношение ANC можно выразить только с поморью рекурсивных правил или рекурсивных уравнений RA . Это справедливо для большинства рекурсивных программ Дейталога.
С другой стороны, существуют выражения полной реляционной алгебры, которые нельзя выразить с помощью программ Дейталога. Это запросы, использующие оператор разности. Пусть заданы, например, два бинарных отношения R и S. Не существует Дейталог-правила, которое определяет отношение R-S. Тем не менее, как мы
увидим в гл. 11, такого рода выражения можно записать с помощью логического отрицания (г). Эта ситуация представлена на рис. 8. 6.
Рис. 8・6・ Выразительная мощность Дейталога.
Отметим также, что хотя синтаксически Дейталог является подмножеством логики первого порядка, эти понятия, строго говоря, несравнимы. Действительно, семантика Дейталога основывается на ,выборе определенной модели (минимальной модели Эрбрана), в то время как для логики первого порядка предварительный выбор специальной модели не требуется.
Литература к главе
При семантической оптимизации для получения эффективного ответа на запрос используются дополнительные семантические знания о базе данных. Очевидно, что связывание запроса с дополнительной семантической информацией должно выполняться автоматически. Прагматический подход к семантической оптимизации в контексте искусственного интеллекта предложен Кингом [King81]. Пользовательские запросы связываются с ограничениями целостности. Все это выражается с помощью простого формализма, что позволяет вычислять оптимизацию либо на логическом уровне (например, определяя, что ответ на запрос пуст, поскольку этот запрос не удовлетворяет некоторым ограничениям), либо на физическом уровне (например, выбирая лучший путь доступа с помощью условий, полученных из некоторого ограничения). Некоторая количественная модель позволяет различать полезные и бесполезные трансформации запросов. Маллей и 3доник [Ма186] предлагают исполь-
зование базы знаний ("библиотеки" стратегий оптимизации запросов) в качестве системного средства для оптимизации запросов. Подход, основанный на стандартной логике, предложен Чакраварти, Минкером и Грэнтом [Chak86, Chak87], которые описывают технические проблемы, возникающие при связывании запросов и ограничений. Для выражения запросов м ограничений используется логический формализм.
Другой проблемой, которая имеет отношение к семантической оптимизации и также не рассматривается в этой книге, является эффективное вычисление ограничений целостности. Логика - очень мощный форм«чнзм для выражения ограничений. Как показано е гл. 1, использование формализма логического программирования для записи запросов и ограничений обеспечивает единообразную, подходящую для семантической оптимизации запросов среду. Основная проблема, возникающая при выражении ограничений базы данных с помощью логики, связана с эффективным вычислением непротиворечивости состояний базы данных, или транзакций. Эффективность обычно достигается за счет предположения о том, что состояние базы данных перед вычислением транзакции непротиворечиво, м при помощи построения минимального дерева доказательства, которое позволяет сделать вывод о непротиворечивости состояния базы данных после вычисления транзакции. Подходы к построению такого редуцированного дерева доказательства могут основываться либо на использовании элементарных операций транзакций (добавление и удаление)» либо на нарушениях ограничений, либо на том и другом одновременно. Различные предложения были представлены Декером [Deck86], Бри м Мантеем [Вгу86], Брм, Декером м Мантеем [Вгу88], Кианом м Смитом [Qian 87], Ширдом и Стемплом [Shea86], Ковальским, Садри м Сопером [Kowa87]. Классический подход к верификации ограничений в системах баз данных позволяет заранее определить некорректные транзакции, для того чтобы отбросить их. Тем не менее, когда нарушаются ограничения и когда определены операции, нарушающие их, можно попытаться скорректировать транзакцию, для того чтобы получить непротиворечивое состояние, отвечающее запросам пользователя. Этот подход предложен Чери и Гарзотто [Ceri88e]. При этом корректировка производится при взаимодействии с пользователем.
Интересная унифицирующая парадигма для восходящего и нисходящего вычисления предложена в работе [Bry89b]. Алгоритм синтаксически управляемой трансляции из Дейталога в RA представлен в работе [Ceri86a]. Различные определения линейности, которые эквивалентны нашим, представлены в работах [Вапсвба,
Ioan87a, Ceri 8ба]. Определение стабильных правил подобно тому, которое приведено в работе [Hens 84].
Интересный анализ проблемы выразительной мощности реляционных языков запросов можно найти в работах [Aho 79а, Abit 87Ь].
Упражнения
. Оттранслируйте следующую программу Дейталога в зависимостях включения алгебры R4‘:
b(X, Y) :- а(х), “X, Z), s(RZ, Х)・ a(X) :- p(Y), b(Z, У), c(XtZ).
a(X) :- tfZ, X), b(w, X).
・ Получите уравнения алгебры R4‘, которые соответствуют зависимостям включения кз упражнения 8. 1.
. Оттранслируйте следующие цели Дейталога в запросы реляционной алгебры:
? - s(n, X, у).
? - b(Yt X).
?・ b(v, v)./
・ 1) Определите правила Дейталога, которые соответствуют следующей системе алгебраических уравнений, заданных на бинарных отношениях:
X = 4 и У У = У о X о В Z = X о В о д
Определите правила Дейталога, которые соответствуют следующей системе алгебраических уравнений. Все отношения бинарны.
X н 口 “X X X ) X С )
12=1 3丿 2= 1 17
= С о о С 。
% = q У U q
8・5・ Классифицируйте все свойства предикатов, правил Дейталога и программ Дейталога, полученных в Результате упр. 8. 4.
8.6. П о чему правила 5) и 6) из примера 8. 7 нестабильны ?
Глава 9. МЕТОДЫ ВЫЧИСЛЕНИЯ
Ниже рассмотрены методы вычисления программ на Дейталоге, которые обеспечивают порождение набора кортежей, удовлетворяющих заданной цели для заданного множества правил на Дейталоге. Восходящие и нисходящие методы вычисления описаны в разд. 9. 1 и 9. 2. и формулируются в рамках логического или алгебраического формализмов, введенных в предыдущих главах.
Восходящие методы вычисления
Рассмотрим три восходящих метода: непосредственный, полунепосредственный и метод Хенсена 一 Накви. Первый из них является наиболее универсальным и уже был рассмотрен в гл. 7 на основе логического формализма (алгоритм INFER). Здесь мы опишем две алгебраические версии полунепосредственного метода, называемые методом Якоби и методом Гаусса - Зейделя и соответствующие известным алгоритмам численного анализа для итеративного решения систем уравнений. Затем покажем, как улучшить непосредственный метод вычисления с помощью полунепосредственно г о метода вычисления. Рассмотрим два варианта полунепо- средственного метода, применяемые соответственно для линейных и общих систем реляционной алгебры. Затем кратко опишем специализированный метод - метод Хенсена Накви, названный именами его разработчиков и применяемый к линейным программам на Дейталоге.
2. Алгебраические непосредственные методы вычисления
Алгебраический непосредственный метод вычисляет решение (неподвижную точку) системы алгебраических уравнений. Таким образом, этот метод - наиболее простая из алгебраических стратегий вычисления АМВ, представленная на рис. 8.1.
Пусть £ - следующая система реляционных уравнений:
勺=Е](R】,• • •,勺),(/= 1, • • • , n)・
По методу 兄коби (алгоритм приведен ниже) отношения-переменныевначале устанавливаются равными
пустому множеству. Затем организуется итеративное
вычисление R^ = EJR^ ... t P^J, (i= 1 n), пока ни одно из отношений Р^ не перестает изменяться между двумя последовательными вычислениями (т.е. пока R^ не достигнет неподвижной точки).
АЛГОРИТМ ЯКОБИ
INPUT: система алгебраических уравнений £ и экстенсиональная база данных EDB.
OUTPUT: значения отношений-переменных R、R^.
METHOD:
FOR 1: = 1 TO n DO R J = 0;
REPEAT
cond := true;
FOR / := 1 TO n DO Sj=Rj
FOR / := 1 TO n DO
BEGIN
& •= EJSj ・•・,SJ ;
IF R/ S| THEN cond := false;
END;
UNTIL cond;
FOR / := 1 TO n DO OUTPUT(RJ ・
ENDMETHOD
Дадим теперь формальное описание метода Якоби в терминах теории неподвижной точки. Прежде всего нам понадобятся некоторые определения. Пусть к - арность %, is/sn и
Dom(R ) = fva , • • • , а >, такие, что a w Const, J = 1,・:kj・ k 1'
Пусть С = f (Xj • • • , XJ такие, что Х^ £ Бот(П^)}. Определим отображение Т^ : С --> С, такое, что Т (X ・・,Х ) = (Е (X ・・,Х ),•…Е (X ,…,Х ))・
乙 1п11пп 1п
Частичный порядок 三 на С определяется следующим образ ом:
(X …・,X)s(Y …・,Y)o(X £Y л …лХ £Y)・1n1n11n n
Легко видеть, что:
(C,三)-полная решетка;
% - монотонное преобразование на (С,$);
Т^ соответствует Т$ из разд. 7. 2. 2. Фактически кортежи из констант в Dom(R^) являются реляционными аналогами элементов базиса Эрбрана НВ из разд. 7. 2. 2.
Теорема 9.1. Результат алгоритма Якоби есть наименьшая неподвижная точка преобразования Т^ : С --> С, такого что 7?鸣,…,XQ =(Е/Х】,…,XJ …,
En(Xj •・•,Хп〉) индуцируется системой 2.
Доказательство теоремы мы опускаем. На самом деле, структура алгоритма Якоби соответствует структуре алгоритма LFP, описанного в разд. 7. 2. Сходимость метода Якоби может быть немного улучшена, если на каждом шаге к для вычисления нового значения К’^'
подставить в Е^ значенияj = 1, • • • ,
вычисление на той же итераилл, вместо старых значений R〕 . Этот вариант метода Якоби называется методом Гаусса - Зейделя (его алгоритм приведен ниже). Оба метода хорошо известны в численном анализе.
АЛГОРИТМ ГАУССА-ЗЕЙДЕЛЯ
INPUT: система алгебраических уравнений £ и экстенсиональная база данных EDB.
OUTPUT: значения отношений-переменных R】R^
METHOD:
FOR 1:= 1 ТО n DO ^4: = 0;
REPEAT
cond := true;
FOR i := 1 TO n DO
BEGIN
S:=0;
% • = E J R], ..., ^n 】;
IF R^ S THEN cond := false;
END;
UNTIL cond;
FOR i := 1 TO n DO OUTPUT(R^ .
ENDMETHOD
применяемый к экстен- результат,его остав-применяемый к экстен- результат,его остав-Теорема 9.2・ Алгоритм Гаусса - Зейделя, к системе алгебраических уравнений 2 и сиональной базе данных EDB, выдает тот же что и алгоритм Якоби.
применяемый к экстен- результат,
его остав-
применяемый к экстен- результат,
его остав-
Доказательство теоремы тривиально, и мы
ляем читателям в качестве упражнения (см. упр. 9.3).Могут быть образованы различные варианты методовляем читателям в качестве упражнения (см. упр. 9.3).Могут быть образованы различные варианты методовЯкоби и ГауссаЯкоби и ГауссаЗейделя, если организовать парал-Зейделя, если организовать парал-лельное, а не последовательное вычисление алгебраических выражений. Синхронизация таких вычислений определяется графом зависимостей: вычисление значениялельное, а не последовательное вычисление алгебраических выражений. Синхронизация таких вычислений определяется графом зависимостей: вычисление значенияотношения R^только будутотношения R^только будутна k-й итерации (К;“)на k-й итерации (К;“)возможно, каквозможно, каквычислены значения отношенийвычислены значения отношенийвстречающиесявстречающиесяв уравнении 0в уравнении 0(к) случае говорят, что R(к) случае говорят, что R々(К】R/ В этом々(К】R/ В этомвычислимо. Хаотический методвычислимо. Хаотический метод
ляем читателям в качестве упражнения (см. упр. 9.3).Могут быть образованы различные варианты методов
ляем читателям в качестве упражнения (см. упр. 9.3).Могут быть образованы различные варианты методов
Якоби и Гаусса
Якоби и Гаусса
Зейделя, если организовать парал-
Зейделя, если организовать парал-
лельное, а не последовательное вычисление алгебраических выражений. Синхронизация таких вычислений определяется графом зависимостей: вычисление значения
лельное, а не последовательное вычисление алгебраических выражений. Синхронизация таких вычислений определяется графом зависимостей: вычисление значения
отношения R^только будут
отношения R^только будут
на k-й итерации (К;“)
на k-й итерации (К;“)
возможно, как
возможно, как
вычислены значения отношений
вычислены значения отношений
встречающиеся
встречающиеся
в уравнении 0
в уравнении 0
(к) случае говорят, что R
(к) случае говорят, что R
々(К】R/ В этом
々(К】R/ В этом
вычислимо. Хаотический метод
вычислимо. Хаотический метод
заключается в вычислении отношений в любом порядке. Подклассами этого метода являются задержанный и потоковый методы, определяемые стратегиями вычисления отношений в максимально поздний и в максимально ранний возможный моменты соответственно.
Рассмотрим теперь примеры применения метода Якоби.
Прмнер 9.1а. Вычислить логическую программу L1:
riг2riг2anc(X, Y) : - ancfX, Z), par(Z, У).
ri
г
2
ri
г
2
anc(X, Y) :- par(X, Y).
при EDB:
PAR = {<Ь, а>, <Ь, g>, <а, d>, <а, е>, vd, f>, <с, h>}.
Программа L1 транслируется в уравнение
ANC = f[i 4®С 匿 PAR) и PAR
где ANC - отношение-переменная, соответствующая интенсиональному предикату апс. Заметим, что если использовать оператор композиции, определенный в гл. 8, мы запишем приведенное уравнение в следующем виде :
ANC = ANC。PAR и PAR
Следуя алгоритму Якоби, вначале положим ANC”)= 0. Затем осуществляется вход в цикл REPEAT. Устанавливается cond = true. Инициализируется S】= ANC = 0. Теперь вычисляется первое значение ANC. Соединение с пустым отношением пусто. Поэтому
ANC^1^= PAR = (<Ь, а>, <Ь, g>, <а, d>, <а, е>, vd, f〉,<с, h>} ANC^1 ^ н S , поэтому cond = false.
Входим во вторую итерацию. Следующим значением S является 4NC ⑴.Значение ANC вычисляется следующим образом:
/ 2 )
ANC、'= {<b, а>, <b, g>, <a, d>, <a, e>, <d, f>,
<c, b>, <b, d>, <b, e>, <a, f>?
Заметим, что ANC^2^ = ANC(‘)и {<b, d>, <b, e>, <a, f>}. / 2 )
ANC、' отличается от S】,поэтому мы входим в третью итерацию, полагая S】= ANC*), и получим
АЫС(з)= «ь, а>, <b, g>, <а, d>, <а, е>, vd, f>, <с,力>, <b, d>, <b, e>, <a, f>, <b, f>?
Заметим, что ANC^3^ = ANC^2^ и fvb, f>).
ANC、丿 отличается от S】, поэтому мы входим в четвертую итерацию полагая S】审 AN*), и получим
ANC(4)= {<Ь, а>, <Ь, g>, <а, d>, <а, е>, vd, f>, <с,力>, <b, d>, <b, e>, <a, f>, <b, f>?
Наконец, ANC^^= ANC( 3)= s】,после чего вычисление, завершается.
Пример 9.16. Используем тот же метод для вычисления цели :
? - sgc(a, У)
в логической программе L2 :
rjsgc(Xt Y) : - eq(X, Y).
r2:sgc(Xy Y) : - par(X, XJ, sgc(X^ У^, par(Yt YJ.
Программа L2 определяет людей одного поколения в конкретной базе данных. EDB представлена отношением
PAR = fvd, g>, <е, g>, <b, d>, <a, d>, <a, h>, <c, e> ?
и отношением EQ, приравнивающим каждый элемент домена DB самому себе,
EQ = {<а, а>, <Ь, Ь>, <с, о, vd, d>, <е, е>, <f, f>,
<g, g>, <л, h>}
Заметим, что экстенсиональное представление EQ дано
здесь для удобства. Практически нет необходимости хранить EQ в явном виде. Наша цель запрашивает людей одного поколения с а. Вначале осуществим трансляцию программы и цели. L2 транслируется в
SGC = % s((PAR^] SGC)图 PAR) и EQ
Используя оператор композиции, получим
SGC = PAR о SGC о (& XPAR)и EQ.
Цель преобразуется (гл. 8) в o*i_a SGC.
Результирующими значениями SGC являются следующие:
SGC(°)=0
SGC^ 1)= EQ = {<а, а>, <Ь, Ь>, <с, О, vd, d>, <е, е>, vf, f>, <g, g>, vb, h>}.
SGC( 2)= {<a, a>, <b, b>, <c, c>, vd, d>, <e, e>, <f, f>, <g, g>, vb, h>, vd, e>, <e, d>, <b, a>, <a, b>?
=SGC°)и {<d, e>, <e, d>, <b, a>, <a^ b>}.
SGC^ 3 ^= {<a, a>, <b, b>, <c, c>, vd, d>, <e, e>, <f, f>,
<g, g>, vb, b>, vd, e>, <e, d>, <b, a>, <a, b>, <b, c>, <a, c>, <c, b>, <c, a>?
=SGC(2) и {<b, c>, <a, c>, <c, b>, <c, a> ?
SGC( 4)= f<a, a>, <b, b>, <c, c>, vd, d>, <e, e>, <f, f>, <g, g>, <h, h>, vd, e>, <e, d>, <b, a>, <a, b>, <b, c>, <a, c>, <c, b>, <c, a>} = SGC*'" = s】
Вычисление завершено, и значение, возвращаемое алгоритмом Якоби, есть SGC*''). Для ответа по первоначальной цели нужно отобрать результирующее отношение 叮二&SGC(&). Результирующими кортежами являются. {<а, а>, <а, Ь>, <а, о}.
Этот пример показывает, что алгоритм Якоби вначале вычисляет полное отношение SGC, а затем реализует выбор кортежей, удовлетворяющих цели. Только подмножество кортежей, вычисляемых по методу Якоби, действительно требуется для ответа.
В приведенных выше двух примерах можно обнаружить два источника неэффективности:
Некоторые кортежи вычисляются многократно в процессе итерации. В частности, при итеративном вычис-
лении отношения R кортежи, принадлежащие отношениям R(”, принадлежат последующим отношениям R(", j 三 пока не будет достигнута неподвижная точка. Ее получение следует из монотонности преобразования Т?.
Некоторые кортежи вычисляются, хотя в этом нет необходимости. Их элиминация реализуется с помощью окончательной селекции. Заметим, что если программа нерекурсивна, алгебраические выражения, порождаемые в результате трансляции, легко оптимизируются стандартными методами реляционной алгебры, включая "внесение" условий выбора в выражение. Если же, наоборот, программа рекурсивна, такие преобразования неочевидны и требуются более сложные методы оптимизации. Так, например, заключительная селекция в примере 9. 16 не может быть тривиально "внесена".
Первый источник неэффективности частично устраняется с помощью полунепосредственного метода; на второй источник неэффективности можно воздействовать с помощью рассматриваемых ниже методов (Хенсена - Накви и запрос - подзапрос), а также методов переписывания (ГЛ. 10)..
Полунепосредственные методы вычисления
Полунепосредственный метод вычисления - восходящий метод, ориентированный на устранение избыточности при вычислении кортежей на различных итерациях. Этот метод не использует какой-либо информации о структуре цели. Он принимает во внимание только структуру программы. Существует два варианта полунепосредственного алгоритма : (чистый) полунепосредственный и полунепо- средственный метод, реализуемый при помощи псевдопереписывания. Первый из них мы рассмотрим здесь, а второй - в гл. 10, в которой рассматриваются методы переписывания.
Рассмотрим алгоритм Якоби. Пусть К,- временное значение отношения К^ на шаге итерации к. Дифференциал J?i на шаге итерации к определяется как
*工心)一心叫
Дифференциальный терм, определяющий новые кортежи ' на каждой итерации к, есть то, что мы хотели бы использовать во время каждой итерации вместо полного
отношения i Рассмотрим линейный случай. Согласно замечанию в разд. 8.4, рекурсивное уравнение
&= E(RJ
является линейным по отношению к R(, если оно удовлетворяет математическому свойству линейности
E(R;u R;) = E(R;) и E(R;)
для любых двух отношений R; и R;, имеющих ту же арность, что и 0. Вследствие этого дифференциал R^ на шаге итерации к есть результат применения выражения Е к дифференциалу % т. е. E(D^):
E(D{^) = E(R, - R「))= E(R{^) - E(R;T),
c(k+l)、
так что можно вычислить R^ = E(R^ ) как объединение
E(R,t))и E(D^)-*
Таким образом, когда система линейна, можно вполне законно подставить % вместо R】в алгоритмах Якоби и Гаусса - Зейделя: результат образуется объединением вновь полученного терма и старого терма.
Заменим алгоритм Якоби следующим:
ПОЛУНЕПОСРЕДСТВЕННЫЙ АЛГОРИТМ
INPUT: линейная система алгебраических уравнений Е и экстенсиональная база данных.
OUTPUT: значения отношений-переменных R】R^. METHOD:
FOR 1:= 1 TO n DO D := 0;
FOR i:= 1 TO n DO R[ : = Q; REPEAT cond := true; FOR i := 1 TO n DO BEGIN
A := EJDj • • • , 4] - 0 ; R := D и R ;
IF D^ 0 THEN cond := false; END;
UNTIL cond;
FOR / := 1 TO n DO OUTPUT(RJ・ ENDMETHOD
13-1417
Линейный случай является наиболее часто встречающимся и наиболее простым. Дифференциалы более высоких порядков (например, квадратичные) могут быть использованы для нелинейных уравнений, однако выражения при этом становятся более запутанными.
Другая возможность заключается в преобразовании каждого нелинейного правила в совокупность правил, каждое из которых становится линейным по отношению к каждой из переменных, первоначально встречавшихся в правиле; затем можно использовать вариант полуне- посредетвенного метода - обобщенный полунепосред- ственный метод.
Вначале представим преобразование, применяемое к нелинейным правилам. Для простоты рассмотрим единственное правило - рекурсивное и нелинейное, содержащее т вхождений предиката, находящегося в голове правила, в его тело:
Для простоты переменные в литералах опущены, каждый литерал представлен его предикатным символом. Приведенное правило эквивалентно следующей программе:
р: -q】,• • •,Qh> Р,J
ТР,樓 < 、 Г2 f Г3
r 一pт-1 「
Результирующие правила являются линейными по отношению ко всем предикатам. Вместе с тем они, очевидно, нелинейны из-за взаимной рекурсии р с каждым из Применяя такое преобразование ко всем нелинейным рекурсивным правилам, получим программу, все правила которой будут линейными по отношению ко всем переменным. Эта система может быть решена с помощью варианта (чистого) полунепосредственного алгоритма, являющегося не очень эффективным, но приводящим все же к частичной экономии вычислений. Можно использовать дифференциал каждого предиката только в уравнении, определяющем этот предикат, следующим образом:
ОБОБЩЕННЫЙ ПОЛУНЕПОСРЕДСТВЕННЫЙ АЛГОРИТМ
INPUT: Система алгебраических уравнений 2, линейных по отношению к переменным, входящим в левую часть правил, и экстенсиональная база данных ЭБД.
OUTPUT: значения отношений-переменных Ri, . . . , R^. METHOD:
FOR i : = 1 TO n DO % : = Q ;
FOR i:= 1 TO n DO R^ : = 0;
REPEAT cond := true; FOR / := 1 TO n DO BEGIN
D^ : = E JR】,• • •,% • • • , RJ - R[;
R : = % и % ;
IF Dy 0 THEN cond := false;
END;
UNTIL cond;
FOR / := 1 TO n DO OUTPUT(RJ ・
ENDMETHOD
Преимущества этого метода по отношению к непосредственному методу заключаются в том, что во время каждой итерации в каждом уравнении используется дифференциальный терм D^ вместо полного значения R】. Конечно, этот метод менее эффективен, чем линейный л олунепо средственный метод, в котором все % были введены во все уравнения, что существенно снизило объем вычислений. В данном методе вместо этого обеспечивается значительно меньший выигрыш - единственный дифференциал в каждом уравнении.
Пример 9.2. Покажем, как полунепосредетвенный метод снижает объем вычислений в примере 9. 16. Нам нужно вычислить цель о*]= SGC на линейном уравнении
SGC =几((PAR^< SGC)圏 PAR) и EQ
Благодаря линейности можно применить полуне- посредственный метод. Экстенсиональная база данных - та же, что и в примере 9. 1а. Получим
DD(0)_(0)_SGC’SGC’(О)(О)0'=00'=0
D
D
(0)_
(0)_
SGC’
SGC’
(О)
(О)
0
'=0
0
'=0
D( "= EQ = {<а, а>, <Ь, Ь>, <с, О, vd, d>, <е, е>, <f, f>, <gt g>t <ht h>}.
SGC(i ^=D^ 儿SGC(°)=
f <a, a>, <b, b>, <c, c>, vd, d>,
<e, e>, vf, f>, <g, g>, vh, h>}.
D“)= {<a, a>, vb, b>, <c, c>, vd, d>, <e, e>, <f, f>,
-SGC(')=-SGC(')=<g, g>, vh, h>, vd, e>, <e, d>, vb, a>, <a, b>} fvd, e>, <e, d>, <b, a>, <a, b> }
-SGC(')=
-SGC(')=
SGC(2)= О。% SGC( "= f <a, a>, <b, b>, <c, c>, vd, d>,
<e, e>, vf, f>, <g, g>, vh, h>, vd, e>, <e, d>, vb, a>, <a, b>} 口⑴=fvb, c>, va, c>, vc, b>, vc, a>} SGC(3)= DC% SGC(2)=
f <b, c>, <a, c>, <c, b>, <c, a>}u SGC^2^ = fva, a>, vb, b>, <c, c>, vd, d>, <e, e>, vf, f>,
<g, g>, vb, h>, vd, e>, <e, d>, <b, a>, <a, b>,
<b, c>, <a, c>, <c, b>, <c, a>}
(4)
Поскольку D = 0, вычисления завершаются и йы получаем
SGC(4) = fva, a>, <b, b>, <c, c>, vd, d>, <e, e>, vf, f>, <g, g>, vb, b>, vd, e>, <e, d>, vb, a>, <a, b>, <b, c>, <a, c>, <c, b>, <c, a>}
Если теперь мы сравним этот процесс вычисления с процессом в примере 9. 16, мы увидим, что результаты вычислений те же, но данный процесс вычисления является более эффективным. Здесь только D^^ вовлечены в операции соединения, тогда как в примере 9. 1 требовалось вычислять соединения для каждого временного значения SGC^ \ которое содержит больше кортежей, чем соответствующее значение D^ К
Метод Хенсена - Накви
Один из первых чистых методов вычисления, предложенный в литературе, был разработан Хенсеном и Накви применительно к программам на Дейталоге и целям, содержащим связанные аргументы. Метод опирается на знание формы цели и структуры программы.
Метод продуцирует итеративную программу, вычисляющую цель за несколько шагов. Каждый шаг продуцирует ряд кортежей ответа. В то же время на каждом таком шаге реализуется символическое вычисление выражения, которое подлежит вычислению на последующем шаге. Этот метод основан на ^функциональной" интерпретации предикатов: любой предикат р, имеющий по крайней мере два аргумента, рассматривается как множественная функция от некоторых из своих аргументов в оставшиеся.
Функция связывает каждое множество S значений ее первых аргументов с множеством S' значений ее вторых аргументов. Например, если р - бинарный предикат, с помощью f обозначим функциональное отображение
S' = {(S) = (у I х € S и р(х, у)}.
Согласно этой записи, можно реализовать композицию предикатных функций в обычном математическом смысле. Можно применить этот результат к решению линейных программ на Дейталоге, если счиать связанные аргументы доменами функций. Проиллюстрируем метод Хенсена - Накви применительно к программе SGC:
sgc(Xf Y) : - eq(X, Y).
sgc(Xt Y) : - par(X, XJ, sgc/X],'), par(Yt Y^.
и цели ? - sgc(a, X Значения X, удовлетворяющие цели, могут быть получены как множество
f(a) и f(f(f(a))) и rap eq par f (f (f (f (f (a))))) и ・・・ rap rap eq par par
где f обозначает функцию, результатом применения eq
которой к любой константе является сама эта константа; f обозначает множественную функцию из первого во второй аргумент отношения PAR, a f обозначает множественную функцию из второго в первый аргумент отношения PAR.
Итеративный алгоритм Хенсена - Накви продуцирует ответ, вычисляя на каждом шагу i:
Е(а) = f ff ff r •••(а))) par и реализуя образование нового выражения, подлежащего вычислению:
f(E(f (а))). rap par
Это первый пример оптимизации, использующий тот факт, что один из аргументов предиката цели связан константой. Мы не будем более обсуждать этот метод, поскольку он не является достаточно общим (он применим к линейным правилам) и поскольку в дальнейшем будет
предложен целый ряд других методов, эксплуатирующих для оптимизации те же знания. Наиболее интересной чертой этого метода является то, что он интегрирует два вида вычислений: на каждом шагу наряду с вычислением некоторых кортежей ответа выполняются также символьные преобразования. Первый вид вычислений является характерным для чистых методов вычисления, другой - типичным для методов переписывания.
2. Нисходящие методы вычисления
Ниже мы рассмотрим некоторые эффективные нисходящие алгоритмы вычисления, оптимизирующие поведение методов обратного вывода, описанных в гл. 7. В разд. 9. 2. 1 описан алгоритм запрос-подзапрос, а в разд. 9. 2. 2 - вариант этого метода, так называемый метод Ответа на рекурсивный запрос/задержанной итерации запроса (Recursive Query Answering/Frozen Query Iteration). Оба являются методами с множественной ориентацией, поскольку они обрабатывают целые отношения, а не отдельные кортежи. Поэтому они пригодны для обработки баз данных.
2. 2. Метод vзапрос-подзапрос'' (QSQ)
Метод пзапрос-подзапросп - нисходящий метод с множественной ориентацией. Он отличается от Пролога, в котором также используется нисходящий метод, тем, что Пролог обрабатывает кортежи по одному. Множественная ориентация крайне полезна с точки зрения баз данных. К тому же этот метод является полным методом, тогда как Пролог, использующий SLD-рез олюцию без дополнительных условий остановки, в некоторых случаях может не завершаться. Как мы увидим ниже, алгоритм QSQ использует динамические условия остановки (разд. 7. 3. 1), базирующиеся на выведенных новых кортежах и на сгенерированных новых подзапросах. В нем также применяется выделение поддеревьев аналогично описанному в разд. 7. 3. 1.
Метод QSQ является полностью общим методом, поскольку он применим к любой начальной программе и цели. Задачей QSQ является обеспечение доступа к минимальному числу фактов, необходимых для ответа на запрос. Для достижения этого вводится фундаментальное понятие подзапроса.
Подзапрос - естественное понятие обратного вывода: цель вместе с программой определяет запрос; литералы в теле любого из правил, определяющие предикат цели, яв-
ляются подцелями заданной цели. Таким образом, подцель вместе с программой составляет подзапрос; это определение применяется рекурсивно к подцелям правил, которые активизируются впоследствии. Дерево декомпозиции запроса (query) показано на рис. 9. 1.
Рис. 9.1. Схема редукции запроса к подзапросам.
Метод QSQ группирует вместе все подзапросы, имеющие одинаковые пометки (гл. 4), в один обобщенный запрос. Например, если во время выполнения образуются два подзапроса р(а,У) и р(Ь, У), соответствующий обобщенный запрос есть р({а, Ь}, У). Говорят, что голова правила сопоставляема с таким обобщенным запросом тогда и только тогда, когда она сопоставляема с одним из подзапросов.
Метод поддерживает два множества:
Множество Р кортежей ответа, которое содержит ответы на главную цель и ответы на промежуточные подзапросы. Оно представлено совокупностью временных отношений, по одному отношению для каждого предиката ИБД. В конце этого процесса из всех полученных ответов сохраняются только ответы на главную цель. Вместе с тем множество ответов в Р, обнаруживаемых перед исключением ответов на другие цели, есть минимальное множество ответов (минимальное множество), требуемое для разрешения цели.
Множество Q текущих обобщенных запросов (или экземпляров подзапросов), которое содержит все рассматриваемые в текущий момент подцели. В действительности из-за рекурсии в правилах процесс заключается в "открытии*1 поиска ответов на некоторые подзапросы и в генерации в процессе этого поиска новых подзапросов,
на которые должны быть получены ответы. Множество Q содержит записи о всех таких подзапросах.
На каждом шаге алгоритм QSQ хранит состояние, представленное текущей парой указанных множеств. Алгоритм выполняет двоякую функцию: генерирует новые ответы и новые подзапросы, подлежащие ответу.
Существуют две версии QSQ-алгоритма - итеративная (QSQI) и рекурсивная (QSQR). Различие между этими подходами заключается в том, какая из этих двух функций имеет приоритет перед другой. QSQI отдает предпочтение продуцированию ответов; при обнаружении нового подзапроса его выполнение задерживается до тех пор, пока не будут порождены всевозможные ответы, которые могли быть продуцированы к этому моменту. Лишь затем алгоритм расширяет задержанный подзапрос. QSQR ведет себя противоположным образом: при обнаружении нового подзапроса он рекурсивно расширяется, и процесс отыскания всех частичных ответов откладывается до момента, когда этот подзапрос будет полностью разрешен. В данной главе мы описываем QSQR, являющийся более эффективным.
Для каждого правила, голова которого соответствует начальной цели, процесс вычисления начинается при Р = 0(все временные отношения - пусты) и Q,
содержащем только начальный запрос (Q ={цель}). На каждом шаге рекурсии образуется новая совокупность кортежей ответа и новое множество экземпляров подзапросов, которые присоединяются к соответствующим множествам. Процесс завершается, когда больше не будет литералов, подлежащих расширению в теле правила, и не порождаются новые кортежи.
Другим важным понятием является функция выбора: она выбирает следующую подцель тела правила, которая должна быть проанализирована алгоритмом. Эта функция имеет тот же смысл, что и введенный в гл. 7. В частности, пример 7. 15 содержит определения наиболее часто используемых функций выбора. Эта функция не детализируется в спецификации алгоритма. Однако ••наиболее означенная" функция выбора является наиболее интересной, поскольку в большинстве случаев она способствует наилучшей оптимизации. Как и в SLD-pe- з олюции, выбор функции выбора не влияет на полноту алгоритма. Различные функции выбора воздействуют на различные виды оптимизации.
Поскольку этот метод довольно сложен, мы советуем читателю проследить его шаг за шагом по примеру 9.3.
РЕКУРСИВНЫЙ АЛГОРИТМ "ЗАПРОС-ПОДЗАПРОС” INPUT:(Обобщенный) запрос q OUTPUT:Кортежи ответа на запрос
METHOD: REPEAT Если цель является главной целью,то множество Q:= {q}・
FOR для каждого правила программы, голова которого соответствует цели, DO BEGIN
REPEAT
Выбрать в соответствии с функцией выбора первую (последующую) подцель г(...) в теле правила. Эта подцель соответствует предикату и, таким образом, временному отношению R.
На основе имеющейся информации (обеспечиваемой полученными к этому моменту связываниями из ранее селектированных и обработанных подцелей в теле правила) определить основные операции, которые должны быть выполнены на R (выбор, соединение, проекция,...).
Теперь мы получили новый подзапрос (предикат и множество значений). Если этот предикат не является* рекурсивным, генерировать для него ответы, выполняя алгебраические операции, определенные в 6)* после чего продолжить со следующей подцели. Если он рекурсивен, следует рассмотреть множество реализаций подзапроса (обобщенных подзапросов), определенных в б):
(в. 1) (Частичные) ответы на реализации, содержащиеся в текущем множестве реализаций Q, образуются в процессе поиска во временном отношении R кортежей, удовлетворяющих условиям б). Если такие имеются, соответствующие связыва- ся в последующих итерациях шага б)1, и мы продолжаем со следующей подцели;
(в. 2) Для новых реализаций следует рекурсивно вызывать эту процедуру, сообщая ей такие реализации в качестве входа;
UNTIL пока не существет больше подцелей в теле правила; осуществить вывод кортежей ответа для
Заметим, что алгебраические операции всегда выполняются над текущими значениями, полученными для рекурсивных предикатов, и (известными) значениями нерекурсивных предикатов.
цели в голове правила, выполняя соответствующие алгебраические операции над множествами кортежей, разрешающих правую часть правила (например, проекцию).
END
UNTIL пока не прекратится генерация кортежей ответа
END METHOD
Приведем пример использования метода. Для простоты в качестве функции выбора предполагается next. Этому конкретному случаю соответствует функция выбора наиболее означенных литералов.
Пример 9.3. Вычислим цель ? - sgc(johnt X;. для программы L2 примера 9. 16:
j:sgc(X, Y) :- eq(X, Y).
r2:sgc(Xt Y) : - par(X, XJ, sgc(X^ ZJ, par(Yt YJ.
и отношения
PAR = {<john, henry>, <george, jim>, <henry, mary〉, vjim, mary>}
Вначале P = 0, Q = {sgc( {john}t Y)}. Заметим, что в Q находится обобщенный запрос, соответствующий цели.
Из г】: sgc(john, У)
select eq(john, У)
должна быть выполнена операция а^ john^Q
предикат EQ нерекурсивен. Ответ: eq(john, john); Решение: sgc(john, johnJ, P = {sgc(john, john)}.
Из 樓:sgc( john, Y)
select par(john, X^)
должна быть выполнена операция о*1жjohnPAR
Предикат PAR нерекурсивен.
Ответ: par(john, henry);
select sgc(X^, Y^)
должна быть выполнена операция соединения a PAR и SGC
1Ж John
подзапрос: sgc(henrytX) Это новая реализация: Q = {sgc({john, henry}, Y)}. Вызвать процедуру рекурсивно:
Из q: sgc(henryt У)
select eq(henry, У)
должна быть выполнена операция a EQ 1е henry
предикат EQ нерекурсивен. Ответ : eq (henry, henry ). Решение : sgc(henryt henry ),
P = {sgc( johnt john)t sgc(henryt henry)}.
Из 樓:sgc(henry, У)
select par(henry, Xi)
должна быть выполнена, операция а PAR 1Ж henry
предикат PAR нерекурсивен.
Ответ: parfhenry, тагу);
select sgc(X^, Y^)
должна быть выполнена операция соединения
% PAR и SGC
1= henr у
подзапрос: sgc(marytX)
Это новая реализация: Q = {sgc({johnt henry, тагу), Y)}.
Вызвать процедуру рекурсивно:
Из г : sgc(maryt У;
а): select eqfmary, У)
: должна быть выполнена операция a^mar^Q
в): предикат EQ нерекурсивен.
Ответ: eq(marytтагу); Решение: sgc(marytтагу), Р = {sgc( john, john J, sgc(henryt henry), sgc(maryt тагу)}.
Из 樓:sgc(maryt У)
a): select par(тагу, Xi)
: должна быть выполнена операция a^^^PAR
в): Предикат PAR нерекурсивен. Ответ: кортежей нет. Здесь завершается данный уровень рекурсии. Возвращаемся на предыдущий уровень:
select(next): par(YtY^;
должна быть выполнена операция соединения % parXsgc и PAR
1е henry2 = 1
Предикат PAR нерекурсивен.
Ответ: par(jimtтагу);
Подцели тела правила обработаны на этом уровне рекурсии. Таким образом, можно выполнить необходимую заключительную проекцию: Решение: sgc(henryt jim).
Р = {sgc( john, john), sgc(henryt henry), sgc(maryt тагу), sgc(henry, jim)}
Переходим к следующему уровню рекурсии:
select: par(Yt Y^;
должна быть выполнена операция соединения a PARXSGC и PAR
1Ж John 2=1
Предикат PAR нерекурсивен.
Ответ: parfgeorge, jim)t par(johnt henry);
Подцели тела правила обработаны на этом уровне рекурсии. Таким образом, можно выполнить необходимую заключительную проекцию. После этого новым решением будет
sgc(John, george)•
Р ={sgc( john, john), sgcfhenry, henry), sgc(mary, mar у ), sgcfhenry, Jim), sgcf John, george )}.
Это был последний уровень еще незавершенной рекурсии. Мы все еще находимся в первом цикле repeat. Мы оставляем как упражнение читателю показать, что новые кортежи уже не будут генерироваться. Окончательный ответ на первоначальный запрос обеспечивается отбором из Р только таких кортежей SGC, у которых первым элементом является john.
2.2. Мето6 RQA/FQI
Ниже мы кратко опишем метод Ответа на рекурсивный запрос задержанной итерации запроса(RQA/FQI), являющийся вариантом метода QSQ. Он построен на основе общего алгоритма, аналогичного такому же алгоритму в QSQ, но реализованному за два шага.
На первом шаге вычисления RQA/FQI используется стратегия рекурсивной обработки, подобная Прологу и осуществляющая расширение дерева поиска сверху вниз. Ответы на рекурсивные запросы сохраняются для повторного использования. Расширение прекращается при обнаружении конкретиз ированных запросов или после полного ответа на подзапросы на основе основных фактов и нерекурсивных предикатов. До этого момента, если пренебречь некоторыми деталями реализации, этот метод следует той же нисходящей стратегии расширения, что и QSQ. Заметим, что остановка на конкретизированных запросах может рассматриваться как вариант выделения поддерева.
На втором шаге используется другой подход. В дереве поиска все еще имеются ветви, которые являются
неполными из-за конкретизированных запросов и поэтому были сохранены как задержанные дизъюнкты. Они обрабатываются с помощью эффективного варианта итерации неподвижной точки (гл. 6), действующего восходящим образом от фактов базы данных и фактов, которые были найдены как ответы на рекурсивные запросы. Этот шаг необходим для распространения всех ответов на вычисляемую конкретизирующую цель применительно к соответствующим задержанным их копиям (конкретизированным целям). Это соответствует погружению новых ответов в конкретизированные запросы и * использованию этих ответов для дальнейшего расширения дерева поиска. Если обнаруживаются новые подцели, они расширяются снова с помощью нисходящей стратегии вычисления.
9・3・ Литература к главе
Алгебраические непосредственные методы вычислений (методы Якоби и Гаусса - Зейделя) были предложены рядом специалистов, в том числе Чери, Готтлобом и Лавацца [Ceri 86а]・ Ими же представлены полуне- посредетвенные методы вычислений для единственного уравнения. Обобщение этих методов для систем уравнений дано в работах [Ceri 87, Ioan87a]• Большое число логических версий непосредственного и полунепо- средственного методов вычислений опубликовано также в работах [Banc 85, МсКа 81, Chan 81, Marq 83, Marq 84, Вауе 85, Banc 86b].
Метод Хенсена и Накви [Hens 84] - один из первых чистых методов. Та же функциональная интерпретация предикатов дана Гардареном и Де Манревилем в работе [Gard 86], где описан метод вычисления запросов как функци о нальных последовательностей, в которых в качестве функций используются функциональные интерпретации предикатов. Развитие этих идей можно проследить в работе [Gard 87b]• Алгоритм метода QSQ был описан в работе [Viei 86а], но предложенный в этой статье вариант метода оказался неполным. В работах [Viei 86b, 87, Nejd 87, Roel 87] рассмотрены коррекции метода, обеспечивающие полноту алгоритма. Алгоритм RQA/FQI описан в работе [Nejd 87].
Упражнения
Используйте алгоритм Якоби для вычисления цели
программе 9. 16.Гаусса -программе 9. 16.Гаусса -и экстен-Зейделя дляи экстен-Зейделя дляприменительно к логической сиональной базе данных примера
программе 9. 16.
Гаусса -
программе 9. 16.
Гаусса -
и экстен-
Зейделя для
и экстен-
Зейделя для
Используйте алгоритм вычисления цели
q(X) :- sgc(at X)•
применительно к логической программе примера 9. 16 и отношению PAR экстенсиональной базы данных примера 9. 1а.
Докажите теорему 9. 2 (указание: вы можете доказать ее, показав, что алгоритм Гаусса - 3ейделя вычисляет тот же результат, что и алгоритм Якоби, или показав, что он вычисляет наименьшую неподвижную точку 丁玄 fкоторая является уникальной)).
Можно ли использовать линейный полунепо- средственный метод вычисления решения примера 9.За? Если это так, реализуйте это вычисление. Если нет, объясните почему.
Вычислите ответ на запрос примера 9. 1а, используя рекурсивный метод QSQ.
Напишите программу на Прологе или Лиспе, реализующую алгоритм QSQR.
Используйте QSQR для вычисления следующей цели:
? - nfc, Y)
применительно к программе
n(Xt Y) :- rfX, Y).
n(Xt Y) :- p(XtZ)tn(ZtW)tq(WtY).
и базе данных
P = fvc, b>, <b, c>, <c, d>}, Q = jvc, a>, <a, i>, <1, a>}.
Глава 10. МЕТОДЫ ПЕРЕПИСЫВАНИЯ
В данной главе рассматриваются методы переписывания для программ Дейталога. В разд. 10. 1 представлены методы, которые применяются непосредственно к программам Дейталога: метод магических множеств, подсчета, статической фильтрации, полунепосредственных вычислений переписыванием. В разд. 10. 2 описан структурный подход к оптимизации алгебраических систем, состоящий из нескольких предварительных шагов, после которых применяются оптимизационные методы редукции переменных и редукции констант.
Логические методы переписывания
Поясним сначала н@ очень простом примере суть логических методов переписывания. Рассмотрим обычный пример вычисления предка, в котором предикат апс определен в терминах предиката EDB par:
ancfX, У) : - parfX, Y).
ancfX, Y) :- anc(X,Z), par(Z, Y).
и предположим, что требуется вычислить предков конкретного индивидуума а. Это намерение выражается целью
?- anc(at X).
Для вычисления множества ответов для этой цели восходящим методом будем использовать непосредственные вычисления, как мы это делали в примере 9. 1 ; затем применим операцию выборки ь】一己 к результирующему отношению ANС:
ANC = {<Ь, а>, <Ь, g>, <а, d>, <а, е>, vd, f>, <с, h>, <b, d>, <b, e>, <a, f>, <b, f>}
Результатом выборки будет
a^ANC = fva, d>, <a, e>, <a, f>}・
Этот подход, конечно, не эффективен. Как мы уже отмечали в разд 9. 1. 1, до применения операции выборки выводятся некоторые нерелевантные факты, такие, как anc(btd) или anc(с, h9; эти факты не имеют ничего
общего с конечным результатом. Кроме того, в процессе непо ср е дс т в еиных вычислений они не играют никакой роли при выводе фактов, входящих в результат.
Для нашей небольшой базы данных это не является серьезной проблемой. Представим себе, однако, большую, слабо связанную демографическую базу данных, содержащую факты о сотнях тысяч семей. Применение этого метода привело бы к большим накладным расходам.
Профессиональный программист для той же проблемы написал бы более эффективную программу, которая использовала бы возможность связывания первого аргумента предиката апс с константой а цели. Он написал бы следующую программу:
г::апс* (а, У) : - par (а, У).
г;:апс* fa, У) : - апс* (at Z), par(Zt Y),
Эта программа вычисляет гораздо меньше бесполезных фактов. Чтобы понять это, представим ее сначала в РЛ+; обозначим ANC,результат выборки ^ ^^ШС:
ANC" = b PAR и ANC' 。PAR l=a
Затем применим к этой программе процесс непосредственных вычислений, используя EDB из примера 9. 1. Ниже представлены результаты каждого шага итерации:
ANC^ (0) := 0.
ANC1 (1) = bgPZR = f<a, d>, va, е>}.
ANCf (2)= {<a, d>, <a, e>, <a, f>}.
ANC^ (3) = {<a, d>, <a, e>, <a, f>} = ANCf (2).
Таким образом, результатом будет
ANC' = fva, d>, <a, e>, <a, f>}
В этом решении размер отношений, участвующих в алгебраических операциях, существенно меньше, чем в примере 9.1, и число итераций на одну меньше. Например, кортежи <Ь, d> и <Ь, е> не вычисляются в ANC {2\ в то время как по алгоритму Якоби они вычисляются на шаге ANC{2}. Отсюда мы делаем вывод, что количество фактов, получаемых в процессе вычисления этой мидеальнойм программы, существенно меньше количества фактов, получаемых в неэффективной программе.
Логические методы переписывания преобразуют
неэффективные программы в "идеальные" автоматически путем связывания аргументов, указанных в целях. Для данной цели G и программы Р программа Р‘, получаемая с помощью такого преобраз ования Р, эквивалентна Р по отношению к G, поскольку приводит к тому же результату. Формально две программы Р м Р‘ эквивалентны по отношению к цели G тогда и только тогда, когда М = М , fвспомним определение М из
Р > G Р , G Р, G разд. 6. 2. 1).
Отметим, что это очень простой пример, и даже неопытный программист мог бы выполнить такие преобразования. Однако в данной главе предлагаются
достаточно мощные методы переписывания для применения к очень сложным программам; с помощью этих методов можно получить весьма нетривиальные преобразования, которые могут существенно повысить эффективность. Кроме того, эти преобразования изменяют программы более основательно, чем для случая только одного значения константы. Программы переписываются подобным образом для всех целей с одинаковой пометкой (определение пометки дано в гл.4).
Отметим также, что этот пример с использованием непосредственных вычислений приведен здесь только для иллюстрации, поскольку результат этой программы уже был вычислен в гл. 9, однако рассматриваемая программа является линейной, и ее можно вычислить также полунепосредственным методом. Тем не менее полу- непосредственный метод дает еще более существенное повышение эффективности.
В данном разделе мы рассмотрим четыре логических метода переписывания: метод магических множеств, подсчета, статической фильтрации и полунепосред- ственного переписывания, Метод магических множеств является одним из наиболее известных методов оптимизации и вполне общим. Затем мы рассмотрим метод подсчета, который не является общим, но очень эффективен в своей области применения. Мы проиллюстрируем этот метод на примере преобразований, использующих в качестве исходного результат, получаемый по методу магических множеств.
Метод статической фильтрации также является общим и применимым к любой программе Дейталога с целью, имеющей связанный аргумент. Методы статической фильтрации и магических множеств, примененные к программе вычисления предка, приведенной выше, дают одинаковый результат, как и программа, переписанная профессиональным программистом. Последний метод полуне- посредетвенных вычислений переписыванием при оптимизации не анализирует структуру цели и может применяться к программам Дейталога без целей.
10.1.1.10.1.1.Метод магических множеств
10.1.1.
10.1.1.
Метод магических множеств предназначен для оптимизации программ Дейталога с помеченными опре- деленным образом целевыми предикатами. В соответствии с приведенным в гл. 8 критерием классификации - это логический метод переписывания, учитывающий форму, которую принимает запрос.
Данный метод основан на идее горизонтального распространения информации (sideways information passing, SIP). Интуитивно понятно, что для данного правила и подцели в теле правила с одним или несколькими связанными аргументами эту подцель можно разрешить и связать таким образом неозначенные переменные в других позициях аргументов. Эти сязывания можно распространить на другие подцели в теле правила, и они, в свою очередь, распространят связывания на другие переменные. Это обычная последовательность действий для нисходящих методов вычислений (например, QSQ, и в общем для методов, основанных на резолюции). Для имитации нисходящей стратегии распространения связываний в методе магических множеств в программу с помощью дополнительных подцелей, добавляемых к правой части исходных правил, вводятся ограничения а также дополнительные правила, определяющие эти цели. Дополнительные правила заставляют программные переменные удовлетворять также и другим предикатам fназываемым "магическими"). Таким образом, в процессе восходящих вычислений переменные могут принимать только некоторые значения, а не все возможные. В большинстве случаев это повышает эффективность новой программы.
Перед тем как представить пребразования методом
магических множеств, мы опишем несколько подготовительных шагов, которые должны применяться к исходной программе, а также дадим несколько предварительных определений.
Пусть Р - программа Дейталога, рассмотрим цель над Р. Мы можем считать, что сама цель определена с помощью правила, т. е. цель ? - anc(at X) становится правилом q(X) : - anc(atX). Мы добавим это целевое правило к программе.
Рассмотрим правило г из Р. Для данной пометки предиката его головы говорят, что аргумент из подцели в г является отличительным, если выполняется одно из следующих условий:
аргумент является константой;
аргумент связан пометкой;
аргумент появляется во вхождении предиката из EDB, который содержит отличительный аргумент.
Следовательно, аргумент является отличительным, если диапазон его возможных значений ограничен некоторой константой, появляющейся в некотором предикате, или некоторой другой переменной, которая также имеет ограниченный диапазон значений. Из этого определения следует, что либо все переменные во вхождении предиката EDB различимы, либо все неразличимы. Вхождение предиката EDB, в котором все переменные .различимы, называется различимым вхождением предиката. Рассмотрим пример.
Пример 10.1. Ниже приведена программа с целевым правилом:
q(X) : - anc(at X).
anc(Xt У; : - par(Xt Y).
anc(Xt Y) :- anc(XtZ)t par(Zt Y).
В правиле г。 в anc переменная а является отличительной, а X - нет, поскольку anc - предикат IDB. Рассмотрим предикат головы правила г】 с той же пометкой fb, f) fэта пометка будет передана от г。к q и г?). Тогда X является отличительной в par, поскольку соответствует связанной переменной в голове. У также отличительна в par» поскольку par - предикат EDB и имеет другой отличительный аргумент. Таким образом, это различимое вхождение предиката EDB par.
Рассмотрим теперь правило г? с такой же пометкой (b, f). Тогда X является отличительным в anc, поскольку соответствует связанной переменной в голове; апс - предикат IDB, следовательно, он не передает "отличительность" другим аргументам. Таким образом, ни один из аргументов par не является отличительным в этом правиле и это - неотличительное вхождение предиката EDB par.
Понятие отличительного аргумента представляет собой формализацию идеи использования связанных аргументов для связывания других, свободных переменных и определяет направление горизонтального распространения информации.
Для каждого правила г из Р и для каждой пометки предиката головы г будем генерировать помеченное правило следующим образом. Будем считать все отличительные аргументы связанными; это позволит сгенерировать пометки для всех предикатов IDB в правиле.
Правило, полученное заменой всех таких предикатов их помеченными вариантами, называется помеченным правилом. Уже на этом шаге видна общность алгоритма, поскольку все цели, которые генерируют одинаковые пометки, производят одну и ту же переписанную программу.
Рассмотрим, например, правило г? из примера 10. 1 для пометки (btf) предиката его головы. Соответствующим помеченным правилом будет
anc"£(Xt Y) : - ancAx, Z), par(Zt Y).
Мы будем давать разным вхождениям одного и того же предиката р в правой части правила разные номера. Для предиката р обозначим его 1-е вхождение p_i・ Если в правой части правила присутствует только одно вхождение некоторого предиката, номер вхождения можно опустить.
Например, в правиле
rfX, Y) :- s(XtZ)t tfZ.Z;, s(Wt Y).
запишем номера вхождений так:
r(Xt Y) :- s_l(XtZ)t t_l(Z,Z), s_2(Wt Y),
Заменим каждое правило из Р соответствующим набором всех возможных помеченных правил.
Пример 10.2. Набор всех возможных помеченных правил для программы из примера 10. 1 будет
q(X) :- алс^ЛХ).
для пометки (b,f) anc:'
anc£(Xt Y) :- par_l(Xt Y).
an^CX, Y) :- ancb f _1 f X, Z ;, par_l (ZtY).
и для пометки (f,b) anc:
ancb(Xt Y) :- par_l(Xt Y).
ancb(Xt Y) :- anc£b_l(XtZ)t par_l(Zt Y).
Отметим, что в этом примере мы указали номера вхождений предикатов в теле правил, хотя могли бы их опустить, так как имеется единственное вхождение каждого предиката.
Теперь мы преобразовали Р в новый набор РА поме-
ценных правил, среди которых не все необходимы для вычисления цели. Мы исключим все правила, которые недостижимы для цели из РА. Будем говорить, что помеченное правило достижимо для цели тогда и только тогда, когда оно представляет собой помеченное правило и соответствует целевому правилу, в котором все аргументы предиката левой части правила свободны, или предикат его головы появляется с той же пометкой, что и в правой части достижимого правила.
Пример 10.3. Для примеров 10. 1 и 10.2 достижимыми помеченными правилами будут
q£ (X ; : - ancb£ (at X).
ancbf fX, Y) : - par(Xt Y),
апсЪГ (Xt Y) :- апс"£ (X, Y)t par(Zt Y).
Отметим, что два последних правила в примере 10. 2 недостижимы для цели. Действительно, их помеченные LHS-предикаты не появляются в правой части какого-либо другого достижимого правила.
Понятие достижимости несущественно для самого алгоритма, но помогает выделить правила, действительно участвующие в вычислении цели, сокращая объем вычислений для "предшественников" целевого правила. Приведем теперь полный алгоритм метода магических множеств.
АЛГОРИТМ МАГИЧЕСКИХ МНОЖЕСТВ
INPUT:а
Множество помеченных правил РА, включая целевое правило, все достижимые для цели правила. OUTPUT:
Новый набор правил pmagic, эквивалент ный РА по отношению к цели.
METHOD:
pmagic : = рА ;
ДЛЯ каждого помеченного правила г и ДЛЯ каждого вхождения интенсионального предиката р в правой части г ВЫПОЛНИТЬ НАЧАЛО Сгенерировать одно магическое правило следующим образом:
удалить другие вхождения предикатов IDB в правой части;
заменить в данном вхождении имя р на magiс_г_ра_1, где а - пометка р в этой реализации и 1 - номер вхождения;
удалить все неотличительные переменные в данном вхождении р, получив, возможно, предикат с меньшим числом аргументов ;
удалить все неотличительные предикаты EDB в г ;
заменить в голове предиката имя р‘ на magic__р'' , где а' - пометка р‘ ;
удалить все неотличительные переменные в р‘ ;
Поменять местами магический предикат головы и магический предикат тела.
Добавить это правило к Pmagic.
КОНЕЦ
ДЛЯ каждого помеченного правила г в исходной программе ВЫПОЛНИТЬ НАЧАЛО
Сгенерировать модифицированное правило следующим образом: ДЛЯ каждого вхождения интенсионального предиката р в правой части г
ВЫПОЛНИТЬ НАЧАЛО
Добавить к правой части предикат magic_r_pa_i(X), где а - пометка р в этом вхождении, 1 - номер вхождения, X - список различимых аргументов в этом вхождении.
ЕСЛИ р не является предикатом головы, ТО магический предикат должен быть вставлен прямо перед этим вхождением; ИНАЧЕ магический предикат следует включить в начало тела правила перед всеми другими литералами.
КОНЕЦ
Заменить в pmagic 「 его модифицированной версией;
КОНЕЦ
ДЛЯ каждого предиката IDB р и ДЛЯ каждой пометки ВЫПОЛНИТЬ НАЧАЛО
Сгенерировать дополнительное правило следующим образом: ДЛЯ каждого помеченного правила г и ДЛЯ каждого вхождения р в правой части г
ВЫПОЛНИТЬ
НАЧАЛО
Добавить правило
magic_р '(X) : - magic_r_pa_i(X).
где i - номер вхождения р, а - его пометк и X - список его различимых аргументов.
КОНЕЦ
Добавить это правило к pmag'c END
ENDMETHOD
Доказательство эквивалентности нового набора правил pmagic и Р по отношению к цели дано в работе [Banc86b]. Здесь нам хотелось бы привести некоторые примеры, показывающие эффективность применения этого метода в большинстве случаев. Кроме того, несмотря на сложность алгоритма, примеры показывают, что простые исходные программы порождают простые наборы магических правил.
Кортежи отношения magic, определенного с помощью магических правил, образуют магическое множество. Отметим, что в общем случае этот метод порождает больше кортежей, чем необходимо для удовлетворения цели. Для получения ответа в конечном итоге требуется выполнить селекцию над результирующим отношением.
Пример 10.4. Дадим полный пример применения этого метода для следующей программы:
г :anc(Xt У) : - par(Xt У).
г :anc(Xt У) : - anc(X, Z)t par(Zt У).
. Применим метод сначала к цели ? - anc(Xt а). Добавим целевое правило к Р.
rQ:q(X) : - anc(Xt а;.
q:anc(XtY):- par(XtY).
樓:anc(XtY;: - anc(XtZ;,par(Zt У;.
Достижимой помеченной системой РА будет
R。:q‘(X) :- апс£ b(Xt а )•
%:ancfb(Xt Y) :- par(Xt Y),
R?:апс£Ь (X, Y) :- апс£Ъ (XtZ)tpar(Zt Y),
Сгенерируем модифицированную систему:
Первый цикл ВЫПОЛНИТЬ: порождает магическое правило для каждого вхождения апс правой части для каждого помеченного достижимого правила:
из Rq:magic_RQanc£b(a),
из R2 :magi c^zanc£b(Z) : - magi c_ancf b (Z)t par(Zt Y),
Второй цикл ВЫПОЛНИТЬ: порождает модифицированное правило для каждого помеченного правила:
из R。: q‘(X) : - magic_RQanc£b (a 9, апсгъ (Xt a ), из К?:an cfbf X, Y) : -magic_R2anc£ b (Z ), ancfb (X, Z),
par(Z, Y).
R】 не генерирует модифицированные правила потому, что в его правой части нет вхождений предикатов IDB,
Третий цикл ВЫПОЛНИТЬ: порождает дополняющее правило для каждого предиката IDB и каждой пометки:
из Rq: magic_ancfbfX) : - magic_RQancfbf X), из (: magic_anc£b(Z) : - magic_R2ancfbfZ),
Наконец, поскольку в данном случае предикат magic_ancfb(X) уникален, переименовав его в magic(X), систему можно редуцировать в эквивалентную:
magic (а ).
magi с (Z) : - magic(Y ), par(Zt У ).
q£ (X) : - ancb(Xt а ).
ancfbfX, Y) :- par(Xt Y).
ancfbfX, У) : - magic(Z), ancfbfX, ZJ, par(Zt У).
В данном случае магическое множество определяется первыми двумя правилами. Результирующая система эквивалентна исходной по отношению к цели ?-
anc(Xt а). Действительно, если мы применим к этой программе некоторый алгоритм вычисления, например непосредственный или полунепосредственный, и затем операции выбора о^一а к результату, получим то же множество ответов, что и применение этого алгоритма к исходной программе (с последующим отбором результата ).
Рассмотрим теперь цель ?- anc(at Y).
Неформально мы уже обсуждали ее в начале разд. 9.1. В качестве упражнения читатель может проверить, что в результате преобразования для этой цели мы получим
magi c_RQ_ancb£ (a ).
magi cJR2_ancb£(X ) : - magi c_ancbf fX ), q'(X) : - magic_RQ_ancbf (a), ancbffa, X). ancbffX, Y; : - par(Xt Y), ancbf (X, Y):-
magijR^ancbf(a), ancbffX, Z), parfZ, У).
magic_ancbf (a ) : - magic^^an^(a ).
magi c_ancb£(X ) : - magi c^^an^(X ),
Поскольку в данном случае предикат magic_ancfbfX) также уникален, переименовав его в magic(X}, систему можно редуцировать в эквивалентную:
magic (а ).
qf (X) : - апсЪ£ (at X),
ancbffX, Y) : - par(Xt Y),
ancbf fX, У ) : - magic(X ), ancbf fX, Z 9, par(Zt У J.
Отметим, что в примере 10.4а магическое правило выполняет роль ограничения для аргумента предиката EDB par, а в 10. 4б оно служит ограничением для значений аргумента предиката апс, К сожалению, в примере 10. 4а оптимизация отсутствует, поскольку в преобраз ованной программе второй аргумент результата вычисляют два магических правила так, что использование трех правил удваивает объем вычислений. Существуют более сложные модификации метода магических множеств [Веег87Ь, Rama88bJ, устраняющие этот недостаток.
Если в примере 10.4а метод магических множеств неэффективен, то в 10.4б программу удается оптимизировать. Результирующая система в действительности эквивалентна следующей:
qf(X) :- ancbffa, X).
ancbffX, Y) :- par(Xt Y),
апс"£(a, Y) : - апс"£(a, Z), par(Zt Y).
Исключив пометки, которые сейчас не играют никакой роли, увидим, что два правила для предиката апс представляют собой "идеальнаю" программу из разд. 9. 1.
Предикат magic, определенный первыми двумя правилами примера 10.4а, часто называют конусом а, имея в виду, что он вычисляет предков, расширяясь, как
конус. Это понятие поясняется на рис 10. 1 : родственники а образуют восходящую структуру, подобную конусу. Такой же конус получается при применении метода магических множеств к программе вычисления родственников одного поколения. Если для программы вычисления предка метод магических множеств ничего не дает, то программу вычисления родственников одного поколения, как мы увидим, удается оптимизировать (пример 10.5). В примере 10. 5а выполняется преобразование стандартной программы вычисления родственников одного поколения, о которой говорилось в гл.9. В примере 10.5б мы внимательно исследуем другую, синтаксически отличную, но семантически эквивалентную версию той же программы. Мы детально опишем применение алгоритма к данной программе, поскольку это является примером "неинтуитивного" результата процесса переписывания, когда программу действительно удается оптимизировать. Ни один программист, даже профессионал, вероятно, не сможет так оптимизировать эту программу. Данный пример, таким образом, демонстрирует необходимость автоматических методов переписывания.
Рис 10.1. Конус а.
Пример 10.5а. Рассмотрим программу
sgc(X, Y) :- eq(X, Y), sgc(Xt Y) : - parfX, XI ;, sgc(Xlt Y1 ;, par(Yt Y1).
которая вычисляет родственников одного поколения. Рассмотрим цель
? - sgc(at Y).
В результате преобразований получим magic (а ). magic(Xl ) : - magic(X9, par(Xt XI ). sgc(X, Y) : - eq(X, Y). sgc(X, У):- magic(XI ), par(X, XI ), sgc(Xlt Y1), par(Yt Yl).
Теперь можно видеть результат оптимизации: в полученной программе присутствуют только предки а, так что в вычислении участвуют только те кортежи, которые относятся к генеалогическому дереву а.
Дана программа
sgc(Xt Y) :- eqfX, Y).
sgc(X, У) : - par(X, XI), sgc(Ylt XI ;, par(Yt Y1).
которая также вычисляет кузин (кузенов) одного поколения. Выберем цель
? - sgc(a, Y).
Опишем теперь применение метода к этой программе полностью. Ниже приведена достижимая помеченная система:
R 0
R 1
R 2
R 3
R 4
q£(Y) :- sgcb£(at Y)
sgcbf fa, Y) : - par(Xt XI ;, sgcfb(Ylt XI )t par(Yt Y1 ; sgc£b(at Y) :- par(Xt XI ;, sgcbf fa, Y)t par(Yt Y1).
sgcbf fa, Y) : - eq(Xt Y).
sgc£b (at Y) : - eq(Xt Y).
Первый
цикл ВЫПОЛНИТЬ:
ИЗ R 0
magi c_RQ_sgcbf (a).
ИЗ R 1
magi c_Ri_sgcfb(XI ) :- par(X, XI ), magi c_sgcbf fX ),
ИЗ R 2
magic_R^gc"£(Y1) : - par(Yt Y1), magic_sgcb f (Y).
Второй
цикл ВЫПОЛНИТЬ:
ИЗ R 1
sglf (X, У) : - par(Xt XI ), magic_R 1 _sgcfb(XI ), sgcb(Ylt XI ), par(Yt Y1 )•
ИЗ R 2
sgc'b^x, У) : - par(Xt XI ), magic_R2_sgcb£(XI ),
sgcb£ (Ylt XI ), par (У, Y1 )•
Третий цикл ВЫПОЛНИТЬ:
из Rq magic_sgcbf fX) : - magic_/?o_sgcbf (X), из J magic_sgc£b(X) : - magi c^^_sgc£b(X).
из R2 magic_sgc (X) : - magic_R^_sgc (X).
Результирующая переписанная программа имеет вид
qf(Y) sgc^ (atY)
magic_Ro_sgc (a).
magic_R^gcfb(XI ) : - par(X, XI ), magic_sgcb£(X).
magic_R2_sgcbf (Y1) : - par(Yt Y1), magic_sgcbr (Y).
magic_sgcb£(X) : - magic_/?o_sgcbf (X).
magi c_sgc£b(X ) : - magi c_R^_sgcfb(X ).
magic_sgc (X) : - magi jR^sgc (X).
sg^ (Xt У) : - par(X, XI ), magi c_R 1 _sgcfb(XI ),
sgcb(Yl, XI ), par(Yt Y1).
sgc'b(x, Y) : - par(X, XI ), magiс_П2^дс"£(Y1),
sg^CYl, XI ), par(Yt Y1 )•
sglS,Y) :- eq(X, Y).
sgc'b(x, Y) :- eq(X, Y).
После простого преобраз ования и переименований эту программу можно записать в виде
qf(У) :- sgcbf(at Y) .bf /.
magic 〔&).
magi卢(石1) : - par(X, XI ), magicbf(X).
magicb£(Y1) : - par(Yt Y1 9, magicbf (Y),
sgcAx, Y) :- par(X, XI ), magic£b(Xl),
sgcb(Ylt X2), par(Yt Yl),
sgc'b(x, У) : - par(X, XI ), тад!^(Y1), sg^CYl, X2), par(Yt Y1).
sgcbf (Xt Y) :- eq(X, Y).
sgc£b (Xt Y) : - eq(X, У).
.1. 2. Метод подсчета
Метод подсчета - метод переписывания, основанный на информации о связываниях переменной цели. Он включает вычисление магических множеств, но каждый элемент магического множества дополняется информацией о "расстоянии" от целевой константы.
Рассмотрим снова программу вычисления родственников одного поколения из примера 10. 5а. В этом случае метод магических множеств сокращает объем вычислений для предков а ; в графе на рис. 10. 1 эти предки изображены как вершины, которые соединяются с а путями, направленными вверх и образованными дугами, принадлежащими отношению PAR.
Метод подсчета поддерживает информацию о том, является ли элемент родителем а (расстояние 1), прародителем а (расстояние 2), прапрародителем а (расстояние 3) и т. д. В переписанной программе вычисляются эти расстояния. Здесь вычисления можно вести в терминах детей родителей а, внуков прародителей а, правнуков прапрародителей а, и т. д. Эта идея проиллюстрирована на рис. 10. 2, где в граф
рис. 10. 1 введены уровни.
Рис 10.2. Конус а с уровнями.Рис 10.2. Конус а с уровнями.
Рис 10.2. Конус а с уровнями.
Рис 10.2. Конус а с уровнями.
Вместо описания полного алгоритма преобразования набора правил мы поясним переход от набора правил, полученного по алгоритму магических множеств, к набору правил, полученному по методу подсчета, используя Результат из примера 10.5. Магические правила преобразуются в правила подсчета с помощью предиката подсчета.
Мы начнем с магической программы:
magic ( а ).
magic(Xl ) : - magic(X j, par(Xt XI ).
sgc(X, Y) : - eq(X, Y), sgc,X, Y):-
magic(XI ), par(Xt XI ), sgc(Xlt Y1), par(Yt Yl).
для цели
?- sgc(at Y).
Сначала заменим имя магического предиката на counting. Затем добавим к каждому магическому предикату новый аргумент, представляющий собой переменную, выражающую расстояние каждого элемента магического множества от а. В первом правиле расстояние должно быть 0, поскольку этот элемент сам представляет а:
counting(а, О).
Пусть во втором правиле 工 будет расстоянием аргумента предиката головы XI от а. Тогда, поскольку нам известен parfX, XI), расстояние между XI и а будет на единицу больше, чем между X и а.
Следовательно, если J - расстояние между X и а, которое используется в теле предиката подсчета, можно положить 工=J + 1. Отметим, что в чистом Дейталоге отсутствует возможность выражения арифметических операций. Поступая несколько волъ^э, для арифметических операторов и для операторов сравнения мы будем использовать встроенные предикаты (гл. 11). В разд. 10.1.4 мы опишем другой метод переписывания, на выходе которого используются не чисто дейталоговские конструкции. Здесь мы будем использовать инфиксную форму (т.е. 1=3+1 или X = У). Второе правило будет представлено в виде
counting (XI, I) : - counting(Xt J J, par(X, X2), I = J + 1
В результате два правила подсчета каждому элементу магического множества (множества подсчета) поставили в соответствие некоторый уровень. Заменим теперь предикат sgc на sgc', также добавив ему новый аргумент, выражающий расстояние между а и его двумя исходными аргументами. Третье правило имеет вид
sgc* (X, Y, I) : - X = У, integer(I).
Отметим, что мы добавили предикат integer, чтобы
получить правило Дейталога: иначе 工 появилась бы в голове правила, но не в теле.
Рассмотрим теперь четвертое правило: оно должно быть преобразовано для вычисления шагов, ведущих "вниз". Пусть 工-расстояние между а и аргументами (X, У) предиката головы. Обозначим J расстояние между а и парой (XltYl) в теле:
sgc,(X, Y,工):-counting(Xt I;, par((Xt XI ;, sgc" (XIt YltJ)t par(Yt Y1 ;, I = J - 1.
Предикат подсчета заставляет X принимать значения только тех элементов множества подсчета, значения которых находятся на расстоянии I = J - 1 от а. Поэтому на каждом шаге в вычислениях участвуют только такие элементы.
Теперь цель дожна быть преобразована в такой вид:
? - sgc,( а, У, О).
и результирующая программа будет
counting(а, О).
counting(Xlt I) :- counting(XtJ), par(X, XI), I = J + 1.
sgc,(X, У,工):-X = У, integer (I).
sgc* (XtYt I) : - counting(Xt 19, par(X, XI ), sgc' (XI, YltJ)t par(Yt Yl)t I = J - 1.
Рассмотрим подробнее свойства результирующей программы. Предикат подсчета определяет число поколений от а вверх, отмечая уровень каждого элемента магического множества. Предикат sgc' проходит в противоположном направлении, снова возвращаясь вниз. В вычислении цели участвуют только пары уровня О, т. е. того же уровня, что и а. На каждом шаге из всех кортежей магического множества программа использует только те кортежи, которые находятся на соответствующем расстоянии от а.
Посмотрим снова на рис. 10.2, где показан конус а. На нем изображено то же самое, что и на рис. 10. 1, но показаны уровни каждого поколения. На каждом шаге в вычислениях участвуют только те элементы, которые заключены между соседними горизоктальными линиями. Это означает, что на разных шагах итерации в вычисления вовлечены разные множества подсчета, при этом каждое множество представляет собой только очень небольшую часть всего множества подсчета. Применение метода подсчета позволяет более точно осуществлять выборку в процессе вычислений, но если путь между двумя эле-
ментами базы данных не уникален, возникают проблемы. Рассмотрим представление бинарного родового отношения R в виде графа. Построим ориентированный граф 「区 » vNr, Er>, определяемый следующим образом: Nr - множество констант, представленных в R; <п1, п2> € 春 тогда и только тогда, когда кортеж <ni, п2> принадлежит R
В общем случае множество путей, связывающих две вершины л】 и п2, содержит более одного элемента; следовательно, длина пути между двумя вершинами может быть разной. Таким образ ом, понятие расстояния недостаточно хорошо определено.
Эта проблема, которая в общем случае снижает эффективность переписанной программы, для случая циклических баз данных влияет на корректность метода подсчета. Циклической называется база данных, граф Fr которой является циклическим. В этом случае каждому элементу ставится в соответствие бесконечное множество расстояний от связанных с ним элементов, так как множество возможных путей бесконечно. В подобных случаях переписанная программа должна учитывать одни и те же дуги по нескольку раз.
Таким образом, метод подсчета является логически полным и зав ершимым в предположении, что база данных, над которой проводятся вычисления, ациклична. Дополнительно предполагается, что программа линейна и каждый предикат содержит не более одного рекурсивного правила.
1. 3, Метод статической фильтрации
В методе статической фильтрации используется стратегия переписывания, которая подразумевает возможность применения последовательных восходящих вычислений. На его входе задается цель над программой, содержащей только один предикат IDB. В данном методе процесс восходящих вычислений рассматривается как поток кортежей в графе программы, который называют графом отношений-аксиом.
Как и в методе магических множеств, исходная программа Дейталога предварительно модифицируется, после чего строится соответствующий граф, и только после этого можно применять преобразования, которые представляют собой последовательность модификаций, выполняемых над самим графом.
Сначала мы добавим к программе целевое правило, как
мы это делали в методе магических множеств. Введем для правил программы АС-нотацию: каждое правило
г: р((Х]%):-
4](8]3^9q 式 в $в h)•
где р и q^ не обязательно различны, переписывается в
ЛС-нотации следующим образом:
1 :р(3£):-
1111
Верхние индексы в аргументах необходимы для того, чтобы различать одни и те же аргументы в разных вхождениях одного и того же предиката. Так же как и в методе магических множеств, верхние индексы добавляются только тогда, когда в правой части правила имеется более одного вхождения некоторого предиката. Отметим, что в данном случае номер вхождения добавляется только к аргументам, но не к предикатам. Итак, мы имеем следующее:
Все аргументы предикатов переименованы так, что все они стали различными.
Введено условие Cond^ относящееся к правилу г и выражающее связи между аргументами в правиле. В частности, условие восстанавливает исходные равенства аргументов, которые теперь различны. Оно имеет вид
(V е V )л...人” ер ) 1 11 1 j 17
где 8上 - операторы сравнения (s, v, >,三,=,н). Отметим, что после преобразования стандартных правил Дейталога Condr содержит только равенства.
В графе отношений-аксиом имеются вершины двух типов: вершины отношений, соответствующие предикатам Скаждая такая вершина помечена предикатным символом), и вершины аксиом, соответствующие правилам и помеченные именами правил. Происхождение названия п вершина аксиом" объясняется тем, что правила рассматриваются как аксиомы некоторой логической теории. Для каждого такого правила г в графе существует дуга, направленная от вершины г к вершине р и от каждой вершины q^ к г. Вычисление цели реализуется на графе отношений-аксиом программы, дополненной целевым правилом.
Пример 10.6. Дана программа
anc(Xt У; :- par(Xt У;.
anc(Xt У; :- par(Xt Z;, anc(Zt У;.
с целью
? - ancfX, а).
Сначала добавим целевое правило к программе:
г。: q(X) : - anc(Xt а ;.
j:anc(Xt Y) :- par(Xt Y).
r2:anc(X, У) : - parfX, Z;,ancfZ, Y;.
В ЛС-нотации это будет выглядеть так:
%:qQ) :- anc(Alt Л2 ;,QI = Л1, 22= а.
г】:anc(Alt А2) :- parfPl, Р2^ Al = Pl,22 = P2.
r : апсСЛ!1, Л21 ; :- par(PltP2)t anc(Al2t A22 )t 1I22
Л1 = Pl, 22 = Л2 , P2 = Л2 .
Отметим, что аргументы предикатов пронумерованы только в случаях, когда в правиле имеется более одного вхождения одного предиката, а именно только в правиле г?, гДе имеются два вхождения предиката апс. На рис. 10. 3 показан граф отношений-аксиом программы ANCESTOR.
Восходящие вычисления цели можно рассматривать как поток кортежей, проходящий в графе в направлении от вершин отношений, соответствующих предикатам EDB, к вершине отношения, соответствующей цели. Вычисления выполняются как бы внутри вершин аксиом. Выходящие из вершин дуги называются "выходными портами" вершин, а входящие дуги - мвходными портами". Кортежи входят в вершины аксиом через их входные порты и участвуют в вычислениях, в результате которых образуются новые кортежи. Последние передаются через выходные порты в другие вершины отношений. Поток кортежей в графе прекращается, когда ни один новый кортеж не может быть сгенерирован ни одной вершиной. Это является условием завершения процесса вычисления.
Описанный выше процесс без каких-либо других условий называется также мупрощенным вычислением" fразновидностью непосредственных вычислений).
Рис.10.3. Граф отношений-аксиом для программы anc с целью ? - anc(X, а).
Отметим, что одним из условий, заданных в целевой вершине, являются связывания дели, выражающие ограничения, которые должны быть удовдетворены в кортежах результата. Рассмотрим все накопленные к концу вычислений в целевой вершине кортежи. Многие из них не будут удовлетворять условиям связывания и могут быть исключены из этой вершины. Идея метода статической фильтрации состоит в том, чтобы исключить из процесса вычисления ненужные кортежи как можно раньше на предыдущих стадиях их продвижения к целевой вершине.
Это достигается введением фильтров на выходных портах каждой из вершин отношений, являющихся также входными портами для вершин аксиом, следующих за ними в определенном дугами графа порядке. Эти фильтры представляют собой условия на аргументах предикатов и должны фактически фильтровать кортежи, не относящиеся к вычислениям. Фильтры являются производными условий, заданных для каждой вершины аксиомы, и условий, определяемых связываниями цели. Для того чтобы сделать вычисления эффективными, следует ввести как можно более сильные условия. Таким образом, алгоритм оптимизации должен найти для каждого выходного порта каждой вершины наилучший фильтр, т. е. условие, вводящее наиболее сильные ограничения.
Распространение фильтров на все выходные порты
вершин отношений начинается в целевой вершине. Исходными фильтрами служат ограничения на связывания цели, которые задаются на входном порте целевой вершины аксиомы, т. е. на выходном порте вершины отношения, соответствующей предикату запроса. В последней программе примера 10. 6 исходным фильтром, следовательно, будет Л2 = а (фильтр взят из тела правила г。).
Распространение фильтров на весь граф достигается проталкиванием условий в направлении, противоположном по отношению к ориентации дуг графа, насколько это возможно. Если рекурсии нет, граф будет ациклическим и распространение фильтров соответствует помещению условий выборки внутрь обычных алгебраических выражений.
Рассмотрим правило в ЛС-нотации (введенной в (2)). На рис. 10. 4 показан подграф, представляющий это правило.
проталкиванияпроталкиванияРис.10.4. ОперацияРис.10.4. Операцияфильтровфильтровототвершины р к вершинамвершины р к вершинам
проталкивания
проталкивания
Рис.10.4. Операция
Рис.10.4. Операция
фильтров
фильтров
от
от
вершины р к вершинам
вершины р к вершинам
Предположим, что вершина отношения р имеет к выходных портов с фильтрами F^F^ (рис. 10. 4). Вершина аксиомы г имеет п входных портов, ведущих от вершин отношений q^q^ Операция проталкивания состоит в поиске для входных портов вершины г фильтров 尸 尸 , получаемых с помощью вывода на основе г,1г,п
информации о фильтрах F^尸仁
Это соответствует выводу новых ограничивающих
АСАСусловии для аргументов вершин q】g^ из г на
АС
АС
основе известной информации об ограничивающих условиях на аргументах р. Это можно лучше понять, если проследить действия, выпслнламые в примере 10.7.
В случае рекурсивных правил проблема проталкивания фильтров усложняется. Из рис. 10. 5 видно, что для задания фильтров на входных портах рекурсивного правила г необходимо знать фильтры на выходных портах рекурсивного предиката, определяемого этим правилом, а эта информация в свою очередь получается из входных портов правила г! Данная проблема решается постепенным достраиванием фильтров на портах вплоть до момента их стабилизации. Перед началом рассмотрения алгоритма оптимиз лдии определим операцию проталкивания более формально. Выполнение этой операции можно проследить на рис. 10. 4.
INPUT:
Граф отношений-аксиом G; заданная вершина отношения р; конъюнкция фильтров 尸 » 尸]人.••人尸卜 на выходных портах р (т.е. конъюнкция условий Cond, связанных с правилами, содержащими р в правой части); вершина аксиомы для правила г, определяющего предикат р; "старые" (временные, уже существующие) фильтры 尸「у fl»1. . . п) для входных портов вершины г, выходящих из вершин отношений q q.
OUTPUT:
Новый граф G', в частности, новые фильтры 尸;^1-1. . . п) для входных портов вершины г.
ОПЕРАЦИЯ ПРОТАЛКИВАНИЯ:
Для каждого 1 = 1 ... п выполнить:
заменить фильтр 尸「 j на
尸;[=尸r iV (Condr 人尸).
Заменить 尸‘ на конъюнкцию всех транзитивных
следствий 尸', где удалены все конъюнктивные термы,
Г , i содержащие только такие аргументы, которые не принадлежат
КОНЕЦ ПРОТАЛКИВАНИЯ
В приведенном ниже алгоритме фильтры достраиваются постепенно в процессе итерации операции проталкивания, начиная с условия "false", а новые дизъюнктивные термы добавляются вплоть до достижения их полноты.
Рис. 10.5. Проталкивание фильтров в рекурсивном случае.Рис. 10.5. Проталкивание фильтров в рекурсивном случае.
Рис. 10.5. Проталкивание фильтров в рекурсивном случае.
Рис. 10.5. Проталкивание фильтров в рекурсивном случае.
Пример 10.7. Рассмотрим программу из примера 10.6 и правило г】, представленное на рис 10. 3. Мы хотим передать фильтры выходных портов вершины апс через вершину аксиомы г】 фильтрам выходных портов вершины par, которая входит в правую часть правила г】. Предположим, что предыдущее значение временных фильтров на выходных портах вершинь* par на данном этапе процесса вычислений было false.
Предположим также, что в данный момент фильтр 尸 (т. е. текущее условие на апс) имеет вид Л2 = а. Тогда новым фильтром для выходного порта par будет
尸;=尸「V (Cond^ 八"Z2 = a") ri riri
(Cond ^"Al = Pl "A2 = а"). Следовательно, ri
尸;="P2 = a", ri
что следует из условия "А2 = а" в вершине апс.
После применения каждой операции проталкивания новый граф G' отличается от G только значениями фильтров 尸.Оптимизированный граф получается, когда Г, i в результате итеративных преобразований все фильтры стабилизируются. Для поддержания информации о путях распространения фильтров в процессе итерации одним правилам присваиваются метки, другие правила освобождаются от меток. Конечность алгоритма определяется
конечостью числа констант, переменных и вершин графа.
Рассмотрим полный алгоритм оптимизации. Мы снова рекомендуем для понимания алгоритма использовать пример 10.8.
АЛГОРИТМ СТАТИЧЕСКОЙ ФИЛЬТРАЦИИ
INPUT
Граф отношений-аксиом G.
OUTPUT.
Оптимизированный граф G .
METHOD
Инициализировать все фильтры графа так, чтобы они были ложными;
ДЛЯ каждой вершины аксиомы г, определяющей цель q, ВЫПОЛНИТЬ
НАЧАЛО
Выполнить операцию ПРОТАЛКИВАНИЯ фильтра true на входные порты г;
ДЛЯ для каждой вершины аксиомы п, которая имеет выходной порт, ведущий к г, и фильтры которой изменены этой операцией ПРОТАЛКИВАНИЯ, ВЫПОЛНИТЬ
ЕСЛИ п - интенсиональное отношение, ТО пометить п; КОНЕЦ;
ПОКА существуют помеченные вершины отношений п ВЫПОЛНИТЬ
НАЧАЛО
Снять метку с п;
ДЛЯ каждой вершины аксиомы s, определяющей п ВЫПОЛНИТЬ
НАЧАЛО
Выполнить операцию ПРОТАЛКИВАНИЯ выходных фильтров п во входные порты s;
ДЛЯ каждой вершины отношения р, которая имеет выходной порт, ведущий к s, и фильтры которой изменены этой операцией ПРОТАЛКИВАНИЯ, ВЫПОЛНИТЬ
ЕСЛИ р - интенсиональное отношение ТО пометить р;
КОНЕЦ;
КОНЕЦ;
ENDMETHOD
Нетрудно показать, что процедура оптимизации завершается и что она полна.
Пример 10.8. Рассмотрим программу ПРЕДОК и цель из примера 10.6. В том примере мы выполняли начальные преобразования исходной программы. Будем следовать алгоритму оптимизации, показанному на графе рис. 10. 3.
Сначала VI 尸'="false". г iПротолкнем фильтр "true"Сначала VI 尸'="false". г iПротолкнем фильтр "true"Начнем с вершины аксиомычерез входной порт q:Начнем с вершины аксиомычерез входной порт q:
Сначала VI 尸'="false". г i
Протолкнем фильтр "true"
Сначала VI 尸'="false". г i
Протолкнем фильтр "true"
Начнем с вершины аксиомы
через входной порт q:
Начнем с вершины аксиомы
через входной порт q:
尸‘=尸 v (Cond 人"true") о Cond о "Z2 - a" г г vгг
000О
Затем пометим вершину апс. Условие завершения не удовлетворяется, поскольку имеются помеченные вершины, и мы продолжаем. Снимем метку с апс. Рассмотрим две вершины аксиомы г】и г?, определяющие апс. Сначала протолкнем 尸‘ в F :
го Г1
尸‘=尸 у (Cond Л,,Z2 = а") о "Р2=а".
Г1 Г1 Г1
Теперь протолкнем фильтры через правило г?:
a".a".尸;(par)田:par) v(condr 八"Z2 = a" ) ^ Condr . 尸;"nc)田Jnc) v (Cond^ 八 〃Z2 = a”)6 〃Z2 —
a".
a".
Г 2Г 2Г2
Поскольку фильтр правила г? изменился, пометим вершину апс. Следовательно, процесс не завершен. Снимем метку с апс и перейдем к следующей итерации. Рассмотрим сначала 尸": ri
尸;=尸;V (Cond^ Л 〃42丨=а〃)❷ 〃Р2=а"(=尸;). ri ririг 1
Здесь операция проталкивания не повлияла на фильтр. Тогда рассмотрим F":
尸;(раг)=尸;(рагр V(Condr 八"42】=а")
2 о СОП^ (=尸;(Ра2 ). Г2Г 2
Этот фильтр также не изменился после операции проталкивания.
尸;(апс)田;(апс) ^(Cond^ л “42】=а")今"42】=а".
2Г 22
Ни один фильтр не изменился, мы не пометили ни одного отношения, следовательно, алгоритм завершен.
В результате получим правила:
г。:q(Q2) :- anc(Alt А2)t QI = Z2, A2 = a.
J:апс(Л1, A2 ; : - par(P2,P2), Al = Pl, Л2 = P2,
P2 = a.
г : ancCAl11 А2^ ; par(Plt P2)t anc(Al2t A22 )t 2
Al1 = Pl, Л21 = Л22, P2 = 412,42】=a.
Переименовав переменные и заново введя условия на аргументах предикатов, получим
ro : q(X) : - ancfX, а;.
rjапс(Х,а; ;- раг(Х, а;.
q: апс(Х, а ; ; - par(X,Z^ anc(Z, а ;.
Очевидно, что результат оптимизации программы из примера 10. 8 более эффективен» чем исходная программа. Отметим, что во всех вхождениях предиката апс второй аргумент связан. В конце главы мы обсудим сходные моменты данного и других методов оптимизации.
4. Полунепосредственные вычисления
переписыванием
В гл. 9 говорилось о том, что идея полунепосред- ственных вычислений состоит в такой модификации традиционных итеративных методов вычислений, когда на каждом шаге итерации вырабатываются только действительно новые кортежи. К сожалению, этот подход достаточно трудно применить к нелинейным алгебраическим выражениям, поскольку дифференциал может иметь очень сложную форму. Сложность вычисления дифференциала может существенно уменьшить эффект, получаемый от сокращения размеров отношений, участвующих в вычислениях.
Ниже мы рассмотрим метод переписывания, с помощью которого дифференциалы вычисляются другим способом, позволяющим устранить эти трудности. Недостатком данного метода является то, что в нем используются ^едейталоговские конструкции. Действительно, переписанная программа содержит в телах правил отрицательные литералы, не являющиеся элементами языка. В гл. 11 будет введено понятие локально стратифицированной программы. Оказывается, что в результате применения п олунепосредственног о метода переписывания получается локально стратифицированная программа, в которой проблема, связанная с отрицаниями в контексте Дейталога, Решена.
Вспомним, как мы определяли в гл. 9 в логических терминах полунепосредственные вычисления. Дифференциал
а предиката р по отношению к правилу р :- Е(р) на к-м шаге итерации мы выразим в логических терминах следующим образом:
D = P - P = E(p )-p .
Выражение этого дифференциала только в терминах р“т) будет громоздким для нелинейных правил. По этому методу правила переписываются так, чтобы дифференциал записывался непосредственно в терминах р“).
Рассмотрим нелинейную программу вычисления предков из гл.8:
ancfX, У) : - anc(X, Z), anc(Zt У). anc(Xt Y) :- раг(Х, У).
Переписывание программы дает
anc(It XtY) : - anc(J, X, Z), anc(J^ Z, Y)t J产 О, J 之 % I = J + 1, nanc(Wt X, Y).
anc(It X, Y) :- anc(J],X, Z), anc(Jt Z, Y)t J产 0, J 之 % Z = J + 2, ^anc(Wt X, Y).
anc(Ot XtY) :- parfX, Y).
Отметим, что в записи неравенств и сумм используются встроенные предикаты, которые уже использовались в методе подсчета. Здесь также используется отрицание.
Вычислим первое правило. Сначала мы получим предков второго поколения при I = 2t J = lt Л = 1, и вхождение anc(Wt Xt Y) с отрицанием исключает из результата предков первого поколения. С помощью второго правила можем получить предков третьего поколения. Здесь I=3t J = 2, Л = 1. Снова работает первое правило для четвертого поколения и т.д. , пока некоторое правило не получит пустого множества. Отметим, что в результате применения каждого правила образуются только новые кортежи, поскольку полученные на предыдущем шаге кортежи исключаются отрицательным литералом. Таким образом, нам удалось выразить дифференциал предиката апс.
В общем случае, если имеется к вхождений рекурсивного предиката в правиле, переписывание заключается в копировании этого правила 正 раз с уменьшением каждый раз на единицу верхней границы неравенства, которое появляется в теле нового правила. Для получения решения исходной программы необходимо применить метод непосредственных вычислений к
переписанной программе, имея в виду новую ситуацию, которая возникает в связи с присутствием отрицательных литералов в правой части правила (гл. 11J. Результирующим значением предиката апс будет объединение всех непустых множеств пар (X, У), полученных из всевозможных значений anc(Jt X, У), которые найдены в результате применения непосредственных вычислений.
Переписывание алгебраических систем
В этом разделе мы переключим наше внимание на алгебраический формализм. Мы введем структурный подход к переписыванию систем уравнений реляционной алгебры. Такая оптимизация выполняется за несколько шагов: каждый шаг реализуется собственным алгоритмом.
Программа Дейталога, определяющая более одного интенсионального отношения, порождает систему уравнений реляционной алгебры. Каждое уравнение определяет отношение-переменную, поэтому впредь мы будем иметь дело с системами п уравнений и п переменных следующего стандартного вида:
Z:々=х(А…・Xn,q…・J)=
IDB) и q имеет видIDB) и q имеет видреляционные константы.реляционные константы.Каждый термКаждый термгде Xj - реляционные переменные fпредикаты
IDB) и q имеет вид
IDB) и q имеет вид
реляционные константы.
реляционные константы.
Каждый терм
Каждый терм
% = ” ^ СР* , где % - список номеров атрибутов, Pjj - конъюнкция простых предикатов, соответствующих условиям выбора и соединения, а каждое СР^ представляет собой декартово произведение
отношения-переменной и отношения-константы.
Цели мы будем также называть запросами, имея в виду аналогию преобразованных целей и формы запросов реляционной алгебры. Переменную цели Хр назовем главной переменной системы.
В последующих разделах мы часто будем использовать систему Е введенную в примере 8. 3:
Редукция к нормальной форме объединения- соединения
Пусть для каждого уравнения Е^ в выражении (1) hj > 1. Тогда введем в систему для каждого терма Т^ новую переменную % и перепишем 耳 следующим образом:
Как следствие наши уравнения будут иметь одну из следующих возможных форм:
уравнения типа объединения(U-уравнения},
полностью определяемые парой
VX】,%〉,
где X] - реляционная переменная в левой части уравнения, U] - множество реляционных переменных и констант, появляющихся в объединении правой части;
уравнения типа соединения(J-уравнения),
полностью определяемые четверкой
VX , L , Р , J >, i i i i где Xj представляет собой левую часть уравнения, L^ - список номеров столбцов, появляющихся в операторе проекции, Р] - предикат и J^ - множество переменных и констант из декартова произведения правой части.
Результирующая система будет в нормальной форме объединения-соединения (UJNF).
Пример 10.9а. Рассмотрим систему, вычисляющую предков fпример 9.1а):
ANC = ANC。PAR и PAR.
Ее UJNF:
N = ANC о PAR ANC = N и PAR.
Ее граф зависимостей показан на рис. 10. 6а.
Пример 10.9б. UJNF системы Е^ имеет вид
X = С и N и X 1112
Ее граф зависимости показан на рис. 10.6б.
Рис.10.6. Графы зависимости двух систем UJNF.Рис.10.6. Графы зависимости двух систем UJNF.
Рис.10.6. Графы зависимости двух систем UJNF.
Рис.10.6. Графы зависимости двух систем UJNF.
2.2. Определение общих подвыражений
Определение общих подвыражений в алгебраических выражениях может привести к сокращению объема вычислений, поскольку некоторые операции могут быть вынесены за скобки. Редукция к UJNF позволяет более просто определять общие подвыражения: U- и J-уравнения можно
рассматривать отдельно.
U- уравнений для Х^ и Xj общему подмножеству %,U- уравнений для Х^ и Xj общему подмножеству %,Общее подвыражение двух соответствует fмаксимальному )
U- уравнений для Х^ и Xj общему подмножеству %,
U- уравнений для Х^ и Xj общему подмножеству %,
и U . В этой системе
i J
{<xcu>t <XfU>} заменяется на
где Хс - новая переменная.где Хс - новая переменная.{хс}>, <хс,ис>}{хс}>, <хс,ис>}
где Хс - новая переменная.
где Хс - новая переменная.
{хс}>, <хс,ис>}
{хс}>, <хс,ис>}
Общее подвыражение двух J-уравнений для X】и X) соответствует подмножеству Jc, которое является общим
для J】 и J『для J】 и J『причем нас интересуют такие общие
для J】 и J『
для J】 и J『
подвыражения, чтобы в отношениях Jc условия соединения
Это усложняет поискVX ],£|],Р],*7]> иЭто усложняет поискVX ],£|],Р],*7]> ибыли одинаковыми для Е^ и Еу общих подвыражений в J-уравнениях.
Это усложняет поиск
VX ],£|],Р],*7]> и
Это усложняет поиск
VX ],£|],Р],*7]> и
Рассмотрим два J-уравнения
<Х . L . Р . J >. Пусть} и
J J J Ji
J^ fjj]Jji)будуттакими,что
3r,1 ^ г ^ min{mt 1} :Vk = 1. . . Р, Jjk = J^.
Пусть Р-р 人...dл Р - р 人...рбудут такими,
“il * vaj『jl 『iv " v
что3s,2 三 s三 winfu,v}: Vh= 1. . . s, 〃皿=PJh-
Тогда общим подвыражением будет
о*(J х...xj ).
Pj]A. . . Лр^ '111гу
Мы вводим новое уравнение для Хс и изменяем уравнения для Х| и Xj очевидным образом. Эти построения нас не очень интересуют и мы их опустим.
Поиск общих подвыражений для n (>2) J-уравнений является вычислительно сложным, и применение различных вариантов таких построений не обязательно приводит к одному и тому же результату.
Пример 10.10а. Рассмотрим следующую систему UJNF:
X = С и С и X 1123
X = С и X и С
2233
X = X。X。X 3124
X = С。X。X 4412
После определения общих подвыражений имеем
XX44
X
X
4
4
10. Юб. Дана система UJNF:10. Юб. Дана система UJNF:X = А и Y У ^ Г о X о В Z = X о В о ЛX = А и Y У ^ Г о X о В Z = X о В о ЛЭто можно переписать так:X = 4 и У Y = У。2 Z = V о л W = X 。ВЭто можно переписать так:X = 4 и У Y = У。2 Z = V о л W = X 。Вдана системадана система%%п1 6^Х2 X% [XICJ'2 = 12 = 1п1 6^Х2 X% [XICJ'2 = 12 = 1Х2ХзХ4Х2ХзХ42X22X2X?。% %Хз。%X?。% %Хз。%С и X и С432С и X и С432Мы можемМы можемопределить общие подвыраженияопределить общие подвыраженияразличными способами. Первый способ:различными способами. Первый способ:двумядвумяX = п б« хс ) '2 = 1X = e。X。c。X 22214X = (П W) 。с3、1,4 丿 3X = С и X и С 4432V = х2 X] Хз 2 = 1Второй способ:X = п б« хс ) '2 = 1X = e。X。c。X 22214X = (П W) 。с3、1,4 丿 3X = С и X и С 4432V = х2 X] Хз 2 = 1Второй способ:X] = U],6(z X Хз)X] = U],6(z X Хз)труднотрудно
10. Юб. Дана система UJNF:
10. Юб. Дана система UJNF:
X = А и Y У ^ Г о X о В Z = X о В о Л
X = А и Y У ^ Г о X о В Z = X о В о Л
Это можно переписать так:
X = 4 и У Y = У。2 Z = V о л W = X 。В
Это можно переписать так:
X = 4 и У Y = У。2 Z = V о л W = X 。В
дана система
дана система
%
%
п1 6^Х2 X% [XICJ
'2 = 12 = 1
п1 6^Х2 X% [XICJ
'2 = 12 = 1
Х2
Хз
Х4
Х2
Хз
Х4
2
X
2
2
X
2
X?。% %
Хз。%
X?。% %
Хз。%
С и X и С432
С и X и С432
Мы можем
Мы можем
определить общие подвыражения
определить общие подвыражения
различными способами. Первый способ:
различными способами. Первый способ:
двумя
двумя
X = п б« хс ) '2 = 1
X = e。X。c。X 22214
X = (П W) 。с
3、1,4 丿 3
X = С и X и С 4432
V = х2 X] Хз 2 = 1
Второй способ:
X = п б« хс ) '2 = 1
X = e。X。c。X 22214
X = (П W) 。с
3、1,4 丿 3
X = С и X и С 4432
V = х2 X] Хз 2 = 1
Второй способ:
X] = U],6(z X Хз)
X] = U],6(z X Хз)
трудно
трудно
3. Выделение подмножеств запросов и сильно связанные компоненты
Для данной системы Z и цели Q с Хр- главной переменной Z - определим подмножество D(Xp) S Х^ переменных, которые участвуют в вычислении цели Q.
Пусть G(E) - граф зависимостей Z. D(X「) определяется рекурсивно:
Хр принадлежит D(Xp).
Если <XjXj> принадлежит E(G(E)) и Х^ принадлежит D[Xp), то Х| также принадлежит D(Xp).
Пусть Zp(£Z) - система уравнений для переменных из
D(Xp). Тогда Q можно вычислить на 2卩. Выделение
подмножества запроса эквивалентно нахождению достижимой для данной цели подпрограммы (разд. 10. 1. 1).
Теперь нас интересует такая декомпозиция 2卩 на подсистемы, чтобы каждая из них была разрешима независимо. Граф GfSp) является связанным по построению. Определим сильно связанные компоненты 2卩. Каждый сильно связанный компонент 2卩 соответствует подмножеству взаимно рекурсивных уравнений. Следовательно, каждый сильно связный компонент соответствует алгебраической подсистеме, которая может быть решена независимо с помощью известных методов (Якоби, Гаусса - Зейделя, полунепосредственного).
Наконец, определим порядок вычисления этих подсистем. Пусть SC^ и SC - две сильно связанные компоненты GfEp) и <Х t, Х> - дуга, соединяющая SC^ с sq f и, очевидно, не наоборот). Тогда SC должна вычисляться до SC^. Это правило определяет отношение
порядка на компонентах:
е E(G(Zp)) Л (Ху SCJ Ле E(G(Zp)) Л (Ху SCJ Лsc < sq о(<Xj,Xj>(X/ s”).
е E(G(Zp)) Л (Ху SCJ Л
е E(G(Zp)) Л (Ху SCJ Л
По построению GfEp) существует только один связанный компонент, который является максимальным в соответствии с частичным порядком, определяемым этим соотношением. Этот компонент, называемый вершинным,
Додержит переменную Хр. Если SC < SC「 то SC^ должна быть решена до sq. Это следует из того факта, что после решения SC ее отношения-переменные становятся известными и могут использоваться как константы при решении SC^
Процесс поиска сильно связанных компонентов в графе имеет полиномиальную сложность.
Пример 10.11. Рассмотрим ту же систему Е^. Эта система может быть разделена на два сильно связных компонента, т. е. на подсистемы:
X = С и N и X 1112
Х?=”и % f и Хз
气: 2
X = N и С
324
N =Х иС
232
Если
главными являются переменные Х^ X? или N】, то
шаг выделенных подзапросов никак не затронет систему т. е. Е^ = %
Если главными являются переменные Хз или N?, то выделение подзапросов даст 险=々.
Рассмотрим граф зависимостей, показанный на рис. 10.7, с пятью связанными компонентами. Пусть Хр принадлежит связанному компоненту SC】. Тогда выделение подзапросов позволяет удалить из системы SC^ и CSg.
Индуцированный нашим правилом порядок суть
SC < CS < SC 3 2 1
В отдельных случаях после соответствующих подстановок каждое из уравнений системы становится связанным компонентом и все их можно решить независимо друг от друга. Такие системы называются редуцируемыми подстановкой.
Рассмотрим систему S и ее граф зависимостей G^. Нетрудно видеть, что процедура вычисления переменной Х[ и последующая подстановка вместо нее константы в Z эквивалентны удалению вершины Х^ из G? с последующим
связыванием всех предшествующих Х^ вершин со всеми следующими за ней вершинами. В таких случаях мы будем говорить, что в G? осуществлена подстановка вершины Xj.
Рис. 10.7. Граф сРис. 10.7. Граф спятью сильно связаннымипятью сильно связанными
Рис. 10.7. Граф с
Рис. 10.7. Граф с
пятью сильно связанными
пятью сильно связанными
компонентами.
Будем говорить, что граф G редуцируем подстановкой тогда и только тогда, когда он соответствующей последовательностью замен может быть редуцирован к графу с единственной вершиной Xr; граф с единственной вершиной соответствует единственному уравнению с
переменной Xr, которое может быть решено независимо; в этом случае другие переменные вычисляются при помощи замещающих уравнений.
Система является редуцируемой подстановкой тогда и только тогда, когда ее граф зависимостей редуцируем подстановкой. Задача поиска правильной последовательности подстановок (если такая существует) при решении системы уравнений сводится к задаче теории графов. Существует несколько достаточных условий, которые гарантируют редуцируемость графа.
Ниже перечисляются наиболее важные из них:
Любой ациклический граф G редуцируем подстановкой.
Сильно связанный граф G редуцируем подстановкой тогда и только тогда, когда он имеет вершину К, такую, что граф G - fK) является ациклическим.
Граф G редуцируем подстановкой тогда и только тогда, когда все его связанные компоненты редуцируемы подстановкой.
Конструктивные доказательства этих теорем дают алгоритм, который определяет, редуцируем ли данный граф G подстановкой; если так, то алгоритм определяет последовательность подстановок G (см. разд. 10. 4).
Пример 10.12. Рассмотрим систему
Р = Т^е X R) и IT2s
Q = %,4"p酒 R)生 S) где R и S - экстенсиональные отношения. Очевидно, что эта система редуцируема подстановкой, в результате мы получаем
р =吟“% «F xr)xs))xr) и n2s'1=13 = 21=2
10. 2. 4. Маркировка переменных
В разд. 10. 2.4- 10. 2. 6 рассматриваются методы переписывания, которые преобразуют подсистемы уравнений; каждая подсистема будет соответствовать сильно связанному компоненту 2卩. Оптимизация основывается на информации о значениях переменных цели (или пометках); следовательно, эти методы имеют такую же общность, что и логические методы, представленные в разд 10. 1.
Маркировка отношений означает распространение предиката выбора запроса в различные уравнения системы в соответствии со следующими правилами маркировки:
Распространение для [/-уравнений: пусть Х^ имеет маркировку (Xj: m) и рассмотрим уравнение <Х『U/; тогда все переменные X и константы С из U^ должны быть промаркированы (X : т или С : т).
Распространение для J-уравнений: пусть Х^ имеет маркировку (Xjm) и рассмотрим уравнение vXj L], Р[, J[>; используя список проекции L「 преобразуем т в соответствующий столбец (столбцы) п переменных X или констант С в Е〔 и промаркируем их п, получая (X : п) или (С : п). Более того, если этот столбец также использовался в каких-либо операциях естественного соединения с другими столбцами q других переменных У или констант К в этом уравнэнии, промаркируем их q, получая (Y : q) или (К : q).
Промаркированные переменные соответствуют новым отношениям-переменным, полученным в результате операции выбора над исходными переменными. Действительно, (X : к) соответствует выбору на к-м столбце X: (X : к) = bk-const', Зту редукцию поясняет следующее общее уравнение:
Правильность приведенных выше правил следует из свойств дистрибутивности операции выбора по отношению к объединению, коммутативности операции выбора по отношению к проекции и выбору и дистрибутивности операции выбора по отношению к декартову произведению.
Ниже приведен алгоритм маркировки, на входе которого определена система Z из N уравнений. В результате генерируется новая система 2’, эквивалентная S по отношению к рассматриваемой цели (разд. 10. 1). Пусть otp - арность Хр; пусть предикат запроса есть равенство, определенное на столбце ip Хр.
Сначала промаркируем 1р переменной Хр: (X : 1 ;. рp丿
Применим рекурсивно правила маркировки, чтобы все возможные переменные и константы S были промаркированы; будем считать промаркированные переменные новыми переменными 2’.
Включим рекурсивно в 2’ все уравнения Х〔= Е^ так, чтобы X] встречалась по крайней мере в одном из уравнений 2’, сгенерированных на предыдущем шаге.
Пример 10.13а. Пусть Q】: а^ X? определена на подсистеме Е^ системы Е^. Получим
(Х「1) = (Сг: 1) и (Nx: 1) и (Х2: 1)
%: 1) = (%: 1) и (J: 1)
(%: 1) = %: 1)。Х3
Пример 10.13б. Пусть Q2: 0*2аХз определена на компоненте Е^ системы Е^. Получим
2
%: 2)=(丄: (*:2) = x3。 Хз=修 С4 N.= X о 232
2) и 0:
(J: 2)
2)
10. 2.5. Редукция переменных
Сравним систему Z с системой 2’, полученной по алгоритму маркировки. Исходная система является сильно связанной по построению, каждая переменная X из S представлена в 2’ по крайней мере один раз и может быть промаркированной. Возможно также, что 2’ содержит более одного экземпляра некоторой переменной X, которая может быть промаркирована в различных столбцах. На самом деле каждой переменной X из Z в 2’ соответствует одно из следующих:
Одна немаркированная переменная и ни одной промаркированной.
Одна или более промаркированных переменных и ни одной немаркированной.
Одна или более промаркированных переменных и одна немаркированная переменная.
Назовем переменные, описанные в п. 2, редуцированными.
После выполнения алгоритма маркировки возможны два варианта: либо мы заменяем систему Z системой 2’ и работаем с последней, либо сохраняем систему S. Оба случая представлены в примере 10. 13. В примере 10. 13а IZi » 、IZ'I・ Поскольку в 2’ редуцированы три переменные, 2’ эффективнее по сравнению с Z. Действительно, условия вабора распространяются на редуцированные переменные. Так как в 2’ больше нет немаркированных экземпляров X, можно использовать
(X : к) » bk-constX вместо X. Отметим, что выигрыш в эффективности получается за счет того, что операции выбора были распространены на отношения-константы, входящие в уравнения с редуцированными переменными, так, что на этапе вычислений требуется выбирать из базы данных только эти отобранные (и, следовательно, меньшие по объему) отношения-константы.
Пример 10.14. С помощью переименования переменных система из примера 10.13а редуцируется к виду
СзСз
Сз
Сз
и вычисление цели редуцируется к вычислению переменной V .
2
В примере 10. 13б нет редуцированных переменных, поскольку все промаркированные переменные имеют также немаркированные вхождения. Следовательно, Z s 2’ и, конечно, исходная система 2 более эффективна, чем 2’.
Нетрудно понять, что поскольку 2 сильно связанная система, то нередуцируемость одной переменной влечет нередуцируемость всех остальных. Таким образом, систему Е удобно заменить на 2’ только в том случае, когда в 2’ нет немаркированных переменных.
10. 2.6. Редукция констант
Рассмотрим теперь немаркированные экземпляры отношений-констант, которые появляются в уравнениях системы 2’ после неудачи на шаге редукции переменных. Наша цель - сократить размер некоторого экземпляра константы перед началом процесса решения системы, используя при этом тот факт, что константа промаркирована, т.е. имеет некоторую связь с условием выбора цели. Эта редукция может быть успешной или неуспешной. В первом случае будем говорить, что константа редуцируема, во втором - нередуцируема.
В общем случае такая редукция требует применения достаточно сложного алгоритма. Ниже мы дадим упрощенную версию общего алгоритма, ссылки на который можно найти в литературе (разд. 10. 4). Уравнения в этой версии получаются с помощью преобраз ования линейных статических правил Дейталога, которые все вместе определяют один рекурсивный предикат IDB. Если имеются другие нерекурсивные интенсиональные предикаты, мы можем решить их с помощью стандартных операций
реляционной алгебры и оптимизации перед редукцией. Следовательно, можно считать, что перед началом этих преобраз ований мы имеем систему с одним отношением-переменной и несколькими отношениями-константами.
Пусть S - система следующего вида:
X = N и N и.・・и N 12п
%= Е2(Х)
N = Е (X)
Эта система содержит только один предикат IDB, который соответствует переменной X. Редукция к UJNF дает только одно U-уравнение, определяющее X, и несколько J-уравнений. Каждое из них может иметь не более одного экземпляра X, поскольку программа линейна. Так как мы имеем только одну переменную X, предположим, что наша цель представлена следующим условием селекции на X: ь X.
т=ОС
После шага отметки система имеет следующую структуру:
(X: т) = (% : т) и (”: т) и. . . и (N^: m)
m)
=E;(X)
m)
=E,(X)
(N :
m)
=W(X)
Каждое из результирующих выражений Е: может иметь одну из следующих форм:
Е: содержит немаркированный экземпляр X. В этом случае X может или не может быть соединено с отношениями-константами.
Е: содержит промаркированный экземпляр X. В этом случае экземпляр X маркируется на столбце ш на основании гипотезы статичности. •
Е: не содержит экземпляров X.
Таким образом, граф зависимостей нашей системы будет иметь звездообразную конфигурацию, показанную на рис.10.8. Некоторые из N^ имеют исходящие дуги, направленные к X. Они соответствуют таким Е:, которые содержат экземпляр (промаркированный или нет) X. Пусть s - число результирующих выражений.
Рис.10.8. Граф зависимостей до редукции констант.
Переупорядочим уравнения в системе так, чтобы первые s
J-уравнений содержали X (ими будут ^1N^),
Пусть дано J-уравнение общего вида
Y =尸(八,Y3 = " % epи иТак же, как и в разд. 10. 2, будем говорить, что позиция1 в У соответствует позиции т в 丫「 если т- й атрибутУ] проектируется в 1-й атрибут У в соответствии сосписком проекций
Пусть К - константа, содержащаяся в уравнении (N|:m) - Е;(Х) и промаркированная в позиции к. Мы хотим редуцировать К. Если К имеет более одной маркировки (к】"]), соберем вместе все маркировки
и построим предикат выбора sp о ("】=а Л . . .Л к】=а). Теперь алгоритм описан полностью. Для лучшего понимания мы рекомендуем просмотреть пример 10.156.
АЛГОРИТМ РЕДУКЦИИ КОНСТАНТ (К)
INPUT:
Промаркированная система 2 для единственной рекурсивной переменной X, получаемая из программы, содержащей только линейные статические правила. Промаркированная константа К в уравнении f^k: т) - Е;(Х). Предикат выбора sp.
OUTPUT:
Алгебраическое выражение, которое сокращает размер константы К или значение пнередуцируема**.
METHOD:
Е;(Х) THENЕ;(Х) THENК, := ^spK /* символьное выражение */ FOR j:=2 ТО s DO BEGIN k":=0 IF X не отмечена в
Е;(Х) THEN
Е;(Х) THEN
BEGIN
отношении-константотношении-константв Е‘в Е‘К" : =К FOR Для всех
отношении-констант
отношении-констант
в Е‘
в Е‘
DO
IF Е] содержит соединение X 乂 -с ^j
такое, что позиция х в N соответст- г к
вует позиции г в К в (№女:m) = Е;(Х)
THEN К":=К"_ С /*символьное
г=сг Jr выражение */
IF К"= К THEN BEGIN OUTPUT Ннередуцируемап EXIT METHOD END END
К':= К' и К" /* символьное выражение */ END
IF какая-либо из констант С в результирующем выражении К' редуцирована THEN подставить вместо нее С'.
OUTPUT К'
ENDMETHOD
Отметим, что некоторые операторы алгоритма снабжены комментарием "символьное выражение". Это сделано для того, чтобы напомнить читателю, что алгоритм представляет собой символьные преобразования, в результате которых получается некоторое выражение, и, следовательно, на отношениях К, Сит. д. не выполняется никаких реальных операций.
Поясним суть алгоритма с интуитивных позиций. Все уравнения и отношения-константы влияют на значение X. В частности, это справедливо для константы К. Действительно, с помощью определенных алгебраических операций некоторые столбцы К могут п вырабатывать11 некоторые столбцы отношения X. Это те столбцы, которые передаются из К в №卜 с помощью списка проекции L^ Уравнения N^ EJX)・ Предположим, что в N^ существует такой столбец х, который соответствует (через список
проекции) столбцу г в К. Тогда использование X вместо всего X не повлияет на результат соединения, и, следовательно, можно распространить это полуссединение на К и привести его к виду: К >< С.
Отметим, что при каждом применении алгоритма редуцируется один экземпляр константы К. Чтобы редуцировать константу во всех экземплярах, следует взять объединение всех редуцированных значений и подставить его во все экземпляры константы. Экземпляры разных редуцированных констант должны быть заменены на соответствующие значения.
Отметим также, что, если исходный предикат выбора имеет вид 0m_@八门-6*‘ алгоритм должен проработать дважды подряд. В этом случае константа может редуцироваться за два применения алгоритма.
Пример 10.15, Мы покажем работу алгоритма на нескольких примерах возрастающей сложности. Все используемые отношения являются бинарными. В качестве упражнения читатель может проверить, что эти системы соответствуют программам со статическими правилами. Отметим, что пример а) соответствует ANC в общем виде.
Мы будем использовать алгоритм редукции констант для оптимизации системы из примера 10. 13б, где мы не могли редуцировать переменные. Рассмотрим цель а2_^3 на системе Е? . Исходной является система
Перепишем ее в более удобной для применения алгоритма форме:
X3UX3UN 4С2N 4С23=3=44
X3U
X3U
N 4
С2
N 4
С2
3=
3=
4
4
Промаркированная система будет выглядеть так:
%:2) = (N2:2) и (%:2)
(N :2) = X о (С : 2)
(Nj2) = (С^.2)
X = N и N
Мн можем редуцировать константы С^ и С2:
С'= а С и С X с‘ 42=а 44 2 = 1 2
С' = b С и С X С' 22=а 22 2=1 2
отметим, что сама С; определяется уравнением, которое должно быть решено, чтобы определить редуцированное отношение С^. Будучи однажды вычисленным, это значение подставляется в уравнении вместо С;・
Рассмотрим уравнение
Р = UP。Р。DOWN и FLAT
которое представляет собой обобщенную версию классической задачи нахождения родственников одного поколения. Это дает следующую систему:
Р = N и N 12
N]= UP о Р о DOWN
N = FLAT 2
и цель 0*1 ^Р, дающую отметку :
(Р :1) = (%:2) и (N2,l)
(%:2) = (UP :2)。p。DOWN
(N2:l) = (FLAT .1) P = N и N 12
N]= UP о P о DOWN
N = FLAT 2
Редукцию переменных осуществить не удается, но мы можем редуцировать константы. Получим
UP' =<г UP и UP СХ UP' 1=а1= 2
FLATf = b _ FLAT и ((FLAT >< UP') 然 DOWN) 1= 22= 1
Отметим, что в этом случае редукция константы UP соответствует конусу а в методе магических множеств. Данные выражения для UP' и FLAT* получены в результате преобразований, пошаговое описание которых мы приводим ниже.
Редукция FLAT:
Маркировка FLAT есть 1.
FLAT1 :~ai=aFLAT\
Входим в цикл DO (только для АГ】):
FLAT" .0
Р не промаркирована в Е^ следовательно: FLAT". FLAT;
Входим в цикл DO:
Р соединено в 耳 с UP по первому атрибуту Р и по второму атрибуту UP. Первый атрибут N? соответствует первому атрибуту FLAT в 与 согласно списку проекции, следовательно:
FLATn : = FLAT IX UP 1=2
P соединено в % c DOWN по второму атрибуту Р и по первому атрибуту D02N. Второй атрибут % соответствует второму атрибуту FLAT в % в соответствии со списком
прекции, следовательно:
FLAT11 : = (FLAT 泛 UP) 羔 DOWN
Теперь в 耳 больше нет констант, соединенных с Р, и мы
выходим из цикла DO. Так как FLAT11 ^FLAT, мы не выдаем значение м нередуцируемап и получаем окончательный результат:.
FLATf :=
FLAT^ и FLAT11 f = a^LAT и ((FLAT 图 UP) 弟 DOWN));
Редукция константы FLAT завершена. Однако если некоторая константа, входящая в FLAT^, редуцируема, мы можем подставить ее новое выражение в выражение FLAT^.
Редукция UP:
Маркировка UP есть 1. Wb UP;
ВХОДИМ В ЦИКЛ DO (ТОЛЬКО ДЛЯ N]):
UP":■О
Р не промаркирована в Е】, следовательно:
UP":= UP;
Входим в цикл DO:
Р соединено в Е^ с UP по первому атрибуту Р и по второму атрибуту UP. Первый атрибут N】соответствует первому атрибуту UP в 耳 согласно списку проекции, следовательно:
UP" : = UP X up1 =2Р соединено в 耳 с DOWN первому атрибуту DOWN.UP" : = UP X up1 =2Р соединено в 耳 с DOWN первому атрибуту DOWN.по второмупо второмуатрибуту Р и поатрибуту Р и поВторой атрибут & не соот-Второй атрибут & не соот-
UP" : = UP X up1 =2
Р соединено в 耳 с DOWN первому атрибуту DOWN.
UP" : = UP X up1 =2
Р соединено в 耳 с DOWN первому атрибуту DOWN.
по второму
по второму
атрибуту Р и по
атрибуту Р и по
Второй атрибут & не соот-
Второй атрибут & не соот-
ветствуетветствуетникакому атрибуту UP в Е】никакому атрибуту UP в Е】согласно спискусогласно списку
ветствует
ветствует
никакому атрибуту UP в Е】
никакому атрибуту UP в Е】
согласно списку
согласно списку
проекции, следовательно, констант, соединенных с Р в N , больше нет, и мы выходим из цикла DO. Так как
UP"$UP, мы не выдаем значение м нередуцируеман, и получаем окончательный результат:
UPJ=UP,u UP11 (= сг _ UP и ((UP >< UPf );
Рис.10.9. Граф зависимостей для примера 10.15б после редукции констант.Рис.10.9. Граф зависимостей для примера 10.15б после редукции констант.
Рис.10.9. Граф зависимостей для примера 10.15б после редукции констант.
Рис.10.9. Граф зависимостей для примера 10.15б после редукции констант.
Редукция константы UP завершена. Отметим, однако, что эта константа входит в выражения FLATf и UP', следовательно, мы подставим ее новое выражение сюда. В результате получим систему Р = N и N 12
N「UP' о Р о DOWN.
N- FLAT^ 2
FLATf : = b _ FLAT и ((FLAT >< UP^ ) 空 DOWN)
UP J = °\=aUP U((UP 冗 UP,) которая, очевидно, эквивалентна следующей:
Р = N]U FLATf
3= UP' о P о DOWN
FLAT^ = cr FLAT и ((FLAT >< HP' j >< DOWN) 1 =a1—22 — 1
UP,=。『。卩 и ((UP 泛 UP,)
Граф зависимостей для этой системы показан на рис. 10. 9. Порядок вычисления сильно связанных компонентов будет таким:
SC < SC < SC 123
Таким образом, сначала вычисляется UP', затем FLATf.
10. 2. 7. Краткий10. 2. 7. Краткийобзор алгебраического подхода
10. 2. 7. Краткий
10. 2. 7. Краткий
Перечислим кратко преобразования, которые применяются для оптимизации систем алгебраических уравнений. Первый шаг оптимизации состоит в определении общих подвыражений (разд. 10.2.2/ На самом деле анализ общих подвыражений можно выполнять для всей системы уравнений, что делает его независимым от цели, в то время как анализ на редуцированной системе, выполняемый после выделения подзапросов, является зависимым от цели.
При заданной главной переменной системы выделяются подзапросы и определяются сильно связанные компоненты, а также частичный порядок на подкомпонентах (разд. 10.2.3). Затем каждая подсистема рассматривается независимо в соответствии с введенным отношением порядка. Для каждой подсистемы редуцируются переменные и константы. Редукция переменных (разд. 10.2.5 j может привести к ограничениям на исходные уравнения; в результате редукции констант (разд. 10.2.6 j могут появляться новые по отношению к исходной системе уравнения, назначение которых состоит в исключении из исходных отношений ненужных кортежей. Новые уравнения решаются до решения исходной системы.
Наконец, применяются методы решения и образуются кортежи, удовлетворяющие цели. Возможны следующие варианты:
В системе только одно уравнение (или с помощью последовательных подстановок система сводится к одному уравнению с одной переменной). Тогда имеем два случая:
Уравнение не является рекурсивным. Оно решается прямыми методами реляционной алгебры с использованием классических методов оптимизации.
Уравнение рекурсивное. Можно использовать алгоритмы Якоби или Гаусса - Зейделя, применимые к единственному уравнению. Если уравнение линейно, можно использовать линейные полунепосредственные вычисления.
В системе имеются взаимозависимые уравнения. Тогда мы можем использовать алгоритмы Якоби или Га-
уСса - Зейделя, применимые к соответствующим системам уравнений. Если каждое уравнение линейно, можно использовать линейные полунепосредственные вычисления. В противном случае следует преобразовать уравнения, так чтобы можно было использовать полунепосредственные вычисления общего вида.
Общий подход к оптимизации
Провести строгое сравнение обсуждаемых здесь методов оптимизации достаточно трудно, потому что оценки зависят от многих факторов и сами методы сильно отличаются друг от друга. Ниже мы обсудим только два аспекта проблемы. Сначала мы рассмотрим методы с качественной стороны, чтобы выделить основные принципы оптимизации, присущие всем методам. Затем мы представим оценки производительности, которые были проведены на некоторых специфических классах программ Дейталога.
Начнем качественные оценки с выделения общих особенностей чистых методов вычисления и методов переписывания. Известно, что основным принципом метода магических множеств является принцип горизонтального распространения информации. Для иллюстрации рассмотрим обычную программу вычисления родственников одного поколения из примеров 9.3 и 10. 5. Горизонтальное распространение информации позволяет выбирать такое множество значений (так называемый конус а, (рис. 10. 1}j, которое необходимо для вычисления цели. Такое же множество значений вычисляется методом запрос-подзапрос и большинством нисходящих методов. Можно показать, что результирующее множество ответов, вычисляемое этим методом, содержит кортежи, второй элемент которых является элементом магического множества. Действительно, при наличии в цели аргументов-констант получаемые этими двумя методами Деревья вывода одинаковы.
Отметим, что различные типы связывания в нисходящих методах также приводят к оптимизации, например, когда имеется несколько экземпляров одной переменной в правиле Этакие литералы, как р(Х, X, X, Z)). Это не обеспечивается обычным методом магических множеств, однако недавно была предложена модификация алгоритма магических множеств, в котором оптимизация для данного случая достигается (разд. 10. 4 ).
Можно также отметить сходство метода магических множеств с редукцией переменных и констант. Рассмотрим, например, линейную программу ANC из
примера 10.4. Предположим, что первый аргумент предиката апс связан в цели. В этом случае метод магических множеств дает тот же результат, что и редукция переменных. Действительно, полученная в результате преобразований по методу магических множеств новая программа эквивалентна программе, где рекурсивный предикат IDB, который требуется вычислить, представляет собой множество кортежей из ANC, имеющих первым элементом а. В алгебраическом контексте это соответствует редукции переменной ANC.
Если связан второй аргумент, редукция переменных не может быть выполнена, но редуцировать константы можно. Рассмотрим снова пример 10. 15а. Как мы уже говорили, он может рассматриваться как обобщение программы ANC, в которой % занимает место первого экземпляра РЛК, Хз заменяет ANC и С^ представляет второй экземпляр PAR. Тогда редукция константы С^ представляет собой множество кортежей, второй элемент которых принадлежит конусу а.
Однако в более сложных случаях аналогию результатов метода магических множеств и редукции переменных и констант обнаружить труднее. Можно только интуитивно отметить, что при редукции констант также в некотором виде используется горизонтальное распространение информации. Действительно, редукция полусоединения, получаемая на редуцированной константе, представляет собой обобщенный конус, ограничивающий множество используемых кортежей только такими, которые относятся к связывающему аргументу. Это отношение получается в результате серии полусоединений, начинающейся с константы выбора и распространяющейся на другие атрибуты отношений-констант.
Свойства метода статической фильтрации также сравнимы со свойствами метода редукций переменных. Основное отличие состоит в том, что логическая программа на входе метода статической фильтрации определяет только один предикат IDB. Следовательно, программы с взаимно рекурсивными правилами сначала должны преобразовываться в эквивалентные программы только для одного предиката (эти преобразования очень громоздки). Сходство последних двух методов становится очевидным, если интерпретировать фильтры, вводимые на выходных портах графа, как условия выбора, распространяемые "в обратном направлениим, подобно тому, как это делается в алгоритме маркировки.
Сравним оба метода на одном и том же примере нелинейной программы, педложенной в статье по методу статической фильтрации [Kife86] (разд. 10.4 / Рассмотрим следующие правила Дейталога:
R(x, у, z) :- B(xt у, z).
R(xt у, z) : - A(xt u, V), R(u,y,z), R(vt z, y).
c целью ?- R(x, у, а). Они преобразуются в
R = В и И “4 XR)X R) 1,5,62=15=3
с целью Q : %_&*•
Редукция переменных дает
^(В^З) и П ((A:3))Xg (R :2))
2= 15=3
(R .2)=
(В :2) и П ((A X(R :2))旣_2 (R :3)) 2= 15=3
что переписывается следующим образом:
(R.2y3)=
(В:2У3) и % $ 6((А X rR:2v3BlX36_2 (R: 2V3))'' 2=1 5=3
Интерпретируя маркировку дизъюнкции двух столбцов как операцию выбора с дизъюнктивным предикатом, можно понять, что это именно условие фильтрации, которое получается методом статической фильтрации.
Перейдем теперь к оценке производительности. Ниже мы сравним производительность некоторых из описанных в гл. S и 10 методов. Эти результаты основываются на исследованиях Бансилона и Рамакришнана (разд 10.4), которые в качестве теста производительности (benchmark )использовали три программы: линейный предок, нелинейный предок и версию upflat-dovn программы вычисления родственников одного поколения (пример 10.15(6)). Для линейной программы предок рассматриваются два варианта цели, в которых соответственно связан первый и второй аргумент головы правила. Во втором и третьем примерах рассматривается по одному варианту связывания, потому что они полностью симметричны.
Некоторые из рассматриваемых методов представляют собой методы вычисления, подобные рекурсивному выделению подзапросов (QSQRj, полунепосредственным вычислениям и методу Хенсена и Накви. Методы переписывания мы также рассмотрим, имея в виду полунепосредственную стратегию вычисления.
Исследование эффективности методов проведем на EDB трех типов. Вспомним представление бинарных отношений в виде графа, которое мы ввели в разд. 10. 1. 2, когда говорили о методе подсчета. В модельной базе данных
кортежи организованы в древовидную, инвертированную древовидную структуру или цилиндр, как показано на рис. 10. 10. Таким образом, циклические данные мы не рассматриваем.
ДеревоДеревоРис.10.10. Представление структур базы данных в виде графа.Рис.10.10. Представление структур базы данных в виде графа.ЦилиндрЦилиндрИнвертированное дерево
Дерево
Дерево
Рис.10.10. Представление структур базы данных в виде графа.
Рис.10.10. Представление структур базы данных в виде графа.
Цилиндр
Цилиндр
В качестве меры стоимости выберем число успешных выводов. Это эквивалентно подсчету размера всех пром ежут оч ных результатов каждой операции, выполняемой на базе данных, до отбрасывания дубликатов. Следовательно, мерой сложности соединения, декартова произведения и выбора будет размер результата, мерой сложности объединения и проекции будет размер операндов.
При определении эффективности этих алгоритмов выделим три основных фактора.
Объем дублирования. Это относится к стратегиям, не обнаруживающим дублирования вывода. Например, недостатком непосредственных вычислений является большой объем дублирующих действий, в то время как полунепосредственные вычисления или рекурсивное выделение подзапросов (которые "запоминают" предыдущие действия) более эффективны.
Размеры множества релевантных фактов. Релевантными называются такие факты, которые непосредственно вовлечены в процесс вычисления цели. Стратегии магических множеств и выделения подзапросов сосредоточены исключительно на поиске релевантных фактов. Благодаря этой особенности преобразования по методу магических множеств (если они действительно эффективны} работают гораздо лучше, чем полунепосредственные вычисления. В методе подсчета число релеван-
тных кортежей сокращается еще быстрее, и, следовательно, этот метод имеет примущество перед методом магических множеств.
Использование унарных или бинарных промежуточных отношений. В терминах графов различие состоит в том, что рассматривается: множество вершин или множество дуг.
Сравним, например, магические множества с редукцией констант: в то время как магическое множество дает множество элементов, т.е. унарное отношение, редукция констант дает бинарное отношение. Следовательно, первый метод с этой точки зрения предпочтительнее второго.
Результаты этих исследований объединены на схеме табл. 10. 1. Отметим, что при сравнении мы ограничились методами логического переписывания или вычисления, не рассматривая алгебраические методы переписывания (редукцию переменных и констант). Мы используем символ « для обозначения того факта, что один метод на порядок лучше, чем другой.
Итак, эффективность методов подсчета и Хенсена- Накви на программе вычисления предка и программе ир- flat-dovn на порядок выше, чем эффективность других методов. Эффективность метода магических множеств на линейной программе вычисления предка примерно равна эффективности методов статической фильтрации и QSQR на этой же программе. Для нелинейного случая QSQR работает существенно лучше метода магических множеств. Действительно, для этого случая преобразования по методу магических множеств не дают улучшения и преобразованные программы работают как исходные для полунепосредственных вычислений.
Метод статической фильтрации работает подобно методу магических множеств. Отметим наконец, что метод подсчета на программе up-flat-down дает лучший результат, чем метод Хенсена и Накви. Для этого случая метод статической фильтрации работает плохо.
Как мы уже говорили выше, метод статической фильтрации менее эффективен в случае, если в цели означены переменные, не соответствующие некоторым аргументам предиката цели в теле правила. Подобная проблема возникает и при редукции переменных, что, как известно, характерно и для статической фильтрации.
Итак, основным результатом этих исследований является тот факт, что для данной программы и цели разные стратегии ведут себя существенно по-разному. Зто означает, что эффективность метода в значительной степени зависит от выбора правильной стратегии.
Таблица 10.1. Результаты исследования эффективности методов
Запрос 2 (апсъ,')
на любых структурах данных:
HN,C « MS, QSQR « QSQI « SN, SF « J, GS
Запрос 2 (ancf * b)
на любых структурах данных:
HN,C « MS, QSQR, SF « QSQI « SN « J, GS
Запрос 3 (ancb * f, нелинейный J на любых структурах данных: QSQR « QSQI «SN, MS, SF « J, GS Отметим, что методы Хенсена-Накви и подсчета неприменимы к этому запросу.
Запрос 4 (sgl'f или программа UP-FLAT-DOWN) для дерева: С « HN, MS, QSQR « QSQI « SN, SF « J, GS для инвертированного дерева: С « HN « MS, QSQR « QSQI « SN, SF « J, GS для цилиндра: С « HN, MS, QSQR « QSQI « SN, S尸 « J, GS
Обозначение методов: HN - Хенсена - Накви, С - подсчета, QSQR - рекурсивное выделение подзапроса, MS - магические множества, QSQI - итеративное выделение подзапроса, SN - полунепосредственные вычисления, SF - статическая фильтрация, J - Якоби, GS - Гаусса -Зейделя
Литература к главе
Алгоритм магических множеств неформально введен в [Вапсвба]. Более формально он описан в [Banc86d], где даны доказательства полноты и корректности. Идея пгоризонтального распространения информации" описана в [Веег87Ь]. Этот метод был распространен Сакка и Заниоло на класс запросов к логическим программам с фу нкц и о наль ными символами [Sacc86b].
Более сложный метод, называемый пдополняющие маги* ческие множества11, введен Бери и др. [Веег87Ь]. Его
достоинством является то, что исключаются некоторые повторяющиеся вычисления (см. пример 10.4б). Промежуточные результаты хранятся в специальных предикатах, называемых п дополняющими магическими предикатами11, которые потенциально могут быть полезными в последующих вычислениях (они генерируются только один раз).
Одно из последних улучшений метода магических множеств было предложено Рамакришнаном [Rama88b] и заключается в полной имитации нисходящих вычислений восходящими с использованием полунепосредственных вычислений для переписанных правил. При переписывании начальные связывания цели используются нетривиально (например, такие цели, как р(Х, X), приводят к взаимному связыванию двух экземпляров переменной X). Это не учитывается непосредственно в методе магических множеств.
Идея, подобная методу магических множеств, представлена в "методе Александра11 [Rohm86]. Метод состоит в переписывании правил для рекурсивного предиката в виде задач и решений: полученные правила вычисляются восходящим методом, а вычисления правил для задач имитируют нисходящие вычисления и позволяют передавать связывания между подцелями. В общем случае метод Александра, подобно методу магических множеств, порождает больше кортежей, чем требуется для ответа на запрос, и над результирующим отношением требуется в конце выполнить операцию выбора.
Метод подсчета впервые был представлен в [Вапс86а]. Так же как и метод магических множеств, он имеет недостаток, приводящий в некоторых случаях к полному дублированию вычислений (см. программу поиска предков). В методе дополняющего подсчета [Веег87Ь] эту проблему удается решить за счет чуть более сложных преобразований. Сакка и Заниоло [Sacc87a] также ввели магический метод подсчета, в котором решение о применении метода подсчета или метода магических множеств принимается автоматически.
Метод статической фильтрации был введен Кифером и Лозинским [Kife86]. В работе [Deva86] представлен подобный подход, в котором допускается применение только линейных правил с одним экземпляром рекурсивного предиката в правой части. Авторы рассматривали частный случай, но их алгоритм проще алгоритма Кифера -Лозинского. Ранее Лозинским [Lozi85] был предложен другой интересный алгоритм (чистые вычисления, метод Апекс (Apex method)). Полунепосредственные вычисления переписыванием обсуждаются в работе [Zani87b].
Структурный подход к алгебраической оптимизации систем уравнений, полученных из логических программ,
взят из работ [Ceri87, Тапс88]. Редукция систем уравнений подстановкой обсуждается в [Ceri86a].
Первый метод, продвигающий операции выбора селекции перед замыканием, был предложен Ахо и Ульманом [Aho79a]. Метод редукции переменных, представленный в данной главе, является обобщением алгоритма Ахо - Ульмана, поскольку связан с системой уравнений и произвольным числом экземпляров переменной, тогда как метод Ахо - Ульмана рассчитан на одно уравнение и один экземпляр переменной.
которые, являются - метод [Sagi87] терминахкоторые, являются - метод [Sagi87] терминахСуществуют и другие подходы к оптимизации, хотя и не исследованы в достаточной степени, тем не менее многообещающими. Один из них Сэгива для .устранения избыточности. В предложен алгоритм минимизации размера (в
которые, являются - метод [Sagi87] терминах
которые, являются - метод [Sagi87] терминах
числа правил в программе и числа атомов в правиле) программы Дейталога при разрешимом условии общей эквивалентности. Другой тип оптимизации получен Рамакришнаном и др. [Rama88], где объектом оптимизации является продвижение проекций (а не операций выбора) в теле правила Дейталога. Это означает, что в литералах
тела правила удаляются некоторые позиции аргументов, что иногда приводит к избыточности вычисления некоторых правил.
Оценки эффективности различных методов основываются на хорошо известной статье Бансилона и Рамакришнана [Вапсвбс]. В исследовании используется тест (benchmark), который включает только обычные небольшие
программы и в котором широко распространенные циклические базы данных не рассматриваются. Тем не менее в этой статье представлен один из немногих количественных подходов к сравнению методов оптимизации.
Упражнения
Выполните преобразования по методу магических множеств для следующих программ, которые вычисляют родственников одного поколения:
sgc(X, X) :- h(X).
sgc(XtY) :- parfX, XI j, sgc(Xlt Y1 j, parfY, Y1). с целью
?- sgc(X, b).
PJX,Y) :- c^X.Y).
р"Х, Y) :- p】(X,Z), p/Z, Yj. р№ Y) :- Pz(X,Y)・
Р/Х, Y) :- p】(X,Z), P3(ZtY).
P/X, Y) :- C3(XtY).
Рз(Х, Y) :- Рз(Х,2), C2(ZtY).
P3fX, Y) :- c"X,Y)・
с целью
?- P](X,b)・
Преобразуйте к виду положительной реляционной алгебры и приведите к UJNF следующую программу:
sgc(Xt X) :- h(X).
sgc(X, Y) :- parfX, XI j, sgc(Yt Y1 j, parfY, Y1).
Отметим, что в этой версии аргументы рекурсивного предиката инвертированы. Покажите графы зависимостей для результата преобразования и для системы в UJNF.
Рассмотрим три системы из примера 10. 10в. Начертите их графы зависимостей, затем выделите сильно связанные компоненты и определите их порядок.
Рассмотрим системы из примера 10. 10в. Промаркируйте вторую систему относительно запроса
Q = %%,
и третью систему относительно запроса
Q = ai=axi-
Постарайтесь редуцировать переменные в системе из упражнения 10. 3 для обоих вариантов маркировки. Если это невозможно, постарайтесь Редуцировать константы (если поддерживаются соответствующие условия - статичность и т. д.).
Напишите программу на Прологе или Лиспе, которая реализовала бы алгоритм редукции констант.
Глава 11. РАСШИРЕНИЯ ЧИСТОГО ДЕЙТАЛОГА
До сих пор мы рассматривали синтаксис языка Дейталог, соответствующий очень ограниченному подмножеству логики первого порядка. О нем часто говорят как о чистом Дейталоге. Некоторые расширения чистого Дейталога или уже предложены в соответствующей литературе, или в настоящее время исследуются. Наиболее важные из них приведены ниже.
Встроенные предикаты. Между переменными или константами, встречающимися в теле правила Дейталога, часто необходимо или удобно задавать отношения сравнения (такие, как <, > и т.п.) или равенства (=) и неравенства ( * ). Эти специальные символы можно представить как встроенные, которые не определяются в программе пользователя. Их семантика заранее известна системе, и выполняются они автоматически. Следует, однако, отметить, что небезопасное использование таких встроенных символов может привести при выполнении программы Дейталога к Получению бесконечных результатов. Следовательно. каждый раз при использовании этих специальных предикатов программист должен соблюдать особые условия безопасности. Более подробно этот вопрос обсуждается ниже.
Отрицание. Знак отрицания "Т‘ является важной логической связкой. Однако его включение в Дейталог сопряжено с рядом проблем как семантического, так и вычислительного характера. В частности, аксиома замкнутости мира (АЗМ), принятая и допустимая в контексте чистого Дейталога, приводит к несогласованностям, если предположить возможность появления отрицания в телах правил. Тем не менее для большого класса программ (так называемых стратифицируемых программ Дейталога) существует удовлетворительный способ обработки отрицания. Этот класс подробно описан ниже. Мы также обсудим основанную на понятии стратификации локальную стратификацию и представим альтернативный подход к определению значения программ Дейталога, содержащих отрицательные литералы, основанный на так называемой инфляционной семантике.
Сложные объекты. "Объекты", обрабатываемые программами на чистом Дейталоге, соответствуют кортежам отношений данных, которые в свою очередь состоят из значений атрибутов. Каждое значение атрибута является атомарным, т.е.« не состоящим из подобъектов. Таким образом, базовая модель данных состоит из отношений в первой нормальной форме. Преимущество такой модели - математическая простота и легкость реализации. С
другой стороны, в некоторых новых прикладных областях (таких, как САПР, автоматизация делопроизводства и представление знаний) требуются хранение и манипулирование структурированными (глубоко вложенными) объектами высокой сложности. Такие сложные объекты нельзя представить в виде атомарных сущностей в нормализованной реляционной модели, кроме как разбив их на несколько автономных объектов. Отсюда возникает ряд серьезных проблем концептуального и технического характера. Поэтому для обеспечения компактного представления сложных объектов реляционная модель была расширена несколькими способами. В разд. 11.3 мы покажем, как можно расширить Дейталог. Основными средствами здесь являются функциональные символы, которые используются для композиции объектов из подобъектов, и конструкторы множеств для построения объектов, являющихся совокупностью других объектов. Мы добавим в стандартный словарь Дейталога предопределенные функции манипулирования множествами и будем следовать в основном подходу, принятому в проекте LDL (гл. 12). Сылки на другие подходы приведены в разд. 11.5.
Обновления. Дейталог первоначально задуман как язык запросов. Тем не менее можно расширить , Дейталог конструкциями, позволяющими осуществлять обновление отношений EDB. В этой главе обновления рассматриваться не будут. В разд. 12. 1 показано, как обновления поддерживаются в языке LDL - конкретной реализации расширенной версии Дейталога.
Агрегатные функции и недетерминизм. Агрегатные функции можно эффективно реализовать с помощью встроенного предиката, моделирующего недетерминизм. Такой предикат, называемый choice (выбор), существует в языке LDL. В разд. 12. 1 показано, как при помощи предиката choice можно эффективно вычислить кардинальность множества.
Неопределенность. Существует несколько моделей приблизительных рассуждений, которые используются в экспертных системах и которые можно включить в Дейталог (и вообще в логическое программирование). В таких моделях для фактов и правил указываются факторы уверенности. При выводе нового факта фактор уверенности для него вычисляется путем комбинирования факторов уверенности соответствующих предпосылок и факторов уверенности правил, использованных в процессе вывода. Разным моделям приблиз ительных рассуждений соответствуют различные способы комбинирования факторов уверенности. В этой книге неопределенность не Рассматривается, но в разд. 11.5 приведены ссылки на соответствующую литературу.
Другие расширения. Наконец, можно рассмотреть некоторые особенности из других областей, которые полезно было бы иметь в Дейталоге, например типизацию переменных (из теории языков программирования) и пустые значения (из области баз данных). В этой главе ни одно из данных расширений не рассматривается, поскольку по этим вопросам имеется очень мало публикаций. Тем не менее хотелось бы отметить их важность как проблем, требующих глубокого исследования.
В оставшейся части данной главы мы обсудим некоторые из названных расширений Дейталога более детально. Стиль изложения, однако, будет достаточно неформальным. Доказательства всех теорем опущены. Читатели, интересующиеся более основательным теоретическим рассмотрением данных вопросов, могут найти полезные ссылки в разд. "Литература к главе" в конце главы.
Использование встроенных предикатов в Дейталоге
Встроенные предикаты обозначаются специальными предикатными символами, такими, как >, <, >=, <=, =, *, с предопределенным смыслом. Эти символы могут встречаться в правой части правила Дейталога, причем обычно в инфиксной нотации.
Пример 11.1. Рассмотрим следующую программу Р】, состоящую из одного правила, где parent - базовый предикат:
Р] : sibling(Xt Y):-parent (Zt X)t parent (Zt Y), X*Y.
Смысл этой программы очевиден. Благодаря встроенному предикату неравенства удается обойти случай, когда некто рассматривается как свой собственный брат или сестра (sibling).
Формально встроенные предикаты можно рассматривать как предикаты EDB, отличающиеся от обычных предикатов EDB другой физической реализацией: они не хранятся явно в EDB, а реализованы в виде процедур, которые вычисляются во время выполнения программы. Однако встроенным предикатам в большинстве случаев соответствуют бесконечные отношения, что может повлиять на небезопасность программ Дейталога.
На выходе программы Дейталога всегда должен быть конечный результат, т. е. конечное интенсиональное отношение, определяемое программой Дейталога. В
примере 11. 1 конечность числа вычисляемых пар детей одних родителей гарантирована, поскольку переменные X и у появляются в предикате parent я, таким образом, могут быть связаны конечным числом констант. Тем не менее, как показано в следующем примере, с помощью встроенных предикатов достаточно легко писать небезопасные программы Дейталога.
Пример 11.2. Рассмотрим следующую программу Р :
Р2: ordinary-citizen(X):-president(Y), X*Y.
Подразумеваемое значение этой состоящей из одного правила программы заключается в том, что все, кроме президента (president), являются обычными гражданами (ordinary-citizen). Здесь мы полагаем, что president является предикатом EDB, причем его экстенсионал состоит только из одного основного факта. Хотя эта программа удовлетворяет условию безопасности, приведенному в разд. 6. 1. 2 (каждая переменная, встречающаяся в голове правила, встречается также в его теле), из Р? можно вывести бесконечное число фактов: для каждой константы a w Const, отличной от константы, обозначающей президента, можно вывести факт ordinary-citizenf а).
Приведенный выше пример показывает, что для программ, содержащих встроенные предикаты, необходимо дополнительное условие безопасности. Для этого достаточно потребовать, чтобы каждая переменная, являющаяся аргументом встроенного предиката в теле правила, либо входила в обычный предикат в теле того же правила, либо была связана предикатом равенства (или последовательностью предикатов равенства) с переменной такого обычного предиката или с константой. Здесь под обычным предикатом подразумевается либо обычный предикат EDB, либо предикат IDB.
Пример 11.2 (продолжение). Пусть задан некоторый предикат EDB - citizen. Следующая, состоящая из одного правила, программа Р; определяет "обычного" гражданина безопасным образом:
Р;: ordinary-citizenfX):-citizen^X), president (Y), X*Y.
Следующая, более громоздкая, программа Р; также безопасна:
Р;:ordinary-citizenfX):-citizen(X), president(Y), X=Z, Y=P, Z”.
При выполнении правила Дейталога со встроенными предикатами необходимо соблюдать следующий принцип:
вычисление встроенного предиката откладывается до тех пор, пока все его переменные не будут связаны константами. Исключение здесь можно (иногда даже нужно) сделать для предиката равенства. Предикат равенства можно вычислять, как только один из его аргументов либо является константой, либо связан константой. Скажем, в программе Р; из примера 11. 2 после вычисления предикатов citizen(X) и prezident(Y) необходимо вычислить предикаты X=Y и Y=P, хотя переменные Z и 7 свободны. Только после этого можно вычислить предикат Z * У.
Иногда даже удобно вычислять предикат равенства до вычисления обычного предиката в теле того же правила, чтобы использовать горизонтальное распространение информации (гл. 10).
Пример 11.3. Рассмотрим следующее правило (предполагается, что р и g - обыкновенные предикаты):
r(Xt Т) : - р(а,Х), q(Z, Т), X=Z・
Очевидно, что после вычисления р(а,Х) удобно сначала вычислить X=Z, обеспечив тем самым связывание (или множество значений) для Z, а потом уже вычислить q(Z, Т)・
Аналогично можно использовать арифметические встроенные предикаты. Например, с помощью предиката plus(X, Yt Z) можно представить выражение X+Y=Z. Предполагается, что значения для X, У и Z берутся из некоторого числового домена. При выполнении тела •правила такие предикаты могут быть вычислены, как только их мвходные переменные" (здесь X и У) окажутся связанными.
Наконец, отметим, что при трансформировании правил Дейталога в алгебраические выражения встроенные предикаты сравнения могут быть представлены в виде условий операции соединения.
Пример 11.4. Программа Р】 из примера 11. 1 транслируется в следующее уравнение реляционной алгебры:
SB = WP硅^产加)
2,4 где SIB и PAR обозначают отношения, соответствующие предикатам sibling и parent.
Введение отрицания в Дейталог
Ниже мы сначала рассмотрим аксиому замкнутости мира и покажем, что она может использоваться для вывода отрицательной информации из программ Дейталога. Однако эта аксиома не является достаточной для манипулирования отрицательными фактами, т. е. для использования отрицательных фактов в процессе дедуктивного вывода. Поэтому мы опишем два других подхода к введению отрицания в Дейталог. Первый подход, называемый стратифицируемым Дейталогом, является естественным расширением чистого Дейталога. Он основан на том предположении, что предикаты программы Дейталога следует вычислять в определенном порядке. Второй подход основан на концепции инфляционной семантики и с вычислительной точки зрения более мощный, чем первый.
Отрицание и аксиома замкнутости мира
В чистом Дейталоге появление знака отрицания (п) не допускается. Однако, приняв аксиому замкнутости мира (АЗМ), можно вывести отрицательные факты из множества дизъюнктов чистого Дейталога. Заметим, что АЗМ не является универсальным логическим правилом, это всего лишь принцип, который можно использовать только в некоторых специальных ситуациях. В нашем случае можно воспользоваться АЗМ для расширения семантики программ Дейталога.
В контексте Дейталога АЗМ можно сформулировать следующим образом: если факт логически не следует из множества дизъюнктов Дейталога, то заключаем, что отрицание этого факта выполнимо.
Отметим, что наш выбор определения семантики дизъюнктов Дейталога S с помощью минимальной модели Эрбрана S хорошо согласуется с АЗМ: в этой модели все логические следствия из S являются истинными, а все другие факты - ложными. До сих пор, однако, мы рассматривали только положительные факты и не заботились об отрицательных следствиях из множества дизъюнктов Дейталога S.
Отрицательные факты - это положительные основные литералы, перед которыми стоит знак отрицания. Например :iloves(tomtтагу). Если F - отрицательный основной факт, то |F| обозначает его положительное дополнение. Например: | iloves(tom, тагу)| = loves(tom, тагу).
Можно более формально определить АЗМ, расширив
тогда и S I =cwaF только тогда, когдатогда и S I =cwaF только тогда, когдаСоответственно можноconsc^ (S):Соответственно можноconsc^ (S):определить множествоопределить множество
тогда и S I =cwaF только тогда, когда
тогда и S I =cwaF только тогда, когда
Соответственно можно
consc^ (S):
Соответственно можно
consc^ (S):
определить множество
определить множество
понятие логического следствия (обозначается |* ), введя ' понятие логического следствия по ЛЗМ (обозначается | = cwa).
Пусть S - некоторое множество дизъюнктов языка Дейталог и F - положительный либо отрицательный основной факт. Введем определение:
F - положительный факт и S|=F или
尸-отрицательный факт и S|=|F|
отрицатель-отрицатель-consc^(S>{F| 尸-положительный либо ный основной факт и S |=cwa F}.
отрицатель-
отрицатель-
Пример 11.5. Пусть S состоит из трех следующих
дизъюнктов Дейталога:
р(Х, Y) :- p(Y, X).
pfa, b).
P(a,c).
Тогда имеют место следующие соотношения:
S|=cwa pfa, b),
S|=cwa p(a, c),
S|=cwa p(b a),
S|=cwa p(c, a), SI =cwa rp(a, В), если va, B> w fva, b>, <a, c>, vb, a>, <c, a>},
S|=cwa rW(cI,・・・,Cr) для каждого n-арного предикатного символа ф ^ р и произвольных констант с ,с . 1п
S |*cwa F для всех других фактов F.
Для приведенного в предыдущем примере множества S множество consc^(S) бесконечно, поскольку оно содержит бесконечное число отрицательных фактов. Отметим, что для конечного множества дизъюнктов Дейталога S множество consc^(S) всегда бесконечно. Это означает, что в явном виде представить consc wafS) нельзя. Тем не менее для конечного множества S всегда
можно определить, принадлежит ли данный положительный или отрицательный факт множеству conscwafS).
Использование АЗМ в чистом Дейталоге позволяет вывести некоторые отрицательные факты из множества дизъюнктов Дейталога S. Нельзя, однако, использовать эти отрицательные факты для вывода каких-либо последующих фактов. В реальной жизни часто возникает потребность в правилах, которые содержат в качестве предпосылки отрицательную информацию. Например: "если X - учащийся вуза и X не аспирант, то X - студент". В чистом Дейталоге нет возможности выразить это правило.
Отметим, что в реляционной алгебре выражения, подобные приведенному выше правилу, записываются с помощью теоретике-множественной операции разности "-". Предположим, что одноатрибутное отношение STUD содержит имена всех студентов вуза, а другое одноатрибутное
отношение GRAD содержит имена всех аспирантов. Тогда отношение UNDt содержащее имена всех неаспирантов, можно получить простым вычитанием GRAD из STUD:
UND = STUD - GRAD.
Ниже мы расширим чистый Дейталог таким образом, чтобы иметь возможность записывать отрицательные литералы в телах правил. Предположим, что унарные предикатные символы stud, und и grad выражают свойства пбыть студентом", "быть неаспирантомн и " быть аспирантом0 соответственно. Наше правило тогда запишется следующим образом:
und(X) :- stud(X)t igrad(X).
Сформулируем сказанное выше в более строгой форме. Определим Дейталог"1, как язык, полностью аналогичный Дейталогу, за исключением того, что в телах правил допускаются отрицательные литералы. Соответственно дизъюнктом Дейталога"1 является либо положительный основной факт, либо правило, в теле которого могут присутствовать отрицательные литералы.
удовлетворяется в 3 тогда и только тогда, когдаудовлетворяется в 3 тогда и только тогда, когдаОбоз начим теперьОбоз начим теперьДля того чтобы рассмотреть семантику программ Дейталога"1, обобщим понятие модели Эрбрана (разд. 6. 2) таким образом, чтобы учесть отрицание в телах правил. Обозначим через F положительный или отрицательный факт (основной литерал).
удовлетворяется в 3 тогда и только тогда, когда
удовлетворяется в 3 тогда и только тогда, когда
Обоз начим теперь
Обоз начим теперь
F - положительный факт и FwQ или
F - ■ отрицательный факт и |F|WQ.
через R некоторое правило Дей-
талога"1 вида Lq : - L2, L^ и пусть 3 - некоторая интерпретация Эрбрана. R удовлетворяется в 3 тогда и только тогда, когда для каждой основной подстановки Ф в R всякий раз, когда при любых isjsn L W удовлетворяется в 3> то L°W также удовлетворяется в 3. Отметим, что Lq^ удовлетворяется в 3 тогда и только тогда, когда L°W w 外, поскольку Lq^ - положительный литерал.
Пусть S - некоторое множество дизъюнктов Дей- талога"1. Интерпретация Эрбрана 3 является моделью Эрбрана S тогда и только тогда, когда все факты и правила S удовлетворяются в 3-
Пример 11.6. Рассмотрим следующую программу
Дейталога"1 Р (здесь stud и grad - предикаты EDB):
und(X) :- stud(X)t igrad(X).
Пусть задана следующая EDB Е:
Е = {stud(a)t stud(b j, stud(c j, stud(d)t stud(e), grad(a )t grad(b) }.
Две модели Эрбрана для РиЕ:
% = Е и {und(b)t und(d j, und(e)} и
% = E и {und(bj, und(d)t und(e;, und(f)}.
Отметим, что A】 является минимальной, а Н^ не является минимальной моделью, поскольку из Н? можно исключить und(f) и получить таким образом меньшую модель Эрбрана.
По аналогии с чистым Дейталогом будем требовать, чтобы множество всех положительных фактов , выводимых из множества дизъюнктов Дейталога"1, S было минимальной моделью S. Но, как показано ниже, S может иметь несколько различных минимальных моделей Эрбрана и в общем случае не иметь единственной минимальной модели Эрбрана. Это приводит к трудностям при определении семантики программ Дейталога-1 : какую из минимальных моделей Эрбрана следует выбрать? Прежде чем ответить на этот вопрос, рассмотрим две другие проблемы, которые возникают при использовании отрицаний в телах
правил. Первая проблема связана с безопасностью программ Дейталога"1, а вторая - с АЗМ.
Нетрудно видеть, что неограниченное использование знака отрицания в телах правил часто приводит к небезопасным программам.
Пример 11.7. Рассмотрим следующую программу Р, состоящую из одного правила (interesting - некоторый предикат EDB, описывающий (ограниченное) множество интересующих объектов):
Р: boring(X) :- interest1пд(Х).
Очевидно, что каждая модель Эрбрана для Р и Е бесконечна (здесь Е - некоторая произвольная EDB): можно найти бесконечное множество констант, которые при подстановке в X приводят к тому, что факт iinteresting(X) удовлетворяется. Таким образом, какую бы модель Эрбрана для определения семантики нашей программы мы ни выбрали, она всегда будет содержать бесконечное множество фактов типа boring(a). Эта трудность подобна той, с которой мы сталкивались при рассмотрении встроенных предикатов, и устранить ее можно тем же способом: необходимо ограничить область значений тех переменных, которые встречаются только в отрицательных предикатах. Вернемся к нашему примеру: можно ввести предикат EDB - object(Xj, который ограничивает область значений переменной X конечным множеством констант. С помощью такого дополнительного предиката получим безопасную программу:
boring(X) :- object(Xj,iinteresting(X).
В общем случае для программ Дейталога"1 с отрицанием и встроенными предикатами будем требовать выполнения следующего условия безопасности.
Назовем специальными литералами в теле правила либо отрицательные литералы, либо литералы со встроенными предикатами. Все остальные литералы будем называть обыкновенными. Потребуем, чтобы каждая переменная, входящая в специальный литерал, входила также в обычный литерал или была связана последовательностью предикатов равенства с константой либо с переменной, входящей в обыкновенный литерал.
Вернемся теперь к АЗМ. Как показывает следующий пример, Дейталог, расширенный отрицанием, является противоречивым в смысле АЗМ.
Пример 11.8. Рассмотрим следующее множество S, содержащее единственный дизъюнкт Дейталога"1 :
S = f q(b) :- ip(a))・
Это правило соответствует логической импликации ip(а) 力 q(b) или, что эквивалентно, дизъюнкции p(a) v q(b). Очевидно, что ни один из фактов р(а) и q(b) не является логическим следствием из S. Следовательно, имеем S |=cwanpfa) и S |=cwangfb). С другой стороны, не существует ни одной модели Эрбрана S, которая удовлетворяла бы как факту ip(a)t так и факту iq(а), поскольку в этом случае не удовлетворялось бы единственное правило S. Действительно, легко видеть, что каждая модель Эрбрана S должна содержать либо факт р(а), либо факт q(b).
Из этих соображений мы откажемся от АЗМ и дадим более подходящее определение семантики программ Дейталога"1. В разд. 11. 2. 2 рассмотрена семантика, при которой с множеством дизъюнктов Дейталога"1 ассоциируется специальная минимальная модель Эрбрана. Этот подход все еще очень близок к АЗМ, другими словами, он ее аппроксимирует. Мы также коротко обсудим другую семантику, не требующую минимальности модели. Этот подход, называемый инфляционной семантикой, меньше связан с АЗМ.
Стратифицированный Дейталог
Как мы уже говорили, основная проблема заключается в том, что в общем случае для множества дизъюнктов Дейталога"1 S существует несколько минимальных моделей.
Так, множество S из примера 11.8 имеет две минимальные модели: К】 = {р(а)} и Н? = fq(b)}. Какую же следует выбрать? Конечно, из различных минимальных моделей Эрбрана для множества S желательно выбрать наиболее "естественную".
Ниже мы опишем методику, известную как стратифицированное вычисление программ Дейталога^ или просто как стратифицированный Дейталог. Эта методика позволяет естественным и интуитивно понятным образом определить минимальную модель Эрбрана, которую следует выбрать. Однако, как показано ниже, эта методика применима не ко всем программам Дейталога"1 , а только к специальному подклассу так называемых стратифицируемых программ. Отметим также, что данный подход может применяться в более общем контексте логического программирования с отрицанием.
Наша методика выбора специальной модели Эрбрана и
таким образом определения семантики Дейталога"1
основывается на следующем итуитивном понимании проблемы: при выполнении правила, в теле которого присутствует один или несколько отрицательных литералов, сначала производится вычисление множества всех результирующих фактов для предикатов, встречающихся в теле правила со знаком отрицания (если эти предикаты являются предикатами EDB, то их результирующие факты уже известны и вычислять их нет необходимости). После этого продолжается вычисление результатов для предиката в голове правила.
Возьмем правило из примера 11. 8. Сначала вычислим множество всех результирующих фактов для предиката р. Поскольку S не содержит ни фактов вида р(а), ни
правил, определяющих р, то данное множество пустое. Это означает, в частности, что р(а) не удовлетворяется и, следовательно , ip(а) удовлетворяется. Следовательно, применяя это правило, мы приходим к заключению q(b). Таким образом, выбирается следующая модель Эрбрана: {q(b)}.
Итак, на множестве предикатов задается некоторый порядок, отражающий смысл знака импликации (т.е. слева направо). В определенном смысле естественно сначала вычислять предпосылки (по меньшей мере те из них, которые соответствуют отрицательным литералам), а уже после этого вычислять следствия. Однако, поступая таким образом, мы вводим определенную процедурность, состоящую в том, что выбор минимальной модели Эрбрана
программы Дейталога"1 теперь зависит от синтаксиса программы, а не исключительно от ее логической семантики. Для чистого Дейталога справедливо следующее утверждение: множества дизъюнктов, соответствующие эквивалентным логическим формулам, имеют идентичные минимальные модели Эрбрана. Ниже приведен пример, из
которого видно, что для Дейталога"1 это не так.
Пример 11.9. Рассмотрим следующее множество S', содержащее единственный дизъюнкт Дейталога"1 :
S,= {р(а) :- ^q(b)}.
Этому множеству соответствует логическая формула ^q(b)^p(a)t которая эквивалентна формуле ip(a)^q(b) Для множества S из примера 11.8. Действительно, обе Формулы логически эквивалентны формуле р(a jvgfb). Отметим, что множества, минимальных моделей Эрбрана Для S и S' совпадают, но выбранные минимальные модели Эрбрана оказываются различными: применяя нашу Методику, легко видеть, что выбранной моделью Эрбрана 〃ля s’ будет {р(а)}・
Отметим, что до сих пор описание методики дли* выбора минимальных моделей Эрбрана было неформальным к" неполным. В частности, мы ограничивались рассмотрением; программ, состоящих из одного правила. Следовательно^ нужно расширить нашу методику для работы с про-; граммами Дейталога"1, состоящими из нескольких правил. / Однако, как будет показано, наша методика неприменима ко всем программам. Она работает для большого классу программ, называемых стратифицируемыми.:
Если программа Дейталога"1 состоит из нескольки^ правил, выполнение тела одного правила может вызывать' выполнение других правил. Тела этих правил могут, в; свою очередь, содержать отрицательные литералы и т. д.; Наша методика заключается в требовании : перед; вычислением головного предиката правила должны быть полностью вычислены все предикаты, входящие со знаком; отрицания либо в тело этого правила, либо в тела; последующих правил, и все те предикаты, которые необ-; ходимы для вычисления этих отрицательных Предикатов. j
Для более формального описания этой методики опре* j делин расширенный граф зависимостей РГЗ(Р) программы^ Дейталога"1 Р. Вершины РГЗ(Р) состоят из предикатных; символов IDB, встречающихся в Р. Направленная дуг&? <р, q> существует в РГЗ(Р) тогда и только тогда, когда: предикатный символ q входит со знаком отрицания или; без него в тело правила, головным предикатом которого; является р. Дуга <р, д> помечается знаком г тогда x j только тогда, когда существует хотя бы одно правило R; с головным предикатом р, такое, что q входит в тело R; со знаком отрицания. Отметим, что в случае программы Р《 на чистом Дейталоге РГЗ(Р) совпадает с определенным в, гл. 8 графом зависимостей Gp.
Теперь определим нашу методику следующим образом:、 если путь, связывающий р с q в РГЗ(Р), включает хотя * бы одну дугу, помеченную знаком г, то мы требуем,: чтобы q был вычислен перед вычислением р.
Пример 11.10. Рассмотрим сеть железных дорог, | представленную с помощью предиката EDB link(Xt У), обозначающего, что между станциями X и Y существует | прямой путь без пром ежут оч ных станций. На основе | предиката EDB link определим некоторые предикаты IDB,《 имеющие следующие значения:3
cutpoint(XtА, В): каждый путь от станции Л до J станции В проходит через станцию X (узловая точка).§
connected(AtВ): существует соединение между j станциями ЛиВ (прямое либо транзитное).j
circumvent f X, Л, В j : существует путь от станции 4 $ до станции В, который не проходит через станцию X. )
exist scutpointf Л, В j: существует по крайней мере один узел на пути от Л до В.
safely-connected(А, В): Л и В соединены и между ними нет узловых точек. Это означает, что если некоторая станция или путь между Л и В повреждены (например, в результате аварии), то существует другой вариант достижения В из Л.
linked(AtВ): будем полагать, что наша сеть является ненаправленным графом, т. е. если станция Л связана с В, то и станция В связана с Л. Тем не менее, предикат EDB link не обязательно симметричен, поскольку, чтобы выразить факт наличия соединения между ЛиВ, достаточно определить либо link(AtВ), либо link(BtЛ). Предикат IDB linked состоит из симметричного замыкания предиката link.
station(X): X является желез нодорожной станцией.
Пусть, программа Дёйталога"1 Р состоит из следующих правил:
R】:cutpoint fX, Л, В j : -connectedfA, В),
station(X), -icircumyent fX, A, В).
R2:circumvent (X, A, B): -linked(A, В j, Х*Л, X=B.
R3:circumvent (Xt A, B) : -circumvent (X, 4, C),
circumvent (Xt С, В).
Rjlinked(At В) :-link(At B).
R5:linked(At В) :-link(Bt A).
R6: connected(A, В j: -linked(At В).
R?:connected(Л, В j : -connectedf 4, C), 1 inked(С, В).
Rg:existscutpoint(A, В) : -station(X),
cutpoint (X, A, В).
R9: safely-connected(At В) : -connectedf4, В), -\existscutpoint f Л, В).
R】。: station(X) : -linked(Xt У).
Расширенный граф зависимостей для Р показан на рис. 11. 1. Анализируя этот граф, легко определить, что в соответствии с нашей методикой перед вычислением цели safely-cQnnected необходимо полностью вычислить exist scutpoint и, следовательно, также cutpoint и station. В свою очередь, перед тем как мы будем в состоянии вычислить cutpoint, необходимо полностью вычислить circumvent и , следовательно, linked.
Стратификацией программы Р называется разбиение множества предикатных символов IDB из Р на подмножества PiРп, удовлетворяющее следующим условиям:
Рис. 11.1. Расширенный граф зависимостей для пжелезнодорожной" программы.
если р w Р] и q w Р)и <р, д> есть дуга РГЗ(Р), то i j;
если р w Р] и q w Pj и <р, д> есть дуга РГЗ(Р), помеченная знаком г, то i > j.
Стратификация определяет порядок выполнения предикатов из программы Р. Сначала вычисляются предикаты из Р^ (например, с помощью LFP-итерации). Когда зти предикаты вычислены, их можно рассматривать как предикаты EDB. После этого вычисляются предикаты из Р^ и т. д. Отметим, что условия а) и 6) обеспечивают соответствие такого порядка вычислений нашей методике. Множества Р],...,Рп называются стратами заданной стратификации.
В литературе стратификацию часто описывают не с помощью множеств предикатных символов, а с помощью множеств дизъюнктов (подмножеств программы Р). Такое определение эквивалентно нашему; только в каждой страте нужно заменить каждый предикатный символ на все определяемые им дизъюнкты (пример 11. 11).
Программа Р называется стратифицируемой тогда и только тогда, когда она допускает стратификацию. В общем случае стратифицируемая программа допускает несколько стратификаций.
Пример 11.11. Ниже приведены некоторые стратификации ^железнодорожной" программы из примера 11.10:
Стратификация s^:
Р^ = {linked, station, circumvent, connected}
Р? = {cutpoint, ex1st scut point}
Р3 = {safely-connected}
Стратификация sb:
P^ = {linked, circumvent}
P2 = {cutpoint, exist scutpoint, station, connected}
Р3 = {safely-connected}
Стратификация s^ :
P] = {linked}
P? = {circumvent}
Р3 = {station}
P4 = {connected}
P5 = {cutpoint}
P6 = {existscutpoint}
P? = {safely-connected}
Приведенные выше стратификации можно эквивалентно представить с помощью множеств правил:
Стратификация s:
Р ={RtRtRtRtRtRtR }
11 2345*671 0丿
Р = {R , R }
21 18 丿
Р = {R }-
Отметим, что если программа стратифицирована, то все отрицательные литералы в телах правил первой страты соответствуют предикатам EDB.
Ниже приведена теорема, определяющая необходимое и достаточное условие стратифицируемости программы Дейталога"*.
Теорема 11.1. Программа Дейталога"1 Р стратифицируема тогда и только тогда, когда РГЗ(Р) не содержит циклов, включающих дуги, помеченные знаком г.
В примере 11.12 приведены две программы, которые не являются стратифицируемыми.
Пример 11.12. Рассмотрим программу Р‘, состоящую из одного правила:
р(Х, Y):-叩(У, X), q(X, Y)
и программу Р" , определенную с помощью двух правил
р(Х, Y) :- iS(Yt X), h(X, У).
s(X,Y) p(XtZ)tp(ZtY).
Очевидно, что ни одна из этих программ не является стратифицируемой.
Существует очень простой метод нахождения стратификации для стратифицируемой программы Р, описываемый ниже.
АЛГОРИТМ СТРАТИФИКАЦИИ
INPUT : стратифицируемая программа Дейталога"1 Р; РГЗ(Р).
OUTPUT: стратификация для Р.
METHOD
ВЫПОЛНИТЬ СЛЕДУЮЩИЕ ШАГИ:*
На основе графа РГЗ(Р) построить граф РГЗ (Р) следующим образом. Для каждой пары вершин р и g в РГЗ(Р) : если существует путь в РГЗ (Р) из р в q, содержащий дуги, помеченные знаком г, добавить дугу <р, q>, помеченную знаком -«, в результирующий граф (если такая дуга еще не существует).
1 := 1.
Определить множество К всех вершин графа РГЗ* (Р), из которых не выходят дуги, помеченные знаком -I. Передать это множество на выход как страту i. Исключить все вершины множества К вместе с соответствующими дугами из РГЗ*(Р).
Если в РГЗ*(Р) остались какие-нибудь вершины, установить i := i+2 и перейти к шагу 3, иначе закончить.
ENDMETHOD
Поясним принцип работы этого алгоритма. Первая страта состоит из всех предикатов (вершин), вычисление которых не зависит от отрицательных предикатов IDB. Конечно же, все эти предикаты могут быть вычислены сразу. Вторая страта состоит из всех предикатов (вер* шин) > вычисление которых не зависит от отрицательных предикатов из всех страт, кроме первой, и т. д.
Проверим, что этот алгоритм всегда производит стратификацию с минимальным числом страт. Если его применить к программе из примера 11. 10, то будет
получена стратификация s& из примера 11. 11. Эта стратификация состоит из трех страт. Нетрудно видеть, что для данной программы не существует стратификации с меньшим числом страт.
Обратимся теперь к проблеме выполнения стратифицированной программы на экстенсиональной базе данных. Мы опишем восходящий метод вычисления, который подобен восходящему методу для программ Дейталога, за исключением следующего: в процессе прямого вывода используется отрицательная информация и вычисление производится в порядке, соответствующем стратам (от самой нижней до самой верхней).
Для того чтобы иметь возможность обрабатывать отрицательные литералы в телах правил, расширим ^Элементарное Продукционное Правило" (ЭП) (разд. 7. 1. 1. ) до более общего правила ЭПп :
Пусть S - множество дизъюнктов Дейталога"1 (т. е. правил Дейталога"1 и фактов Дейталога ), R - некоторое правило Дейталога"* вида L。 : - L^ L^ и Ф - некоторая основная подстановка для R. Конечно же, FACTS(S) (множество всех фактов из S) есть интерпретация Эрбрана. Если для всех i ( l^i^n) L^W удовлетворяется в FACTS(Sj, то факт L°W является выведенным за один шаг из S по правилу ЭПп.
Напомним, что в соответствии с приведениям выше определением L^W удовлетворяется в FACTS(S) тогда и только тогда, когда либо L^W - положительный литерал и L[W € FACTS (S )t либо L^ - отрицательный литерал и |LR| w FACTS(S).
Обозначим через inferNr^s) множество всех фактов, выводимых за один шаг из S по ЭПп. Теперь по аналогии с чистым Дейталогом (разд. 7.2.2) для каждого множества дизъюнктов Дейталога"1 S можно определить две трансформации Т$ и Т;, такие, что для каждого подмножества W базиса Эрбрана НВ
Ts(W) = 2 и FACTS(S) и inferl^(RULES(S) и W).
T^(W) = FACTS(S) и infer 1^(RULES(S) и W).
Отметим, что, поскольку терм W входит во внешнее объединение (outer union), для каждого множества S дизъюн-
ктов Дейталога"1 Ts удовлетворяет следующему свойству:
YW,НВ : W G ts(w)
Будем называть трансформацию, обладающую таким свойством, растущей.
Тот факт, что трансформация Т$ является растущей, есть достаточное условие существования наименьшей неподвижной точки Т$ ( зто легко показать). Следовательно, Tg имеет наименьшую неподвижную точку Ifp(T^) для каждого множества дизъюнктов Дейталога"* S.
Пример 11.13. Рассмотрим множество S, состоящее из правил % и 勺
J: q(b) :- -«pfa;
g: ПС :- ^q(b)
Поскольку S не содержит фактов, то ip(а) и ^q(b) удовлетворяются. Следовательно,inferl^(S) »
={qfb^, г(с)}. В результате выполнения следующего шага LFP-итерации новые факты не производятся, и, таким образом, данное множество является наименьшей неподвижной точкой Т$・ Итак, lfp(Ts) = {q(bj, r(c)}. Конечно, это множество является моделью Эрбрана для S, но не минимальной: исключивг(с)изlfp(Ts)t мы
получим меньшее множество fq(b)},котороетакже
является моделью Эрбрана для S.
Этот пример показывает, что,еслимыхотимполу
чить для S минимальную модель Эрбрана, трансформацию Ts использовать не следует. Конечно, можно отбросить требование минимальности и определить семантику множества S с помощью отличительной модели Ир(Т^). Этот подход получил название инфляционной семантики, которое обусловлено тем, что получаемые при этом модели больше моделей, ассоциируемых с программами Дейталога"1 с множествами дизъюнктов. Мы рассмотрим этот подход в разд. 11.2.4, где будем следовать требованию минимальности модели, чтобы в некотором смысле остаться в рамках АЗМ (хотя, как уже было показано, АЗМ является слишком строгой, чтобы ее использовать).
Рассмотрим теперь вторую трансформацию - Tg. В контексте чистого Дейталога наименьшие неподвижные точки для Ts и Tg совпадают. Для Дейталога"1 это не так. В общем случае Т; немонотонна и может совсем не иметь неподвижной точки.
Пример 11.14. Рассмотрим множество S, состоящее из одного правила
R: р(а) : - ^р(а).
Пусть М = 2fp(Т?). Если предположить, что p(a) w М, то р(а) W Т?(М), и, следовательно, множество М не является неподвижной точкой. Следовательно, р(а) w М・ Но тогда р(а) входит в Т; и М не является неподвижной точкой Т;. Отсюда следует, что Т; вообще не имеет неподвижной точки. Отметим, что результатом применения LFP-алгоритма к q была бы бесконечная последовательность шагов вычисления, каждый из которых либо выводил бы факт р(а9, либо опровергал бы его. Это иллюстрирует немонотонность трансформации Tg.
Тем не менее существуют множества S (истинных) дизъюнктов Дейталога"1, для которых Т‘ монотонна и
имеет наименьшую неподвижную точку. Ниже приведена теорема, определяющая необходимое и достаточное условие того, чтобы трансформация Т? имела наименьшую неподвижную точку.
Теорема 11.2. Пусть S - множество дизъюнктов Дейта- логап, таких, что для каждого отрицательного литерала L в теле правила |L| не унифицируется с головой ни одного правила из S (хотя может унифицироваться с некоторыми фактами из S). Тогда S имеет наименьшую модель Эрбрана % = lfp(T^).
Мы не будем приводить формальное доказательство этой теоремы, но сделаем несколько полезных замечаний.
Пусть S - некоторое множество дизъюнктов Дейталога"1, удовлетворяющее условию теоремы 11.2. Каждый новый факт, полученный из S за один или несколько шагов вывода по правилу ЭПп, является экземпляром головы некоторого правила из S. Пусть L - отрицательный литерал в теле правила из S. Поскольку |L| не совпадает с головой ни одного правила, то |L| не унифицируется также ни с одним из новых фактов, сгенерированных с помощью ЭПп. Отсюда следует, что истинное значение любого отрицательного литерала L в процессе выполнения никогда не изменится. Теперь нетрудно доказать монотонность Т; и показать, что 2fp(Т?) есть минимальная модель Эрбрана для S.
Для выполнения стратифицированных программ Дейта-
лога"* мы будем использовать трансформацию т‘. Пусть
Р - стратифицированная программа со стратификацией Р1, ... , Р^. Обозначим через Р^ множество всех дизъюнктов, соответствующих страте Р^ ( l^i^n ). Пусть EDB - некоторая экстенсиональная база данных. Нужно определить результат выполнения программы Р на EDB. Этим результатом должна быть минимальная модель М
для PvEDB. Определим последовательность множеств М , М , ...» Я = М следующим образом:
=lfp(T;^EDB;
% = "Р館и mJ
% = IS(鼠 J) i i - 1 M = IfDfT'* ) = M n:PUEDB
Другими словами, сначала вычислим наименьшую неподвижную точку Л】, соответствующую первой страте программы, объединенной с EDB. Существование этой неподвижной точки гарантируется теоремой 11. 2. Действительно, все отрицательные литералы, которые
одного правилаодного правилаиз Р . 1из Р . 1входят в тела правил из Р^, соответствуют предикатам EDB и, следовательно, не сопоставляются с головой ни
одного правила
одного правила
из Р . 1
из Р . 1
Поэтому трансформация Т;*^^^ 1
удовлетворяет условию теоремы 11.2. После того как эта наименьшая неподвижная точка вычислена, М】можно
использовать как новую экстенсиональную базу фактов и вычислять наименьшую неподвижную точку трансфор
мации Тр*^ , соответствующую второй страте, объеди-
ненной с множеством фактов М】. В общем случае М】*】 определяется путем вычисления наименьшей неподвижной точки трансформации Т;* им . Эта неподвижная точка существует, поскольку благодаря стратификации Р все отрицательные литералы страты i соответствуют предикатам более низкой страты и, таким образом, не унифицируются с головой ни одного правила страты i. Вычисление завершается с результатом М^ = ^PUEDB-
Теорема 11.3. Если Р - стратифицируемая программа
Дейталога"1 и EDB - экстенсиональная база данных, то
Mpuedb есть минимальная модель Эрбрана для PuEDB.
В следующем примере проиллюстрировано вычисление
门 PUEDB
Пример 11.15. Рассмотрим программу Р, состоящую из правил R】и К? (примера 11.13):
%: q(b) :- rp(a)
q: г(с) :- rq(b)
где p - предикат EDB, a g и г - предикаты IDB. Эта программа имеет единственную стратификацию, состоящую из двух страт Р】=fq} и Р?="入 пРеДП0Л0ЖИМ» что эта программа выполняется на пустой EDB Е = 0 . Тогда имеем
% = Ifp(T^) = Ifp(T^) = {q(b)} и
厶…^(可吗)=^p向= S8)) = /
Легко видеть, что {qfb)} действительно является минимальной моделью для Р.
Отметим, что наше определение М$ включает выбор некоторой стратификации. Поскольку, вообще говоря, для программы Дейталога"1 существует несколько различных стратификаций, возникает вопрос о единственности М$. Следующая важная теорема дает положительный ответ на этот вопрос.
Теорема 11.4. Пусть S - некоторое стратифицируемое множество дизъюнктов Дейталога"1. Минимальная модель М$ не зависит от выбора стратификации.
Читателю рекомендуется выполнить упражнение 11.5, в котором необходимо вычислить МриЕ для "железно- дорожнойп программы из примера 11. 10 и соответствующей экстенсиональной базы данных для трех различных стратификаций, указанных в примере 11.11.
Семантику стратифицируемой программы Дейталога"1 можно представить так же, как для программ на чистом Дейталоге (разд. 6.2. 1), в виде отображения 5np из степенного множества ЕНВ в степенное множество IHB, такое, что для каждого конечного множества G ЕНВ
^n(V)=骄 с IHB.
р' 丿 риV
Когда вместе с Р указана цель "? - Н", то на выходе программы будут получены все элементы С из 0 и ЗЛр(Р), которые обобщаются И (обозначается Н АС). Следовательно, в этом случае семантика Р с целью "? - Н" определяется с помощью отображения из
степенного множества ЕНВ в степенное множество НВ, такого, что для каждого конечного множества V G ЕНВ
% н (V) = fC IC е НВ л С е V \j 叫⑺ А Н > С}.
Совершенные модели и локальная стратификация
Выше мы определили семантику стратифицируемых программ
Дейталога"1 с помощью процедурного подхода. Ниже мы коротко опишем, каким образом стратифицированную программу Дейталога"1 можно эквивалентно охарактеризовать, используя чисто декларативную семантику. После этого введем интересное обобщение стратификации -локальную стратификацию.
Пусть R - некоторое правило Дейталога"1 вида
Lq : - L2, . . . , L^ и 8 - некоторая подстановка, такая что для всех i ( isjsn), L^e не содержит переменных.
Тогда правило R8:丄。8 : -L】8L^S называется
основным образцом правила R. Отметим, что если R8 является основным образцом R, то для iwisn, L^e есть либо положительный литерал, являющийся элементом базиса Эрбрана НВ, либо отрицательный литерал, такой, что |Lj8| является элементом НВ.
Для каждого множества дизъюнктов Дейталога"1 S
определим его основное расширение S° следующим образом : S° содержит все факты из S и все основные образцы всех правил из S.
Каждое множество S задает на НВ отношение ~->, определяемое следующим образом: для каждого КеНВ и LwHB, К ~-> L тогда и только тогда, когда существует правило R в S°, такое, что R входит положительно либо отрицательно в тело R и L является головой R. Отношение "~->" используется «для определения другого отношения ">" на НВ: для каждого КеНВ и LwHB, К > L
существует конечная вида К = ^o —> N],существует конечная вида К = ^o —> N],тогда и только тогда, когда
существует конечная вида К = ^o —> N],
существует конечная вида К = ^o —> N],
последовательность соотношений
N являются jодин индексотрицания вN являются jодин индексотрицания в…,N—> N, = L, где все
N являются j
один индексотрицания в
N являются j
один индексотрицания в
элементами i (Owfsk), правило изэлементами i (Owfsk), правило изk - 1k
элементами i (Owfsk), правило из
элементами i (Owfsk), правило из
НВ и существует по меньшей мере такой, что N] входит со знаком S° с головой N
1 +1
если K>L, то весли K>L, то вК должен рассмат-К должен рассмат-Интуитивно можно понять, что процессе вычисления основной атом
если K>L, то в
если K>L, то в
К должен рассмат-
К должен рассмат-
риваться раньше, чем L, поскольку при попытке вывода L потребуются предварительные знания о том, является ли К fили гК) выводимым из S. При этом заметим, что наше определение отношения > полностью непроцедурно. Отметим также, что отношение > на НВ является транзитивным, но, вобще говоря, оно не антисимметрично и не рефлексивно. Следовательно, в общем случае > не является отношением частичного порядка на НВ.
Если К > L, то говорят, что К имеет более высокий приоритет, чем L.
Мы будем использовать отношение > для сравнения различных эбрановских моделей заданного множества дизъюнктов Дейталога"1 S.
Пусть 外]и 32 ~ две эбрановские модели множества S. Будем говорить, что 外】предпочтительнее 32 тогда и только тогда, когда для каждого элемента L w 外]一外2 существует элемент К w 外】一32> такой что К > L.
Интуитивно можно понять, что 外] предпочтительнее 32 тогда и только тогда, когда 外】можно получить из 32 удалением одного или больше основных атомов более высокого приоритета и добавлением ни одного или больше основных атомов более низкого приоритета.
Модель Эрбрана 3 множества S называется совершенной тогда и только тогда, когда не существует модели Эрбрана множества S предпочтительнее 柞
Говоря нестрого, 3 является совершенной тогда и только тогда, когда она содержит настолько мало основных атомов высокого приоритета, насколько это возможно, и не больше, чем необходимо атомов более низкого приоритета.
Конечно, каждая совершенная модель 3 множества S является также и минимальной моделью S. Предположим, что 3 не является минимальной моделью. Тогда можно удалить некоторые атомы из 外 и получить, таким образом, модель Q, которая предпочтительнее 3- Это противоречит предположению о совершенности 3-
Не все множества дизъюнктов Дейталога"* имеют совершенную модель, но, как утверждает следующая теорема, стратифицируемые программы Дейталога"1 ее имеют.
Теорема 11.5. Пусть Р - стратифицируемая программа Дейталога"1 и Е - произвольная экстенсиональная база данных. Тогда множество Р и Е имеет единственную совершенную модель, которая совпадает с моделью М , определенной в разд. 11. 2. 2.
Проиллюстрируем эту теорему двумя простыми примерами.
Пример 11.16. Рассмотрим еще раз программу Р, состоящую из правил R】 и К? (примеры 11. 13 и 11. 15):
%: Q(b) : - npfaj
r2: r(е) :- rq(b)
где p - предикат EDB, a g и г - предикаты ZDB. Предположим, что эти программы выполняются над пустой EDB Е = о. Легко видеть, что Р = Р и Е имеет только две минимальные модели:3= fp(a), г(с)} и
32 = {Q(b)}. Поскольку p(a) > q(b), 甘】 предпочтительнее 32< Таким образом, 32 является совершенной моделью программы Р. Отметим, что это - Мр, вычисленная в примере 11. 15.
Пример 11.17. Рассмотрим следующую программу Р:
%: q(b) :- ^p(a) 也:(e :- rp(a)
Очевидно, что Р имеет две минимальные модели: 551={Р(а)} и ^2={q(b)t г(с)}. 32 можно получить из Зг исключением атома р(а) с более высоким приоритетом и добавлением атомов q(b) и г(с) с более низким приоритетом. Таким образом, 32 предпочтительнее 外], и, следовательно, 32 является совершенной моделью программы Р. Этот пример показывает, что совершенная модель иногда может иметь большую кардинальность, чем другие минимальные модели. □
Заметим, что стратифицируемость является достаточным, но не необходимым условием существования единственной совершенной модели. Стратифицируемость - это свойство, определяемое с помощью упорядочивания множества предикатных символов программы Р. Используя упорядочивание на множестве НВ возможных основных атомов, можно сформулировать более общее достаточное условие существования единственной совершенной модели. Программа, удовлетворяющая этому условию, называется локально стратифицируемой.
Множество дизъюнктов Дейталога"1 S является локально стратифицируемым тогда и только тогда, когда можно произвести разбиение базиса Эрбрана НВ на конечное число страт НВ】НВ^ таким образом, что для всех
основных атомов К и L из НВ выполняются два следующих условия:
Если К ~-> L, то порядковый номер (высота) страты, содержащей К, не меньше порядкового номера (высоты) страты, содержащей L.
Если К > L, то К принадлежит страте, порядковый номер (высота) которой ниже высоты страты, содержащей L.
Очевидно, что каждая стратифицируемая программа является также локально-стратифицируемой. Обратное, однако, неверно (см. пример 11. 18). Понятие локальной стратификации можно расширить для случая программ дейталога"1 с фу нкци о нальными символами. В этом случае, однако, локальная стратификация может состоять из бесконечного числа страт.
Теорема 11.6. Если множество S локально стратифицируемо, оно имеет единственную совершенную модель.
Пример 11.18. Пусть программа Р состоит из следующих правил:
%: р(Ь) :- ip(a)
叱:Р(с) : - ip(b)
Очевидно» что Р нестратифицируема, но она является локально-стратифицируемой со следующими стратами: HB^={p(a)}, HB2={p(b)}t НВ з=НВ-(НВ)НВ 2). Единственной совершенной моделью Р есть {р(Ь)}. Заметим, что эту модель можно вычислить, следуя порядку страт: от самой низкой до самой высокой (аналогично простой стратификации).
и выраз итель наяи выраз итель наяХотя локальная стратификация является более общей, чем простая стратификация, большинство существующих прототипов интерпретаторов Дейталога"1 основаны на простой стратификации (гл. 12). В настоящее время локальная стратификация все еще является темой, открытой для исследований. Не исследована, в частности, эффективность алгоритмов стратификации и алгоритмов вычисления для локально-стратифицируемых программ. Скорее всего, эти алгоритмы гораздо менее эффективны, чем соответствующие алгоритмы для простой стратификации.
и выраз итель ная
и выраз итель ная
11. 2.4. инфляционная семантика мощность
Ниже мы проведем сравнение различных формализмов Дейталога с точки зрения их выразительной мощности.
Результаты представим в виде короткого обзора, поскольку полное изложение этого материала потребовало бы введения теоретических понятий, выходящих за рамки данной книги. Заинтересованный читатель может изучить оригинальные исследовательские статьи по этому вопросу, ссылки на которые приведены в разд. 11.5.
Вспомним сначала некоторые понятия из разд. 11. 2. 2 и введем определение инфляционной семантики программы Дейталога"1. Пусть Р - программа Дейталога"1. Трансформация Тр определяется следующим рбразом:
VW £ НВ: Tp(W)=W и FACTS(Р) и inferl^(RULES(P) и W).
Инфляционную семантику программы Р можно определить как отображение ЗЛ; из степенного множества ЕНВ в степенное множество IHB, такое, что для каждого конечного множества V G ЕНВ
^(V)=lfp(Tpuy) n IHB.
Когда вместе с Р задана цель ? - Н, то результат выполнения программы Р, примененной к EDB 7, будет состоять из всех элементов V и 額;(0), которые являются экземплярами Н. Таким образом, в этом случае инфляционная семантика программы Р с целью "? - Н" определяется при помощи отображения ЗЛ; н из степенного множества ЕНВ в степенное множество НВ, такое, что для каждого конечного множества VGEHB
职;н(。)= (Cl С е НВ л С е О и ЗЛ; ^(V) л Н > С}
Заметим, что ЗЛ; и ЗЛ; н определены для любой программы, в то время как ЗЛр и ЗЛр н - только для стратифицируемых программ.
Как утверждается в следующей теореме, Дейталог"1 при инфляционной семантике обладает такой же вычислительной выразительностью, как и стратифицируемый Дейталог"1.
Теорема 11.7. Для любой программы Р стратифицируемого Дейталога"1 существует программа Дейталога"1 Р‘, такая что для каждой цели Н, соответствующей некоторому предикатному символу, входящему в Р, ЗЛр н = ЗЛр, н-
Таким образом, поведение любой стратифицируемой
программы с заданной целью Н, которая выполняется по стратам (как определено в разд. 11. 2. 2), может быть смоделировано программой Дейталога"1 Р‘, которая выполняется в соответствии с инфляционной семантикой. С другой стороны, можно построить достаточно сложные запросы, которые выразимы в инфляционном Дейталоге"1, но которые нельзя сформулировать в стратифицируемом дейталоге"1. Это означает, что инфляционный Дейталог"1 строго более выразительный, чем стратифицируемый Дейталог"1. Кроме того, инфляционный Дейталог"1 имеет такую же выразительную мощность, как и логика неподвижной точки на конечных структурах (хорошо известный формализм, полученный путем расширения логики первого порядка оператором наименьшей неподвижной точки для положительных формул первого порядка) •
Конечно, стратифицируемый Дейталог"1 строго более выразителен, чем чистый Дейталог. Ниже приведен пример запроса, который можно выразить в стратифицируемом Дейталоге"1, но нельзя выразить в чистом Дейталоге.
Пример 11.19. Пусть г и s - предикаты EDB, а р и g - предикаты IDB. Рассмотрим следующую программу Р на стратифицируемом Дейталоге"1 :
q(X, Y) :- s(X, Y), -.pfX, Y). p(X, Z) :- r(X, У), p(Y, Z)・ p(X, Y) :- r(X, Y).
Рассмотрим некоторый запрос ?-q(X, У), ассоциируемый с этой программой. Запрос сформулирован относительно общей EDB Е, в которой предикаты г и s определены экстенсионально. Можно показать, что такой запрос нельзя выразить с помощью программы на чистом Дейталоге (даже если использовать встроенный предикат *). □
В свою очередь, как уже говорилось в гл. 8, чистый Дейталог строго более выразителен, чем нерекурсивный Дейталог, который эквивалентен положительной реляционной алгебре.
Таким образом, мы имеем иерархию версий Дейталога, начиная от нерекурсивного Дейталога, как наименее выразительного формализма и, заканчивая инфляционным Дейталогом"1, как наиболее выраз ит ель ным формализмом. Эта иерархия приведена на рис. 11.2.
Отметим, что почти все исследовательские прототипы реализаций Дейталога используют стратифицируемое отрицание, хотя инфляционное отрицание и более выразительно. Это объясняется не только историческими
соображениями (выразительная мощность инфляционного^ отрицания была открыта -позже). Оказывается, что : стратифицируемый Дейталог"1 по сравнению с инфляционным является более естественным и легким языком; запросов. Формулирование запросов на инфляционном1^ Дейталоге"1 может быть достаточно сложным. Так, j непросто найти инфляционную программу Р‘, которая эквивалентна программе Р на стратифицируемом5 Дейталоге"1 из примера 11. 19. Кроме того, те запросы, J которые можно выразить в инфляционной семантике, но* нельзя выразить в стратифицируемой семантике, не оаень; существенны даже для перспективных приложений баз данных. Однако, чтобы достичь лучшего понимания этого вопроса, необходимы дополнительные исследования.
ИНФЛЯЦИОННЫЙ ДЕЙТАЛОГ"*
СТРАТИФИЦИРУЕМЫЙ ДЕЙТАЛОГ"*
РЕЛЯЦИОННАЯ АЛГЕБРА
НЕРЕКУРСИВНЫЙ ДЕЙТАЛОГ
ПОЛОЖИТЕЛЬНАЯ РЕЛЯЦИОННАЯ АЛГЕБРА
Рис. 11.2. Иерархия выразительности различных ; версий Дейталога.|
Представление сложных объектов и1
манипулирование имиI
Существует несколько различных подходов к включению 1 концепции сложных структурированных объектов в 1 формализм Дейталога. Мы будем следовать подходу, | принятому в проекте LDL (Logic Data Language}, | поколъку последний широко. известен, используемый в, нем язык является одним из наиболее мощных. Проект LDL ] осуществляется МСС в Остине (штат Техас). Мы опишем | некоторые общие особенности проекта LDL, связанные с 彳 концепцией сложных объектов. Более специфические *
особенности LDL, также как и некоторые детали реализации, изложены в гл. 12.
Базовые элементы языка LDL будут рассмотрены в разд. 11.3. 1. Более формальное его описание приведено в разд. 11. 3. 2. Отметим, что LZ)L также допускает использование стратифицированнного отрицания в том виде» как это описано в разд. 11. 2. 2. Наконец, в разд. 11.3.3 вкратце рассмотрены вопросы, связанные с перспективными реляционными моделями данных, которые позволяют представлять сложные объекты. Некоторые из этих моделей описаны более подробно в гл. 12.
Базовые элементы языка LDL
Базовые элементы, которые мы добавим к чистому Дейталогу, составляют (неинтерпретируемые) функциональные символы, множества и ряд специальных встроенных функций и предикатов для манипулирования множествами. Рассмотрим их более подробно.
В логическом программировании и в более общем случае в некоторых формализациях логики первого порядка допускаются сложно-структурированные термы, построенные с помощью функц и о наль ных символов, констант и переменных. Использование фу нкц и о наль ных символов позволяет представлять объекты реального мира согласованным и компактным образом.
Функциональные символы являются неинтерпретируемыми (или свободно интерпретируемыми), поскольку они не имеют предопределенного значения. Формальная семантика каждого функционального символа зависит исключительно от семантики программы, в которую этот функциональный символ входит. Неинтерпретируемые функциональные символы не следует путать с вычислимыми функциональными символам% которые соответствуют точно предопределенной функции данных, вычисляемой автоматически во время выполнения программы (одна из таких функций - scons, используемая в LDL, рассмотрена ниже в этом разделе ).
Неинтерпретируемые функциональные символы вкючают- ся в Дейталог без особых семантических трудностей. Результирующий формализм близок к формализму общего логического программирования (General Logic Programming). Важно учесть, однако, один момент: даже при конечном словаре констант и функциональных символов можно сгенерировать бесконечное число вложенных основных термов. Вследствие этого ответом на запрос на Дейталоге, который построен с помощью программы с функциональными символами, может быть бесконечное множество. Таким образом, как и в Прологе,
конечность результирующего множества для заданного запроса обеспечивает программист. И если система не следует некоторым условиям безопасности, то нельзя гарантировать заранее конечность множества ответов.
Функциональные символы языка LDL обозначаются строкой строчных букв аналогично символам констант и предикатов. Из фу нкц и о наль них символов, переменных и констант можно построить очевидным способом вложенные термы любой глубины, которые используются в качестве аргументов предикатов. Таким образом, можно построить факты и правила, содержащие сложные структуры. Используя общую унификацию, которая учитывает функциональные символы и вложенные термы, можно генерировать новые факты, применяя правила к известным фактам, аналогично чистому Дейталогу.
Пример 11.20. Для хранения информации об автомобилях и их владельцах можно использовать факты со следующей структурой:
carfvehiclе(PLATE, MAKE, YEAR), ovner(name(FIRST, LAST), got_fгот(OWNER))).
Отметим, что данной схеме могут соответствовать факты с различным уровнем вложенности. В частности, предполагается, что поле OWNER содержит список текущего владельца и всех предыдущих владельцев данного автомобиля. Этот список имеет следующую структуру:
owner(name(fiгst1, lastl), got_from( ovner(name(first2t last2j, got_from(
owner(name(firstn, lastn), got_from(dealer))..)).
Предположим, что EDB содержит следующие факты:
car(vehicle(пу-858778, chevy-vega, 1983j, ovner(name(arthurtkeller), got_from(dealer))).
car(vehicle(ca-baby53t Oldsmobile, 1953), owner(name(arthur, keller), got_from(owner(name(gio, viederhold), got_from(ovner(name(arthurt samuel), got_from(dealer))))))).
car(vehicle(ny-358735t Volkswagen, 1956), ovner(name(arthurtkeller), got_from(owner(name(georg, kreisel), got_from(ovner(name(kurt, godel
got_from(owner(name(norbert, wiener ), got_from(dealer))))))))).
car(vehicle(ca-933473, volvot 1988),ovner(name(gio, wiederhold),got_from(dealer))).
Ниже приведены правила, определяющие предикат possesed, который имеет следующее значение: possesed(PERSON, VEHICLE) истинен тогда и только тогда, когда некто PERSON является владельцем автомобиля VEHICLE либо некоторое время был таковым.
%:possesed(PERSON, VEHICLE):- car(VEHICLE, ovner(PERSONt_)).
R2:possesed(PERSONt VEHICLE):--
car(VEHICLE. OWNER), antecedent(PERSON, OWNER).
及3:antecedent(PERSON, ovner(_tgot_from(ovner(PERSONt_)))).
R^:antecedent(PERSON, owner(_, got_from(OWNER1))):- antecedent(PERSON, OWNER1).
Правило R】 утверждает, что каждый раз, когда PERSON является текущим владельцем автомобиля VEHICLE, можно вывести факт possesed(PERSON, VEHICLE). Отметим, что подчеркивание может использоваться, как и в Прологе, для обозначения анонимных переменных. Правило R^ утверждает, что если PERSON является предшественником в цепочке всех владельцев текущего владельца автомобиля VEHICLE, то мы также можем вывести факт possesed(PERSONt VEHICLE).
Понятие предшественника определено правилами R3 и %. Отметим, что правило % имеет пустое тело, т. е. % является неосновным фактом. Такие факты не допускаются в чистом Дейталоге. Отметим также, что правила R^ и К^ являются небезопасными. Из этих правил можно вывести бесконечное число фактов, типа antecedent(X, Y). Тем не менее обработка любой цели вида possesed(PERSON, VEHICLE) требует вывода только конечного числа предшественников. Фактически для того, чтобы не применять н слепой" прямой вывод, компилятор LDL использует метод, подобный стратегии магических множеств. В нашем примере подцель antecedent вызывается в теле правила К?, при этом ее второй
аргумент связан основным термом (т. е. термом, не содержащим переменных). Отметим, что это связывание приходит из первого литерала тела правила К? и передается с помощью горизонтального распространения информации во второй литерал тела правила 及?・ Это связывание затем распространяется в правила R3 и R《, обеспечивая, таким образом, безопасную обработку.
Ниже приведен пример факта, сгенерированного правилами R3-R , примененными к нашей EDB:
possesed(name(arthur, samuel), vehicle(ca-baby53t Oldsmobile, 1953 )).
Особенно полезным структурирующим понятием, которое применяется как в математике, так и в жизни вообще, является понятие множества. Множества позволяют создавать агрегаты объектов, имеющих общие свойства, без явного перечисления этих свойств для каждого отдельного объекта. Можно определять множества с различным уровнем вложенности, т. е. можно рассмотреть множество, элементами которого являются множества и т. д.
В LDL множества задаются либо с помощью перечисления их элементов (пример 11. 21), либо группирования (пример 11.22). Два множества являются сопоставимыми тогда и только тогда, когда они содержат одинаковые элементы. При этом порядок элементов не имеет значения.
Пример 11.21. Мы можем определить предикат hobbies_of(FIRST_NAMEt SETjOF_HOBBIES) с помощью явного перечисления множества всех хобби ряда лиц. Рассмотрим, например, следующую EDB:
hobbies_pf(hurt, {gardening, physics, spiritism}) hobbies_of(johnt {gardening, painting, shopping}) hobbies_pf(emanuel, {surfing, ufo-matching}) hobbies jof(robert, {physics, spiritism, gardening})
Теперь рассмотрим правило
same_hobbies(Xt Y) :- hobbies_offX, Yj, -hobbies~of(Yt Z), X”.
Применяя это правило к EDB, можно вывести новый факт same__hobbies(hurt, robert ) и same_hobbies(robert, kurt).
Следующий пример показывает, как конструкция группирования множеств языка LDL "< ... >" может использоваться в головах правил для определения множества с помощью задания свойств его элементов.
Пример 11.22. С помощью предиката EDB car.
определенного в примере 11. 20, определить новый предикат
allcars(PERSONt <VEHICLE>)allcars(PERSONt <VEHICLE>)allcars(PERSON, VEHICLESET), который связывает с каждым лицом множество автомобилей, владельцем которых оно является:
allcars(PERSONt <VEHICLE>)
allcars(PERSONt <VEHICLE>)
примера 11.20, можно сложных фактов IDB,примера 11.20, можно сложных фактов IDB,:-car(VEHICLE, owner (PERSON, _)).
примера 11.20, можно сложных фактов IDB,
примера 11.20, можно сложных фактов IDB,
Применяя это правило к EDB из сгенерировать несколько новых например следующий факт:
1983 )t 1953), 2956)}).1983 )t 1953), 2956)}).allcars(name(arthur, keller), {vehicle(ny-858778t chevy-vega, vehicle(ca-baby53t Oldsmobile, vehicle(ny-358735t Volkswagen,
1983 )t 1953), 2956)}).
1983 )t 1953), 2956)}).
С помощью предиката possesed(PERSON, VEHICLE) из
примера 11.20 можно определить новый предикат
owners(VEHICLE, PERSONSET)
первый аргумент которого определяет автомобиль, а второй аргумент содержит множество всех лиц, которые когда-либо были владельцами этого автомобиля:
owners(VEHICLE, <PERSON>) :- possesed(PERSON, VEHICLE)
В LDL имеется несколько встроенных предикатов и функций для обработки множеств. Вот наиболее важные из них:
member(Et S) - встроенный предикат, выражающий тот факт, что Е является элементом множества S. Отметим, что Е может быть означен сложным термом, содержащим в качестве компонент другие множества.
union(AtВ, S) - встроенный предикат, выражающий тот факт, что S н Л и В.
Кроме того, в LDL поддерживаются предикаты равенства и неравенства и несколько арифметических предикатов.
Формально перечисляемые множества можно представить с помощью специального функционального символа scons (конструктор множеств). Арность этого функционального символа равна 2. Его первым аргументом является терм Т, а вторым - множество S. Выражение sconsfT,S) представляет собой множество SufT). Например, множество (а, Ь, с} можно представить как scons(a, (b, scons(ct {})))
или как scons(bt scons(ct fa, {}))), и т. д. Таким образом, перечислимые множества в обычной записи можно рассматривать как сокращенную запись соответствующего вложенного терма scons. Единственным множеством, которое нуждается в специальном представлении, является пустое множество. Это множество обозначается специальной константой {}.
Важный вопрос - унификация множеств. Конструктор множеств scons является интерпретируемым функциональным символом с точным значением. Два основных множества унифицируемы тогда и только тогда, когда они состоят из одних и тех же элементов. Так, множества scons(a, scons(bt (scons(с,{}))) и scons(bt scons(с,scons(а,{}))) унифицируемы. Эта унифицируемость не может быть обнаружена с помощью обычного алгоритма унификации для термов с неинтерпретируемыми функциональными символами. Действительно, такой алгоритм завершит работу неудачей, поскольку в качестве первого аргумента в этих двух термах используются разные константы (а и Ь), которые, конечно же, не унифицируемы. Нам нужна более мощная концепция унификации, которая учитывала бы особенные свойства функционального символа scons. Ниже представлены его характерные свойства.
КОММУТАТИВНОСТЬ: scons(X, scons(Yt S)) = scons(Yt scons(X, C))
ИДЕМПОТЕНТНОСТЬ: scons(X, scons(XtS)) = scons(XtS)
Метод унификации, учитывающий свойства специальных функциональных символов и констант, которые интерпретируются в соответствии с определенной теорией, называется унификационной теорией. Унификация множеств является особым случаем унификационной теории, поскольку функциональный символ scons и символ {} интерпретируются как теоретике-множественные объекты.
Унификацию множеств (называемую также сопоставлением множеств) можно корректно определить с помощью нотации scons. Однако для простоты мы используем стандартную нотацию. Мы будем рассматривать конечные множества вида ,...,t где каждый
1 п
элемент 亡;является термом, т. е. константой, переменной, множеством термов или вложенным термом (который, в свою очередь, может содержать множества и переменные в качестве подтермов). Множество является основным тогда и только тогда, когда все его элементы являются основными. Терм языка LDL ffti,...,tn) является основным тогда и только тогда, когда каждый его аргумент является основным. Определим сначала унифицируемость основных множеств и термов, а затем множеств и термов вообще. После того как мы определим
концепцию унификации термов в языке LDL, ее расширение для случая унификации литералов не составит труда.
Две константы сопоставимы тогда и только тогда, когда они равны. Два перечислимых основных множества языка LDL Л и В сопоставимы тогда и только тогда, когда каждый элемент из 4 сопоставим по меньшей мере с одним элементом из В и каждый элемент из В сопоставим по меньшей мере с одним элементом из Л. Два основных терма 0(亡],亡 П) и ° (t],・・・,t;n) сопоставимы тогда и
только тогда, когда О и О являются одинаковыми фкнкциональными символами и 亡〔сопоставим с 亡^ для isim Например, два терма f f {a, {a, bt c}}t b) и £(f fc, a, b}t a), b) сопоставимы.
Два общих терма языка LDL Т^ и Т? ( константы, переменные, функции-термы, возможно содержащие переменные) являются эквивалентными, тогда и только тогда, когда после подстановки вместо каждой переменной различных константных символов эти термы являются сопоставимыми. Так, термы f ({X, {X, У, c}}t Y) и f( {{с, X, Y}t X}, У) эквивалентны, поскольку после подстановки констант х и у вместо X и У соответственно мы получим сопоставимые основные термы. С другой стороны, нетрудно видеть, что термы f ({X, {X, У, c}}tY) и f({{с, Z, Y}t Z}, Y) не эквивалентны. Отметим, в
частности, что два сопоставимых основных терма также
эквивалентны.
Два общих терма языка LDL 亡]и t2 унифицируемы, тогда и только тогда, когда существует подстановка в, заменяющая О и более переменных такими термами языка LDL, что 亡]8 и 12в эквивалентны, В этом случае в называется унификатором термов 亡]и 12, Унификатор 8 термов 亡]и 12 является более общим, чем некоторый
унификатор г, тогда и только тогда, когда существует подстановка 入, такая, что ЭЛ = 2r.
В контексте чистого Дейталога (разд. 6. 1. 3) и в общем контексте логического программирования унификатор 8 литералов L^ и L? является наиболее общим унификатором (НОУ) тогда и только тогда, когда он более общий, чем любой другой унификатор. Как показано в разд. 6. 1. 3, для пары литералов Дейталога может существовать несколько НОУ. Тем не менее можно отметить, что каждый раз, когда L^ и L^ унифицируемы, они имеют по меньшей мере один НОУ. Из определения НОУ также следует, что каждый НОУ у для L^ и L^ можно
получить из любого другого НОУ 6 для L] и L2c помощью
композиции с соответствующей подстановкой I, переименовывающей переменные, т. е. х=51. Таким образом, для пары литералов существует единственный НОУ с точностью до переименования переменных.
К сожалению, эти свойства не имеют места в контексте теории резолюции. Если мы используем приведенное выше определение НОУ для термов LDL, то сможем легко найти такие примеры 亡]и t2, что 亡]и t2 унифицируемы, однако НОУ для них не существует.
Пример 11.23. Рассмотрим термы 亡]: {X, У} и 12: {а, Ь}. Существуют два подходящих унификатора: 0-{Х/а, Y/b} и a={X/bt Y/a}. Все другие унификаторы являются сверхмножествами либо в, либо ь, и, следовательно, есть менее общие, чем 8 либо сг. Однако
ни е, ни сг не являются НОУ в традиционном смысле этого определения. Действительно, в - не более общи黄, чем сг, поскольку не существует подстановки 入, тако!!, что сг=вЛ, и из тех же соображений сг не является более общим, чем в. Таким образом, 亡]и 12 не имеют НОУ, хотя и являются унифицируемыми. Как е, так и от являются независимыми унификаторами максимальной общности.
Итак, два унифицируемых терма LDL 亡] и 12 (которые являются либо множествами, либо вложенными структурами с множествами в качестве подтермов) не обязательно
имеют НОУ, хотя могут иметь несколько максимально общих унификаторов, которые в определенном смысле имеют равное право на существование. Таким образом, вместо одного НОУ мы будем рассматривать множество максимально общих унификаторов.
Более формально унификатор 8 для 亡]и 12 является
максимально общим (или просто максимальным), тогда и только тогда, когда для каждого унификатора 入, более общего, чем е, верно также и то, что е более общий, чем 入.
Базой максимальных унификаторов (БМУ) для пары термов LDL 亡】и 亡? является множество 0 унификаторов для 12 и 12, которые удовлетворяют следующим
условиям:
Полнота: для каждого унификатора 入 термов 亡] и 亡2 существует по меньшей мере один унификатор в € 0, более общий, чем 入.
Минимальность : ни один унификатор в 0 не является более общим, чем любой другой унификатор в 0.
Пример 11.24. Множество унификаторов £8, ь} из примера 11. 23 есть БМУ.
Легко видеть, что каждый элемент БМУ действие тельно является максимальным унификатором. Кроме того БМУ двух термов LDL единственна с точностью до переименования переменных (аналогично тому, как НОУ для двух литералов чистого Дейталога - единственный с точностью до переименования переменных).
Введенное нами понятие унификации для термов LDL естественно расширяется для литералов LDL, т. е. для выражений вида Of 11,..•tn)> где О - предикатный символ, a 11, ...,t^ - термы LDL (возможно, сложные).
Прямой и обратный выводы в LDL и в подобных ему языках определяются так же, как в контексте чистого Дейталога. Однако при унификации двух литералов, содержащих множества, вместо НОУ используется множество унификаций БМУ. Каждый элемент БМУ представляет собой возможную альтернативную унификацию. Таким образом, правило LDL вида Lq :- Li, . .. , L^, применяемое к множеству сложных основных литералов К1, . . . , K^t каждый из которых сопоставляется с соответствующим и ни с каким другим литералом этого правила, может произвести несколько новых литералов вида L°e из-за различных выборов максимальных унификаторов.
Пример 11.25. Рассмотрим правило языка LDL R: q(X) :- р({X, Y}) и основной факт LDL F: р({а, Ь}). Применяя R к F, получаем два новых факта: q(a) и q(b)t поскольку БМУ для р({X, Y}) и р({а, Ь}) содержит два максимальных унификатора е и сг (см. примеры 11. 23 и 11. 25).
Нетрудно построить алгоритм, вычисляющий БМУ для пары термов языка LDL. При этом в качестве примитива можно использовать стандартный алгоритм унификации. Отметим, что объемы выходных и входных данных для такого алгоритма часто связаны экспоненциальной зависимостью, поскольку может существовать экспоненциально большое число независимых максимальных унификаторов. Задача проверки унифицируемости двух термов LDL является WP-сложной, поэтому вряд ли можно построить очень эффективный алгоритм для поиска даже одного максимального унификатора. Информация по реализации унификации множеств в системе LDL приведена в разд. 12. 1.
В LDL также имеются специальные предикаты choice и partition, которые позволяют выполнить недетерминированный поиск и разделить множество на две
непересекающиеся части. Эти предикаты вместе с другини осбенностями LDL, такими, как обновление отношений, будут рассмотрены в разд. 12. 1. В следующем раз деле мы рассмотрим некоторые более фундаментальные проблемы, связанные со смыслом и хорошей определенностью простых программ на языке LDL.
11. 3. 2.11. 3. 2.Семантика допустимых LDL-программ
11. 3. 2.
11. 3. 2.
Как и для программ на чистом Дейталоге, для LDL- программ можно определить теоретике-модельйую семантику. Такая семантика для представительного подмножества LDL была определена Бери, Накви, Рамакришнаном, Шмуэли и Тсуром. Ниже приведены в упрощенном виде основные положения их подхода.
Синтаксис ядра языка LDL, рассматриваемый в этом раз деле, почти соответствует синтаксису, описанному (неформально) в разд. 11.3. 1. Однако здесь мы делаем предположение, что все перечислимые множества (с переменными в качестве элементов или без них) представляются с помощью специального функтора scons. Правило LDL есть либо обыкновенное правило, либо группирующее правило, содержащее в голове символы конструирования множества <, >. Для группирующего правила имеют место следующие ограничения: а) тело не должно содержать символов конструирования множеств; б) голова содержит только одно вхождение вида <Х>; в) тело не содержит отрицательных литералов.
Ниже приведены основные характеристики теоретико-модельной семантики LDL.
При описании теоретике-модельной семантики чистого Дейталога мы использовали универсум Эрбрана, состоящий просто из символов констант (гл. 6). Для семантики LDL необходимо использовать обобщенный универсум Эрбрана U, который, кроме того, содержит сложные структуры с ограниченным уровнем вложенности без переменных и конечные множества таких структур. Следовательно, любой элемент универсума U языка LDL есть либо константа, либо сложный основной терм, построенный из констант, неитерпретируемых функциональных символов (не допускается появление символа scons ни в одном из термов U) и множеств или конечного множества термов, а также, возможно, пустого множества 0.(Отметим, что понятие "множество" здесь исполь
зуется в математическом смысле, т. е. оно не зависит от представления. ) Базис Эрбрана языка LDL состоит из всех фактов вида 11гДе 山 - n- ар ный предикатный символ, a t1tn e U.
На основе универсума U языка LDL аналогично интерпретации Эрбрана определяется интерпретация LDL. Константы в U соответствуют сами себе, за исключением константы пустого множества {}, которая соответствует пустому множеству 0. Каждому невстроенному п-арному функциональному символу соответствует отображение из [У1 в Ц, такое, что кортеж (亡],...,亡门) отображается в терм £(^1,・..,^п) для всех t г, . . . , tw U. На интерпретацию встроенных функций и предикатов налагаются некоторые ограничения: scons(tt s) интерпретируется как {t} и s; member(t, s) имеет логическое значение "истина" только тогда , когда t € s, т. е. каждому невстроенному п-арному предикатному символу соответствует некоторый предикат на
U-факт - объект вида 山(气,•••,{), где 山 обозначает n-арный предикатный символ (обыкновенный или встроенный) и каждый ei является элементом множества U. Подобно классической интерпретации Эрбрана, каждая интерпретация LDL может быть определена как некоторое множество фактов.
Пусть 工-некоторая интерпретация LDL. U-факт F истинен ( или удовлетворяется) в 工 тогда и только тогда, когда Fei; в противном случае F ложный в I. Необходимо соблюдать дополнительные специальные условия для U-фактов в случае встроенных предикатов. Например, union(eе2,е^) истинен в 工 только тогда, когда е , е и е суть множества и е и е = е .
12 3 12 3
Конъюнкция U-фактов и/или отрицаний U-фактов истинна в 工 тогда и только тогда, когда каждый ее элемент истинен в I.
Пусть R - правило LDL. Под основной подстановкой для R будем понимать подстановку, которая заменяет каждую переменную в R элементом из U. Отметим, что если Ф - основная подстановка, то отсюда не обязательно следует, что все литералы, встречающиеся в РФ, являются U-фактами или отрицаниями U-фактов. Действительно, эти литералы могут содержать символ {} и несколько функторов scons, которые не принадлежат словарю универсума U. Поэтому мы обозначим через РФ формулу, полученную из RW заменой всех вхождений {} на о и трансформацией каждого выражения scons в соответ^ ствующее U-множество. Заметим, что все литералы из РФ есть либо U-факты, либо отрицания U-фактов.
Логическое значение обыкновенного правила R в интерпретации 工 можно определить аналогично тому, как это сделано для случая чистого Дейталога: R истинно в 工 тогда и только тогда, когда для каждой основной
подстановки Ф для R либо тело РФ принимает значение "ложь", либо голова^ 天帀 принимает значение "истина" (отметим, что тело РФ есть конъюнкция U-фактов и/или отрицаний U-фактов).
Пусть R - группирующее правило вида ^(<К>) :- BODY, где ф обозначает предикатный символ, и пусть 工 - некоторая интерпретация LDL. Пусть С - ^множество всех подстановок Ф, таких, что тело правила РФ истинно в 工, и пусть С = ft|y/twC}.
R истинно в 工 тогда и только тогда, когда выполняется одно из следующих условий.
С - пусто;
Qy - конечное и непустое множество и 山(%) € I.
Если % бесконечно, то логическое значение R не
случаях R ложно в I.когда тело правила R числа Г-значений, логислучаях R ложно в I.когда тело правила R числа Г-значений, логиопределено. Во всех остальных
случаях R ложно в I.
когда тело правила R числа Г-значений, логи
случаях R ложно в I.
когда тело правила R числа Г-значений, логи
Отметим, что каждый раз, истинно в 工 для бесконечного
ческое значение всего правила не определено. Поскольку универсум LDL U не содержит бесконечных множеств в качестве элементов, мы не в состоянии интерпретировать голову R как U-факт.
Более общая теория моделей для LDL, в которой допускаются бесконечные множества, включая множества любой фиксированной трансфинитной кардинальности INa, была разработана Бери, Накви, Шмуэли и Тсуром ( [Beer 89] и [Naqv 89]). Однако в этой более общей теории правило R также может иметь неопределенное логическое значение в некоторой интерпретации I. Это происходит, когда тело правила R истинно в 工 для множества экземпляров головы, кардинальность которого больше, чем допустимая максимальная кардинальность INa для U-термов.
Аналогично в интерпретации LDL можно определить
логическое значение группирующего правила, голова которого кроме специальной переменной в угловых скобках содержит также и другие пременные. В этом случав каждой различной комбинации значений негруппирующих переменных в голове правила соответствует множество значений группирующей переменной. Поскольку формализация этого определения более сложная и дальше не используется, мы ее рассматривать не будем.
Под LDL-программой будем понимать множество правил и фактов языка LDL. Пусть S - LDL-программа и I - интерпретация. 工 является моделью S тогда и только тогда, когда каждый элемент S истинен в I.
Пример 11.26. Рассмотрим LDL-программу, состоящую из правила
allbadboys(<X>) ;- badboy(X)
и из фактов badboy(jim) и badboy(Joe). Следующие множества U-фактов являются моделями для S:
Mi = {badboy( jim), badboy( joe )t allbadboys({jimt joe})} М2 = {badboy( jim ), badboy( joe )t badboy( jack ), allbadboys({jimt joet jack})}
Отметим, что в контексте LDL свойство пересечения моделей не выполняется, т. е. пересечение двух моделей множества дизъюнктов LDL S не обязательно является единственной минимальной моделью. Это свойство не выполняется не только из-за возможного наличия отрицательных литералов в телах правил LDL. Как показывает следующий пример, существуют множества, состоящие только из положительных дизъюнктов LDL, для которых свойство пересечения моделей не выполняется.
Пример 11.27. Рассмотрим еще раз множество S и модели Mi и М2 из примера 11.26. Пусть М = % с 厶 = {badboy(jimj, badboy(joe)}. Очевидно, что V не является моделью S. Отметим, что ни одно из подмножеств М】или М? не является моделью S. Следовательно, М】 и М? являются минимальными моделями.
Следующий пример показывает, что существует множество дизъюнктов LDL, которое вообще не имеет модели.
Пример 11.28. Рассмотрим множество S', содержащее следующие утверждения LDL:
R: р(<Х>) ; - р(Х). F: р(а).
Предположим, что S' имеет модель М. Пусть Z = {t\p(t) € М}. Отметим, что Z должно быть конечным, в противном случае R не удовлетворялось бы в М. Z также не пусто: а € Z. Отсюда следует, что p(Z) w М. Из определения Z следует, что Z € Z. Это означает, что Z является термом с бесконечным уровнем вложенности, т. е. налицо противоречие. Следовательно, S' не имеет модели.
Отметим, что определение множества из приведенного выше примера является типичным примером циклической ссылки на себя. При попытке определить множество <Х> мы автоматически определяем его новый элемент, т. е. само множество. Следовательно, множество, определяемое правилом R и фактом F из примера 11.28, определяется в терминах самого себя, и, таким образом, не является корректно определенным.
Данный вид ссылки на себя некорректен не только в контексте LDL. Даже в контексте общей теории множеств такие определения не допускаются. Известным примером
некорректного определения множества является парадокс Рассела. Рассмотрим множество W, содержащее все множества 7, такие, что V ^ V. Очевидно, что это определение приводит к противоречию, поскольку, если W w W, то по определению, М w % а если W 咗 W, то М w М.
Для устранения таких циклических определений, основанных на ссылках на себя, мы введем некоторые ограничения на синтаксис LDL- программ. С другой стороны, LDL допускает отрицательные литералы в телах правил, что может привести к Семантическим неоднозначностям, как это показано в разд. 11. 2. 2. Напомним, что причиной этих семантических неоднозначностей тоже является некоторый вид циклических ссылок на себя: предикаты, которые определяются в терминах своих отрицаний. Ссылки на себя этого типа также можно устранить (например, за счет стратификации).
Вместо того чтобы обрабатывать множества и отрицание отдельно, мы определим единственное условие допустимости, гарантирующее отсутствие как определений множеств с помощью ссылок на себя, так и предикатов, определяемых с помощью своих отрицаний. Допустимость является обобщением стратифицируемости. Перед тем, как дать формальное определение допустимости, введем некоторые дополнительные понятия.
Увеличенный расширенный граф зависимостей УРГЗ(Р) LDL-программы Р получается из РГЗ(Р) следующим образом: каждая дуга <р, q> РГЗ(Р) помечена знаком @ тогда и только тогда, когда в Р существует правило, предикатным символом головного предиката которого есть р, в голове имеется конструкция вида <Х> и q входит в тело этого правила.
Расслоением LDL-программы является такое разбиение множества предикатных символов IDB из Р на подмножества Р】,• • •,Р^ что выполняются следующие условия:
Если р € Р^ q w Pj и <р, q> - дуга УРГЗ(Р), то
Если p w P[, q w Pj и <p, q> - дуга УРГЗ(Р), помеченная знаком -i или знаком @, то 1 > J.
Очевидно, что понятие расслоения является обобщением понятия стратификации. Действительно, для программ без группирующих правил эти понятия совпадают.
LDL-программа Р является допустимой тогда и только тогда, когда возможно ее расслоение.
Нетрудно увидеть, что LDL-программа Р является допустимой тогда и только тогда, когда в УРГЗ(Р) не существует циклов, которые содержат дуги, помеченные знаком л или знаком @. Для получения расслоения
допустимой LDL-программы можно использовать алгоритм, подобный алгоритму STRATIFY ( разд. 11. 2. 2).
Следовательно, допустимая LDL-программа не содержит ни определений множеств с помощью ссылок на себя, ни предикатов, определенных с помощью их собственных отрицаний. Таким образом, мы могли бы ожидать, что для этого класса LDL-программ все проблемы, связанные с семантической избыточностью, решены и что а) каждая положительная LDL-программа имеет только одну минимальную модель и б) каждая LDL-программа с отрицательными литералами имеет одну модель, которая предпочтительнее всех остальных моделей (разд. 11. 2. 3).
К сожалению, все не так просто! Рассмотрим, например, LDL-программу S и две модели % и 厶 из примера 11.26. Очевидно, что эта программа допустима. Однако как М】, так и М? являются минимальной моделью, поскольку ни одна из них не содержит нетривиальные подмножества, являющиеся моделями для S. С другой стороны, интуитивно понятно, что для S нужно рассматривать модель М】, являющуюся в некотором смысле 11 наименьшейп. В частности, % "меньше" чем 厶・
Проблема состоит в нашем традиционном определении отношения "меньше" для моделей Ми М‘, а именно М меньше М‘ означает MWM'. Этр определение непригодно для сравнения моделей с термами-множествами. Более адекватный критерий для сравнения моделей LDL задается с помощью отношения частичного порядка s, которое определено ниже.
U-факт G: р(е;,...,е: ) доминирует над U-фактом F: р(е , ...,е ) тогда и только тогда, когда для каждого i (l^i^n) либо % = е:, либо, если % - множество, * G е:. Если G доминирует над F, то мы пишем F<G. Отображение К множества U-фактов во множество U-фактов называется сохраняющим тогда и только тогда, когда каждый факт F отображается в такой факт K(F), что K(F) s F. Если Л - множество U-фактов, то К(2) обозначает множество {Kfе)\е w Л}.
Если Л и В - множества U-фактов, то Л ^ В тогда и только тогда, когда существует множество С w В и сохраняющее отображение К, такое, что К(С) = Л. В частности, если М и М‘ есть модели LDL-программы Р и М s м‘, то М называется подмоделью модели М‘ •
Пример 11.29. Рассмотрим LDL-программу S и две
модели М^ и 乂2 из примера 11.26. Рассмотрим следующее
подмножество С множества М2:
С = {badboy( jim), badboy( joe ), allbadboys({jim, joe, jack})}.
Определим отображениеОпределим отображениеК из С в M] следующим образом:
Определим отображение
Определим отображение
K(badboy(jim)) = badboy(jim); K(badboy(joe)) = badboy(joe)\ Kfallbadboysf{jim, Joe, jack})) = allbadboys({jim, joe}).
Очевидно, что К является сохраняющим и К(С) = М^. Таким образом, 3s%, т. е. М^ - подмодель модели 厶.
Сформулируем теперь наше новое определение минимальности модели. Модель М LDL-программы Р является минимальной тогда и только тогда, когда не существует модели М, для Р, такой, что М,=М и (М,- М) s (М - М,).
Пример 11.30. Модель М】 из примера 11. 26 минимальна. Это можно показать следующим образом.
Любая другая модель М‘для S должна содержать по меньшей мере факт J : badboy(jim) и 、 : badboy(joe) и факт % вида allbadboys({jim, joe, ...}). Предположим, что % € %, т. е. % = al Ibadboys ({j imt joe}). В этом случае % - M‘ = 0 и неравенство М‘ - % s 3 - М‘ невозможно. , т. е. М】 минимальна. Предположим теперь, что % 任 %• Таким образом, % w М‘ - % и % имеет вид allbadboys({jimt Joe, t, . . . }j, где t - некоторый U-терм, отличный от jim и joe, и М】-М‘ содержит единственный факт G: alIbadboys ({jim, joe}). Любое отображение Mf - М^ в М^ - М‘ отображает F3 в G 贾 поэтому не является сохраняющим, т. е. не существует сохраняющего отображения из М‘ - М】в М】-М‘. Следовательно, М】является минимальной.
Отметим, что новое определение "минимальности" является обобщением классического определения. При отсутствии термов-множеств оба определения совпадают. Для нового определения можно доказать следующие результаты:
Каждая допустимая LDL-программа имеет по меньшей мере одну минимальную модель.
Каждая положительная допустимая LDL-программа имеет только одну минимальную модель.
Пусть Р - допустимая LDL-программа. При заданном расслоении программы Р ее минимальную модель можно вычислить по восходящей стратегии слой за слоем с помощью LFP-итерации (от самого нижнего до самого верхнего слоя). Это во многом напоминает вычисление стратифицированных программ Дейталога"1. Данная модель, называемая стандартной моделью, имеет свойства, подобные свойствам совершенной модели программы Дейталога"1. В частности, стандартная модель не зависит от выбранного расслоения.
Рассмотренные выше результаты можно обобщить для множественного случая, при котором LDL-программа Р выполняется на некоторой EDB, состоящей из основных U-фактов.
11. 3. 3. Модели данных для сложных объектов
Язык логического программирования для манипулирования данными (такой, как LDL) следует разрабатывать в соответствии с подходящей моделью данных, которая формализует принципы хранения и поиска и манипуляционные примитивы, поддерживаемые СУБД для используемых в языке объектов. Чистый Дейталог, например, может основываться на реляционной модели в первой нормальной форме (которую в последнее время часто называют плоской реляционной моделью), поскольку концепция литерала прекрасно сопоставима с концепцией кортема в отношениях данных, а единичные шаги вычисления программы Дейталога можно транслировать в соответствующую последовательность реляционных операций (гл. 8). С другой стороны, языки логического программирования (такие, как LDL) имеют дело со структурированными объектами, которые требуют более сложных моделей данных.
В настоящее время разработаны расширения реляционной модели, в которых делается попытка следовать семантике сложных объектов. Наиболее известными из них являются модель NF2 Йешке и Шека, модель вложенных отношений Фишера и Томаса, модель Абитебуля и Бери (более общая, чем две предыдущие), "франко-армянская модель даиныхп FAD Бансилона, Бригса, Хошафяна и Валдурица (основанная на исчислении сложных объектов Бансилона и Хошафяна). Ссылки на статьи, содержащие описания этих моделей данных, приведены в разд. 11.5.
Модель FAD была успешно реализована в МСС и явля-
ется базовой моделью данных в проекте LDL. Некоторые важные концепции FAD рассмотрены в разд. 12. 1.
В рамках проекта ESPRIT Meteor в Милане была разработана и реализована модель ALGRES - довольно мощная модель данных, включающая все существенные особенности модели NF2 и некоторые дополнительные особенности. В качестве языка манипулирования данными эта модель использует расширенную реляционную алгебру. Она пригодна как основа для реализации интерпретаторов и компиляторов языков логического программирования со сложными объектами. Модель ALGRES описана в гл. 12.
Заключение
Выше мы изучили несколько полезных расширений чистого Дейталога. В частности, показано, как можно использовать встроенные предикаты, включать отрицание в Дейталог и добавлять сложные объекты, состоящие из множеств и вложенных термов. Эти добавления увеличивают выразительную мощность Дейталога и делают его более пригодным для практического использования в качестве языка запросов для больших баз данных или для формулирования правил в экспертной системе баз данных. Ожидается, что интенсивные исследования по Дейталогу и его возможные расширения приведут в следующем десятилетии к разработке и распространению новых программных продуктов. Ряд интересных исследовательских прототипов уже разработан, и некоторые из них описаны в гл. 12.
Однако, несмотря на существующие прототипы, все темы, затронутые в этой главе, включая и те из них, которые названы во введении, все еще остаются предметом активных исследований. Мы ожидаем, что в ближайшие годы будут опубликованы некоторые новые результаты. 、
Много интересных открытых проблем и любопытных альтернативных подходов к вопросам, рассмотренным в этой главе, можно найти в исследовательских работах, ссылки на которые приведены в следующем разделе.
Общий обзор[Gard 87а].Понятие реляционномОбщий обзор[Gard 87а].Понятие реляционномЛитература к главе
Общий обзор[Gard 87а].
Понятие реляционном
Общий обзор[Gard 87а].
Понятие реляционном
различных расширений Дейталога приведен в безопасности впервые было определено в исчислении [Ullm 82 ]. Проблема безопас-
ности для нерекурсивных хорновских дизъюнктов детально обсуждается в [Zani86]. Безопасность общих запросов на Дейталоге рассматривается в [Вап86Ь], где программы, удовлетворяющие нашим достаточным условиям безопасности программ Дейталога (разд. 11. 1), названы строго безопасными. Безопасность можно рассматривать в контексте некоторых процедур вычисления. Это сделано, например, в [Araf86], где в качестве дополнительных семантических знаний используются ограничения монотонности на предикаты. Проблемы безопасности для некоторых расширений Дейталога исследуются в работах [Rama87, Shmu87a, Kris88b]. Несколько более слабым свойством, чем безопасность, является независимость от домена. Запрос на Дейталоге независим от домена тогда и только тогда, когда результат выполнения запроса зависит исключительно от конкретного экземпляра EDB и не зависит от домена. Независимость от домена исследуется (в общем контексте) в [Nico 82].
Важным принципом, используемым как в исскуственном интеллекте, так и в теории баз данных, является принцип полной информации [Gelf86]. Этот принцип утверждает, что положительная информация, существующая в данной теории (или в данной базе данных), является полной, т. е. никакая другая положительная информация не доступна. Существует несколько различных формализаций этого принципа. В этой главе мы имели дело с двумя из них: аксиомой замкнутости мира (АЗМ) и семантикой совершенных моделей (стратификацией).
Аксиома замкнутости мира в контексте баз данных была введена Рейтером [Reit78]. Дальнейшее развитие этой идеи можно найти в работах [Reit80, Mink82, Reit84].
Идея стратификации впервые введена Чандрой и Харелом [Chan85]. Всестороннее исследование семантики стратифицируемых (общих) логических программ выполнено в работе [Apt86], где также показано, как стратифицированные логические программы можно вычислять по нисходящей стратегии. В работе [Кетр88] показано, как можно расширить метод QSQR для стратифицированных программ Дейталога"1. Интересными работами, связанными со стратификацией, являются [VanG86, Naqv86, Przy86, Lifs86, Apt87,工mie88].
Локальная стратификация вводится в работе [Przy86], где она сравнивается с особым типом очерчивания (circumscription). Чолак [Chol88] представляет некоторые результаты по неразрешимости, касающиеся локальньй стратификации.
Работы [Dahl87, Kola87, Kola88, Abit88a]. посвящены выразительной мощности стратифицированного и инфляционного Дейталога. В частности, в работах
[Kola88, Abit88a] показано, что инфляционный Дейталог"1 имеет такую же выразительную мощность, как и логика неподвижной точки (на конечных структурах). Тот факт, что стратифицируемый Дейталог"1 менее выразителен, чем инфляционный Дейталог"1, показан в работах [Dahl87, Kola87]. В качестве основной литературы по логике неподвижной точки, выразительности языков запросов, сложности запросов и по смежным вопросам мы рекомендуем работы [Asze77, Chan82a, 82b, Fagi74, Imme86]・
Различные подходы к выводу отрицательных фактов из логических программ были предложены гораздо раньше Кларком [С1аг78] и расширены Ллойдом [Lloy87]. Они вводят понятие завершения логической программы с помощью определений производных предикатов в виде логических эквивалентностей, а не логических импликаций. После этого семантика логической программы может определяться как множество всех следствий (положительных или отрицательных) из этого завершения. Соответствующий принцип доказательства называется "отрицание, как неудача". Он может быть формализован в виде SLDNF-резолюции - специального расширения SLD-резолюции. Использование программных завершений обсуждалось в работах [Shep85, Shep88]. Фиттинг [Fitt85] и Кунен [Кипев7] обобщили этот подход с помощью трехзначной логики: интерпретация при этом состоит в отображении , которое ставит в соответствие каждому атому базиса Эрбрана логическое значение из множества {истина, ложь, неопределено}. Семантика программы Дейталога"1 Р определяется как минимальная трехзначная модель для завершения Р (в соответсвии с отношением частичного порядка "неопределеноп < "истина" и "неопределеноп < "ложь"). В контесте Дейталога"1 этот подход является не вполне удовлетворительным.
Новым и многообещающим подходом, который также основан на трехзначной логике, является хорошо определенная семантика Ван Гелдера, Росса и Шлипфа [VanG88]. Их метод расширяет подход, основанный на стратификации, для произвольных логических программ с отрицанием. В частности, сверхмножество локально стратифицируемых программ семантически характеризуется тотальными моделями, т. е. такими моделями, в которых каждый факт из базиса Эрбрана имеет логическое значение "истина" или "〃о泌".Эти модели совпадают с совершенными моделями, рассмотренными в разд. 6. 3. Другие программы могут характеризоваться частичными моделями, в которых единичному факту соответствует
логическое значение пнеопределено^. Метод неподвижной точки для вычисления хорошо определенной частичной модели приведен в работе [VanG89]. Процедурная семантика, основанная на методе резолюций для хорошо определенных отрицаний, представлена в работе [Ross89]. Важными работами по хорошо определенной семантике являются [Вгу89с], в которой исследуется взаимосвязь с логическим конструктивизмом, и [Przy89]. В этих работах также можно найти несколько важных ссылок.
Другими формализациями принципа полной информации, не рассмотренными в этой книге, являются очерчивания [МсСа80, МсСа86, Gelf86, Gene87] и позитивизм [Bido86]・
Принципы представления и манипулирования сложными объектами в дедуктивной среде обсуждаются в работе [Zani85] . Некоторые основные особенности языка LDL описаны в работе [Tsur86]. Первая формализация подмножества LDL (названная LDL1) представлена в [Веег87а], где также показано, как LDL-программы могут выполняться в соответствии с методом магических множеств. Более точная формализация семантики LDL и пересмотр некоторых ключевых вопросов, связанных с группирующими правилами, представлены в работе [Веег89]. Разд. 11.3.2 основан частично на этой работе. Некоторые интересные теоретике-модельные рассмотрения по LDL-программам представлены в работе [Shmu87b], существенным результатом которой является факт наличия недопустимой группирующей программы с единственной минимальной моделью, не имеющей эквивалентной допустимой программы (без дополнительных предикатных символов).
Другой. (менее выразительный) подход к включению множеств в формализм Дейталога рассмотрен Купером [Кире86]. Унификационная теория, в некоторой степени учитывающая наличие множеств, изучается в работе [Stic81].
В этой главе вкратце говорилось о возможности обновления отношений EDB с помощью LDL-программ. В разд. 12. 2 следующей главы приведены пример и более подробные комментарии по этому поводу. Основы теории для выполнения обновлений EDB были разработаны Накви и Кришнамурти [Naqv88] и хорошо объяснены в работе [Naqv89]. В работе [Kris89] показано, как в LDL могут быть включены примитивы обработки транзакций.
Конструкции LDL partition и choice (которые мы более подробно обсудим в разд. 12.1) введены в работе [Kris88c] и тщательно обсуждены в работе [Naqv89].
Интересной проблемой, не рассмотренной в данной книге, является проблема непротиворечивости для
однозначных функций данных - вычислимых фу нкц и о нал ь ных символов с некоторой фиксированной интерпретацией. Такие функции можно определить с помощью правил логической программы. Однако должна быть обеспечена единственность значения функции [Abit87a, Lamb88a, Lamb88b]・
Прекрасный обзор и сравнение моделей данных для сложных объектов приведены в работах [Abit87a, 87b]・ Модель NF2 вводится в работе [Jaes82], а модель Фишера и Томаса - в работе [Fisc83]. Модель Абитебуля и Бери описана в работах [Abit87a, Abit87b]. Модель FAD и ее базовое исчисление представлены в работах [Вапс87с, Вапсвбе]・ Ссылки на модель ALGRES приведены в следующей главе. Несколько других важных ссылок на модели данных для сложных объектов можно найти в работе [Abit87a]. Интересный подход Ченя и Гардарена к компиляции иерархического Дейталога в линейный Дейталог - объектная модель лексем (token) - описан в работе [Chen88].
Хороший обзор вопросов, связанных с неопределенностью и нечеткими рассуждениями, приведен в работе [Gene87]. Теоретический базис . для включения фактора уверенности в логическое программирование представлен в работе [VanE86]・
Упражнения
Покажите, что условие безопасности для программ Дейталога со встроенными предикатами, приведенное в разд. 11. 1, не является необходимым условием: найдите программу Р, которая не удовлетворяет этому условию, но тем не менее является безопасной.
Напишите программу, которая для заданной программы Дейталога Р определяет, удовлетворяет ли Р условию безопасности.
Покажите, что квантор всеобщности можно выразить с помощью знака отрицания в телах правил: предположите, что р и g - унарные предикаты EDB, и покажите, что можно написать такую программу Дейталога"1 , что факт г (а) истинен тогда и только тогда, когда формула VX(p(X)寸 q(X)) истинна.
Напишите интерпретатор для стратифицированных программ Дейталога"1. Интерпретатор должен проверять входную программу на стратифицируемость и, если это возможно, вычислять результат ее выполнения в контексте некоторой EDB. Можете использовать Пролог
или -Лисп. Предположите, как и в у пр. 7. 2, что программа Дейталога"1 и EDB представлены в виде списков утверждений в основной памяти.
Вычислите Мр^ для "железнодорожной" программы из примера 11. 10 и для следующей экстенсиональной базы данных Е:
link(milanotgenova) link(milanot torino) link(torino, genova) link(milanotvenezia)
Используйте различные стратификации (например, те из них, которые даны в примере 11. 11). Покажите, что все они приводят к одному и тому же результату.
Покажите, что локальная стратифицируемость не является необходимым условием существования совершенной модели. Для этого нужно указать такую программу Дейталога"1 Р, которая не является локально стратифицируемой, но имеет совершенную модель.
Напишите интерпретатор Дейталога"1 в соответствии с инфляционной семантикой.
Представим множество (t1,...,t^ }, где
термы (возможно, сложные), с помощью
конструкции Пролога set([t1,...,t^J j. Напишите Пролог-программу, определяющую бинарный предикат match(X, У), который истинен тогда и только тогда, когда X и У унифицируемы в контексте теории множеств.
Являются ли следующие сложные термы 11 и t2
унифицируемыми ? Если да, то укажите для них БМУ:
%: f«Z, {Ytg(Z)}tb}ta)} J: f({{g(c)}tVtb}tW),
Предположим, что множества представляются с помощью функционального символа scons, как это сделано в базовом LDL. Напишите программу Пролога, определяющую предикат matching(X, У), который истинен тогда и только тогда, когда X и У являются сопоставимыми термами.
Напишите на Прологе или на Лиспе программу, осуществляющую проверку допустимости LDL-программ.
Глава 12. ОБЗОР ИССЛЕДОВАТЕЛЬСКИХ ПРОЕКТОВ ИНТЕГРАЦИИ РЕЛЯЦИОННЫХ БАЗ ДАННЫХ И СИСТЕМ ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ
В главе рассмотрены некоторые исследовательские системы на основе интеграции реляционных баз данных и систем логического программирования. Эти проекты находятся в стадии разработки.
Проект LDL, разрабатывемый корпорацией МСС (Microelectroniс and Computer Technology Corporation - MCC) в г. Остин (шт. Техас). Цель проекта - реализация интегрированной системы для обработки запросов на логическом языке (LDL), который расширяет Дейталог,
Проект NAIL! (Not Another Implementation of Logic), разрабатываемый в Станфордском университете при поддержке Национального научного фонда и фирмы IBM. Система NAIL! обрабатывает запросы на языке Дейталог, но имеет интерфейс с традиционной СУБД на основе SQL, для которой используется ЭВМ IBM PC/RT.
Система POSTGRESt разрабатываемая в университете г. Беркли. Это большой проект, в рамках которого разрабатывается система баз данных нового поколения, расширяющая реляционный подход сложными объектами, типами Данных и правилами, называемыми индикаторами (alerts) или триггерами. В данной главе рассмотрена система управления правилами.
Проект вычислительных систем пятого поколения, разрабатываемый в Институте вычислительных систем нового поколения (ICOT) в Токио. Основопологающий принцип проекта - выбор Пролога как унифицирующего базового элемента для разработки архитектуры вычислительных систем, стиля программирования и баз данных. В главе рассмотрены аспекты, связанные с базами знаний.
Система ADE (Advanced Data Base Interfacej, разрабатываемая в рамках проекта KIWI программы ESPRIT, поддерживаемой ЕЭС. KIWI - совместный проект, ориентированный на разработку баз знаний, программируемых на объектно-ориентированном языке OOPS. Имеется интерфейс с традиционной реляционной базой данных. ADE - совместная работа Университета Калабрии, научно-исследовательской организации CRAI и фирмы ENIDATA (Италия).
Проект ALGRES, разрабатываемый в рамках проекта METEOR программы ESPRIT при поддержке ЕЭС. Система ALGRES расширяет реляционную модель с целью поддержки ненормализ ованных отношений и операций вычисления неподвижной точки. Поддерживается язык Дейталог в качестве языка программирования. Проект ALGRES -
совместная работа Миланского политехнического института и фирмы TXT-Techint (Италия).
Проект PRISMA, разрабатывемый Университетом г.Твете в Энчиде, Центром математики и вычислительной техники в Амстердаме и Исследовательской лабораторией фирмы Philips в Эйндховене. Проект поддерживается Голландским исследовательским фондом SPIN. Проект PRISMA - большая работа, направленная на разработку мультипроцессорной системы, специальной памяти и машины реляционной базы данных, поддерживающей логический интерфейс, называющийся PRISMAlog.
Названные системы далеко не однородны. Упоминание систем NAIL! и ADE в контексте данной главы может показаться неудачным, так как эти системы сопряжены с существующими реляционными системами баз данных, а не интегрированы с ними. Тем не менее они поддерживают технику компиляции, специально разработанную для Дейталога. Из всех этих систем только Проект вычислительных систем пятого поколения поддерживает Пролог. Данный подход совершенно новый и, конечно, может быть отнесен к типу интегрированных систем.
Общая особенность всех систем, рассматриваемых ниже, состоит в том, что все они - совершенно новые исследовательские проекты, находящиеся в стадии разработки. Данная глава посвящена первопроходцам применения логического подхода к базам данных.
Система LDL
Проект LDL преследует две важные цели. Первая - разработка декларативного логического языка LDL для применений с интенсивным использованием данных. LDL расширяет "иистнК" Дейталог такими конструкциями, как множества, отрицание и обновления данных. Вторая цель - разработка системы поддержки LDL, которая интегрирует программирование на основе правил и эффективный доступ к вторичной памяти, управление транзакциями, восстановление и проверку ограничений целостности. Система LDL ' принадлежит классу интегрированных систем. Поддерживающий систему механизм базы данных основан на реляционной алгебре и специально разработан в рамках проекта LDL. Отметим, что некоторые аспекты системы, рассматриваемые ниже, уже были подробно изложены в разд. 11.3.
Язык LDL допускает использование сложных термов в фактах и правилах. Ниже приводятся примеры фактов со сложными термами:
champion(mcEnroy, tennis). champion(prost, car-racing, driversCinc-larren, turbo, honda)).
champion(gullit, soccer, team(milantwinner(equipe-prize,1988))).
champion(berger, car-racing, drivers(ferrari, turbo,ferrari)).
champion(maradona, soccer, teamfnapoli, dinner(vorld-cup, 1986))).
В этих примерах сложные термы drives, team и dinner обеспечивают большую гибкость при описании спортивных чемпионов. Для чемпионов в автомобильных гонках указываются использованная автомашина, тип и фирма - изготовитель ее мотора. Для футбольных чемпионов указываются команда и разыгранный специальный приз, наименование приза и год. Еще один пример правила со сложными термами:
soccer-winners(N, У):-
champion(Nt soccer, team(_, winner(_t Y))).
LDL допускает использование множества термов (см. гл. 11). Например, можно сформулировать следующий факт:
play(tennis, {lendl, wiiander, becker, тсЕпгое}).
Поддержка множеств требует специализированных алгоритмов унификации, а также специальных примитивов для обработки множеств. Например, для базы данных, содержащей приведенный выше факт, цель
? - playftennis, {lendl, becker, mcEnroy, wilander}). должна быть вычислена успешно для любой перестановки элементов множества. Порождение множеств выражается в LDL в форме правила. Например, для множества s = {хIр(х)} соответствующее правило имеет вид s(vX>):- р(Х). , где р(Х) - предикат на X. Предположим, что бинарное отношение belongs выражает принадлежность игроков к их командам, тогда правило
team - set(Team, <Player>):-
belongs(Pl ayer, Team)•
генерирует множество игроков заданной команды.
Кроме встроенных предикатов member(Е, S) и union(A, В, S j, семантика ' которых определена в разд. 11.3. 1, имеются еще дополнительные полезные встроенные предикаты для манипулирования множествами.
Например, предикаты partition и choice особенно удобны для построения аггрегативных функций на множествах.
Предикат partitionfPl, Р2, S) применяется к множеству S, число элементов которого больше единицы, и создает разбиение S на два непересекающихся подмножества Р1 и Р2.
Следующий предикат использует предикат partition для вычисления числа элементов множества:
card({} ,0).
card({X},l).•
card(S,V) ;-partition(Pl,P2,S), card(Pl,Vl), card(P2,V2), V = 02+02.
Отметим, что первое правило успешно только для пустых множеств, второе - для одноэлементных множеств, а третье - для множеств, число элементов которых больше единицы.
Кроме того, вычисление числа элементов множества с помощью приведенных выше правил в общем случае не слишком эффективно. Дело в том, что для заданного множества существует несколько возможных разбиений {Pl, Р2}, каждое из которых будет обрабатываться LDL-системой, в то время как для вычисления cardfS, V) достаточно только одного разбиения {Ра, РЬ} множества S, так как все другие разбиения приводят к тому же результату. Приведенная выше программа один и тот же результирующий факт card(StV) вычисляет несколько раз. Использование только одного разбиения вместо всех возможных привело бы к. существенному сокращению работы.
Встроенный предикат choice позволяет подавить множественные решения путем недетерминированного выбора одного решения. Предположим, что переменные XiXn, У1Ут, входят в тело правила (могут быть и другие переменные). Если выражение choi се( fXi Xn), (Yi Ym) ) встречается в теле правила, то для каждого набора значений X-переменных каждая У-переменная предполагается имеющей только одно значение. Другими словами, отношение, связывающее выбранные переменные XiXn, YiУт, удовлетворяет функциональной зависимости XiXn -» YiYm.
Для иллюстрации использования предиката choice рассмотрим предикат EDB employee(Name, Sex, 4ge, Income, Dept), в котором хранятся данные о служащих фирмы, причем каждый служащий однозначно идентифицируется своим именём. Предположим также, что вечеринка должна быть организована таким образом, чтобы из каждого
отдела были приглашены только одна женщина и один мужчина независимо от их возраста и дохода. Эта щекотливая задача выбора гостей для вечеринки может быть поручена следующей LDL-программе:
party_guests(Name):-employee(Name, Sex, Age, Income, Dept),cho ice((Dept,Sex),(Name)).
Предикат choice гарантирует, что переменная Name не получит более одного значения для каждой допустимой комбинации значений переменных Dept и Sex.
Первый аргумент предиката choice может содержать пустой список переменных. В этом случае каждая переменная, обозначенная во втором аргументе, может получить только одно значение. Предикат choice с пустым списком в первом аргументе используется для улучшения программы вычисления числа элементов множества cardfS, V):
card( { } ,0).
card( {X}, 1). card(S,V) ;-partition(Pl,P2,S), choice((), (Pl)), card(Pl,Vl), card(P2, V2),
V = V1+V2.
Предикат choice в теле третьего утверждения приводит к тому, что выбирается только одно разбиение {Pl, Р2} множества S, а остальные подавляются. Единственное разбиение выбирается недетерминированно. Это означает, что программист не имеет контроля над его реальной структурой. Несколько других агрегативных функций с помощью предиката choice могут быть определены и эффективно реализованы. Интересно отметить, что предикат choice представляет собой обобщение предиката отсечения, используемого в Прологе для не процедурных сред.*
Система LDL поддерживает стратифицируемое отрицание (гл. 11). Программы, включающие отрицание, но не стратифицируемые, рассматриваются как недопустимые. Это может быть обнаружено компилятором LDL. Наконец, LDL поддерживает обновление данных с помощью специальных правил. Тело такого правила состоит из двух частей: запросной и процедурной. Первая часть определяет кортежи, которые должны быть модифицированы, и должна быть выполнена первой. Как результат выполнения первой части все переменные, входящие во
вторую, должны быть означены. Затем процедурная часть применяется к имеющейся базе данных. Она содержит операции добавления (обозначенные функтором +) и операции удаления (обозначенные функтором -). Порядок выполнения процедуры - слева направо, если система не обнаружит, что процедура имеет свойство Черча - Россера, т.е. процедура генерирует один и тот же результат для любой перестановки ее компонентов. В этом случае наиболее эффективный порядок выполнения определяется системой. Например, следующее правило увеличивает зарплату служащим el, е2, еЗ и е4 :
increse-salary():-member(X,{el,e2, еЗ, e4}), emp(X,Sal), Newsal=Sal^l. 2,
-empfX^ Sal), + emp(X,Newsal).
Отметим, что свойство Черча - Россера имеет место, если el, е2, еЗ и е4 - различные служащие.
Теперь рассмотрим, каким образом правила компилируются, оптимизируются и выполняются. Компилятор использует понятие динамической разметки, определяя, какие переменные получат значения констант во время выполнения цели. Такие переменные получат отметку отложенной константы. Это очень похоже на оптимизацию параметрических запросов для обычных баз данных. Основная задача, решаемая оптимизатором для нерекурсивных правил, состоит в определении порядка и метода выполнения каждой операции соединения. Для рекурсивных правил компилятор пытается продвинуть ограничивающие варианты константы с помощью варианта метода редукции переменных, рассмотренного в гл.9. Это означает поиск рекурсивных правил, эквивалентных исходным. Поиск включает некоторые простые изменения структуры правил, т. е. порождение программы, семантически эквивалентной данной. Если эти методы неуспешны, то LDL-оптимизатор использует методы магических множеств и подсчета.
Особое внимание уделяется тем правилам, которые содержат множественные термы. Напомним, при сопоставлении множеств два терма-множества friend{johnt X, paul} и friendimary, paul, Z} сопоставимы при подстановке {Х/mary, Z/john}. Во время компиляции каждое правило, содержащее терм множества, заменяется множеством правил, каждое из которых содержит только обычные термы. Таким образом сопоставление множеств заменяется обычным сопоставлением. Тем не менее требуется несколько обычных образцов для сопоставления при каждом сопоставлении множества. Для того чтобы сократить их число, элементы множеств хранятся в порядке возрастания их ASCII-кодов. Например, терм
множества friend-s{John, tom, Y} соответствует обычным термам friend-o{Yf jobn, tom}, friend-o{ john, У, tom}, friend-o{john, tom, Y}, где переменная У может занимать любое место в упорядоченном множестве, но обязательно john должен предшествовать элементу tom в соответствии с их Л5СП-кодами.
Оптимизированная LDL-программа, полученная после применения различных методов переписывания, транслируется в выражения реляционной алгебры, расширенной операциями поиска неподвижной точки. Эти выражения подаются на вход оптимизатора. Внутреннее представление этих реляционных выражений представляет собой графы обработки, являющиеся ориентированными графами, вершины которых соответствуют либо отношениям базы данных, либо операциям. Дуги отражают зависимость операций и их операндов. Специальная трансформация, называемая сжатием, преобразует графы обработки в деревья. При этом циклы заменяются специальными узлами, соответствующим операциям поиска неподвижной точки.
В этой схеме листья дерева соответствуют отношениям базы данных, а вершины, не являющиеся листьями, соответствуют алгебраическим операциям. Вершины ограничены такими операциями, как соединение, объединение, разность и поиск неподвижной точки. Все операции выбора и проекции, непосредственно применимые к отношениям базы данных, включаются только на последней стадии обработки и не учитываются при дальнейшей оптимизации. Несмотря на упрощения, существует очень большое число деревьев обработки, эквивалентных друг другу.. Эти деревья могут быть получены путем изменения порядка выполнения операций, изменением порядка вычисления операндов для соединения и операций поиска неподвижной точки, а также с помощью выбора соответствующего метода вычисления соединения и неподвижной точки среди множества доступных алгоритмов. Оптимизатор использует стоимостную модель, которая учитывает операции центрального процессора, обмен с дисками и затраты на передачу данных. Данная модель используется для вычисления стоимости альтернатив. Если число рассматриваемых альтернатив не ограничено, выполняется исчерпывающий их анализ. В противном случае используется эвристический подход.
И нт ерпретирующий комплекс LDL-системы представляет собой алгебраическую машину, способную выполнять поиск сложных термов и манипулирование ими, а также эффективно выполнять соединение и объединение. Алгоритмы для соединения включают конвейерное соединение, при котором кортежи передаются по дереву обработки (как только они получены), материализующее соединение, при
котором генерируется результат соединения целиком до начала выполнеия следующей операции дерева обработки. Целевой язык алгебраической машины называется FAD и поддерживает все эти базовые операции наряду с операциями обновления, операциями агрегирования и универсальными управляющими структурами, необходимыми для реализации вычисления неподвижных точек.
Проект NAIL!
Проект NAIL! (Not Another Implementation of Logic!), разрабатываемый в Станфордском университете, предназначен для поддержки оптимального вычисления целей Дейталога над реляционной базой данных. Основной принцип проекта - не существует единой стратегии, подходящей для всех логических программ. Поэтому большое внимание уделялось разработке расширяемой архитектуры, которая может быть усовершенствована с помощью введения новых полезных стратегий.
Язык, поддерживаемый системой NAIL!, представляет собой Дейталог, расширенный функциональными символами, отрицанием, реализованным с помощью оператора not, и множествами, реализованными с помощью оператора findall. Правила должны быть стратифицируемы по отношению к операторам not и findall.
Проиллюстрируем использование оператора findall. Рассмотрим следующую базу данных фактов без сложных термов:
champion(mcEnroe, tennis). champion(prost, car-racing) champion(gullit, soccer). champion(berger, car-racing). champion(maradona, soccer).
Оператор findall используется следующим образом:
champion-list(L):- findall(X, ( champion (Xt soccer ) ), L).
Интуитивная интерпретация findall следующая: переменная L в третьей позиции обозначает список термов X, такой, что условие, заданное вторым аргументом findall, выполнено для X. Для примера выше получим
champion-list([gullit, maradona]).
Отметим, что NAIL! не поддерживает множественных термов и унификацию множеств, в то время как LDL их
поддерживает. В действительности предикат findall генерирует список, хотя средства языка не позволяют контролировать порядок элементов этого списка. Предикат findall может быть использован для тех же целей, что и группирование в SQL. Например, цель
champion-list(St L):- findall(X, ( champion(Xt S ) )t L).
соответствуетсоответствуетследующему результату:следующему результату:
соответствует
соответствует
следующему результату:
следующему результату:
champion champion championchampion champion champion-list(tennis, [тсЕпгое]).
champion champion champion
champion champion champion
- list(soccer, /gullit, maradonaJ.
- list(car-racing, [prost, berger].
Система NAIL! обрабатывает программу Дейталога и цель пользователя как входные данные. Любой предикат из каждой группы взаимно рекурсивных предикатов рассматривается отдельно. Эти группы образуют сильно связанные компоненты графа зависимостей, описанного в гл. 9. С точки зрения пользователя система генерирует размеченную цель, состоящую из имени предиката цели со строкой верхних индексов. Буквы b и f верхних индексов указывают, связан ли данный аргумент или свободен соответственно. Таким образом, цель р(а,Х, Ь) для предиката р имеет размеченную цель pbfb. Следует отметить, что для вычисления размеченной цели р могут потребоваться вычисления других размеченных целей для предикатов q или даже различных разметок для р.
Система NAIL! использует правила захвата в качестве основных стратегий. Каждое правило захвата применяется к определенным размеченным целям и порождает соответствующее результирующее отношение. Правило захвата состоит из двух алгоритмов: первый из них определяет применимость правила захвата, а второй обеспечивает применение правила захвата, т. е. вычисление результирующего отношения. Правило захвата применимо к размеченной цели, если это правило может вычислить результирующее отношение за конечное число итераций. Таким образом, алгоритм применимости выражает достаточное условие для сходимости алгоритма вычисления отношения. Применимость зависит только от размеченной цели, в то время как для алгоритма вычисления требуются конкретные константы цели.
Архитектура системы NAIL! представлена на рис. 12. 1.
Препроцессор преобразует исходный текст программы на языке NAIL!, изолируя операторы not и findall и трансформируя дизъюнкцию в несколько конъюнктивных правил. После препроцессорной обработки программа представляется с помощью ее же предикатов и правил.
Программа на языке NAILI
ПРЕПРОЦЕССОР
Правила, предикаты, сильно связанные компоненты
Цель —> ВЫБОР СТРАТЕГИИ <~> База данных стратегий
ICODE
ОПТИМИЗАТОР
Оптимизированный ICODE
ИНТЕРПРЕТАТОР
База данных SQL
Рис.12.1. Архитектура системы NAIL!.
Хранимые правила могут быть трех типов:
Правила, тело которых является конъюнкцией литералов.
Правила, тело которых состоит из одного отрицательного литерала.
Правила, тело которых состоит из одной подцели findall.
Предикаты объединены в сильно связанные компоненты в соответствии с графом зависимостей.
Модуль выбора стратегии обрабатывает цель пользователя ,т.е. размеченную цель) и отыскивает в базе данных успешную стратегию. Результатом является наилучшая стратегия для вычисления цели пользователя и всех целей, связанных с ней. Стратегия представляется с помощью внутреннего языка ICODE. Язык ICODE включает операторы реляционной алгебры вместе с управляющими операторами, процедурами и командами управления стеками в основной памяти.
Во время выбора стратегии генерируется внутренняя структура, называемая графом "правило-цель". Граф "правило-цельп показывает разметку целей и порядок, в котором подцели правила должны быть обработаны. Если
две цели Gi и G2 имеют общие переменные и Gi вычисляется раньше G2, то имеет место горизоктальное распространение информации от Gi к G2. При этом общие переменные связываются при вычислении Gi и могут рассматриваться связанными с точки зрения вычисления цели G2. Таким образом, определение порядка подцелей соответствует определению направления горизонтального распространения информации.
Правила захвата применяются к размеченным целям. Алгоритм применимости правила захвата старается построить граф "правило-цель0 для цели таким образом, чтобы каждая его вершина была аннотированной. Вершина является аннотированной, если существует стратегия ее захвата. Таким образом, этот процесс является рекурсивным.•
Правила захвата классифицируются в соответствии с типом правила, для которого они применяются. Эти типы следующие:
Предикаты базы данных.
Встроенные арифметические операторы.
Предикаты с отрицанием.
Нерекурсивные правила без функциональных символов.
Нерекурсивные правила с функциональными символами.
Линейные рекурсивные правила без фу нкц и о наль ных символов.
Нелинейные рекурсивные правила без фу нкц и о нальных символов.
Рекурсивные правила с функциональными символами. Отметим, что класс правил с предикатом findall не включен в этот перечень. Классы правил захвата, как и сами правила, могут быть легко расширены.
Существует четыре основных типа правил подстановки:
Базовые правила для "захвата" вершин, представляющих нерекурсивные предикаты.
Правила горизонтальной передачи информации, используемые для передачи связываний между целями.
Нисходящие правила, использующие резолюцию.
Восходящие правила, использующие прямой вывод.
Эта классификация включает много различных методов вычисления. Правила захвата могут рассматриваться как гибкий и расширяемый механизм управления выполнением логических целей.
Процесс выбора стратегии поддерживается базой данных стратегий. Эта база данных хранит результаты предыдущих попыток выполнения размеченных целей вместе с их графами "правило-цель0. Размеченная цель хранится как захваченная (если попытка была удачной) или как незахваченная ^ecли попытка была неудачной). При
просмотре базы данных используется предположение "нем больше связываний, тем лучше0: если размеченная цель gb££ - захватываемая, то любая размеченная цель g с дополнительными связанными позициями - также захва-
/ь ь г ь г ь ььь、
тываемая (т. е. g , g и g - захватываемые;. Наоборот, если размеченная цель д^ - незахва- тываемая, то любая размеченная цель с дополнительными несвязанными позициями - также незахватываемая (т. е. gfff - незахватываемая / Принцип "нем больше связываний, тем лучшеп аналогичен использованию обобщения предикатов для упрощения выборки данных из кэш-памяти в CPR-системах,гл. 4).
Благодаря этому принципу поиск решения для цели пользователя в аннотированном графе " правило-цель,г может быть выполнен достаточно эффективно (за полиномиальное время, зависящее от размера правил/ Но могут существовать несколько аннотированных графов "правило-цель" для одной и той же размеченной цели пользователя, причем один из них соответствует наиболее эффективному выполнению. Система NAIL! генерирует только один из возможных аннотированных графов "правило-цельп, но при этом используется эвристическое переупорядочивание целей, при котором максимольно означенные цели оказываются первыми. Эвристика применяется для упорядочения отношений, входящих в п-арное соединение, в соответствии с числом элементарных условий в операциях выбора, применяемых к ним. Затем бинарные соединения обрабатываются в соответствии с данным порядком. Это является классическим эвристическим приемом, используемым в базах данных и позволяющим избежать плохих стратегий, но без каких-либо гарантий оптимальности.
Операторы языка ICODE генерируются как результат выбора стратегии, после чего оптимизируются и выполняются интерпретатором, который транслирует выбранные операторы языка ICODE в SQL, когда это необходимо.
Проект POSTGRES
POSTGRES - большой проект, направленный на разработку систем баз данных нового поколения путем расширения реляционной технологии средствами поддержки сложных объектов, типов данных, правил, версий, предысторий и новых сред хранения.
POSTGRES является преемником проекта INGRES и
обеспечивает расширение языка запросов QUEL системы INGRES. Новые команды языка POSTQUEL используются для задания итеративного режима выполнения запросов, специальных сигналов, триггеров и правил.
"Итеративные" запросы обеспечивают вычисление транзитивных замыканий. Синтаксически это достигается приписыванием звездочки каждой команде, которая должна выполняться итеративно. Например, следующий запрос генерирует всех предков для "Maradona", содержащихся в бинарном отношении PARENT(Parent, Child):
retrieve ^into ANCESTOR(P. parent, P. child) from P in PARENT, A in ANCESTOR where P. child = nMaradona" or P.parent = A.child
Команды выборки повторяются до тех пор, пока отношение ANCESTOR не перестанет изменяться. Отметим, что команды выборки включают дизъюнкцию в предикате выбора. Условие Р. child = "Maradona'* генерирует первые кортежи, а последующие кортежи генерируются условием соединения Р.parent - Л.child. Объявления атрибутов отношения ANCESTOR наследуются из объявления атрибутов отношения PARENT.
Отношение ANCESTOR можно определить с помощью видов, используя следующие команды:
range of Р is PARENT range of Л is ANCESTOR define viev ANCESTOR(P. all) define view * ANCESTOR(A. Parent, P. Child) where A.Child = P. parent.
Этот пример показывает, что взгляды могут быть определены с помощью нескольких команд, и, в частности, некоторые из них могут быть итеративными. Таким образом, первая команда генерирует множество всех пар родителей, а вторая рекурсивно генерирует все последующие поколения. Эти взгляды могут запрашиваться, как и все другие отношения. Например,
retrieve(ANCESTOR, parent) whereANCESTOR. child = "Maradona"
Эти команды выборки необходимы для образования композиций с определениями взглядов, что позволяет образовать выражения, непосредтвенно вычислимые над отношениями EDB. Отметим, что механизм видов, описанный выше, допускает определение конфликтующих видов, т. е. определений, генерирующих различные ответы
на один и тот же запрос. В этом случае разрешение конфликта основывается на назначении приоритетов определениям. Эта особенность является абсолютно процедурной и напоминает использование порядка правил в Прологе.
Специальные сигналы и триггеры - это команды, которые срабатывают в неопределенные моменты времени и могут быть "разбужены" в результате некоторой последовательности изменений состояния базы данных. Те и другие описываются с помощью ключевого слова "always" (всегдаJ, которое приписывается к операторам POSTQUEL. Специальные сигналы добавляются к командам выборки, а триггеры - к командам модификации (склейка, замена, удаление). Специальные сигналы и триггеры постоянно активны. Система обеспечивает их эффективное обслуживание. Пример специального сигнала:
retrieve always (PART.all) where PART.name = "belt"
Этот сигнал генерируется прикладной программой. Его назначение - возврат информации прикладной программе всякий раз, когда запись PART, удовлетворяющая условию, изменяется и, таким образом, "сигналит" прикладной программе.
Пример триггера:
delete always ORDER where count (PART.name where PART.name = ORDER, part ) = 0
Этот триггер удаляет кортежи ORDER, если они ссылаются на несуществующие части отношения PART и тем самым обеспечивают только частичное выполнение ссылочных ограничений целостности.
Другая новая особенность языка POSTQUEL связана с виртуальными столбцами fnстолбцами по требованию"), которые не хранятся экстенсионально, а вычисляются при необходимости. Определение виртуального столбца:
replace demand PERSON (class = "child"; “here PERSON, age < 12
replace demand PERSON (class = "normal") where
22 三 PERSON.age and PERSON.age < 60
replace demand PERSON (class = "senior") where
PERSON, age 生 60
Запрос, достигая класса "person", вызывает вычисление виртуального столбца.
Реализация специальных сигналов, триггеров и
виртуальных столбцов осуществляется с помощью специальных "замков", размещаемых вместе с данными. Сигналы и триггеры используют Т-замки, а виртульные столбцы - D-замки. Всякий раз, когда транзакция записывает объект, который заперт Т-замком, активизируются соответствующие дремлющие команды "always". Диспетчер замков обрабатывает информацию о спящих командах, находящуюся в системных таблицах. Как только запускается команда, требующая виртуальный столбец, запертый D-замком, виртуальный столбец подставляется в выполняемую команду с помощью механизма "композиции". Эта композиция выполняется рекурсивно в стиле унификации, обратного вывода и стратегии псначала в глубь" языка Пролог.
POSTQUEL использует архитектуру "один процесс для пользователя", которая может быть построена в рамках обычной операционной системы Unix fа не архитектуры на основе сервера, которая потребовала бы специализированной операционной системы/ Для каждой машины существует только один процесс POSTMASTER, который постоянно активен. Этот Процесс содержит диспетчер замков и другие "общие" обслуживающие средства системы базы данных. Но каждая прикладная программа имеет собственную версию исполнительной части системы POSTGRES, которая может выполнять несколько команд одновременно по заданию прикладной задачи.
Проект вычислительных систем пятого поколения
Проект вычислительных систем пятого поколения разрабатывается в Институте вычислительных систем нового поколения (ICOT; в Токио, Япония. В рамках этого проекта логическое программирование было выбрано в качесиве унифицирующего элемента для разработки архитектуры ЭВМ, стиля программирования и использования баз данных. Мы проиллюстрирууем детали, связанные с разработкой баз знаний.
Архитектура систем, основанных на знаниях, в рамках проекта вычислительных систем пятого поколения развивалась в два этапа.
На первом этапе разрабатывалась трехуровневая архитектура, основанная на использовании трех компонентов: прикладной уровень пользователя, система управления базой знаний, поддерживающая язык KAISER, и реляционная система управления базой данных DELTA, способная выполнять операции реляционной алгебры. Язык KAISER, разработанный в начале проекта, поддерживает индукцию, дедукцию и абдукцию, реализованную с помощью
метапрограммирования на Прологе. Хорновские запросы, поддерживаемые языком KAISER, транслируются в реляционные алгебраические запросы, которые могут выполняться системой DELTA, В рамках этой архитектуры прикладной уровень пользователя и KAISER располагаются в рабочей станции пользователя, в то время как DELTA расположена в рабочей станции сервера. Эти две рабочим станции связаны локальной сетью LAN. Данный подход соответствует интерфейсу низкого уровня, который следовало бы классифицировать как псильно связанны说"в рамках определений, данных в гл.4. Были обнаружены проблемы, связанные с общей производительностью системы, так как "большое число команд и запросов должны были передаваться через физически узкий канал". Другая проблема заключалась в пплохой расширяемости системы управления реляционной базой данных" [Itoh 86].
На втором этапе была разработана четырехуровневая архитектура, дополнительно использующая систему управления базой знаний. Эта система размещена в рабочей станции сервера и полностью интегрирована с баз ой данных. Таким образом, сервер фактически является "машиной базы знаний", в то время как рабочая станция пользователя представляет собой чистую пмашину внвода". Специализ ированный хорновский интерфейс НСТ (Horn Clause Transfer) разделяет эти две машины. Связь основана на хорновских дизъюнктах, а не реляционных командах. Это упрощает требования к коммуникации машин. Система управления базой знаний называется КАРРА и является преемником системы KAISER. КАРРА поддерживает обработку естественного языка и доказательство теорем.
В четырехуровневой архитектуре существенную роль играет хорновский интерфейс НСТ, который выполняет как переписывание дизъюнктов, так и их трансляцию в алгебраические уравнения. Например, рассмотрим следующие хорновские дизъюнкты над базой данных, в которой хранятся два отношения FATHER и MOTHER fOTEU и МАТЬ):
ancestor(X, У) ancestor(X, Y) parent(Xt Y) parent(X, У)ancestor(X, У) ancestor(X, Y) parent(Xt Y) parent(X, У)? - ancestor(taro, Y).
ancestor(X, У) ancestor(X, Y) parent(Xt Y) parent(X, У)
ancestor(X, У) ancestor(X, Y) parent(Xt Y) parent(X, У)
:-parent (X, Y).
:-parent (X, Z), ancestor (Z, Y).
:-edb(father(Xt Y)).
Хорновские образом:Хорновские образом:утверждения преобразуютсяутверждения преобразуютсяследующимследующим:-edb(mother(X, Y)).
Хорновские образом:
Хорновские образом:
утверждения преобразуются
утверждения преобразуются
следующим
следующим
ancestor(ХУ У) ancestor(X, Y) ancestor(X, У)ancestor(ХУ У) ancestor(X, Y) ancestor(X, У)
ancestor(ХУ У) ancestor(X, Y) ancestor(X, У)
ancestor(ХУ У) ancestor(X, Y) ancestor(X, У)
-edb(father(Xt Y)).
-edb(mother(X, Y)).
-edb( father (Xt Z) ), ancestor (Z, Y).
ancestor (X, У ) : - edb(mother (Xt Z) )t ancestor (Z, Y).
После чего хорновские утверждения транслируются в оптимизированные алгебрические уравнения, использующие понятие констант запроса:
ANCESTOR = П fcr FATHER и (а MOTHER 2 l=tarol=taro
и (а IT (FATHER Х ANCESTOR)
' l=taro 1,4'2=1丿
и (а И (MOTHER X ANCESTOR)
' l=taro 1,4'2=1丿
Отметим, что эти уравнения включают "редукцию переменных", рассмотренную в гл. 10.
Интересной особенностью предлагаемого в рамках проекта пятого поколения подхода является возможность хранения правил в базе данных. Для этой цели определены отношения на термах и введены реляционные унификационные операции. Все операции реляционной алгебры, такие, как выбор и соединение, имеют соответствующее расширение для поддержки предикатов, определенных с помощью унификации над термами, а не только арифметических операций сравнения столбцов или констант.
Ниболее специфическая особенность проекта пятого поколения заключается в больших усилиях, затраченных на создание специализированных аппаратурных архитектур. Машина базы знаний имеет новую параллельную архитектуру, в которой процессоры логического вывода и устройства памяти связаны быстродействующей сетью. Процессор управляет многими аппаратурными системами, планирует для них выполнение простых повторяющихся задач, возникающих при обработке большого объема данных, а также создает подходящие каналы передачи данных между ними. Специальные функции, поддерживаемые соответствующей аппаратурой, включают алгоритмы сортировки/слияния и выполнение алгебрических операций, таких, как соединение и выбор. Эти функции реализованы в СБИС. п У нификационная машина" также будет поддерживать унификацию термов переменной длины с помощью специализированной аппаратуры. Разработка аппаратурных средств является отличительной чертой проекта пятого поколения. Возможный успех этих усилий может продвинуть состояние дел во всей области использования логического программирования для взаимодействия с базами данных.
Проект KIWI
KIWI - проект ESPRIT, ориентированный на разработку баз знаний и финансируемый ЕЭС. Проект KIWI включает разработку объектно-ориентированного языка программирования OOPS и среды базы знаний, состоящей из трех слабо связанных уровней:
Интерфейс пользователя, который помогает пользователю взаимодействовать с системой KIWI главным образом с помощью графического интерфейса.
Обработчик знаний, который реализует различные функции OOPS, за исключением управления фактами.
Новый интерфейс базы данных (ADE) для связи с существующими реляционными базами данных.
Ниже рассматривается система ADE - результат совместных усилий Университета Калабрии и фирмы ENIDATA (Италия). Система ADE поддерживает простое расширение чистого Дейталога, включающее отрицание и объекты. Объект образуется множеством кортежей, расположенных в нескольких отношениях и имеющих один и тот же уникальный идентификатор объекта. Программы Дейталога транслируются в Пролог с сохранением семантики неподвижной точки Дейталога. При этом обеспечивается безопасность реализации, позволяющая получать множество всех ответов. Для компиляции используется мини-магический метод, представляющий собой вариант метода магических множеств. Рассматривается также и метод магического подсчета.
При оптимизации запроса каждый сильно связанный компонент рассматривается изолированно. Порядок вычислений определяется графом зависимостей сильно связанных компонент. Вычисления выполняются с помощью процедуры "запрос-подзапрос": если данный сильно связанный компонент содержит вычисляемый предикат, определенный в нижестоящем сильно связанном компоненте, то вычисление самого верхнего сильно связанного компонента приостанавливается и запускается вычисление нижестоящего.
Продемонстрируем компиляцию правил Дейталога в Пролог. Рассмотрим следующие правила Дейталога:
р(Х, У) :- dbl(X,Z)t q(Zf Y), р(Х, Y) : - db2(Xf Y). gfX, Y) :- db3(_tX)tp(Yt_),
Отметим, что p и q взаимно рекурсивны и образуют сильно связанный компонент. Пусть запросом является ? - р(Х, Y) без каких-либо констант. Тогда соответствующие порожденные правила Пролога были бы следующие:
?- go.
до :- dbl(XtZ)t q(Zt Y). not(p(Xt Y))t assert(p(Xt Y) )t go.
go :- db2(X, У), no“p(X,У)), asser“p(X, У)), fail.
go :- db3(一,X),p(R not (q(X, Y) )t assert (q(X, Y) )t go.
Отметим три момента.
Факты для вычисляемых отношений р и q последовательно добавляются в базу данных Пролога, находящуюся постоянно в памяти. В конце вычисления правило до завершается неуспешно, если достигается неподвижная точка.
Проверка существования факта в базе данных Пролога до его сохранения обеспечивает уникальность кортежей и гарантирует неуспешное завершение при достижении неподвижной точки.
Нерекурсивные правила Дейталога обрабатываются с помощью отката, который заставляет Пролог-систему перебрать все ответы для правила. Рекурсивные правила обрабатываются с помощью рекурсивного вызова предиката до.
Связь "запрос-подзапрос" между сильно связными компонентами реализуется с . помощью отдельных предикатов для каждого сильно связанного компонента. При этом экземпляр предиката зависимой подкомпоненты вставляется в каждое правило вьппестоящего сильно связанного компонента:
pfX, Y) :- dbl(X,Z)tq(ZtY).
qfX, Y) :- db2(Xt Y), q(^ Y) :- db3(一
Эти правила Дейталога соответствуют двум сильно связанным компонентам для предикатов р и q. Предикат q используется в определении для р, и поэтому сильно связанная компонента для q зависит от р. Трансляция этих правил в правила Пролога приводит к следующему:
?- gol
gol : - dbl fX, Z;, not(go2;, go2, q(Zt У;, not (p(Xt Y) ), assert(p(X, Y) ), gol.
go2 : - db2(Xt У ;, not(q(Xt Y) ), assert(q(X, Y) ), fail.
go2 :- db3(_t X;, q(Yt _;, not(q(Xt Y))t
assert(q(Xt Y) ), go2.
Отметим, что эта схема добавляет достаточно бесполезное повторяющееся вычисление цели до2, которая оказывается неуспешной при первом вызове, тем самым порождая все кортежи для предиката q. При последующих
итерациях откаты не создают новых кортежей. Но эта схема может быть улучшена, с тем чтобы избежать этого недостатка.
Наконец, рассматривается важный случай распространения связываний из цели пользователя. В этом случае добавляется предикат, вызывающий метод магических множеств для связанных элементов:
? - pfa, X), pfX, Y) :- dbl(XiZ)ip(Zi Y), p(X, Y) :- db2(X, Y).
Соответствующие правила Пролога с добавленным предикатом магического множества имеют вид
? - gol.gol : - magic(X), dbl(X,Z), p(Z, Y), notfpfX, Y))tassert fpfX, Y) )t gol.
gol : - db2(X, Y)t notfpfX, Y))t assertfpfX, Y))t fail. magic(a).
Очевидно, что требуются дополнительные правила для реализации метода магических множеств на Прологе. Распространение связывания может быть достигнуто, только если каждое рекурсивное правило программы безопасно относительно его связывания. Условия безопасности здесь опущены. Отметим, что система KIWI фактически использует вариант метода магических множеств, называющийся мини-магическим методом. Наконец, при реализации KIWI использовалась оптимизирующая схема, пригодная для полунепосредственного вычисления, в то время как рассмотренная здесь схема напоминает непосредственное вычисление.
Предложенный метод является общим и может быть использован вместе с любым интерфейсом Пролога и реляционной базы данных (н.工). Система KIWI использует С-Prolog и Ingress в рамках среды операционной системы Unix.
Проект ALGRES
Проект ALGRES входит в проект METEOR программы ESPRIT, финансируемой ЕЭС. Проект направлен на поддержку спецификации и разработки сложного программного обеспечения. ALGRES - это механизм для интеграции двух исследовательских областей: расширения реляционной модели сложными объектами и операциями и интеграции баз данных и логического программирования. Фактически
ALGRES поддерживает реляционную модель с ненормализованными отношениями и оператор неподвижной точки, а также язык программирования Дейталог. ALGRES - совместная работа Политехнического института в Милане м фирмы TXT-TechiTt (Италия).
Модель данных включает стандарные элементарные типы (символы, строки, целые числа, действительные числа, булевы значения) и конструкторы типа RECORD, SET, MULTISET и SEQUENCE. Схема объекта в ALGRES содержит иерархическую структуру конечной длины, построенную с помощью этих конструкторов. Алгебраический язык ALGRES-PREFHX содержит следующие элементы:
Классические реляционные алгебраические операции, такие, как выбор, проекция, декартово произведение, объединение, разность и производные операторы (например, соединение;, которые расширены соответствующим образом для поддержки новых конструкторов типа и многоуровневых объектов.
Операции реструктурирования, которые модифицируют структуру объектов (преобразование из сложной структуры в иерархическую и обратно/
Операции вычисления кортежей и агрегатных функций над объектами и подобъектами.
Операции трансформации типа, способные преобразовать любой конструктор типа в другой.
Оператор замыкания, который применяется к любому алгебраическому выражению и итерирует вычисление выражения, пока результат не достигнет неподвижной точки.
Вследствие сложности языка ALGRES-PREFIX много усилий было потрачено на формальное определение семантики языка с помощью двух разных формализмов : на основе атрибутных грамматик и абстрактных типов данных.
ALGRES-PREFIX не является языком, ориентированным на пользователя. Он может рассматриваться как ассемблер расширенной алгебраической машины. Две парадигмы программирования реализуются с помощью языка ALGRES-PREFIX:
ALGRESQL - это расширение языка SQL, которое
допускает структурированные англоязычные запросы и язык манипулирования, сравйимый с другими современными проектами. Перед выполнением программы на ALGRESQL транслируются в ALGRESS-PREFIX.
Поддерживается также чистый Дейталог. С вычислительной точки зрения оператор замыкания системы ALGRES-PREFIX имеет достаточную выразительную мощность для поддержки рекурсивных запросов Дейталога. Рассматривается включение множеств и отрицаний.
Наконец, ALGRESQL имеет интерфейс с языком программирования Си, что позволяет использовать
существующие библиотеки и средства системы ALGRES из обычных программ.
Система ALGRES сопряжена с коммерческой системой управления реляционной базой данных, но не является реализацией, основанной на этой системе. Это вызвано соображениями эффективности, так как выполнение операций приводило бы к образованию длинных цепочек операций базы данных, требующих большого времени выполнения, что особенно опасно для операций, содержащих вложенные циклы, вложенные отношения или вычисления неподвижных точек для транзитивных замыканий. Предполагается, что система * ALGRES в основном будет применяться для сложных структур данных среднего размера, а не для очень больших баз данных. Примерами такого рода являются САПР и конструкторские системы, базы знаний, системы проектирования программного обеспечения и некоторые системы автоматизации конторской деятельности. Поэтому объекты системы ALGRES хранятся как структуры в основной памяти. Они сначала загружаются из внешней базы данных и возвращаются в массовую память после обработки.
Абстрактная машина RA (Relational Algebra) отражает все эти допущения: предполагается, что в каждый момент только часть базы данных находится в основной памяти и скорость, а не память является ограничивающим фактором. Эффективность системы ALGRES недостаточна по сравнению с традиционными императивными языками типа Алгол, но предполагается сравнимой с другими существующими производительными системами или языками высокого уровня, которые успешно использовались для быстрого прототипирования (например, SETL и Пролог).
Ядро среды системы ALGRES состоит из транслятора языка ALGRES-PREFIX в R4 и интерпретатора RA. Система команд RA обеспечивает традиционные алгебраические операции над нормализ ованными отношениями, а также специальные средства. Интерпретатор RA разработан таким образом, чтобы команды могли эффективно выполнять операции над объектами в основной памяти алгебраической машины.
Транслятор ALGRES-PREFIX в R4 и интерпретатор RA реализованы для рабочей станции SUN и для СУБД INFORMIX, обеспечивающей долговременную память объектов.
Проект PRISMA
Цель проект PRISMA - разработка мультипроцессорной реляционной машины базы данных, размещенной в
оперативной памяти. Эта машина разработана как сильно связанная распределенная база данных и предназначена для достижения высокой производительности с помощью фрагментации данных и генерации параллельных планов реализации запросов. Машина базы данных PRISMA разработана как легко расширяемая и будет состоять из 100 процессоров данных, каждый из них имеет 16 Мбайт памяти. Машина поддерживает две парадигмы программирования :стандартный SQL и PRISMAlog, представляющий собой расширение Дейталога. SQL используется как язык определения и модификации данных, в то время как PRISMА1од - только язык запросов, позволяющий просто определять правила, в том числе рекурсивные.
PRISMAlog - расширение чистого Дейталога, включающее отрицание, арифметические операции, агрегаты и группирование. Так как отношения в базе данных определяются с помощью SQL-интерфейса, то атрибуты имеют соответствующий тип. ' Эта типизация используется синтаксическим анализатором системы PRISMAlog для дополнительной проверки корректности программы. Отрицание допускается для стратифицированных программ, в которых отрицание интерпретируется как разность множеств. Это означает, что отрицание требует двух предикатов в теле правила, которые сравнимы по объединению.
Пример использования агрегатов и группирования в языке PRISMAlog:
mean__sal_per_dep(Dept avg(Sal)):- employee(Name, Dep, Mgr, Sal ).
? mean_sal_per_dep(Dy S;.
Эта программа вычисляет среднюю зарплату в подразделении на основе базового отношения EMPLOYEE.
Программы на языке PRISMAlog транслируются в язык нижнего уровня для машины PRISMA, представляющий собой расширенную реляционную алгебру XRA. Семантика программы на языке PRISMAlog определяется результатом ее трансляции в XRA в соответствии со стандартной семантикой неподвижной точки и множественно - ориентированной моделью вычислений. Поэтому программы на языке PRISMAlog декларативны по природе и порядок правил и предикатов внутри правила не существенен. Язык нижнего уровня XRA включает оператор неподвижной точки, который называется ц-выражением и используется для поддержки рекурсии.
В проекте PRISMA оптимизация запросов выполняется на алгебраическом уровне оптимизатором запросов, который использует специальные алгоритмы соединения и информацию о наличии процессоров в данной распре-
деленной среде. Оптимизация класса регулярных рекурсивных запросов, эквивалентных системе линейных уравнений (см. гл. 8), выполняется с помощью алгебраических методов переписывания. Результат применения алгоритма - последовательность стандартных операторов реляционной алгебры и операций транзитивного замыкания над реляционными выражениями. Например, начав с константы в запросе и постепенно соединяя результат с первоначальным отношением можно создать только пмагический конус" и тем самым избежать избыточных вычислений.
Архитектура системы PRISMAlog использует преимущества фрагментации базовых отношений, переформулируя общие запросы, требующие вычисления транзитивного замыкания, в несколько подзапросов, каждый из которых имеет доступ к соответствующей ему части данных. Поэтому обработка запросов, требующих вычисления транзитивного замыкания, для фрагментируемых баз данных существенно ускоряется, что приводит к более быстрому вычислению исходного рекурсивного запроса.
Литература к главе
Наиболее полное описание проекта LDL содержится в книге [Nagv 89]. Короткий обзор проекта LDL имеется в работе [Chim 87]. Операции со сложными термами в LDL рассмотрены в [Zani 85], а обзор языка дан в работе [Tsur 86]・ Формальное описание множеств и отрицания приводится в работе [Beer 87а]・ Промежуточный язык FAD описан в работе [Banc 87с]・ Оптимизация запросов рассмотрена в работе [Kris 88а]・
Общий обзор системы NAIL! можно найти в [Могг 86], а более позднее описание - в [Могг 87]・ Алгоритм упорядочения подцелей рассматривается в [Могг 88]. Этот алгоритм порождает специальный аннотированный граф Пправило-цельн, если он существует. Проверка применимости конкретного класса правил захвата, называющихся нисходящимися правилами, рассматривается в [Ullm 85b]・
Общий обзор проекта POSTGRES содержится в сборнике под редакцией Стоунбрейкера и Роува [Ston 87]. Сборник содержит пять статей по разработке модели данных, управлению правилами, управлению памятью и управлению объектами в системе POSTGRESS. Первая и третья из этих статей содержат соответственно общие сведения о разработке системы POSTGRES f Стоунбрейкер и Роув) и управлению правилами с помощью итеративных команд,
сигналов, триггеров и данных по запросу fСтоунбрейкер, Хансон и Хонг).
Общее описание Проекта вычислительных систем пятого поколения содержится в работе [Fuch 84], а роль логического программирования поясняется в статье [Fuch 86]. Часть проекта, связанная с базой знаний, описана в [Itoh 86] . Машина реляционной базы данных DELTA рассмотрена в [Mura 83], а унификация термов - в [Mori 86]・
Общий обзор проектов KIWI и ADE рассмотрен в [DelG 87], а более позднее описание - в [Sacc 87b]. Мини- магический вариант метода магических множеств, используемый в KIWI, рассматривается в [Sacc 8ба]. Условия безопасности правил относительно означивания рассмотрены в [Sacc 87b], а метод магического подсчета в [Sacc 87а]・
Общий обзор проекта ALGRES приводится в статьях [Ceri 88а, 88d], а сокращенный вариант - в [Ceri 88b]. Трансляция правил Дейталога в реляционную алгебру описана в [Ceri 8ба], а оптимизация алгебраических выражений - в [Ceri 87а]・ Формальные спецификации алгебраческих операций с абстрактными типами приводятся в [Lava 87] . Интерпретация неопределенных значений рассмотрена в [Ferr 87].
Общий обзор проекта PRISMA можно найти в [Kanv 86, Арег 88] . Механизм переписывания регулярных рекурсивных запросов, используемый в проекте PRISMA, описан в [Арег 8ба], а стратегия параллельного выполнения рекурсивных общих запросов - в [Арег 86b]・ Язык PRISMAlog и его оптимизация рассматриваются в [Hout 88а]・ Стратегия выполнения запросов, требующих транзитивного замыкания, 'описана в [Hout 88а], а стратегия выполнения таких же запросов в фрагментарной базе данных и эффективное использование параллелизма - в [Hout 88b]・
Наиболее современные обзоры проектов по базам данных и логическому программированию были сделаны Заниоло [Zani 87] в специальном выпуске журнала IEEE Data Engineering. Другой интересный обзор [Gard 87] опубликован Гардауеном в TSI.
БИБЛИОГРАФИЯ
[Abit 86] Abiteboul, S. and S. Grumbach; "Une approche logique de la manipulation d'objets complexes,>, IN RIA, Ini. Rep. 1986.
[Abit 87] Abiteboul, S. and S. Grumbach; "Bases de donnees et objets complexes”,Techniques ef Sciences Informatiques, 6:5, 1987.
[Abit 87b] Abiteboul, S. and C. Been, иОп the Power of Languages for the Manipulation of Complex Objects", Manuscript, abstract in: Proc. International Workshop on Theory and Applications of Nested Relations and Complex Objects, Darmstadt, West Germany, 1987.
[Abit 88a] Abiteboul,S. and R. Hull; "Data Functions, Datalog and Negation” Proc. ACM- SIGMOD Conference, 1988.
[Abit 88b] Abiteboul,S. and V. Vianu; “Procedural and Declarative Database Update Languages” Proc. ACM SIGMOD-SIGACT Symp. on Principles of Database Systems, Austin, 1988, pp.240-250.
[Acze 77] Aczel, P.; "An Introduction to Inductive DeHnitions^, The Handbook of Mathematical Logic (ed. J. Barwise), North Holland, 1977, pp.739-782.
[Aho 79a] Aho, A.V. and J.D. Ullman; "Universality of data retrieval languages”,Sixth ACM Symp. on Principles of Programming Languages, San Antonio, January 1979.
[Aho 79b] Aho, A.V., Y. Sagiv, and J.D. Ullman; “Equivalences among Relational Expres- sion8n, SIAM Journal of Computing, 8:2, 1979.
[Aper 86a] Apers, P.M.G., M.A.W. Houtsma, F. Brandse; "Extending a Relational Interface with Recursion”,Proc, of the 6伍 Advanced Database Symposium, Tokyo, Japan, 1986, pp. 159-166.
[Aper 86b] Apers, P.M.G., M.A.W. Houtsma, F. Brandse; "Processing Recursive Queries in Relational Algebra”,Data and Knowledge (DS-2), Proc, о/the Second IFIP 26 Working Conf, on Database Semantics, Albufetra, Portugal, November 1986, R.A. Meersman and A.C. Sernadas (eds.), North Holland, 19鼠 pp. 17-39.
[Aper 88] Apers, P.M.G..M.L. Kersten, H. Oerlemans; "PRISMA Database Machine: A Distributed Main-Memory Approach", Proc. International Conference Extending Database Technology (EDBT88)、Venice, 1988; and Springer LNCS, No. 303, 1988:
[Apt 82] Apt, K.R., and M.H. VanEmden; ^Contributions to the theory of logic program- minj', Journal of the ACM, 29:3, 1982.
[Apt 86] Apt, K.R., H. Blair, and A. Walker; ^Towards a theory of declarative knowledge", IBM Ям. Report RC "687, April 1986.
[Apt 87] Apt, K.R., and J.M. Pugin; “ Maintenance of Stratified Databases viewed as Belief Revision Systems”,Proc. Sixth ACM SIGMOD-SIGACT Symp. on Principles of Database Systems, San Diego, CA, 1987, pp.136-145.
[Araf 86] Arafati, F., et al.; “Convergence of Sideways Query Evaluation”,Proc. Fifth ACM SIGMOD-SIGA CT Symp. on Principles of Database Systems, Cambridge, MA, March 1986, pp. 24-30.
(Banc 85] Bancilhon, F.;uNaive Evaluation of Recursively Defined Relations”,On Knowledge Based Management Systems - Integrating Database and AI Systems, Brodie and Mylopoulos eds. Springer-Verlag, Berlin; 1985.
[Banc 8ба] Bancilhon, F., D. Maier, Y. S&giv, and J.D. Ullman; "M&gic sets and other strange ways to implement logic programs”,Proc. ACM SIGMOD-SIGACT Symp. on Principles of Database Systems, Cambridge (MA), March 1986.
[Banc 86b] Bancilhon, F. and R. Ramakrishnan; "An amateur% introduction to recursive query processing", Proc, of the ACM-SIGMOD Conference, Washington D.C., May 1986.
[Banc 86c] Bancilhon, F. and R. Ramakrishnan; wPerfbrmance evaluation of data intensive logic programs”,Foundations of Deductive Databases and Logic Programming, ed. J. Minker, Washington D.C., 1986, and Morgan-Kaufman, 1988.
[Banc 86d] Bancilhon, F., D. Maier, Y. Sagiv, and J.D. Ullman; "Magic sets: algorithms and examples”,Manuscript, 1986.
[Banc 86e] Bancilhon F. and S. Khoshafian ;" A Calculus for Complex Objects**, Proc. SIGMOD 86, 1986.
[Banc 87] F. Bancilhon, T. Briggs, S. Khoshafian, and P. Valduriez; aFAD, a Powerful and Simple Database Language", Proc. 13th Ini. Conf, on Very Large Data Bases, Brighton, September 1987.
[Baye 85] Bayer, R.; “Query Evaluation and Recursion in Deductive Database Systems” Manuscript, 1985.
[Beer 87a] Beeri, C. et al.; “Sets and negation in a logical database language (LDL1)M, Proc. Sixth ACM SIGMOD-SIGACT Symp. on Principles of Database Systems, San Diego, CA, March 1987.
[Beer 87b] Beeri, C. and R. Ramakrishnan; w0n the power of magic”,Proc. Sixth ACM SIGMOD-SIGA CT Symp. on Principles of Database Systems, San Diego, CA, March 1987.
[Beer 89] Beeri, C., S. Naqvi, O. Shmueli, and S. Tsur; “Set Constructors in a Logic Database Language”,manuscript, 1989, submitted to The Journal of Logic Programming.
[Bido 86] Bidoit, N. and R. Hull; wPoeitivism vs. Minimalism in Deductive Databases”,Proc. Fifth ACM SIGMOD-SIGACT Symp. on Principles of Database Systems, Cambridge, MA, March 1986 pp.123-132.
[Восс 86a] Восса J.; "On the Evaluation Strategy of EDUCE”; Proc.e ACM-SIGMOD Conference, Washington D C., May 1986.
[Bocc 86b] Восса, J., H. Decker, J.-M. Nicolas, L. Vielle, and M. Wallace; "Some Steps Toward a DBMS-Based RBMS”,Proc. IFIP World Conference, Dublin, 1986.
[Brod 84] Brodie, M. and M. Jarke; и0п Integrating Logic Programming And Databases”, Proc. First Workshop on Expert Database Systems, Kiawah Island, SC, October 1984; Expert Database Systems, ed. L. Kerschberg, Benjamin/Cummings, 1986.
[Brod 86] Brodie, M.L. And J. Mylopouloe (eds); On Knowledge-Base Management Systems, Topics in Information Systems, Springer-Verlag, 1986. [Brod 88] Brodie, M.L.; иFuture Intelligent Information Systems: AI and Database Technologies Working Together”, Readings in Artificial Intelligence and Databases^ 1988, Morgan Kaufman, San Mateo.
[Bry 86] Bry, F. and Manthey; "Checking Consistency of Database constraints: a Logical Basis”,Proc. /Ш Ini. Conf, on Very Large Data Bases, Kyoto, August 1986.
[Bry 88] Bry, F., H. Decker and R. Manthey; и A Uniform Approach to Constraint Satisfaction and Constraint Satisfiability in Deductive Databases”,Proc. International Conference Extending Database Technology (EDBT,88)、Venice, 1988; and Springer LNCS, No. 303, 1988.
[Bry 89a] F. Bry; towards an Efficient Evaluation of General Queries: Quantifiers and Disjunction Processing Revisited”,Proc. ACM-Sigmod^ Portland, 1989.
[Bry 89b] F. Bry; "Query Evaluation in Recursive Databases: Bottom-up and Top-down Reconciled”,Manuscript, 1989.
[Bry 89c] Bry, F.; “Logic Programming as Constructivism: A Formalization and its Application to Databases”,in: Eighth ACM Symposium on Principles of Database Systems (PODS), March 1989, pp.34-50.
[Ceri 84] Ceri, S., and G. Pelagatti; Distributed Databases: Principles and Systems, McGraw- Hill, 1984.
[Ceri 85] Ceri, S. and G. Gottlob; ^Translating SQL into Relational Algebra: Semantics, Optimization, and Equivalence of SQL Queries”, IEEE- Transactions on Software Engineering, SE 11:4, April 1985.
[Ceri 86a] Ceri, S., G. Gottlob, and L. Lavazza; wIYanslation and optimization of logic queries: the algebraic approach”,Proc. 12th Int. Conference on Very Large Data Bases, Kyoto, Aug. 1986.
[Ceri 86b] Ceri, S., G. Gottlob, and G. Wiederhold; “Interfacing relational databases and Prolog efficiently”,Proc. First IntL Conf, on Expert Database Systems, Charleston, 1986; and Expert Database Systems, ed. L. Kerschberg, Benjamin-Cummings, 1987.
[Ceri 87] Ceri, S. and L. Tanca; "Optimization of systems of algebraic equations for evaluating Datalog queries”,Proc. 13th Int. Conf on Very large Data Bases, Brighton, September 1987.
[Ceri 88a] Ceri, S., S. Crespi Reghizzi, F. Lamperti, L.Lavazza, and R. Zicari; и ALGRES: an Advanced Database System for Complex Applications”,IEEE Software (to appear).
[Ceri 88b] Ceri, S., S. Creepi Reghizzi, G. Gottlob, F. Lamperti, L.Lavazza, L.Tanca, and R. Zicari; "The ALGRES project** Proc. Int. Conf. Extending Database Technology (EDBT88), Venice, 1988; and Springer LNCS, No 303, 1988.
[Ceri 88c] Ceri, S., F. Gozzi, and M. Lugli; "An Overview of PRIMO: a Portable Interface between Prolog and Relational Databases", Int. Report, Univ. Modena, CS School, March 1988.
[Ceri 88d] S. Ceri, S. Crespi-Reghizzi, L. Lavazza, and R. Zicari: "ALGRES: a system for the specification and prototyping of complex databases", Int. Rep. 87-018, Dip. Elettronica, Politecnico di Milano.
[Ceri 88e] S. Ceri, F. Garzotto; "Specification and Management of Database Integrity Constraints through Logic Рго^атшт^, Int. Rep. 88-025, 0ip. Elettronica, Politecnico di Milano.
[Ceri 89] Ceri, S., G. Gottlob, and G. Wiederhold; "Efficient database access through Prolog**, IEEE~Transactions on Software Engineering, Feb. 1989.
[Chak 84] Chakravarthy, U.S., D. Fishman, and J. Minker; “Semantic Query Optimization in Expert Systems and in Database Systems**, Proc. First Workshop on Expert Database Systems, Kiawah Island (SC), October 1984; ed. L. Kerschberg, Charleston, 1984 and Expert Database Systems, ed. L. Kerschberg, Benjamin-Cummings, 1986.
[Chak 86] Chakravarthy, U.S., J. Minker, and J. Grant; “Semantic Query Optimization: Additional Constraints and Control Strategies”,Proc. First Int. Conference on Expert Database Systems, ed. L. Kerschberg, Charleston, 1986, and Expert Database Systems, ed. L. Kerschberg, Beixjamin-Cummings, 1987.
[Chak 87] Chakravarthy, U.S., J. Grant, and J. Minker; "Foundations of Semantic Query Optimization for Deductive Databases", Proc. /nL Workshop on the Foundations of Deductive Databases and Logic Programming^ ed. J. Minker, Washington D.C., August 1986, and Morgan-Kaufman, 1988.
[Cham 76] Chamberlin, D.D. et al.; "Sequel 2: A Unified Approach to Data Definition, Manipulation, and Controlw, IBM Journal of Research and Development, 20:6, 1976.
[Chan 82a] Chandra, A.K. and D. Harel; иНогп clauses and the fixpoint hierarchy", Proc. ACM SIGMOD-SIGACT Symp. on Principles of Database Systems, Los Angeles, 1982.
[Chan 82b] Chandra, A. and D. Harel; “Structure and Complexity of Relational Queries0, Journal of Computer and Systems Sciences 25, 1982, pp.99-128.
[Chan 85] Chandra, A. and D. Harel; "Hom Clause Queries and Generalizations", Journal of Logic Programming, 1, 1985, pp.1-15.
[Chan 73] Chang, C.L. and R. C. Lee, Symbolic Logic and Mechanical Theorem Proving, Academic Press, 1973.
[Chan 81] Chang, C.; “On the Evaluation of Queries Containing Derived Relations in Relational Databases”,Advances in Database Theory, vol.l, H. Gallaire, J. Minker and J.M. Nicholas, Plenum Press, N.Y., 1981.
[Chan 84] Chang, C.L. and A. Walker; "PROSQL: A Prolog Programming Interface with SQL/f)S”,Proc. First Workshop on Expert Database Systems, Kiawah Island, SC, October 1984; Expert Database Systems, L; Kerschberg (editor), Bei^amin-Cummings, 1986.
[Chen 88] Chen, Q. and G. Gardarin; “An Implementation Model for Reasoning with Complex Objects”,SIGMOD 88t pp.164-172.
[Chim 87] Chimenti, D., T. O'Hare, R. Krishnamurthy, S. Naqvi, S. Tsur, C. West,and C. Zaniolo; “An Overview of the LDL System**, Special Issue on Databases and Logic, IEEE - Data Engineering, 10:4, ed. C. Zaniolo, December 1987.
[Choi 88] Cholak P. ; “Post Correspondence Problem and Prolog Programs”,Technical Report, Univ, of Wise., Madison, Manuscript, 1988.
[Clar 78] Clark, K.L.; "Negation as Failure", in Logic and Databases^ H. Gallaire and J. Minker (eds). Plenum Press, 1978, pp.293-322.
[Cloc 81] Clocksin, W.F., and C.S. Mellish; Programming in Prolog, Springer-Verlag, 1981.
[Codd 70] Codd, E.F.; "A relational model of data for large shared data banks”,Communi- cations of the ACM、13:6, June 1970.
[Colm 85] Colmerauer, A.; "Prolog in 10 Figures”,Communications of the ACM, 28:12,1985.
[Cupp 86] Cuppens, F. and R. Demolombe; UA PROLOG-Relational DBMS interface using delayed evaluation”, Workshop on Integration of Logic Programming and Databases, Venice, December 1986.
[Dahl 87] Dablhaus, E.; “Skolem Normal Forms Concerning the Least Fixpoint”,Computation Theory and Logic, (Б. Borger Ed.), Springer Lecture Notes in Computer Science 270, 1987, pp.101-106.
[Date 83] Date, C.J.; An Introduction to Database Systems, Vol. II、Addison-Wesley, Reading, Massachusetts, 1984.
[Date 86] Date, C.J.; An Introduction io Database Systems, Vol. Z, Fourth*Edition, Addison- Wesley, Reading, Massadiusetts» 1984.
[DelG 87] Del Graeco, С., M. Dispinzieri, A. Mecchia, P. Naggard, C. Pizzuti, D. Sacca*; “Design Documentation of ADE”,Report C3, Esprit Project P1117.
[Deno 86] D. Denoel, D. Roelants, and M. Vauclair; “Query Пап81ation for Coupling Prolog with a Helational Database Management System” ; Workshop on Integration of Logic Programming and Databases, Venice, December 1986.
[Deck 86] Decker H.; ^tegrity Enfprcement on Deductive Databases”,Proc. First Ini. Conference on Expert Database Systems, Charleston, 1986, and Expert Database Systems, Benjamin-Cummin 磔,1987.
[Deva 86] Devanbu, P. and R. Agrawal; "Moving selections into fixpoint queries", Manuscript Bell Labs, Murray Hill, 1986
[Epsi 86] Esprit Project 530 Epsilon (organizer); Workshop on Integration of Logic Programming and Databases, Venice, December 1986.
[F&gi 74] Fagin, R.; "Generalized first-order Spectra and Polynomial Time Recognizable Sets", Complexity of Computations (R. Karp Ed.), SIAM-AMS Proc. 7, 1974, pp.43-73.'
[Ferr 87] Ferrario, M. and R. Zicari;"Extending the ALGRES Datamodel and Algebra to Handle Null Values", Znt Rep. 88-001, Dip. Eltitnnica, Politecnico di Milano.
[Fisc 83] Fischer, P. and S. Thomas;^Operators for Non-Firrt-Normal-Form Relations ” ,Proc. %A ini. Computer Software Applications Conf.t Chicago, 1983.
(Fuch 84] Fuchi» K.; "Revisiting Original Philosophy of Fifth Generation Computer Project0, International Conference on Fifth Generation Computer Systems^ 1984.
[Fuch 86] Fuchi, K. and K. Furukawa; *The role of Logic Programming in the Fifth Generation Computer Project", /nt Logic Programming Conference, July 1986.
[Fitt 85] Fitting» M.; “A Kripke-Kleene Semantics for Logic Programs**, Journal of Logic Programmingt 2:4, 1985, pp.295-312.
[Gall 78] Gallaire, H. and J. Minker (eds); Logic and Databases, Plenum Press, 1978.
[Gall 81] Gallaire, H., J. Minker, and J.M. Nicholas; Advances in Database Theory, Vol Z, Plenum Press, 1981.
[Gall 84а] Gall&ire, Н., J. Minker, and J.M. Nicholas; Advances in Database Theory, Vol //, Plenum Press, 1984.
[Gall 84b] GQ&ire, H., J. Minker, and J-M. Nicolas; ttLogic and Databases: A Deductive Approach*1, ACM Computing Surveys, 16:2, June 1984.
[Gall 87] Gall&ire, H. and J.-M. Nicholas; aLogic Approaches to Knowledge and Databases at ECRCT, Special Issue on Databases and Logic, IEEE - Data Engineering, 10:4, Zaniolo, C. (ed.), December 1987.
[Gall 88] H. Gallaire; uLogic and Databases0 ( Tutorial Notes, Proc. International Conf. Extending Database Technology (EDBT88), Venice, 1988.
[Gard 86] Gardarin, G. and C. De Maindreville; "Evaluation of database recursive logic programs as recurrent function series**, Proc, of the ACM-SIGMOD Conference, Washington D.C., May 1986.
[Gard 87a] Gardarin, G. and E. Simon; "Les systemes de gestion de bases se donneee deduc- tives”,Technique ef Science Informatiqiies^ 6:5, 1987.
[Gard 87b] Gardarin, G.; "Magic Functions: a Tedinique to Optimize Extended D&talog Recursive Programs”,Proc, 13th Conference on Very 丄6印 Daiabasest Brighton, UK, 1987.
[Gelf 86] Gelfond, M., H. Praymusinska, and T. Praymuzinski; *The Extended Closed World Assumption and its Relationship to Parallel Circumscription**, Proc. ACM SIGMOD- SI GA CT Symp. on Principles of Database System, Cambridge,MA, March 1986.
[Gene 87] Genesereth, M. and N.J. Nilsson; Logical Foundations о/ Artificial Intelligence, Morgan- Каийпапп, 1987.
[Gott 85] Gottlob, G. and A. Leitech; **Оп the Efficiency of Subsumption Algorithms”,Jos- na/ ofihe ACM, 32:2 (1985), pp.280-295.
[Gott 85a] Gottlob, G. and A. Leitsch; "Fast Subsumption Algorithms” in: Lecture Notes in Computer Science, Vol. 204, II (Springer Verlag, 1985), pp.64-77.
[Gott 87] Gottlob G.; Subsumption and Implication”,Information Processing Letters 24 (1987), pp.109-111.
[Gozz 87] Gozzi, F. and M. Lugli; "Design and Development of Efficient Interfaces between Prolog Environments and Relational Databases”,Diploma, thesis, Un. Modena, Comp. Sc. School, December 1987.
[Guess 87] Guessarian, I.; “Some fixpoint techniques in algebraic structures and application to computer science”,INRIA-MCC Intern. Workshop, Austin, Texas, 1987.
[Gure 86] Gurevich, Y. and S. Shelah; "Fixed Point Extensions of First Order Logic”,Annals of Pure and Applied Logic, vol. 32, 1986, pp.265-280.
[Hens 84] Henschen, L.J. and S.A. Naqvi; "On compiling queries in recursive first order databases", Journal of the ACM, 31:1,1984.
[Hout 88a] Houtsma, M.A.W., H.J.A. van КиЦк, F. Elokstra, P.M.C. Apers, M. L. Kersten; "A Logic Query Language and its Algebraic Optimization for a Multiprocessor Database Machine”,Technical Report INF-88-52, University of Twente, 1988.
[Hout 88b] Houtsma, M.A.W., P.M.G. Apere, S. Ceri; "Parallel Computation of IVansitive Closure Queries on Fragmented Databases”,Technical Report INF-88-56, University о/ Twente, 1988.
[Imie 86] Imielinski T. and S. Naqvi; “Explicit Control of Logic Programs through Rule AL gebra”,Proceedings of the 7伍 Annual ACM Symposium on Principles of Database Systems (PODS 8” Austin, TX, 1988.
[Imme 86] Immermann, N.; "Relational Queries Computable in Polynomial Time" Information and Control 68, 1986, pp.86-104..
[Ioan 85] loannidis, Y. E. and E. Wong; "An algebraic approach to recursive inference** Univ, of Cal. at Berkeley, Electronics Kes. Lab. Int. Rep. n. UCB/ERL M85/92, 1985.
[Ioan 87a] loannidis, Y. E. and E. Wong Fasfbrming non-linear recursion into linear recur- sionw, Manuscript, 1987.
[Ioan 87b] loannidis, Y.E., J. Chen, M.A. Friedman, and M.M. Tsangaris; WBERMUDA - An Architectural Perspective on Interfacing Prolog to a Database Machine**; University of Winsconsin, CS Dept., Tech. Rep. 723, October 1987.
[Itoh 86] Itoh, H.; “Research and Development on Knowledge Base Systems at ICOT”,Proc. 12th Int. Conference on Very Large Data Bases, Kyoto, Aug. 1986.
[Jaes 82] Jaeschke, B. and H.J. Schek;“Remarks on the Algebra of Non First Normal Form Relations”,Proc. ACM SIGMOD-SIGACT Symp. on Principles of Database Systems, Loe Angeles, 1982, pp. 124-138.
卩aga 87] Jagadish, H.V., R. Agrawal and L. Ness; "A study of transitive closure as a recursion mechanism”,Proc, of the ACM-SIGMOD Conference, S. Francisco, May 1987.
[Kemp 88] Kemp, D.B. and R.W. Topor; "Completeness of a Top-Down Query Evaluation Procedure for Stratified Databases”,in: Proc. 5th Int. Connf. and Symp. on Logic Program^ ming, Seattle, USA, Aug.88.
[Kers 84] Kerschberg, L. (ed.); Proc. First Workshop on Expert Database Systems, Kiawah Island, 1984, and Expert Database Systems, Benjamin-Cummings, 1986.
[Kers 86] Kerschberg, L. (ed.); Proc. First /nf. Conference on Expert Database Systems, Charleston, 1986, and Expert Database Systems, Benjamin-Cummings, 1987.
[Kers 88] Kerschberg, L. (ed); Proc. Second Int. Conference on Expert Database Systems, Tyson Corner (Virginia), 1988.
[KAHV 86] Kersten, M.L., P.M.G. Apers.M.A.W. Houtsma, H.J.A. van Kuijk, R.L.W. van de Weg; “A Distributed Main-Memory Database Machine", Proc, of the 5th International Workshop on Database Machines, Karuizawa, Japan, 1987; and Database Machines and Knowledge Base Machines, M. Kitsuregawa and H. Tanaka (eds.), Kluwer Science Publishers, 1988, pp. 353-369.
[King 81] King, J.; "Quist: A System for Semantic Query Optimization in Relational Data- bases”,Proc. 7th /nf. Conference on Very large Data Bases, Cannes, 1981.
[Klee 67] Kleene, S.C.; Mathematical Logic, John Wiley & Sons, New York, 1967.
[Kife 86] Kifer, M. and E.L. Lozinskii; "Filtering data flow in deductive databases”,Proc. 1st International Conference on Database Theory, Roma, September 1986.
[Kola 87] Kolaitis, Ph.G.; "On the Expressive Power of Stratified Datalog Programs**, Preprint, Stanford University, November 1987.
[Kola 88] Kolaitis, Ph.G. and Ch.H. Papadimitriou; "Why not Negation by Fixpoint?”,Proc. ACM SIGMOD-SIGACT Symp. on Principles of Database Systems 1988、pp.231-239.
[Kort 86] Korth, H.F. and A. Silberschatz; Database Systems Concepts, McGraw-Hill, Computer Science Series, 1986.
[Kowa 86] Kowalski, R. and F. Sadri; "An Application of General-Purpose Theorem Proving to Database Integrity** Foundations of Deductive Databases and Logic Programming, J. Minker ed., Washington, 1986, and Morgan-Kaufman, 1988.
[Kowa 87] Kowalski R. A., F. Sadri, and P. Soper; "Integrity Checking in Deductive Data- bases”》Proc. Int. Conf. Very Large Data Bases, Brighton, Sept. 1987.
[Kris 88a] Krishnamurthy, R. and C. Zaniolo; "Optimization in a Logic Based Language for Knowledge and Data Intensive Applications”,Proc. International Conf. Extending Database Technology (EDBT88)、Venice, 1988; and Springer LNCS, No 303, 1988.
[Kris 88b] Krishnamurthy, R., R. Ramakrishnan, and O. Shmueli; "A Framework for Testing Safety and Effective Computability of Extended Datalog^ ACM SIGMOD /nf. Conf, on Management of Data, Chicago, IL, June 1988, pp.154-163.
[Kris 88c] Krishnamurthy R. and S. Naqvi; wNon-deterministic Choice in Datalog”,Proceedings of the Srd International Conference on Data ans Knowledge Bases, Jerusalem, 1988.
[Kris 89] Krishnamurthy R., S. Naqvi, and C. Zaniolo; "Database Updates and IVansactions in LDLW, manuscript, MCC, submitted for publication. .
[Kune 87] Kunen, K.; "Negation in Logic Programming", Journal of Logic Programming, 4:4, 1987, pp.289-308.•
[Kuni 82] Кшййф, S. and H. Yokota; "Prolog and Relational Databases for Fifth Generation Computer Systems", Proc. Workshop on Logical Bases for Databases, Toulose, December 1982.
[Kupe 86] Kuper, G.M.; "Logic Programming with Sets ”,Proc. ACM SIGMOD-SIGACT Symp. on Principles of Database Systems 1987, pp.11-20.
[Lamb 88а] Lambrichts, Е., Р. Nees, J. Paredaens, P. Peelman, L. Tanca; uMilAnt: an extension of Datalog with Complex Objects, Functions and Negation", - Internal Report, 1988, University of Antwerp (Dept, of Computer Science).
[Lamb 88b] Lambrichts, Б., P. Nees, J. Paredaens, P. Peelman, L. Tanca; "Integration of Functions in the Fixpoint Semantics of Rule Based Systems**, Proc. 2nd Symposium on Mathematical Fundamentals of Database Thoery, Visegrag (Hungary), June 1989, and LNCSt Springer Verlag, 1989.
[Lass 82] Lassez, J.L., V.L. Nguyen, and E.A.Sonenberg; "Fixed Point Theorems and Semantics: a Folk Tale”,Information Processing Letters, 14:3, May 1982.
[Lava 87] Lavazza, L., S. Crespi Reghizzi, and A. Geser; иAlgebraic ADT Specification of an Extended Relational Algebra and their Conversion into a Running Prototype**, Workshop on Algebraic Methods, Theory, Tools and Applications, Passau, West Germany, June 1987, and Springer Verlag.
[Lifs 86] Lifschitz, V.; “On the Declarative Semantics of Logic Programs with Negation**, Proc, of the Workshop on Foundations of Deductive Databases and Logic Programming^ Washington D.C. (J.Minker Ed), August 1986, pp. 420-432.
[Lloy 86] Lloyd, J., E.A. Sonenberg and R. Topor; "Integrity constraint checking in Stratified Databases”,Tech. Rep., University of Melbourne, CS Dept., 1986.
[Lloy 87] Lloyd, J., Foundations of Logic Programming, Second, Extended Edition, Springer Verlag, 1987.
[Love 78] Loveland, D.W.; Automated Theorem Proving: Л Logical Basis North Holland, New York, 1978.
[Lozi 85] Lozinskii, E.; "Evaluating queries in deductive databases by generating" Proc. Int. Joint conference on Artificial Intelligence, 1985.
[Mall 86] Malley, V. and B. Zdonik; "A Knowledge-based Approach to Query Optimization**, Proc. First Inti. Conf, on Expert Database Systems, Charleston, 1986; and Expert Database Systemst L. Kerschberg (ed.), Benjamin-Cummings, 1987.
[Maie 83] Maier, D.; The Theory Of Relational Databases, Computer Science Press, Rockville, Md., 1983.
[Maie 84] Maier, D.; "Databases and the Fifth Generation Project: is Prolog a Database Language?**, Proc, of the ACM-SIGMOD Conference, 1984.
[Maie 88] Maier, D. and D.S.Warren; "Computing With Logic**, Benjamin/Cummings, Menlo Park, CA, 1988.
[Marq 83] Marque-Pucheu, G. "Algebraic Structure of Answers in a Recursive Logic Data- basew, Acta Informatica, 1983.
[Marq 84] Marque-Pucheu, G., J. Martin Gall&usiauxand G. Jomier; "Interfacing Prolog and Relational Database Management Systems**, New Applications of databases, Gardarin and Gelenbe eds. Academic Press, London, 1984.
[McCa 80] McCarthy, J.; “Circumscription - A Form of Non-Monotonic Reasoning", Artificial Intelligence 13, 1980, pp.27-39.
[McCa 86] McCarthy, J.; uApplications of Circumscription in Formalizing Common Sense Knowledge**, Artificial Intelligence 28, 1986, pp.89-116.
[McKa 81] McKay, D. and S. Shapiro; "Using Active Connection Graphs for Reasoning with Recursive Rules**, Proc. 7th International Joint Conference on Artificial InteUigence, 1981.
[Mend 64] Mendelson, E.; Introduction to Matematical Logicti Van Nostrand-Reinhold, Princeton, New Jersey, 1964.
[Mend 85] Mendelzon, A.; “Functional Dependencies in Logic Programs**, Proc. 11th Int. Conf. Very Large Data Bases, Stockolm, 1985.
[Mink 82] Minker.J.; MOn indefinite Databases and the Closed World Assumption” Proc, of the Sixth Conference on Automated Deduction, Springer LNCS, No 138, 1982, pp. 292-308.
[Mink 86] Minker, j. (ed.); Foundations of Deductive Databases and Logic Programming, Washington, 1986, and Morgan-Kaufman, 1988.
[Miss 84] Missikoff, M. and G. Wiederhold; “Towards a Unified Approach for Expert and Database Systems**, Proc. First Workshop on Expert Database Systems, L. Kerschberg ed., Kiawah Island, 1984, and Expert Database Systems, Benjamin-Cummings, 1986.
[Moff 86] Moffat, D.S., and P.M.D. Gray; "Interfacing Prolog to a Persistent Data Store”, Proc. Ini. Conf, on Logic Programming, London, 1986.
[Mori 86] Morita, Y., H. Yokota, K. Nishida, and H. Itoh; uRetrieval-by-Unification Operation on a Relational Knowledge Base” Proc. /Ш Ini. Conf, on Very Large Data Bases, Kyoto, August 1986.
[Morr 86] Morris, K., J. D. Ullman, and A. Van Gelder; “Design overview of the Nail! 8ystem”, Proc. /nt. Conf, on Logic Programming, London, 1986.
[Morr 87] Morris* K., J. Naughton, Y. Saraiya, J. Ullman, and A. Van Gelder; “AWN! (Yet Another Window on NAIL!)”,Special Issue on Databases and Logic, 1БББ - Data Engineering, 10:4, Zaniolo, C. (ed.), December 1987.
[Morr 88] Morris, K.; uAn Algorithm for Ordering Subgoals in Nail!n, Proc. ACM SIGMOD- SIG ACT Symp. on Principles of Database Systems, Austin, 1988.
[Mura 83] Murakami, К., T. Kakuta, N. Miyazaki, S. Shibayama, H. Yokota; "A Relational Database Machine, First Step to Knowledge Base Machine**, Proc. 10th Symp. on Computer Architecture, June 1983.
[Naqv 84] Naqvi, S.A.; “Prolog and Relational Databases: A Road to Data-Intensive Expert Systems”,Proc. First Workshop on Expert Database Systems, Kiawah Island, SC, Oct. 1984; and Expert Database Systems, L. Kerschberg (editor), Вещагшп-Ситшш^в, 1986.
[Naqv 86] Naqvi, S.A. ; "A logic for negation in database systems0, Workshop on Deductive Databases, Univ, of Maryland, August 1986.
[Naqv 88] Naqvi S. and R. Krishnamurthy; “D&Ubase Updates in Logic Programming*, Proceedings of the 7th Annual ACM Sifmposimm on Principle of Database Systems (PODS 88), Austin, TX, 1988.
[Naqv 89] Naqvi S. and S. Tsur; “A Logical Language for DaU and Knowledge Bases”, Computer Science Press, New York, 1989.
[Nejd 87] Ncjdl, W.; "Recursive strategies for answering recursive queries - the RQA/FQI strategy”,Proc. 19th Int. Conference on Very kpe Peia Bases, Brighton, September 1987.
[Nico 82] Nicolas J.M. and R. Demolombe; “ On the Stability of Relation^ Queries^, Proc, of ini. Workshop on Formal Bases for Data Bases, Toubuse, France, December 1982.
[Pars 83] Parsaye, K.; "Logic Programming and Relational Databases0, /ЕЕЕ Computer Society DataBase Engineering Bulletin, 6:4, Dec. 1983.*
[Przy 86] Przymusinski T.; “On the Semantics of Stratified Deductive DaUbases”,Proc. Workshop on Foundations of Deductive Databases and Logic Programming, WashingUm D.C., J. Minker ed., August ld86, pp.433-443, and Morgan-Kaufman, 1988.
[Przy 89] Przymusinski, T.C.; "Every Logic Program H&8 a Natural Stratification and an Iterated Least Fixed Point Model”,in: Eighth ACM Symposium on Principles of Daiuba»t Systems (PODS)、March 1989, pp. 11-21..
[Qian 87] Qian, X. and D.R. Smith; “Integrity Constraint Reformulation for Efficient Valid» tion ”,Proc. Int. Conf. Very Large Data Bases, Brighton, Sept. 1987.
[Quin 87] Quintus Computer Systems Inc., Mountain View, California; "Quintus Prolog Dat* Base Interface Manual”, Version 1, June 29, 1987.
[Rama 87] Ramakrishnan, R., F. Bancilhon, and A. Silberachatz; ^Safety of recursive Hsu clauses with infinite relations”,Proc. ACM SIGMOD-SIGA CT Symp. on Principles of Database Systems, S. Diego, California, March 1987.…
[Rama 88a] Ramakrishnan, R., C. Beeri and R. Krishnamurty; wOptimizing existential Dat» log queries”,Proc. ACM SfGMOD-SIGACT Symp. on Principles of Database System#, Austin, Texas, March 1988.
[Rama 88b] Ramakrishnan, R.; “Magic templates, a spellbinding approach to logic evaluar tionn, Proc, of ike Logic Programming Conference, August 1988.
[Reit 78] Reiter, R.; “On closed world databases”; Logic and Datahaaes, H. Gallaire and J. Minker (eds), Plenum Press, New York, 1978.
pleit 80] Reiter, R.; “Equality and Domain Closure in First-Order Databases”,Journal о/ Ue 4cM 27 2 1980, pp.235-249.
[Reit 84] Reiter, R.; TTowards a Logical Reconstruction of Relational Database Theory**, On Conceptual Modelling: Penpectives from Artificial Intelligence, Databases, and Programming Languages, M.L.Brodie and J.W. Schmidt Eds. Springer-Verlag, New York, 1984, pp.191-233.
[Robi 65] Robinson, J.A.; "A machine oriented logic based on the resolution principle”, Journal of the ACM , 12, 1965.
[Rx>bi 68] Robinson, J.A.; "he generalized resolution principle**, Machine Intelligence, vol.3, (D;Michie ed.) American Elsevier, N.Y., 1968.、
[Roel 87] Roelants, D.; "Recursive rules in logic databases”,Report R513 Philips Research Laboratories, Bruxelles, March /987, submitted for publication.
[Rx>hm,86] Rohmer, J.} R.Lescoeur and J.M.Kerisit; **The Alexander method: a technique for the processing of recursive axioms in deductive databases”,New Generation Computing, 4, Springer-Verlag, 1986.
[Roes 89] Rom, A.; “A Procedural Semantics for Well Founded Negation in Logic Programs", in: Eighth ACM Spnpoaium on Principles of Database Systems (PODS), March 1989, pp.2232.
[Sacc 86a] Sacca\ D. and C. Zaniolo; "On the implementation of a simple class of logic queries for databases”,Proc. ACM 1986 SIGMOD-SIGACT Symp. on Principles of Database Systems, Cambridge (MA), March 1986.
[Sacc 86b] Sacca', D., and C. Zaniolo; "Implementing recursive logic queries with function symbols”, MCC Technical Report DB-401-86, December 1986.
[Sacc 87a] Sacca', D. and C. Zaniolo; "Magic counting methods**, Proc, of the ACM-SIGMOD Conference、S. Francisco, May 1987.
[Sacc 87b] Sacca', D., M. Dispinzieri, A. Mecchia, C. Pizzuti, C. Del Graeco, and P. Naggar; She Advanced Database Environment of the KIWI System”, Special Issue on Databases and Lo^fic, IEEE - Data Engineering, 10:4, Zaniolo, C. (ed.), December 1987.
[Sagi 87] Sagiv, Y.; “Optimizing D&talog programs”,Proc. ACM 1987 SIGMOD-SIGACT Symp. on Principle of Database Systems, S.Diego (CA), March 1987.
[Sche 86] Scheck, H.J. and M.H. Scholl; "The relational model with relation-valued attributes*, information Systems 1986.
[Scio 84] Sciore, £., and D. S. Warren; ^Towards an Integrated Database-Prolog System**, Proc. First Workshop on Expert Database Systems, Kiawah Islhnd, SC, Oct. 1984; Expert Database Systems, L. Kerschberg (editor), Benjamin-Cummings, 1986.
[Shea 86] Sheard, T. and D. Steampie; “Automatic Verification of Database IVansaction Safety", Coins Tech. Rep. 86-30, Univ. Massachusetts, Amherst.
[Shep 85] Shepherdson, J.C., "Negation as Failure II", Journal of Logic Programming, 2:3, 1985, pp.185-202.
[Shep 88] Shepherdson, J.C., “legation in Logic Programming", in: Foundations of Deductive Database» and Logic Programming, J. Minker Editor, Los Altoe, CA, 1988, pp. 19-88.
[Shmu 87a] Shmueli, O.; "Decidability and Expressiveness Aspects of Logic Queries", Proc. ACM 1987 SIGMOD-SIGACT Symp. on Principles of Database Systtms, S.Diego (CA), March 1987, pp.237-249.
[Shmu 87b] Shmueli, O. and Sh. Naqvi; 01 Grouping and Layering in Horn Clause Pro- grams”,Proc. International Conference on Logic Programming, 1987, pp.152-177.
[Smit 86] Smith, D.E., M.R. Genesereth, M.L. Ginsberg; “Controlling Recursive Inference", Artificial Intelligence, 30:3, 1986.
[Ster 86] Sterling, L. and E. Shapiro; The Ari of Prolog, MIT-Press, 1986.
[Stic 81] Sticket, ME; “A Unification Algorithm for Associative Commutative Functions”, /ЛСМ 28:3, July 1981.
[Ston 87] M. Stonebraker and L.A. Rowe (editors); aThe Postgres Papers”,Berkeley University, Memorandum No. UCB/ERL M86/86, June 87 (revised version).
[Tanc 88] Tanca L.; “Optimization of Recursive Logic Queries to Relational Databases”,(in italian) Ph.D. Thesis, Politecnico di Milano and Univcrsita, di Napoli, 1988.
[Tars 55) Tarski, A.; “A lattice theoretical fixpoint theorem and its applications", Pacific Journal of Mathematics, n.5, 1955.
[Tsur 86] S. Tsur and C. Zaniolo; ULDL: A Logic-based Query Language”,Proc. /2伍 Int. Conf. Very Large Data Bases, Kyoto, 1986.
[Ullm 82] Ullman, J.D., Principles of Database Systems, Second Edition, Computer Science Press, Rockville, Md., 1982.
[Ullm 85a] Ullman, J.D., “Implementation of logical query languages for databases”,ACM Transactions on Database Systems, 10:3, 1985.
[Ullm 85b] Ullman, J.D. and A. Van Gelder; ^Testing Applicability of Top-Down Capture Rules”, Int. Rep. STAN-CS-85-1046, Stanford University, to appear in ACM-Journal.
[VanE 76] Van Emden, M.H., and R. Kowalski; 'ЧЪе semantics of predicate logic as a programming language”,Journal of the ACM, 4, October 1976.
[VanE 86] Van Emden M.H. “Quantitative Deduction and its Fixpoint Theory” Journal of Logic Programming 1986:1 pp37-53.
[VanG 86] Van Gelder, A.; "Negation as Failure Using Tight Derivations for General Logic Programs**, Proc. Third IEEE Symp. on Logic Programming, 1986, pp.137-146.
[VanG 88] Van Gelder, A., A. Ross, and J.S. Schlipf; "he Well-Founded Semantics for Genersd Logic Programs", in: Seventh ACM Symposium on Principles of Database Systems (PODS), March 1988, pp.221-230.
[VanG 89] Van Gelder, A.; "he Alternating Fixpoint of Logic Programs with Negation”,in: Eighth ACM Symposium on Principles of Database Systems (PODS), March 1989, pp.1-10.
[Viei 86a] Vieille, L.; uRecursive axioms in deductive databases: the Query-Subquery ap- proach”,Proc. First Ini. Conf, on Expert Database Systems, L. Kerschberg ed., Charleston, 1986.
[Viei 86b] Vieille, L.; “A database complete proof procedure based on SLD resolution", Proc. 4th Int. Conf, on Logic Programming I CLP '87, Melbourne, Australia, May 1987.
[Viei 87] Vieille, L.; uFrom QSQ to QoSaQ: global optimization of recursive queries”,Proc. Second Int. Conference on Expert Database Systems, L. Kerschberg ed., Tyson Corner, 1988.
[Wagn 86] Wagner Dietrich, S. and D.S. Warren; “Extension Tables: Memo Relations in Logic Programming", Tech. Rep. 86/18, Computer Science Department, SUNY at Stony Brook, 1986.
[Warr 81] Warren, D.H.D.;“Efficient Processing of Interactive Relational Database Queries Expressed in Logic”,Proc. 7th Int. Conf. Very Large Data Bases, Cannes, 1981.
[Wied 87] Wiederhold, G.; File Organization for Database Design, McGraw-Hill, Computer Science Series, 1987.
[Zani 84] Zaniolo, C.; “Prolog: A Database Query Language For All Seasons**, Proc. First Workshop on Expert Database Systems, Kiawah Island, SC, Oct.1984; Expert Database Systems, L. Kerschberg (editor), Benjamin-Cummings, 1986.
[Zani 85] Zaniolo, C.; "he representation and deductive retrieval of complex objects”,Proc. 11th Int. Conference on Very large Data Bases, August 1985.
[Zani 86] Zaniolo, C.; “Safety and compilation of non recursive Horn cluses”,MCC Technical Report DB-088-85, 1986.
[Zani 87a] Zaniolo, C. (ed.); Special Issue on Databases and Logic, IEEE - Data Engineering, 10:4, December 1987.
[Zani 87b] Zaniolo, C., and D. Sacca'; “Rule Rewriting Methods for Efficient Implementation of Horn Logic”,MCC ПсА. Rep. DB-084-87, March 1987, Austin, Texas.
ОГЛАВЛЕНИЕ
Предисловие редактора перевода
Предисловие
Глава 1. Краткий обзор понятий логического программирования и баз данных
1. Логическое программирование как язык запросов 1. 2. Пролог и Дейталог
3. Альтернативные архитектуры
4. Применения
5. Литература '
Глава 2. Введение в реляционные базы данных и язык Пролог
1. Обзор реляционных баз данных
2. Пролог: язык программирования в логике ...
2.3. Литература к главе
Часть I. Связывание Пролога с реляционными базами данных
Глава 3. Пролог как язык запросов
1. Антитрестовская задача
2. Задача о комплектующих
3. Заключение
Упражнения
Глава 4. Связывание Пролог-систем и реляционных баз данных
4.1. Архитектуры для связывания Пролога и реляционных систем
2. Базовые конъюнкции
3. Оптимизация интерфейса Пролог/База данных.
4. Заключение
Литература к главе
Упражнения
Глава 5. Обзор систем для связывания Пролога и реляционных баз данных
1. PRO-SQL
2. EDUCE
ESTEAM
BERMUDA
CGW и PRIMO
6. QUINTUS-PROLOG
Литература к главе
Часть 2. Основы языка Дейталог
Глава 6. Синтаксис и семантика языка Дейталог ....
1. Основные определения и предположения
Теория моделей Дейталога
Заключение
Упражнения
Глава 7. Теория доказательства и вычислительные парадигмы Дейталога
5 7 о
1
2 0 3 6 7
12 2 2 2
2 2 3 4
8 8 6 0
112 7 2 2
4 4 4 4 5 5
4 4 2 7 3 4 4
5 5 6 7 8 8 8
77901358990190
88899999990112
2 0 8 6 6 7 92 3 3 5 5 5 52 0 8 6 6 7 92 3 3 5 5 5 59 0 35 6 69 0 35 6 66 5 2 3 5 66 7 8 8 8 86 5 2 3 5 66 7 8 8 8 86 8 5 5 7 78 9 0 0 0 0112 2 2 26 8 5 5 7 78 9 0 0 0 0112 2 2 25 5 0 2 43 5 6 6 62 2 2 2 25 5 0 2 43 5 6 6 62 2 2 2 26 9 2 0 0 46 6 9 1112 2 2 3 3 36 9 2 0 0 46 6 9 1112 2 2 3 3 36 7 3 7112 23 3 3 36 7 3 7112 23 3 3 30 3 5 7 9 13 3 3 3 3 43 3 3 3 3 30 3 5 7 9 13 3 3 3 3 43 3 3 3 3 3
2 0 8 6 6 7 9
2 3 3 5 5 5 5
2 0 8 6 6 7 9
2 3 3 5 5 5 5
9 0 3
5 6 6
9 0 3
5 6 6
6 5 2 3 5 6
6 7 8 8 8 8
6 5 2 3 5 6
6 7 8 8 8 8
6 8 5 5 7 7
8 9 0 0 0 0
112 2 2 2
6 8 5 5 7 7
8 9 0 0 0 0
112 2 2 2
5 5 0 2 4
3 5 6 6 6
2 2 2 2 2
5 5 0 2 4
3 5 6 6 6
2 2 2 2 2
6 9 2 0 0 4
6 6 9 111
2 2 2 3 3 3
6 9 2 0 0 4
6 6 9 111
2 2 2 3 3 3
6 7 3 7
112 2
3 3 3 3
6 7 3 7
112 2
3 3 3 3
0 3 5 7 9 1
3 3 3 3 3 4
3 3 3 3 3 3
0 3 5 7 9 1
3 3 3 3 3 4
3 3 3 3 3 3
1. Теория доказательства для Дейталога ....
2. Итерация наименьшей неподвижной точки
3. Обратный вывод и резолюция
4. Заключение
Литература к главе
Упражнения
Часть III. Методы оптимизации для Дейталога ....
Глава 8. Классификация методов оптимизации для Дейталога
1. Критерии классификации методов
оптимизации
2. Классификация методов оптимизации
3. Трансляция Дейталога в реляционную алгебру
4. Классификация правил Дейталога ...
Выразительная мощность Дейталога
Литература к главе
7. Упражнения*
Глава 9. Методы вычисления
1. Восходящие методы вычисления
2. Нисходящие методы вычисления
Литература к главе
4. Упражнения
Глава 10. Методы переписывания
1. Логические методы переписывания
Переписывание алгебраических систем .
3. Общий подход к оптимизации
Литература к главе
Упражнения
Глава 11. Расширения чистого Дейталога
1. Использование встроенных предикатов в Дейталоге
2. Введение отрицания в Дейталог ...,
3. Представление сложных объектов и манипулирование ими
4. Заключение
Литература к главе
6. Упражнения
Глава 12. Обзор исследовательских проектов интеграции реляционных баз данных и систем
логического программирования
1. Система LDL
Проект NAIL!
Проект POSTGRES
4. Проект вычислительных систем пятого поколения
Проект KIWI
Проект ALGRES ....
12. 7. Проект PRISMA
12.8. Литература к главе БИБЛИОГРАФИЯ
Научно-техническое производственноеакционерное общество ГЛЭНДТТ
Предлагаем за рублиперсональные компьютерыкласса АТ 286/386/486.
Адрес: 115409, Москва а/я 43Телефоны: (095) 3203066, 3204211, 3984966
X = С и X и С 4432
Z = х2 XJ 2 = 1
Отметим, что, сравнивая два способа, очень отдать предпочтение какому-либо из них.
СЧерм1П)пю6,Л.Танка
ЛОГИЧЕСКОЕПРОГРАММИРОВАНИЕИ БАЗЫ ДАННЫХ
Издательство«Мир»
S.Ceri, G.Gottlob, L.Tanka
Logic Programming andDatabases
Springer-Verlag Berlin Heidelberg New YorkLondon Paris Tokio Hong Kong
СЧери, Г Готлоб, Л .Танка
ЛОГИЧЕСКОЕРОГРАММИРОВАНИЕИ БАЗЫ ДАННЫХ
Перевод с английского под редакцией
Л.А.КАЛИНИЧЕНКО
МОСКВА “МИР” 1992
ББК 22.19
447
УДК 681.3.06
Чери См Готлоб Гм Танка Л.
447 Логическое программирование и базы данных: Пер. с англ. - М.: Мир, 1992. - 352 с., ил.
ISBN 5-03-002472-7
В книге известных итальянских и австрийских специалистов систематически изложены подходы к построению дедуктивных баз данных, которые были разработаны с их участием в рамках европейских проектов по созданию новых поколений вычислительных систем. Особенность книги - удачное сочетание теоретических основ и технологии построения основных компонентов дедуктивных баз данных.
Для специалистов в области баз данных и логического программирования, искусственного интеллекта, а также для аспирантов и студентов соответствующих специальностей вузов.
1402070000-040
Н 6-92ББК 22.19
04(01)*92
Редакция литературы по информатике и робототехнике
Научное изданиеСтефано Чери, Георг Готлоб, Летиция ТанкаЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ И БАЗЫ ДАННЫХ
Зам. зав. редакцией Э.Н. Бадмков. Ведущий редактор Н«М. Андфеева. Художник А .В. Захаров. Художественные редакторы НМ. Иванов, ОЛ. Адаскина. Ко(фектор В.И. Киселева.
ИБ № 7891
Оригинал-макет подготовлен на персональном компьютере и распечатан на лазерном принтере в мздательстве "Мир"
Подписано к печати 19.0292. Формат 60x90/16. Бумага офсетная №1. Печать офсетная. Гарнитура тайме. Объем 11.00 бумл. Усл. печл. 22to0. У с л. кр.-отт. 22^5^<ч.-издл^025. Изд. Ма 6/8170.
Тираж 8 000 жз. 3&K.141ZC040
Издательство "Мир" 129820, ГСП, Москва, 1*й Рижский пер., 2
Московская типография № 7 Министерства печати м информации Российской Федерации.
103001, Москва, Трехпрудный пер., 9
ISBN 5-03-002472-7 (русск.) © by Springer-Verlag Berlin Neidelberg ISBN 3-540-51728-6 (англ.) 1990. All Rights Reserved
Autorized translation from language edition published by Springer-Verlag Berlin Heidelberg New York Tokio © перевод на русский язык, Белоусов Н.Н., Буланже Д.Ю., Задорожный В.И., Калиниченко Л.А., 1992
Методы построения дедуктивных баз данных, требующих соединения независимо разрабатывавшихся методов управления базами данных и методов логического программирования, были разработаны за очень короткий срок (в течение 5-6 последних лет) в рамках проектов, связанных с созданием новых информационных технологий и вычислительных систем пятого поколения (стратегические программы США и Японии, стратегическая программа стран Европейского сообщества)•
В предлагаемой книге изложены новые методы, которые уже зарекомендовали себя и находят практическое применение.
Эта книга в очередной раз свидетельствует о том, что эйфория от языка Пролог уже давно сменилась поисками новых языков, которые отражали бы последние достижения в области вычислительной алгебры, теории объектно-ориентированных структурированных типов данных, представления знаний, а также новых методов вычисления логических программ. Основное внимание в ней уделено языку Дейталог - логическому языку запросов к базам данных, разработка и интенсивное изучение которого осуществлялись в течение последних шести лет.
Дейталог возник как альтернатива языку Пролог в контексте дедуктивных баз данных, поскольку Пролог в качестве языка баз данных имеет ряд недостатков. Среди них назовем следующие:
покортежная обработка (Пролог в качестве ответа на запрос возвращает отдельные кортежи, а не множество кортежей);
процедурность и чувствительность к порядку записи правил или фактов в базе данных и к порядку предикатов в теле правила (такие языки, как SQL или реляционная алгебра, являются непроцедурными: выполнение запросов к базе данных не зависит от. порядка поисковых предикатов или кортежей базы данных);
потеря декларативности языка из-за специальных предикатов (используемых, например, для ввода-вывода, отладки или для воздействия на бэктрекинг)•
Дейталог сконструирован для использования в качестве языка баз данных. Он является непроцедурным, множественным, нечувствительным к порядку языком и не имеет специальных предикатов.
Если прологовские программы имеют операционную семантику, программы на Дейталоге - чисто декларатив- Нью. При интерпретации программ на Прологе используется нисходящая схема, основанная на резолюции оиной стратегии, поиске сначала вглубь и бэктрекинге Для конструирования деревьев доказательства. Базовая схема интерпретации Дейтайога - восходящая. В ее
основе лежат методы вычисления неподвижной точки программы и реляционная алгебра.
Пролог вместе с системами баз данных позволяет создавать слабо или сильно связанные системы, в которых средства поддержки логических программ и баз данных рассматриваются изолированно, и требуется выделять предикаты экстенсиональной базы данных для интерпретации доступа (статической при слабом связывании и динамической при сильном) к системе баз данных из логической программы. Дейталог же ориентирован на создание интегрированных дедуктивных систем. Идеи языка Дейталог и связанных с ним методов вычислений находят важное развитие в новых Языках логического программирования и в языках дедуктивных объектно-ориентированных баз данных.
В книге рассмотрены синтаксис и логическая семантика Дейталога, эрбрановская теоретико-модельная интерпретация Дейталога, ориентированная на Дейталог теория логического вывода, подход к вычислению неподвижной точки программы Дейталога, идея трансляции программ на Дейталоге в систему уравнений на языке реляционной алгебры, вопросы полноты программ на Дейталоге. Важное место занимают методы оптимизации, предназначенные для достижения высокой эффективности запросов на Дейталоге. Рассмотрены различные расширения Дейталога, определяются дальнейшие усовершенствования, необходимые для применения Дейталога в реальных задачах.
В книге, достигнуто оптимальное соотношение между строгим изложением теоретических основ и техникой построения основных компонентов систем управления дедуктивными базами данных. Простота изложения, глубина и полнота рассмотрения вопросов делают книгу интересной не только для специалистов, работающих в области создания баз данных и экспертных систем, но и для преподавателей, аспирантов и студентов вузов соответствующих специальностей.
Следует отметить, что терминология в отечественной литературе в области дедуктивных баз данных еще не установилась. Поэтому при переводе приходилось предлагать свой вариант перевода терминов. В примерах баз данных, программ и запросов принято решение сохранить оригинальные обозначения переменных и предикатов, перевод которых дан в тексте.
Перевод книги выполнен Н.Н.Белоусовым (гл. 2, 6, 10), Д.Ю.Буланже (гл. 3, 12), В.И.Задорожным (гл. 4, 5, 8, 11), Л.А.Калиниченко (гл. 1, 7, 9).
Л.Л.Калиниченко
В последние годы в литературе появилось огромное число работ, посвященных проблемам логического программирования и баз данных. Этому способствовало несколько обстоятельств: выбор японским проектом ЭВМ пятого поколения Пролога и реляционной модели данных как основы создания новых архитектур ЭВМ; смещение интереса в теории баз данных в область рекурсивной обработки логических запросов; практическая разработка экспертных систем баз данных и систем баз знаний.
Настоящая книга представляет собой систематический обзор нового, быстро развивающегося направления исследований, лежащего на границе логического программирования и баз данных. Принятый в книге стиль изложения, сопровождение описания алгоритмов примерами и упражнениями позволяют сравнительно просто ввести в это новое направление студентов, аспирантов и специалистов, ранее работавших в одной из указанных областей. Мы стремились сбалансировать представление в книге теоретических и технических вопросов. Так, книга содержит подробное введение в новый язык Дейталог наряду с описанием подходов к созданию интерфейсов с большими базами данных на основе логического программирования.
Книга подразделяется на три части, которым предшествуют две вводные главы. Глава 1 содержит общий обзор рассматриваемой области. Глава 2 посвящена терминологии, нотации и основным понятиям реляционной модели и Пролога, необходимым для понимания основного материала книги.
Часть I посвящена соединению Пролога с реляционными базами данных. Глава 3 представляет Пролог как язык запросов на примере двух классических задач - проверки соблюдения антитрестовского закона и задачи о комплектующих. В главе 4 рассмотрены альтернативные архитектуры и методы соединения прологовских систем с реляционными базами данных, а в главе 5 дан обзор соответствующих конкретных проектов.
Часть II содержит описание языка Дейталог. В главе 6 определены формально синтаксис и семантика Дейталога. При определении семантики языка использован непроцедурный, теоретике-модельный подход. В главе 7 представлена теория доказательства применительно к Дейталогу, приведен алгоритм вычисления целей Дейталога и проанализированы его правильность и полета по отношению к теоретике-модельной семантике. В не或 представлены также две другие парадигмы вычисления программ Дейталога: теория неподвижной точки и
обратный вывод. В частности, в контексте Дейталога определены резолюция и SLD-резолюция.
Часть III посвящена описанию методов оптимизации запросов на Дейталоге. В главе 8 дана общая классификация методов оптимизации; при этом различаются методы переписывания, преобразующие входные программы Дейталога в оптимизированные выходные программы Дейталога, и методы вычисления, которые воспринимают на входе программу Дейталога и продуцируют ее результат. Далее приводится пример трансляции программ Дейталога в системы алгебраических уравнений. Такая трансляция позволяет определить класс алгебраических методов оптимизации запросов. Эти вопросы обсуждаются в главах 9 и 10. В главе 9 рассматриваются восходящие и нисходящие методы вычисления (включая непосредственный и полунепосредственный методы, а также метод запрос-подзапрос) . Глава 10 посвящена методам переписывания, в ней рассматриваются логические (метод магических множеств, метод подсчета и метод статической фильтрации) и алгебраические методы переписывания.
В главе 11 рассматриваются расширения чистого Дейталога путем введения в него множеств и отрицания. Эта глава не претендует на полное рассмотрение проблемы, скорее она является лишь введением в предмет. Наконец, в главе 12 дан обзор основных проектов интеграции логического программирования и баз данных, включая Nail, LDL и проект ЭВМ пятого поколения.
Книга не охватывает всей проблематики дедуктивных баз данных. Например, здесь не рассматривается неполнота баз данных или проблема проверки ограничений целостности. При отборе материала книги мы ограничились проблемами, от решения которых зависит эффективность доступа к большим базам данных при использовании логического программирования в качестве языка запросов.
Книга является результатом исследований авторов совместно с доугими специалистами. Мы приносим благодарность Джио Видерхольду за его вклад в подход CGW, разработанный в рамках проекта СУБЗ в Станфордском университете; Стефано Креспи-Регицци, Джанфранко Коцци, Фабриццио Коцци, Луиджи Лавацца и Роберто Зикари за их вклад в разработку алгебраического подхода к логическим запросам в рамках проекта АЛЬГРЕС; Сильвии Коцци> Фабриццио Гоцци, Марко Лульи и Гвидо Сангвинетти, разработавшим систему ПРИМО при выполнении дипломной работы в университете Модены; а также Роберте Кантарони, Стефании Феррари и Франке
Гарзотто, обращавшимся к нам с задачами, относящимися к логическим базам данных. -
Многие из наших коллег и студентов дали полезные замечания в процессе доработки, рецензирования и редактирования рукописи. Мы хотели бы поблагодарить Мауриса Хыотсма, который тщательно прочитал рукопись и дал ряд улучшающих книгу замечаний; Херва Галлера, Жан-Мари Николаса, Джоанн Кристоф Фрайтага и Франсуа Ери, предоставивших полезную информацию для рукописи в целом и конкретно по проектам, разрабатывавшимся в ECRC; Шамина Накви, который дал конкретные замечания по проекту LDL, разработанному в МСС; Вольфганга Нейдля, снабдившего нас материалами относительно метода запрос-подзапрос, и его модификаций. Вернер Шиманович и Алекс Ляйтш воодушевили нас интересными обсуждениями.
Особые благодарности мы приносим Гюнтеру Шлягетеру и его аспирантам, а также Ренате Питрик, Вильгельму Россак и Роберту Трашнег, чьи тщательное прочтение и критические замечания привели к улучшению качества книги. За ошибки и упущения, оставшиеся в книге, конечно же несут ответственность авторы.
Мы хотели бы поблагодарить институты, в которых работаем, за поддержку и предоставленное оборудование для редактирования рукописи: Университет Модены, Политехнический институт Милана, Технический университет Вены и Станфордский университет. При подготовке рукописи Летиция Танка использовала грант от С•工・L・E・A・ Окончательная подготовка всей рукописи была проведена под руководством д-ра Ганса Вьезнера, Ингеборга Майера и редактора Джиллиан Хайес из Издательства Шпрингер. По проекту HProgetto Finalizza- to Informatica e Calcolo Parallel。" Национального совета исследований Италии, над которым начали работать в 1989 г. , мы получили ресурсы для исследований и реализации многих идей» рассмотренных в этой книге.
Октябрь 1989
Стефано Чери, Георг Готтлоб, Летиция Танка