- •Міністерство освіти і науки України Дніпропетровський національний університет
- •Програмування мовою пролог
- •Дніпропетровськ
- •1. Основи мови програмування пролог
- •1.1. Основні поняття
- •1.2. Синтаксис мови пролог
- •1.3. Класифікація даних у пролозі
- •1.4. Приклад доказу в пролозі
- •1.5. Подання задачі у вигляді і-або дерева
- •1.6. Структура програми в системі tp
- •1.7. Убудовані типи даних мови tp
- •1.8. Висновки
- •2. Підстави логічного програмування
- •2.1. Принцип резолюцій
- •2.3. Способи застосування принципу резолюцій
- •2.4. Диз’юнкти хорhа
- •3. Три семантичні моделі пролог-програми
- •4. Подання знань
- •4.1. Процес подання знань
- •4.2. Способи подання бази знань
- •4.2.1. Представлення цілісних інформаційних елементів у вигляді фактів
- •4.2.2. Подання атрибутів у вигляді фактів
- •4.2.3. Представлення знань у вигляді списку структур
- •4.2.4. Подання у вигляді рекурсивних структур
- •4.2.5. Подання у вигляді двійкового дерева
- •4.2.6. Порівняння різних виглядів подання бази даних
- •4.2.7. Компонування даних у список
- •4.3. Використання складених об'єктів
- •4.4. Використання альтернативних доменів
- •4.5. Засоби документування програми
- •4.6. Типи й властивості відношень предметної області
- •4.6.1. Обмеження, що забезпечують цілсність відношень
- •4.6.2. Властивості відношень бази знань і їхня підтримка в програмі на tp симетрія і асиметрія
- •Рефлексивность і нерефлексивность
- •Транзитивність
- •Симетричність і транзитивність
- •Спроба 1
- •Спроба 2.
- •Запам'ятовування списку відвіданих місць
- •4.7. Списки
- •4.7.1. Подання й зображення списків
- •4.7.2. Використання списків
- •4.7.3. Метод поділу списку на голову і хвіст (псгх)
- •4.7.4. Списки списків
- •Методи програмування
- •5.1. Повторення і відкіт (пв)
- •5.2. Метод відкоту після невдачі (впн)
- •5.3. Метод відсікання та відкоту (вв)
- •5.4. Повторення та рекурсія (пр)
- •5.5. Метод узагальненого правила рекурсії (упр)
- •5.6. Побудова рекурсивних структур методом прогресуючої підстановки (пп)
- •5.7. Предикат відсікання
- •5.8. Організація багаторазово виконуваних інтерактивних програм (бвіп)
- •5.9. Метод аналізу станів (ас)
- •5.10. Метод організації висхідних рекурсивних обчислень (вро)
- •5.11. Комбінація спадних і висхідних рекурсивных обчислень (ксвро)
- •5.12. Предикат fail-if (not)
- •5.13. Предикат true
- •5.14. Модифікація бази даних (мбд)
- •5.15. Керування базою даних (кбд)
- •5.16. Глобальні змінні (гз)
- •5.17. Накопичування результатів у базі даних за допомогою вимушеного відкоту і глобальної змінної (нрввгз)
- •5.18. Метапрограмування (мп)
- •Список рекомендованої літератури
- •1. Основи мови програмування пролог 4
- •2. Підстави логічного програмування 14
- •3. Три семантичні моделі пролог-програми 20
- •4. Подання знань 23
- •Програмування мовою пролог
2.3. Способи застосування принципу резолюцій
Існує два варіанти застосування принципу резолюції:
ПРЯМИЙ МЕТОД (від посилок). З A, A B виводиться B.
Hедолік цього методу полягає в його неспрямованості, тобто застосування методу призводить до різкого зростання проміжних висновків, не пов'язаних з цільовим висновком.
ЗВОРОТНІЙ МЕТОД (від цілі).
Він є спрямованим. З бажаного доведення B і тих же посилок він виводить новий висновок A. При цьому кожен крок виведення в цьому випадку завжди пов'язаний з поставленою ціллю. Для цього необхідно, щоб доказ того, що дана посилка A приведе до бажаного (цільового) висновку C, було переформульовано в твердження, що A несумісне з C.
Наприклад, щоб довести P з посилок Q та Q P зворотне міркування за допомогою принципу резолюції виводить Q (з P та Q P), а потім виводить порожній диз'юнкт (спростування) (з Q та Q).
Істотний недолік методу резолюції полягає у формуванні на кожному кроці виводу множини резольвент – нових диз'юнктів, більшість із яких виявляються зайвими. Розроблено багато модифікацій принципу резолюцій, що застосовують більш ефективні стратегії пошуку й різного роду обмеження на вид вихідних диз'юнктів. У цьому сенсі найбільш вдалою й популярною системою вважається система ПРОЛОГ, що застосовує спеціальні види диз'юнктів, що називаються диз’юнктами Хорна.
2.4. Диз’юнкти хорhа
Диз’юнкти Хорна мають не більше одного позитивного літерала. Вони можуть бути трьох типів:
1. Допущення без умов (факти)
B(t).
Наприклад, Іван подобається історія.
2. Умовні допущення чи імплікації (правила):
B(t) V A1(t) V A2(t) V ... V An(t)
чи в еквівалентній формі
B(t) A1(t) & A2(t) & ... & An(t).
Наприклад, Петро поважає x, якщо x подобається логіка & Петро знає x.
3. Заперечення:
C1(t) V C2(t) V ... V Ck(t).
чи в еквівалентній формі
(C1(t) & C2(t) & ... & Ck(t)).
Наприклад, (x подобається логіка & x подобається математика).
Для реалізації дуже важливий той факт, що диз’юнкти Хорна мають просту процедурну інтерпретацію. Диз’юнкти типу 1 і 2 інтерпретуються як процедури, а типу 3 – як цільові твердження. Так, диз'юнкт типу 2 інтерпретується як процедура із заголовком B(t), тіло якої є виклик процедур A1(t), A2(t), ..., An(t), а диз'юнкт типу 3 – як послідовність викликів процедур C1(t), C2(t), ..., Ck(t).
Тоді кожен крок зворотного міркування є керування викликом процедури, що починається з вигляділення виклику деякої процедури Ci(t) з поточної цілі. Потім вигляділяється деяка процедура, заголовок якої (позитивний літерал, наприклад B(t) у 2) уніфікується за допомогою деякої підстановки з обраним викликом Ci(t). Далі виділяється тіло процедури, тобто послідовність викликів A1(t), A2(t), ..., An(t). Уніфікатор застосовується до результату. Процес ітеративно повторюється. Аргументи літералов (предикатів) відповідають параметрам викликуваних процедур. Уніфікація інтерпретується як зв'язок даних між викликами й процедурами.
Процес доказу (чи обчислення) цільового твердження S можна уявити в такий спосіб:
Нехай цільове твердження S має вигляд ( C1, C2, ..., Cj, ..., Ck) і в ньому виділений літерал Cj і нехай існує правило Г = B A1, A2, ..., An. Тоді якщо – уніфікатор для литералов Cj і B, то кажуть, що підціль S' = ( C1, C2, ..., Cj, ..., A1, A2, ..., An, B, Cj+1, ..., Ck) виводиться з S за допомогою правила Г і підстановки .
Одержання S' і S – елементарний крок у мові ПРОЛОГ. Він може завершитися й невдачею, тому що може не існувати уніфікатора для Cj і B. Виведенням (обчисленням) цільового твердження S називається послідовність проміжних підцілей S1, S2, ..., Sm така, що S1=S і Si+1 виведено з S. Якщо з підцілі Sm не виведена жодна підціль, то обчислення вважається кінцевим. При цьому, якщо Sm – не порожній диз'юнкт, то виведення – тупикове, а якщо Sm – порожній диз'юнкт, то виведення є успішним і з ним пов'язується підстановка = m-1, m-2, ..., 2, 1, де i – підстановка, за допомогою якої виведена підціль Si+1 з Si.
Виведення цілі зручно подати у вигляді дерева І-АБО з коренем у цільовій вершині. Вершині типу І дерева відповідає коньюнкция умов деякого правила (тобто A1, A2, ..., An). Вершині АБО дерева відповідає варіант, коли до того самого висновку (резольвенті) приводять різні правила.
У будь-якій системі логічного програмування реалізується деяка стратегія обходу дерева пошуку. В основному ці стратегії мають послідовний характер (але можуть бути й паралельні). Найбільш розповсюджена послідовна стратегія типу "спочатку в глибину". При цьому обхід дерева пошуку керується двома лінійними порядками:
"праворуч" для літералів цілі типу 3 і
"униз" для правил типу 1 і 2.
Тоді на кожному кроці пошуку вигляділеним виявляється перший ліворуч літерал цілі і до нього застосовується перше зверху правило. При цьому запам'ятовуються всі можливі розгалуження. Якщо пошук заходить у тупик, то відбувається повернення до місця останнього розгалуження за допомогою механізму відкоту (backtracking). Одночасно скасовуються результати всіх підстановок, зроблених після цього розгалуження. Повернення здійснюється також і при успішному результаті для одержання інших відповідей. Робота закінчується, коли список розгалужень порожній.
Основна перевага цієї стратегії – простота її реалізації. Недолік – великий перебір для деяких класів підцілей. Крім того, якщо дерево пошуку містить нескінченну вітку, то, потрапивши в неї, система не вийде звідти й правильні відповіді, що знаходяться правіше цієї цілі на дереві, не будуть отримані.
При стратегії "спочатку в ширину" дерево пошуку обходиться ярус за ярусом униз. Ця стратегія гарантує знаходження розв’язок, якщо воно існує. Однак вона вимагає великого обсягу пам'яті й тому не одержала значного поширення.
Найбільші перспективи мають паралельні стратегії, але для їх ефективної реалізації необхідні відповідні процесори, основані на принципах паралельної архітектури.