You are on page 1of 35

Шаповалова С.І.

Системи штучного інтелекту

Лекція 2
Концепція Prolog

Питання 1
Створення Prolog
Назва Prolog, надана Philippe Roussel, - аббревіатура Programmation
en logique

Модель Prolog базується на принципі резолюції Robert Kowalski


(процедурна інтерпретація фраз Хорна)

Prolog створено в 1972 році Alain Colmerauer, Philippe Roussel

David Warren створив Warren Abstract Machine (WAM) та фактично


задав стандарт компиляторів Prolog
Prolog як обчислювальний формалізм:
• мова представлення - фрази Хорна (нормальна форма логіки
предикатів)
• механізм виведення висновків на основі пошуку з поверненням та
уніфікації

Пролог-програма представляє знання згідно аксіоматичної теорії


логіки предикатів
Кожна фраза Пролог-програми еквівалентна аксіомі, а вся програма
еквівалентна теорії
Prolog як мова програмування:
• декларативна
На відміну від імперативної парадигми Пролог-програма містить не
послідовність команд, а представлення задачі та очікуваного
результату
• логічна
Результат отримується на основі логічного доведення цілі
• символьна
В програмі може маніпулювати власними формулами та програмними
компонентами так, ніби це звичайні дані
• динамічно типізована
Типи не потрібно оголошувати.
Типи та правомірність застосування операцій до змінних визначаються
під час виконання програми.
SWI Prolog
SWI Prolog - аббревіатура Sociaal-Wetenschappelijke Informatica
(Social Science Informatics)

Розробник - Jan Wielemaker, 1987 р.

• вільно поширювана для некомерційних цілей


LGPL — безкоштовна ліцензія
• відкрита
Присутні інтерфейси з Java, etc
• багатоплатформна
Працює на платформах Unix, Windows, та Macintosh
Основні конструкції логічного
програмування

Питання 2
Логічна програма -

це множина аксіом та правил, які задають відносини між об’єктами.

Обчисленням логічної програми є виведення наслідків з програми.

Множина наслідків називається значенням програми.


Основні конструкції логічного програмування -

терми та твердження - походять з логіки.

Існують три основних вида тверджень:


факти, правила та питання.

Існує єдина структура даних - логічний терм.


Програмування на Пролозі та логічне програмування
Пролог базується на численні предикатів першого порядку

Програмування на Пролозі відрізняється від логічного


програмування насамперед точним, а не абстрактним значенням
програм.

Крім цього, Пролог містить позалогічні засоби, які властиві


традиційним мовам програмування:
• для введення/виведення інформації;
• для здійснення аріфметичних операцій;
• для роботи з БД.
Основна одиниця Прологу – фраза або
твердження

Фраза може бути у трьох формах:


факту, правила або питання.

Пролог-програма представляє множину фраз (фактів і правил)

Після кожної фрази повинна стояти крапка.


Терми

Питання 3
Базовий принцип Прологу -
рівнозначність представленія программи і даних (декларативність).
Твердження мови одночасно можуть:
• представляти данні подібно записами в базі даних,
• бути правилами, що містять способи їх обробки.

Всі компоненти Пролог-програми є термами


Предикат
Предикат містить ім’я та перелік аргументів (термів), які беруть у
дужки.

Кількість аргументів предиката теоретично не обмежена.

Назву предикату надає програміст.


Бажано, щоб ім’я було максимально наближене до природньої
мови. Обирається ім’я, яке відображає певний вид взаємозв’язку
між аргументами.

Ім’я предиката має такий самий синтаксис як атом.


Змінні в логічному програмуванні
Константи та змінні є термами.

Використання змінних у логічних програмах відрізняється від


використання змінних у процедурних мовах програмування.

В логічних програмах змінна позначає невизначений, але єдиний


об’єкт.

В процедурних мовах змінна позначає деяку область пам’яті, до якої


записують або з якої зчитують значення.
Визначення змінної
Змінна позначається як слово, яке починається з „Великої” латинської літери. Всі
наступні символи є будь-якими буквами латинського алфавіту, цифрами або
символом підкреслення.

Змінна у поточному стані може бути:


• або зв’язанною (english: bound), тобто позначати вже визначений об’єкт,
• або вільною (english: unbound) – позначати ще невизначений об’єкт.

У Пролозі не існує механізму переприсвоєння значення змінної.


Якщо змінній зіставлено конкретний об’єкт, то вона вже ніколи не зможе
посилатись на інший об’єкт.

Область дії кожної змінної – фраза, в якій вона зустрічається.


Константи
Константа - визначений об'єкт або визначене відношення, яке має ім’я

Існують такі різновиди констант:


• атомарний:
• атом
• число (integer or float)
• строка
• складений
• список

Простою константою є атом, число, строка.


Константа також може бути складеною, тобто структурою, до складу якої
входять константи.
Визначення простих констант
Атом записується як послідовність букв латинського алфавіту, цифр
та символів підкреслення, яка обов’язково починається з „маленької”
латинської букви. Використання інших символів неприпустиме.

Строкою є послідовність будь-яких символів, які беруть у одинарні


лапки.

