Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Yarovyy_CPC.doc
Скачиваний:
5
Добавлен:
19.11.2019
Размер:
264.19 Кб
Скачать

Тобто пари символів “:-” читається як “якщо”, а коми читаються як “і”.

PROLOG – це не зовсім звичайна мова програмування, у якій програма складається в основному з логічних формул, а процес виконання програми являє собою доведення теореми певного вигляду.

Фраза у формі

р :- ql,...,qn.

може розглядатися як процедура. Така процедура припускає такий порядок виконання операцій.

(1) Літерал мети зіставляється з літералом р (уніфікується з р), що називається головою фрази.

(2) Хвіст фрази q1,...,qn конкретизується підстановкою значень змінних (чи уніфікаторів), сформованих у результаті цього зіставлення.

(3) Конкретизовані терми хвостової частини утворюють потім множину підцілей, які можуть бути використані іншими процедурами.

Таким чином, зіставлення (чи уніфікація) відіграє ту ж роль, що і передача параметрів функції в інших, більш звичних мовах програмування.

Наприклад, розглянемо набір фраз мови PROLOG, поданих у лістингу 7.1. Припустимо, що а, b і с – певні блоки у множині блоків. Дві перші фрази стверджують, що а знаходиться на (on) b, a b знаходиться на (on) с. Третя фраза стверджує, що X знаходиться вище (above) Y, якщо X знаходиться на (on) Y. Четверта фраза стверджує, що X знаходиться вище (above) Y, якщо існує якийсь інший блок Z, розміщений на (on) Y, і X знаходиться вище (above) Y.

Лістинг 7.1. Проста програма мовою PROLOG, що визначає відношення on (на)

on(a, b).

on(b, с).

above(X, Y) :- on(X, Y).

above(X, Y) :- on(Z, Y), above(X, Z).

Очевидно, що від програми вимагається вивести мету above (а, с) з цієї множини фраз. Тут необхідно відзначити, що процес формулювання виразу мети включає обробку двох процедур above і використання двох фраз on.

Спростування резолюцій

У мові PROLOG використовується “інтерпретація фраз Хорна для вирішення проблем” [30]. Фундаментальний метод доведення теорем, на якому базується PROLOG, називається спростуванням резолюцій (resolutіon refutatіon). Повний опис цього методу читач знайде в книзі Робінсона [31], а ми спробуємо коротко викласти тільки основні ідеї.

Принцип резолюцій

Нагадаємо, що ми намагаємося спростити синтаксис числення таким чином, щоб зменшити кількість правил впливу, необхідну для доведення теорем. Замість дюжини або більше правил, що використовуються при доведенні теорем вручну, системи автоматичного доведення для фразових форм використовують єдине правило доведення – принцип резолюції, – вперше описане Робінсоном [31].

Розглянемо такий приклад з числення висловлень. Надалі великими буквами Р, Q, R, ... будуть позначатися окремі фрази, а малими грецькими , і - пропозиціональні змінні, як і раніше.

Якщо і зображують дві довільні фрази, які можна зобразити в кон’юнктивній нормальній формі, і

, і

, і

, при 1[i[m,1[j[n

то нову фразу можна вивести із з'єднання і , де

і

Фраза називається резольвентою кроку резолюції, а і є батьківськими фразами. Іноді говорять, що і “зіштовхуються” на парі доповнювальних літералів і .

Потужність резолюції забезпечується тим, що в ній підсумовується множина інших правил. Це стане очевидно після того, як звичайні правила будуть зображені в кон’юнктивній нормальній формі.

У лівій колонці табл. 7.1 перераховані найменування правил виведення, у середній показано, як вони виглядають у звичайних позначеннях, а в правій колонці – у фразовій формі. У кожному записі вирази у верхній частині зображають схему передумов, а вирази в нижній частині – схему висновків. З цієї таблиці видно, що кожне з наведених вище п'яти правил є одним з екземплярів резолюції.

Таблиця 7.1 – Узагальнення резолюції

Правило виведення

Звичайна форма

Кон’юктивна нормальна форма

Modus ponens

Modus fallens

Зчеплення

Злиття

Reductio

Зверніть увагу на те, що протиріччя в правилі, яке звичайно позначається значком „ ”, дає в результаті порожню фразу – „{}”. Це означає, що передумови несумісні. Якщо вважати, що передумови описують деякий стан предметної області, то такий набір передумов не може бути реально забезпечений у ній, тобто такий стан неможливий. Головне, що потрібно відзначити з усього сказаного вище, що компонент автоматичного доведення теорем, який є основним компонентом більшості систем штучного інтелекту і, зокрема, мов програмування штучного інтелекту, таких як PROLOG, є системою спростування резолюцій. Для того щоб довести, що р випливає з деякого опису стану (чи теорії) Т, потрібно застосувати і спробувати довести, що з цього припущення випливає твердження, що суперечить Т. Якщо це вдасться зробити, то тим самим підтверджується твердження p, а в протилежному випадку воно спростовується.

У численні предикатів використання резолюцій вимагає додаткових зусиль, оскільки в цьому численні присутні змінні. Основна операція зіставлення в доведенні теорем за допомогою резолюцій називається уніфікацією (докладний опис використовуваного при цьому алгоритму читач знайде, наприклад, у роботі Нільсона [32]). При зіставленні доповнювальних літералів відшукується така підстановка змінних, котра перетворює обидва вирази в ідентичні.

Наприклад, вираз БІЖИТЬ_ШВИДШЕ_НІЖ (Х, равлик) і БІЖИТЬ_ШВИДШЕ_НІЖ (черепаха, Y) перетворюються в ідентичні при підстановленні {Х/черепаха, Y/равлик}. Така підстановка називається уніфікатором. Основна мета програміста – відшукати найбільш загальну підстановку такого роду.

80

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]