СавельеваА.Г. Курсовая по ИИС. 2.СавельеваА.Г. Курсовая по ИИС. Исчисление предикатов основа языка Пролог
Скачать 105.74 Kb.
|
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ ФГБОУ ВО «НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ УНИВЕРСИТЕТ «МЭИ»» ИНЖЕНЕРНО-ЭКОНОМИЧЕСКИЙ ИНСТИТУТ КУРСОВАЯ РАБОТА по дисциплине «Интеллектуальные информационные системы» Тема: «Исчисление предикатов - основа языка Пролог» Студентка группы __ИЭ-61-18_________________СавельеваА.Г. (Ф.И.О.) Руководитель____________________________доцент, Карпович Е. Е. (уч. степень, звание, Ф.И.О.)
Москва-2021 Москва-2018 ОГЛАВЛЕНИЕ ВВЕДЕНИЕ 3 1.ЯЗЫК ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ PROLOG 6 1.1. ОСНОВНЫЕ ОПРЕДЕЛЕНИЯ ЛОГИКИ ПРЕДИКАТОВ ПЕРВОГО ПОРЯДКА 6 1.2.СТАНДАРТНЫЕ ФОРМЫ ПРЕДСТАВЛЕНИЯ ФОРМУЛ ИСЧИСЛЕНИЯ ПРЕДИКАТОВ 10 1.3.ЛОГИКА ПРЕДИКАТОВ – ОСНОВА СИНТАКСИСА И СЕМАНТИКИ ЯЗЫКА PROLOG 11 2.ПРИМЕР PROLOG-ПРОГРАММЫ 14 ЗАКЛЮЧЕНИЕ 17 СПИСОК ЛИТЕРАТУРЫ 18 ВВЕДЕНИЕКлючевое отличие языка Пролог от традиционных, алгоритмических языков программирования заключается в применении в программировании логики предикатов – логических функций-утверждений с одной или несколькими переменными, определенных на множестве и принимающих одно из двух значений, «истина» и «ложь», в зависимости от значений предметных переменных. Такие предикаты-утверждения полежат доказательству – и выполнение программы состоит в попытке доказать истинность утверждения. Такие утверждения называют целевыми, а свойство, заложенное в принцип решения задачи типа: «Существует список Х, такой, что упорядочение списка [3,1,2,7] приводит к списку Х». - декралативностью, когда программист вместо описания процедуры решения задачи, описывает предметную область и декларирует, что именно является истинным в этой предметной области. Рис.1. В Prolog для описания некоторой предмет ной области и используется исчисление предикатов. Также определяются множества исходных элементов, правила построения формул, система аксиом и множество правил вывода, каждое из которых описывает способ построения новых формул из исходных элементов и уже построенных формул. Для Пролога, где предметная область описывается с помощью хорновских предложений, в качестве способа логического вывода выбран поиск сверху вниз. Программирование на Прологе сводится к представлению описания задачи в виде множества хорновских предикатов, интерпретации этого описания с помощью Пролог системы и затем выдачи вопросов Пролог системе, которая отвечает на вопросы, используя для логического вывода заключений поиск сверху вниз. Отношения на языке Пролог описываются с помощью правил. Правило, содержащее свой заголовок в качестве предиката в правой части этого правила, называется рекурсивным. Рекурсивное правило реализует повторяющиеся действия. Рекурсивные правила эффективны при программировании циклических задач, при формировании запросов к базам данных и при обработке списков. Предложения языка Пролог являются либо правилами, либо фактами, либо запросами. Логическая программа на Прологе это конечная последовательность фактов и правил. Поэтому название языка было получено от фразы на английском языке “PROgramming in LOGic”, что означает – программирование средствами логики. ЯЗЫК ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ PROLOGЛогическое программирование — это подход к информатике, при котором в качестве языка высокого уровня используется логика предикатов первого порядка в форме фраз Хорна. Логика предикатов первого порядка — это универсальный абстрактный язык предназначенный для представления знаний и для решения задач. Его можно рассматривать как общую теорию отношений. При использовании языка логического программирования основное внимание уделяется описанию структуры прикладной задачи, а не выработке предписаний компьютеру о том, что ему следует делать. Другие понятия информатики из таких областей, как теория реляционных баз данных, программная инженерия и представление знаний, также можно описать и реализовать с помощью логических программ. ОСНОВНЫЕ ОПРЕДЕЛЕНИЯ ЛОГИКИ ПРЕДИКАТОВ ПЕРВОГО ПОРЯДКАПредположим, есть некоторое множество D объектов, называемое предметной областью. Символы, обозначающие элементы этого множества, называются предметными константами, а символ, обозначающий произвольный элемент предметной области предметной переменной. Предикатэто логическая функция одной или нескольких переменных P(x1,x2,… xn), определенная на множестве D и принимающая одно из двух значений, «истина» и «ложь», в зависимости от значений предметных переменных. Буква P предикатный символ. Предикат, зависящий от n переменных, называется nместным (или nарным) предикатом. Для описания некоторой предметной области на языке исчисления предикатов (ИП) определяются множества исходных элементов, правила построения формул, система аксиом и множество правил вывода, каждое из которых описывает способ построения новых формул из исходных элементов и уже построенных формул. Исходными элементами ИП являются следующие множества: Конечное множество предметных переменных {x1,x2,…xk}; Конечное множество предметных констант {a1,a2,…an}; Конечное множество функциональных символов {f1,f2,…fm}; Конечное, непустое множество предикатных констант {p1,p2,…pr}; Логические связки: (отрицание), (конъюнкция), (дизъюнкция), (импликация). Кванторы: (квантор всеобщности) и (квантор существования). Специальные символы: ( ) + - */ < > . , [ ] : ; Знак пустого дизъюнкта , который является тождественно ложной формулой. Правила построения формул определяются следующим образом. Формулы состоят из термов, предикатных констант, специальных символов и логических связок. Определение терма рекурсивно: Терм это предметная переменная или предметная константа. Если f функциональный символ, и t1,t2,…tn термы, то f(t1,t2,…tn) терм. Предикат вида p(t1,t2,…tn), где p предикатная константа, а t1,t2,…tn термы, является элементарной формулой. Правила построения ППФ (Правильно Построенных Формул) в логике предикатов 1-го порядка следующие: Всякая элементарная формула есть ППФ. Если A и B ППФ, а x предметная переменная, то каждое из выражений A, AB, AB, AB, (x)A, (x)A есть ППФ. Других правил построения ППФ нет. Для формул с кванторами справедливо следующее утверждение: формула Q(x1,x2,…,xn) получена из формулы P(x1,x2,…xn) посредством присоединения квантора, если Q(x1,x2,…,xn) = (xi) P(x1,x2,…xn) или Q(x1,x2,…,xn) = (xi) P(x1,x2,…xn). Пусть D={a1 , a2, …, an} есть множество предметных констант, и P(x) предикат, определенный на множестве D, тогда справедливы утверждения: (x) P(x) = P(a1) P(a2) …P(an) и (x) P(x) = P(a1) P(a2) …P(an). Система аксиом исчисления предикатов включает в себя аксиомы исчисления высказываний А1А11 и две аксиомы с кванторами А12 и А13. A1) A (BC) A2) (A(BC)) ((AB) (AC)) A3) AB A A4) AB B A5) (AB) ((AC) (ABC)) A6) AAB A7) BAB A8) (AC) ((BC) (ABC)) A9) (AB) (BA) A10) A A A11) A A A12) (x) A(x) A(t) A13) A(t) (x) A(x), A(x) ППФ, t терм, не содержащий x. Все аксиомы тождественно истинны. Выводом P называется такое линейно упорядоченное множество элементов, что всякий элемент P является либо аксиомой, либо заключением применения некоторого правила вывода. Формула является выводимой, если можно построить вывод, заканчивающийся этой формулой. В исчислении предикатов определены следующие правила вывода: Все аксиомы выводимы. Правило подстановки. Подстановка (ti вместо xi) есть множество = {x1=t1,x2=t2,… xk=tk }, где x1,x2,…,xk попарно различные предметные переменные, xixj при ij , t1,t2,…,tk термы, если xi= ti, то ti отличается от xi.Правило подстановки означает, что если P(x1,x2,…xk) выводим, то и формула P(t1,t2,…tk) = (P(x1,x2,…xk)) выводима. Правило Modus Ponens (MP). Если А выводимая ППФ, и A B выводима, то B также будет выводима. Правило обобщения. Если B A(x) выводимая ППФ, и B не содержит вхождений x, то формула B (x)A(x) также будет выводима. Правило конкретизации. Если выводима формула A(x)B, и B не содержит вхождений x, то формула (x)A(x) B также будет выводима. Правило переименования переменных. Если Aвыводимая ППФ, имеющая квантор и (или) , то одна связанная переменная может быть заменена другой, не меняя истинностного значения формулы. Полученная формула также будет выводима. Других правил вывода нет. СТАНДАРТНЫЕ ФОРМЫ ПРЕДСТАВЛЕНИЯ ФОРМУЛ ИСЧИСЛЕНИЯ ПРЕДИКАТОВПриведение логических формул к одной из стандартных (нормальных) форм представления позволяет упростить алгоритм доказательства общезначимости формул. По тем же причинам язык программирования Пролог является подмножеством языка исчисления предикатов, в Прологе используется клаузальная форма записи формул исчисления предикатов. Клаузальной формой (клаузой или предложением) в исчислении предикатов называется формула, представляющая собой несколько предикатов или их отрицаний, объединенных знаками дизъюнкции. В общем случае клаузу можно представить в следующем виде: A1A2…AkB1B2 … Bn , где элементарные формулы (предикаты) Ai и Bj называются литерами, причем Bj положительная литера, а Ai отрицательная литера. Если k1 и n=1, то такая клауза имеет вид A1A2…AkB и называется клаузой Хорна или хорновским дизъюнктом. Хорновский дизъюнкт содержит не более одной положительной литеры. Дизъюнкт Хорна можно преобразовать с помощью правила де Моргана: (A1A2…Ak)B, а эта формула равносильна формуле A1A2…AkB, что соответствует правилам “Если …,то”. На языке Пролог дизъюнкт Хорна записывается в другом виде B: A1,A2,…,Ak. При такой записи «,» соответствует знаку конъюнкции , а знак “:” соответствует знаку импликации . В языке Пролог используются только хорновские дизъюнкты, называемые правилами. При этом B называется заголовком правила, а конъюнкция A1,A2,…,Ak называется телом правила. Знак “:” читается как “Если”. Таким образом, правило является условным предложением языка Пролог. В клаузе Хорна атомарные формулы A1,A2,…,Ak могут отсутствовать, т.е. k=0, n=1. В этом случае правило имеет пустое тело: B: . Это означает, что предикат B истинен всегда, такая конструкция в языке Пролог называется фактом. Если в хорновском предложении отсутствует заголовок правила, т.е. k1, n=0, то правило принимает вид: ? : A1,A2,…,Ak. Такое выражение называется вопросом или запросом, а предикаты A1,A2,…,Ak называются целями, или целевыми утверждениями. Если в хорновской клаузе k= n=0 , клауза называется пустым дизъюнктом, имеет обозначение и интерпретируется как тождественно ложная формула. Предложения языка Пролог являются либо правилами, либо фактами, либо запросами. Логическая программа на Прологе это конечная последовательность фактов и правил. ЛОГИКА ПРЕДИКАТОВ – ОСНОВА СИНТАКСИСА И СЕМАНТИКИ ЯЗЫКА PROLOGОсновными конструкциями логического программирования в Prolog являются логические термы (переменные, константы, свойства, составной терм), а также утверждения 3х видов: Факты – это предикатная структура, обязательно заканчивающаяся точкой. Например: <имя предиката>(<терм1>,<терм2>,…,<термn>). student(‘Иванов’,’МГГУ’). - где в скобках записываются аргументы. Факты являются простейшим видом утверждений в логических программах и с их помощью можно определять свойства объектов, если аргумент один, или описывать отношения между объектами, если аргументов два и больше. Совокупность фактов в Прологпрограмме является аналогом реляционной базы данных, а вопросы к программе подобны запросам к базе данных. Факты, содержащие переменные, называются универсальными. Например: plus(X,0,X). - сумма любого числа Х с нулем равна X. Правила - это средство определения новых утверждений, используя уже существующие в Пролог-программе утверждения. Например: A: B1,B2,…Bn. (n0) circle(X,Y): X^2+X^2=4. - где A заголовок правила, а конъюнкция предикатов B1,B2,…Bn называется телом правила. В Прологпрограмме может быть записано произвольное число фактов и правил. Набор правил, заголовки которых имеют одно и то же имя и арность, описывает одно и то же отношение и называется процедурой. Вопросы - это средство извлечения информации из логической программы. С помощью вопроса выясняется, истинно ли некоторое утверждение или нет. С точки зрения логики поиск ответа на вопрос состоит в определении того, является ли утверждение (вопрос) логическим следствием программы или нет. Вопрос, включающий в себя конъюнкцию предикатов p1,p2,…,pn , называется конъюнктивным вопросом. Каждый предикат pi называется целью. Конъюнктивный вопрос это конъюнкция целей. Вопросы, состоящие из одной цели, называются простыми вопросами. Вопрос, не содержащий переменных, называется основным вопросом, а вопрос, включающий переменные, называется неосновным. Переменные в вопросах неявно связаны квантором существования. Это означает, что вопрос ?p(X1,X2,…Xn). где X1,X2,…Xn переменные, предполагает утвердительный ответ, если существует такой набор термов t1,t2,…tn, что подстановка {X1=t1,X2=t2,…Xn=tn} в предикат p дает результат “истина”. Если существует, хотя бы одна такая подстановка, то вопрос ?p(X1,X2,…Xn). выводим из логической программы, т.е. является логическим следствием программы. Конъюнктивные вопросы могут содержать общие переменные. Переменные называются общими, если они входят в две или более цели конъюнктивного запроса. Рис.1.1. Также, для упрощения алгоритма доказательства общезначимости формул используют приведение логических формул к одной из стандартных (нормальных) форм представления. По тем же причинам язык программирования Пролог является подмножеством языка исчисления предикатов, в Прологе используется клаузальная форма записи формул исчисления предикатов. ПРИМЕР PROLOG-ПРОГРАММЫЭд Программа «Родственники» является примером простой Прологпрограммы. На рис 2. показано трехуровневое генеалогическое дерево. Родственные отношения можно записать с помощью фактов, соответствующие отношению parent: parent(‘Памелла’,’Джон’). parent(‘Памелла’,’Элизабет’). parent(‘Том’,’Джон’). parent(‘Том’,’Элизабет’). parent(‘Джон’,’Анна’). parent(‘Джон’,’Пат’). parent(‘Элизабет’,’Эд’). parent(‘Пат’,’Джим’). Расширим эту программу фактами, определяемыми схемой отношения person. person(‘Памелла’,’ж’,72). person(‘Том’,’м’,78). person(‘Джон’,’м’,42). person(‘Элизабет’,’ж’,35). person(‘Эд’,’м’,14). person(‘Анна’,’ж’,20). person(‘Пат’,’ж’,25). person(‘Джим’,’м’,3). Теперь мы можем задавать Прологпрограмме вопросы, используя оба отношения. Вопрос 1. ”Является ли Пат родителем Джима?” на Прологе можно задать следующим образом: ?-parent(‘Пат’,’Джим’). Пролог-система будет искать в программе факт, совпадающий с вопросом, и, обнаружив такой факт, система выдаст ответ ‘YES’. В случае, когда соответствующий факт не обнаружен, система выдаст ответ ‘NO’. Вопрос 2. ”Кто отец Элизабет и сколько ему лет?” на Прологе можно задать следующим образом: ?-parent(Х,’ Элизабет’),person(X,’м’, Y). Пролог-система выдаст ответ: X=’Том’-> Y=78-> YES Если возраст не интересует пользователя, то в вопросе используется анонимные переменные, обозначаемые знаками подчеркивания ‘_’. Вопрос 3. ”Кто отец Элизабет?” на Прологе можно задать следующим образом: ?-parent(Х,’ Элизабет’),person(X,’м’, _). Пролог-система выдаст ответ: X=’Том’-> YES Приведенные примеры вопросов относятся к программе, состоящей из одних фактов. Для того чтобы сократить и упростить вопросы в Пролог—программах задаются правила. Вопрос 3 можно упростить, если задать следующее правило: “X является отцом Y, если X является родителем Y, и X – мужчина.” На языке Пролог это правило записывается так: father(X,Y):-parent(X,Y),person(X,’м’,_). А вопрос 3 записывается следующим образом: ?-father(X,’Jim’). ЗАКЛЮЧЕНИЕProlog — язык логического программирования. Логическое программирование — функциональное программирование, радикально отклоняется от основного пути развития алгоритмических языков программирования. Логическое программирование строится не с помощью некоторой последовательности абстракций и преобразований, отталкивающейся от машинной архитектуры фон Неймана и присущего ей набора операций, а на основе абстрактной модели, которая никак не связана с каким-либо типом машинной модели. Логическое программирование базируется на убеждении, что не человека следует обучать мышлению в терминах операций компьютера, а компьютер должен выполнять инструкции, свойственные человеку. В своем предельном и чистом виде логическое программирование предполагает, что сами инструкции даже не задаются, а вместо этого явно, в виде логических аксиом, формулируются сведения о задаче и предположения, достаточные для ее решения. Язык Prolog строится на описании предикатов – утверждений, отношений между аргументами и их свойствами, в котором используется логика предикатов первого порядка в форме фраз Хорна. СПИСОК ЛИТЕРАТУРЫУчебное пособие «Программирование на языке Пролог», Карпович Е.Е. 2002г. http://masters.donntu.org/2009/fvti/bandurka/library/article3.htm |