Логическое программирование
В отличие от общепринятых алгоритмических языков языки логического программирования не определяют жесткой последовательности действий, а допускают несколько вариантов в решении одной задачи, используя правила подстановки и унификации и механизм принципа резолюции. Типичным представителем языков программирования задач математической логики является Prolog. Само название Prolog есть сокращение, означающее про граммирование в терминах лог ики. Пролог-программа состоит из предложений трех типов: факты, правила и вопросы. Факты есть высказывания, которые заканчиваются точкой и имеют значение только “истины”. Структура такого предложения описана предикатом или n-местным отношением, все аргументы которого есть предметные постоянные. Предметные постоянные всегда начинаются со сточной буквы латинского алфавита и представляют собой последовательность букв, цифр и знака подчеркивания. Например, · простое_число (3). Это - высказывание, структура которого описана предикатом P1(x):=”x - простое число”. · частное_от_деления(6, 2, 3). Это - высказывание, структура которого описана предикатом P3(x, y, z):=”z есть частное от деления числа x на y”. · студент_университета,_обучающийся_по_специальности (Петров, КГТУ, прикладная информатика"). Это - высказывание, структура которого описана предикатом P6(x, y, z):= "студент x университета y, обучающийся по специальности z”. ·: отец (игорь, святослав). отец (святослав, владимир). отец (владимир, борис). отец (владимир, глеб). / родословная русских дед (игорь, владимир). князей X века /. дед (святослав, борис). дед (святослав, глеб). брат (борис, глеб). Это - высказывания, структура которых описана предикатами
P4(X, Y):=”X – отец Y”, P5(X, Y):=”X – дед Y”, P6(X, Y):=”X – брат Y”. Структуру высказывания или функциональную зависимость между предметными постоянными описывают термы. Множество фактов формирует базу данных о предметной области. Правила есть суждения, истинность которых зависит от истинности условий: “если истинны условия (посылки, цели), то истинно и заключение (вывод)”. Это – известное правило m.p. На языке Prolog правила записывают так: <заключение>:- <условия>”.” Символ “:-“ соответствует символу обратной импликации ””. Левую часть правила называют головой предложения, а правую – телом предложения. В теле предложения перечисляют условия, а в голове - заключение. Если дано несколько условий, и они имеют между собой конъюнктивную связь, то перечень условий описывают так: <условие>{“,”<условие>}”.”, если дизъюнктивную, - так: <условие>{“;”<условие>}”.”. Голова предложения всегда сдвинута влево относительно перечня условий. Каждое условие начинается с новой строки. На языке Prolog эти правила записывают так: <заключение>:- <условие_1>”,” <условие_2>”;” <условие_3>”.” Предметные переменные и предметные постоянные являются аргументами заключения и условий. Множество правил формирует базу знаний и определяет механизм достижения целей при заданных условиях. Например, в базе знаний могут быть правила: дед(X, Y):- отец(X, Z), отец (Z, Y). брат(X, Y):- отец (Z, X), отец(Z, Y). Вопросы, позволяют запрашивать систему о том, какие суждения являются истинными или ложными. Для этого предметные переменные, включаемые в вопросы, сравниваются с помощью правил унификации и подстановки с предметными постоянными, включаемыми в факты. Пример: ?-дед (святослав, Y). /“Кому Святослав является дедом?”/. В базе знаний есть правило: дед(X, Y):- отец(X, Z), отец (Z, Y). Выполняя подстановку в условия фактов из базы данных, получим:
отец (святослав, владимир). отец (владимир, борис). отец (владимир, глеб). Следовательно, ответ на поставленный вопрос: дед (святослав, борис, глеб). /”Святослав дед Борису и Глебу”/ Пример: ?-брат(X, Y). /”Есть ли братья среди русских князей X века”/. В базе знаний есть правило: брат(X, Y):- отец (Z, X), отец(Z, Y). Выполняя подстановку в условия фактов из базы данных, получим: отец (владимир, борис). отец (владимир, глеб). Следовательно, ответ на поставленный вопрос: брат (борис, глеб). /”Борис и Глеб – братья”/. Рассмотренный метод обобщает механизм унификации. Аргументы вызова - это имена переменных, которые подставляют на место формальных параметров. Формальными параметрами могут быть термы. Например, для родословной русских князей X века имеем: · дед (игорь, владимир):- отец (игорь, святослав), отец (святослав, владимир). Это - высказывание о том, что если ‘игорь’ был отцом ‘святослава’, а ‘святослав’ – отцом ‘владимира’, то ‘игорь’ был дедом ‘владимиру’. · дед (святослав, борис), дед(святослав, глеб):- отец (святослав, владимир), отец (владимир, борис); отец (святослав, владимир), отец (владимир, глеб). Это есть высказывание о том, что ‘святослав’ был отцом ‘владимира’ и дедом ‘борису’ и ‘глебу’. · брат(борис, глеб):-. родитель(владимир, борис), родитель(владимир,глеб). Это есть высказывание о том, что если ‘владимир’ был отцом ‘бориса’ и отцом ‘глеба’, то ‘борис’ и ‘глеб’ были братьями. Логика реляционная Двухмерная таблица есть наиболее удобная форма представления, поиска и обработки информации. Если именами столбцов таблицы являются имена каких-либо признаков, чаще всего называемых атрибутами, а строками - цепочки значений заданных атрибутов, чаще всего называемых кортежами, то множество таких цепочек таблицы называют отношением. Все кортежи отношения должно быть совместимыми, т. е. иметь одно и то же число атрибутов, а значения одного атрибута в каждом кортеже отношения должны выбираться из одной области определения, называемой доменом. Число столбцов таблицы или атрибутов отношения определяют его арность, а число кортежей – мощность отношения. Реляционная модель – это конечный набор конечных отношений, опирающихся на различные, но конечные наборы атрибутов. Над отношениями реляционной модели можно осуществлять различные алгебраические и логические операции для исследования характеристик объектов или связей между объектами. Тем самым реляционная модель стала областью приложения дискретной математики и математической логики.
Отношение можно рассматривать как файл определенного типа. Такой файл состоит из последовательности записей, по одной на каждый кортеж, причем не должно быть одинаковых записей. Все записи должны иметь одинаковое число полей для представления атрибутов. В одноименных полях различных записей должна храниться информация одного и того же типа соответствующего заданному типу атрибута. Между таблицей, отношением и файлом есть соответствие: ТАБЛИЦА ® ОТНОШЕНИЕ ® ФАЙЛ строка ® кортеж ® запись имя столбца ® имя атрибута ® имя поля тип атрибута ® тип домена ® тип поля
Верхняя строка таблицы формирует “шапку”, а остальные строки – “тело” таблицы. Ниже, как пример таблицы, дан фрагмент учебного плана.
............... Эта таблица (отношение) отражает связи между наименованием учебной дисциплины, видом и числом часов аудиторных занятий и формой отчетности. Именами атрибутов отношения являются: ”дисциплина”, “лекции_(ч)”, “лаб.занятия_(ч)”, “практ.занятия_(ч)”, “отчетность_(зач., экз.)”. Значением атрибута “дисциплина” являются слова {физика, информатика,..}, “отчетность” – {зач., экз.}. Тип этих атрибутов - <слово>, а тип домена – CHAR (строковое). Значением атрибутов “лекции_(ч)”, “лабораторные занятия_(ч)” и “практические занятия_(ч)” являются целые числа {17, 34, 51, 68}. Тип этих атрибутов - <целое_число>, а тип домена –INTEGER (целое). Кортежами этого отношения являются: (физика, 34, 34, 17, экз.), (информатика 51, 34, 0, зач.). Таким образом, если дано множество атрибутов A ={A1, A2,...An} и множество доменов D ={D1, D2,...Dm}, то кортеж отношения есть t=(d1, d2,...dn) где diÎ D.
Так как отношение есть множество совместимых кортежей, то r={t| t=(d1, d2,...dn), diÎ D }. Отношение, заданное на множестве упорядоченных кортежей, есть подмножество n-арного прямого произведения доменов, т.е. r={t| t=(d1, d2,...dn), diÎ D }Í 1Än D. Отношение на множестве упорядоченных кортежей задают схемой отношения с указанием имени отношения, числа и порядка следования атрибутов в кортеже и обозначают так: rel(r)=(A1, A2,¼, An). Например, rel(уч_план_1)=(дисциплина, лекции_(ч), лаб_занятия_(ч), практ_занятия_(ч), отчетность_(зач.,экз.)). Множество схем отношений, используемых в реляционной базе данных, называют схемой реляционнойбазы данных и обозначают так: REL (R)={rel(r)}. Схемы отношений в реляционной базе имеют различную длину и различные наборы атрибутов. Поэтому чаще всего в каждом поле записи указывают имя атрибута и его значение. Наличие в поле записи имени атрибута снимает ограничение на упорядоченность полей записи. При этом оказываются совместимыми записи, заданные одинаковым набором имен полей, но имеющих различный порядок следования атрибутов. Например, запись файла “уч_план_1” может быть (дисциплина=физика, лекции_(ч)=34, лаб.занятия_(ч)=34, практ.занятия_(ч)=17, отчетность_зач., экз.=экз.) или такой (практ.занятия_(ч)=17, дисциплина=физика, отчетность_ (зач., экз.)=экз., лаб.занятия_(ч)=34, лекции_(ч)=34). Для каждого отношения должен быть задан ключ. Ключ – это один или несколько атрибутов, выделяющих единственную кортеж (запись) отношения (файла). Так, например, ключом учебного плана может быть атрибут “дисциплина”. При изложении основ реляционной алгебры и реляционного исчисления будем придерживаться следующих ограничений: 1) все атрибуты кортежа должны быть элементарными (или каждое поле записи должно иметь один тип: INTEGER (целые), REAL (вещественные), CHARACTER (строковые) или BOOLEAN (булевские)) и не должны быть функционально связаны между собой; 2) все кортежи должны быть упорядоченными и иметь одинаковое число компонент в одном отношении (или все записи в файле должны иметь одинаковое число полей); 3) каждое отношение должно иметь ключ, в роли которого выступают один или несколько атрибутов и каждое отношение не должно содержать по одному ключу двух или более одинаковых кортежей (или файл не должен содержать двух или более одинаковых записей); 4) никакие два столбца таблицы не должны иметь совпадающие имена атрибутов, но их значения могут принадлежать одному домену. Реляционная алгебра Основные теоретико-множественные операции над отображениями были описаны в 1.6.1 и 1.6 4. В настоящем разделе дается описание алгебраических операций, употребляемых в системах управления реляционными базами данных.
Пусть дано множество отношений R ={r}, где r={t| t=(d1, d2,...dn), diÎ D }- отношение, t=(d1, d2,...dn) – кортеж отношения, diÎDi- значение компоненты кортежа, Di – домен i-го атрибута, D ={D1, D2,¼, Dm} – множество доменов, A ={A1, A2,...Ak} - множество атрибутов, rel(r)= (A1, A2,...An) - схема отношения, REL (R)={rel(r)} - множество схем отношений, множество алгебраических операторов: S ={È, Ç, \, Ä, ù, dB(r), p rel(r), ><, > q <}, где È - оператор объединения отношений; Ç - оператор пересечения отношений; \ - оператор разности отношений; Ä - оператор прямого произведения отношений; ù - оператор дополнения отношения; dB(r) - оператор выбора кортежа по условию B; p rel’(r) - оператор проекции отношения на новую схему rel; >< - оператор естественного соединения отношений; >q< - оператор q - соединения отношений, : - оператор деления отношений. множество логических операторов: Y={&, Ú, ù}, где & - оператор конъюнкции условий и/или отношений, Ú - оператор дизъюнкции условий и/или отношений, ù - оператор отрицания условий и/или отношений, множество операторов сравнения: q={=, ¹, >, ³, <, £}.
Множество отношений R и операторов формируют реляционную алгебру . Ap=< R, å, Y, q >. Рассмотрим исполнение алгебраических операций над пятью отношениями r1, r2, r3, r4 и r5. Поскольку наиболее удобно представление отношений таблицами, то исполнение операций проследим в графической форме. Имена атрибутов в таблицах обозначены прописными буквами латинского алфавита с индексами А1, А2, A3, A4, A5 и А6, а значения атрибутов - строчными буквами латинского алфавита с индексами {a1, a2, a3, a4, b1, b2, b3, b4, c1, c2, d1, d2, d3} и цифрами {1, 2, 3}.
Пусть даны ключи отношений: r1 – (A 1), r2 - (A 2), r3 - (A 1, A 5), r4- (A 4, A 5, A 6). В шапках таблиц ключи выделены полужирным шрифтом. Операторы dB(r), prel'(r) и ùr есть унарные операторы, а операторы È(r1, r2), Ç(r1, r2), \(r1, r2), Ä(r1, r2), ><(r1, r2), >q<(r1, r2) и:(r1,r2)} – бинарные. При выполнении алгебраических операций сравнивают значения атрибутов кортежа с постоянными значениями или значениями атрибутов других отношений. Для сравниваемых атрибутов введем обозначение постоянной величины - kdi, а для сравниваемых кортежей – kti.
Унарные операции Оператор выбора dB(r) позволяет извлекать из отношения r кортежи, удовлетворяющие условию В, и формировать новое отношение r’. Условия выбора задаются, как правило, операторами сравнения {=, ¹, >, ³, <, £} и/или логическими связками {&, Ú, ù}. Например, B=(Аi=kdi); B=(Аi¹kdi); B=(Аi>kdi); B=(Аi<kdi); B=(Аi³kdi); B=(Аi£kdi); B=((A1, A2,...An)=kti); B=((A1, A2,...An)¹kti); B=((A1, А2,...An)>kti); B=((A1, A2,...An)<kti); B=((A1, A2,...An)³kti); B=((A1, A2,...An)£kti); B=Bi &Bj; B=Bi ÚBj; B=ù Bj и т. п.. Результатом исполнения этой операции будет новое отношение r’, т.е. r’= dB(r)={ t’| t’ Í r; B, rel(r’)=rel(r)}Í r. Пример: выбрать кортежи отношения r1 по ключу А1=а2, т.е. r’1={t’| B:=(A1=a2}, r2 - по значению атрибута A3=1, т.е. r’2={t’| B:=(A3=1}, r5 – по значениям атрибутов {A1=a1, A2=b1, A3=1}, т.е. r’5={t’| B:=(A1=a1)&, (A2=b1)&(A3=1)}. Ниже приведены отношения в результате исполнения этих операций.
В нотации компьютерных языков операцию выбора записывают так: SELECT (отношение; УСЛОВИЯ). Для данного примера это будет описано так: r’1=SELECT(r1, A1=’a2’); r’2=SELECT(r2, A3=’1’); r’5=SELECT(r5; A1=’a1’ AND A2=’b1’ AND A3=’1’). Значения атрибутов заключены в апострофы. Это означает, что строка символов является значением поля записи. Данное правило относится к любым одиночным символам и строкам, представляющим значение атрибута. Это делается для того, чтобы отличить значение от имени атрибута, переменных параметров и числовых констант. При программировании на алгоритмических языках логические связки {&,Ú,ù} замещаются операторами AND, OR, NOT соответственно. Например, необходимо выбрать кортежи отношения r1 по значению атрибута A3=ù3, т.е. r’1={t’| B:=(A3=ù3}, r2 - по значению атрибутов A3=1 или A2=b1, т.е. r’2={t’| B=(A3=1ÚA2=b1}, r5 – по значению атрибутов (A1=a1, A2=b1, A3=1и A4¹c2), т.е. r’5={t’| B=((A1=a1)&(A2=b1)&(A3=1)&(A4¹c2)}. Ниже приведены отношения в результате исполнения этих операций.
Оператор выбора как бы разрезает таблицу на отдельные строки, удаляет строки, не удовлетворяющие заданным условиям и склеивает новую таблицу. В нотации компьютерных языков оператор выбора описывают так: r’1=SELECT(r1; A3=NOT’3’); r’2=SELECT(r2; A3=’1’OR A2=’b1’); r’5=SELECT(r5; A1=’a1’AND A2=’b1’AND A3=’1’AND A4=NOT’c2’). При задании нескольких операторов выбора допускается их композиция, т. е.dВ1В2…Вь=.dВ1×dВ2×…×dВь. Оператор проекции prel(r) позволяет формировать из данного отношения r со схемой rel(r)=(A1, A2,..An) новое отношение r’ со схемой rel(r’)=(Ai, Aj,.. Ak), где 1£i, j,k£n, путем удаления и (или) переупорядочения атрибутов. Результатом выполнения этой операции будет новое отношение, удовлетворяющее новой схеме r’=prel(r)={ t’| |rel(r’)|£|rel(r)|}. Следует обратить внимание, что число атрибутов схемы формируемого отношения меньше или равно числу атрибутов схемы исходного отношения, т.е. |rel(r’)|£|rel(r)|, а число кортежей формируемого отношения равно числу кортежей исходного отношения, т.е. |r’|=|r|. Например, необходимо выбрать значения ключей отношений r1 и r3, т.е. rel(r’1)= (A1), rel(r’3)= (A1, A5).
При задании нескольких операторов проекции допускается их композиция, т. е. prel1 rel2 … relь (r)= prel(r)×pre2(r)×…×pre(r). В нотации компьютерных языков операцию проекции записывают так: PROJECT(отношение, СПИСОК AТРИБУТОВ). Для приведенных примеров имеем:r’1=PROJECT(r1, A1); r’3=PROJECT(r3, A1, A5); r’5=PROJECT(r5, A1, A2, A3). Оператор дополнения ùr. Для формирования дополнения отношения необходимо найти множество всех кортежей со схемой заданного отношения rel(r) на области определения D, т. е. найти размещение всех значений домена отношения | D |= n на число компонент -k схемы отношения rel(r), т.е. найти dom(r)=(n)k=n*(n-1)*(n-2)*...*(n-k+1) и удалить из этого множества кортежи исходного отношения r. Множество таких кортежей очень большое. Если хотя бы один атрибут отношения счетный, но не конечный, то |dom(r)|=¥. Например, для r3 имеем D1={a1, a2, a3}, D4={c1, c2}, D5={d1, d2, d3}, т. е. n=|D|=|D1ÈD4ÈD5|=8 и к=3. Следовательно, число кортежей дополнения равно |dom(r3)|=(8)3=8*7*6*5*4=6720. Если значения атрибутов находятся в пределах своих доменов, то |dom(r)|=|D1|*|D2|*...*|Dm|. Например, для r3 имеем |dom(r)|=3*2*3=18, а |ùr|=14. Чтобы получить кортежи отношенияùr3 следует из множества кортежей dom(r3) удалить кортежи r3, т. е. ùr3= dom(r3)\ r3). Ниже двумя таблицами представлены dom(r3) и ùr3..
Бинарные операции Все множество бинарных операторов удобно разбить на два подмножества: основные и дополнительные. Основные - это объединения, разности и прямого произведения, а дополнительные - пересечения, соединения и деления. Оператор объединения È(r1, r2) двух отношений, имеющих одинаковые схемы, формирует новое отношение r’,
Оператор прямого произведения Ä(r1, r2) формирует из двух отношений арности n1 и n2 новое отношение r’ арности (n1+n2).
Оператор разности \(r1, r2) двух отношений, имеющих одинаковые схемы, формирует новое отношение r’, выбирая из первого отношения только те кортежи, которых нет во втором отношении. В результате выполнения этой операции формируется множество кортежей по правилу: r’={t’| t = t1Î r1 и t1Ïr2, rel(r1)=rel(r2)}.
Оператор пересечения Ç(r1, r2), имеющих одинаковые схемы, формирует новое отношение из кортежей первого и второго отношений, имеющих одинаковые значения всех одноименных атрибутов. В результате выполнения этой операции: r`= {t’| t’=t1Îr1 и t’=t2Îr2 , rel(r1)=rel(r2)}. В нотации компьютерных языков оператор пересечения записывают так: r’=INTERSECT(r1, r2). Операция пересечения может быть реализована оператором разности: r1Çr2=r1\(r1\r2).
Оператор естественного соединения ><(r1, r2) фqqормирует из r1 и r2, имеющих один или несколько одинаковых имен атрибутов, новое отношение r’, схема которого есть объединение схем двух отношений, а кортежи формируются из кортежей первого отношения путем присоединения кортежей второго отношения при одинаковых значениях одноименных атрибутов. В результате выполнения этой операции: r’={t’=<t1t2>| t1Î r1; t2 Î r2; rel(r1)Çrel(r2)¹Æ; rel(r’)=rel(r1)È rel(r2)}. В нотации компьютерных языков оператор соединения есть: JOIN (r1, r2). В таблицах приведены результаты r1><r2 и r3><r4.
Оператор q-соединения >q<(r1, r2) формирует из r1 и r2 арности n1 и n2 новое отношение r’ арности (n1+n2) при выполнении некоторого условия В=(d1iqd2j), где q={=, ¹, >, ³, <, £}; первые n1 компонентов кортежа образованы кортежами, принадлежащими отношению r1, а последние - кортежами, принадлежащими отношению r2. В результате исполнения этой операции: r’={t`=<t1t2>| <t1t2>Î(r1Är2), В=(d1iqd2j), rel(r’)=<rel(r1), rel(r2)>}. В нотации компьютерных языков это: JOIN (r1, r2, УСЛОВИЕ).
Частным случаем q-соединения является эквисоединение, когда формируется новая таблица, для которой различные атрибуты различных отношений имеют одинаковое значение. Например, <имя_порт_приписки>=<имя_порт_назначения>. Пример: r’=JOIN (r1, r4, r1.A3=r4.A6).
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|