Числа в Prolog: цілі (1, 1024, 0, -97) та дійсні (3.14,-0.0035, -0.5e4).


Список
Список - об'єкт, що містить довільне число інших об'єктів.

Список – упорядкована послідовність елементів у квадратних


дужках, які розділяють комами

Список є рекурсивним складеним об'єктом. Він містить два


аргументи: голови списку (перший елемент) і хвоста списку (всі інші
елементи)
Структура
Структура (складений терм) - об'єкт, що складається із сукупності
інших об'єктів, які називаються компонентами.

Запис структура в Prolog подібна предикату - функтор і аргуменнти,


які містяться в круглих дужках і розділяються комами.

Аргументи також є термами


Фрази

Питання 4
Факт
Факт використовується для представлення простого взаємозв’язку
даних.

Факт – це твердження про деяке конкретне відношення, яке завжди


істинне.

Факт – фраза без умов.

Запис факту такий самий, як предикату (з крапкою наприкінці)


Питання
Питання є засобом організації запитів до логічної програми.
Запуск Пролог-програми здійснюється запитом - питанням.

Запит – це ціль для одержання нової або підтвердження чи


спростування наявної інформації.

Запит задається в командному рядку головного вікна Пролог-


середовища.
Символами командного рядку є
?-
Головне вікно Пролог-середовища

Запрошення до запиту
Виконання запиту
Запит є успішним, якщо Пролог-програма містить відповідну
інформацію, або неуспішним – у противному разі.

Простий запит складається з імені предиката та послідовності


аргументів у дужках. Як будь-яка фраза Прологу, запит обов’язково
закінчується крапкою.

Крім констант аргументами запиту можуть бути логічні змінні.

Якщо запит містить змінні, то механізм виведення Прологу


намагається знайти такі їх значення, для яких запит стане істиним.
Приклад: чемпіони

% ?Winner Name, ?Kind of Competition ?- is_champion(monkey, boxing).


is_champion(frog, high_jumping). true.
is_champion(kangaroo, long_jamping).
is_champion(monkey,boxing). ?- is_champion(Who, sumo).
is_champion(elephant,sumo). Who = elephant .
Анонімна змінна
Окремо відрізняють так звану „псевдозмінну”.
Поодинокий символ підкреслення називають анонімною змінною, яка наказує
механізму виведення проігнорувати значення відповідного аргументу.
Анонімна змінна уніфікується з будь-яким об’єктом.
?- is_champion(X,_).
% ?Winner Name, ?Kind of
X = frog ;
Competition
X = kangaroo ;
is_champion(frog, high_jumping).
X = monkey ;
is_champion(kangaroo, long_jamping). X = elephant.
is_champion(monkey,boxing).
is_champion(elephant,sumo). ?- is_champion(_,Y).
Y = high_jumping ;
Y = long_jamping ;
Y = boxing ;
Y = sumo.
Визначення правила
Правило – фраза, значення істинності якої залежить від істиностних
значень умов, які складають тіло правила.

Форма запису:
заголовок:-
тіло.

Форма запису заголовку відповідає формі запису факту.

Позначення „:-„ читається як „якщо”. Тобто, якщо істинна логічна


зв’язка умов, які складають тіло правила, то заголовок стає фактом.
Склад правила
Кожну умову, яка входить до складу тіла, називають підціллю.

В тілі правила використовують:


• кон’юнктивну зв’язку „І”. В програмі позначається символом
„кома”),
• диз’юнктивну – „АБО” („крапка з комою”),
• заперечення (not/1).
Приклад: дві людини можуть спілкуватись, якщо вони володіють однією
мовою
?- can_speak(A,B).
% ?Name1, ?Name2 ?- can_speak(pete,X).
A = adam,
can_speak(X,Y):- X = adam ; B = bob ;

A = adam,
know_language(X, Slang), false.
B = mike ;
know_language(Y, Slang),
A = bob,

X\=Y. ?- can_speak(adam,X). B = adam ;

A = bob,
X = bob ;
B = mike ;

% ?Name, ?Language X = mike ; A = adam,

B = pete ;
know_language(adam, engl). X = pete.
A = mike,
know_language(bob, engl). B = adam ;

A = mike,
know_language(adam, rush).
B = bob ;
know_language(mike, engl). A = pete,

know_language(pete, rush). B = adam ;

false.
Представлення процедури
Процедурою називають сукупність фраз програми з одними й тими
самими іменем та арністю.

• Кожна фраза має представлятись з початку нового рядку.


• Тіло правила має відступати від початку рядку на табуляцію.
• Кожна підціль тіла має представлятись з початку нового рядку.
• Перед процедурою має бути представлена структура відношення
- опис всіх аргументів з позначками їх зв’язування при виклику :
• + - аргумент є зв’заним
• - - аргумент є незв’заним
• ? - аргумент може бути як зв’заним, так і незв’заним.
Створення та запуск програми

Питання 5
Консультування програм
?- consult(File).
додадає файл File до Пролог-системи

?- consult(for_lection). % consult for_lection.pl


Опції File

редагування/”консультування”
програми
PceEmacs вбудований редактор SWI-Prolog

Компіляція буфера

You might also like