Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Дискретная математика. Лабораторные

.pdf
Скачиваний:
70
Добавлен:
17.03.2016
Размер:
701.08 Кб
Скачать

внутрішнє поле – 25 мм;

зовнішнє поле – 25 мм.

Номери сторінок проставляють на нижньому полі аркуша посередині,

починаючи з третьої, дотримуючись наскрізної нумерації без пропусків і буквених доповнень. Титульний аркуш включають до загальної нумерації сторінок. Номер сторінки на титульному аркуші не проставляють.

Утекстовій частині:

заголовки розміщуються посередині рядка та друкуються великими літерами без крапки в кінці, без підкреслення;

заголовки підрозділів, пунктів і підпунктів тексту друкуються з великої літери (без підкреслення) без крапки в кінці;

усі заголовки мають бути супідрядними і відповідати змісту роботи, абревіатури в заголовках не вживають, їх треба розшифровувати в тексті;

заголовки з двох чи більше речень слід відокремлювати крапками;

відстань між заголовком і текстом становить 28 пт, відстань між заголовками розділу та підрозділу – 14 пт;

заголовок не розміщують внизу сторінки, якщо після нього уміщується лише один рядок тексту;

таблиці та ілюстрації мають бути пронумерованими і міститися після посилань на них у тексті, примітки друкують під таблицею;

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

3 Основна частина

ЛАБОРАТОРНА РОБОТА №1. ВСТУП ДО МОВИ ПРОГРАМУВАННЯ PROLOG

1.1 Теоретичні відомості

1.1.1 Загальний огляд мови PROLOG

Перші повідомлення про PROLOG з`явились на початку сімдесятих років.

Він належить до класу логічних мов програмування. Основні ідеї розробки яких запропонували Р.Ковальськи і П.Хейс. Перший інтерпретатор PROLOGа

був розроблений французами в Марселі під керівництвом А.Колмерое в 1973

році. Наступна версія, виконана Д.Уореном – Единбугська реалізація

PROLOGа на машині DEC-10, перевела PROLOG і разом з ним логічне програмування із площини теоретичних досліджень в площину практичного програмування, зробила його корисним інструментом для вирішення різних задач штучного інтелекту. Про великі можливості мови PROLOG свідчить і той факт, що японські вчені вибрали його в якості базової мови для створення обчислювальних систем п`ятого покоління.

Для PROLOGу характерним є і той факт, що програміст повинен мислити в термінах цілей. Що під цим будемо розуміти? Коли пишеться програма за допомогою мови програмування низького рівня, програміст повинний описувати для ПК, що і як треба зробити. Коли ж використовується мова програмування високого рівня, тоді необхідно вказати що ж потрібно зробити.

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

Основою PROLOGа є обмежений, але на диво потужний і гнучкий набір

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

утворилась як скорочення від “програмування в термінах логіки” і його можна віднести до мов програмування, які будуються на описовому або ж декларативному підході до програмування.

Можна виділити два рівня характеристики PROLOGівської програми:

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

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

Попередньо PROLOG відносився до теоретичних мов програмування і в більшості використовувався як інструментарій в наукових дослідженнях. На це впливало і те, що довгий час вчені з США не сприймали його переваг для вирішення задач штучного інтелекту. Джон Малпас пояснює цей факт тим, що по-перше, серед вчених США були сильними лісповські традиції (мова ЛІСП створена в Массачусетському технологічному інституті) і, по-друге – попереднє знайомство з мовою логічного типу Мікропленнером було невдалим. Остання була реалізована дуже не ефективно. Та з створенням швидких інтерпретаторів і компіляторів PROLOG зайняв почесне місце не тільки серед найбільш використовуваних мов вирішення задач штучного інтелекту, а й серед мов, які використовуються спеціалістами в галузях реляційних баз даних, програмної інженерії, задання знань, експертних системах і багатьох інших.

1.1.2 Переваги і недоліки мови PROLOG

Резюмуючи сказане раніше можна виділити наступні переваги PROLOGу:

1.PROLOG має чітку математичну основу, дуже близьку до людського мислення.

2.Використання єдиної мови специфікацій (числення предикатів) для опису вимог до програм і опису самої програми на PROLOG дозволяє поєднувати процес написання програми і її верифікацією.

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

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

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

PROLOGу при побудові експертних систем.

6. PROLOG може зберігати за допомогою “логічних змінних” проміжні результати обчислень для наступного використання. Це дозволяє природньо вирішувати проблему організації логічного виведення.

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

PROLOGу.

1. Складність розуміння процесу виконання програми на PROLOG,

пов`язані з “невидимим” порядком побудови виведення результату

програмою.

2.Погані засоби для вияву екстралогічних властивостей (оператори динамічного приєднання і видалення тверджень).

3.Відсутність досконалих засобів для розробки і відлагодження великих програм.

4.Недостатні засоби підтримки модульного принципу програмування.

1.1.3 Числення предикатів - математична основа мови

В основі PROLOGу лежить поняття відношення, яке взяте з предикатних логік. Слово “предикат” відноситься до розділу математичної логіки, в якому досліджуються операції над логічними висловленнями. В логіці предикатів під предикатом розуміється деяка властивість, логічна функція від довільного числа аргументів, яка приймає тільки два значення - “істина” або ж “хибність”.

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

Числення предикатів використовує наступні основні елементи:

1)константні терми с12,...;

2)змінні терми х12,...;

3)функціональні терми f1,f2,...;

4)предикатні букви p1,p2,...;

5)логічні символи , , , , ,;

6)спеціальне висловлення .

Елементарне висловлення складається з предикату і, зв`язаних з ним,

термів. Складні висловлення будуються з елементарних за допомогою логічних зв`язок. Серед них можна виділити логічні зв`язки: “і” (and, ), “або ж” (or, ) , “ні” (not, ) і імплікація ( ). Імплікація займає особливе місце,

оскільки вона використовується для побудови специфічних правил і читається

якщо..., тоді...”.

Для того, щоб в численні предикатів можна було використовувати змінні терми, застосовується спеціальна структура – квантор.

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

Виділяють квантор узагальнення ( ) і квантор існування ( ).

Влогіці предикатів елементарним об`єктом, який має значення “істина”,

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

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

Атомарна формула записується як позначення предикату і має наступний вигляд: Р(t1,t2,...,tn), де Р – означення предикату, а t1,t2,...,tn – терми.

Число термів для кожного предикату фіксоване і називається його арністю. Терми визначаються наступним чином:

1) константний терм – терм;

2) змінний терм – терм;

3) якщо арність функціональної букви є n, а t1,t2,...,tn – терми, тоді

f(t1,t2,...,tn) також терм.

Правильно побудована формула (ППФ) отримується в результаті

комбінування атомарних формул за допомогою логічних зв`язок.

Символ

позначає хибну

замкнуту формулу і визначає поняття

“протиріччя”.

Так формула A

означає хибність А, вона еквівалентна

формулі А.

Серед формул можна виділити спеціальний клас формул – тотожньо істинні формули, які називають аксіомами. Приклад аксіоми:

~~ A A .

Більш детальний опис маніпулювання з формулами і правилами виведення можна знайти в будь-якому підручнику по математичній логіці.

1.1.4 Побудова теорії деякої області знань

Побудова теорії деякої області знань включає в себе аналіз структури цієї області і вибір позначень, які визначають особливості даної структури. Потім будуються ППФ, які описують цю структуру. Множина ППФ є теорією цієї області знань, в якій кожна ППФ – аксіома.

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

Під функцією будемо розуміти відображення n елементів із області інтерпретації (де n – арність функції) на один з елементів цієї області.

Нехай областю є службові відношення між людьми в деякій фірмі.

Областю інтерпретації буде наступна множина людей:

(Іван; Ігор, підлеглий Івана; Петро, підлеглий Івана; Микола, друг Петра).

На цій області можна виділити унарну функцію “друг”. Наприклад, друг

(Петра) Микола.

Відношенням називають відображення n елементів із області інтерпретування на елемент множини (істина, хибність). В нашому прикладі можна виділити бінарне відношення “підлеглий”. Так, підлеглий (Івана, Ігор)

матиме значення “істина”, а підлеглий (Ігор, Микола) прийме значення

“хибність”.

Якщо в деякому конкретному випадку аргументів відношення буде істинним, тоді кажуть що відношення справджується.

Після фіксації області інтерпретування переходять до вибору позначень елементів області: констант, функцій, відношень. Відмітимо, що функція сама

по собі не може мати значення – його може мати тільки конкретне використання функції. Аналогічне можна сказати і про відношення.

Проілюструємо це на нашому прикладі.

Спочатку виберемо позначення для констант і припишемо їм значення,

які відповідають елементам області інтерпретації:

значенням a буде Іван;

значенням b буде підлеглий Івана Ігор;

значенням с буде підлеглий Івана Петро.

Функцію “друг” позначимо f, тоді семантика цієї функції визначиться:

значенням f(c) буде Микола.

Якщо позначимо через Р введене нами відношення “підлеглий”, тоді його семантика виразиться:

значенням P(a,b) буде істина;

значенням P(b,a) буде істина;

значенням P(c,a) буде істина;

значенням P(a,c) буде істина;

значенням P(b,c) буде хибність;

значенням P(c,b) буде хибність;

значенням P(b,f(c)) буде хибність;

значенням P(f(c),b) буде хибність;

значенням P(a,f(c)) буде хибність;

значенням P(f(c),a) буде хибність;

значенням P(c,f(c)) буде хибність;

значенням P(f(c),c) буде хибність.

Із даних атомарних формул маємо можливість будувати ППФ.

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

Аналогічно визначається і модель теорії. Про ППФ, або ж теорію, яка приймає

значення істина хоча б на одній інтерпретації, кажуть, що вона задовільна.

Якщо ППФ, або ж теорія є хибною на всіх інтерпретаціях, тоді її називають незадовільною або ж непослідовною.

1.1.5 Від формальної логіки до логічного програмування

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

Із визначення тотожньої істинності і непослідовності можна зробити висновок, що ППФ буде тотожньо істинною тоді і тільки тоді, коли додавання в теорію заперечення даної ППФ перетворить цю теорію в непослідовну.

Теорія буде непослідовною, якщо в ній можливо вивести протиріччя наступного вигляду

А А.

Для вирішення згаданих задач дуже зручною є фразова форма логіки.

Фразова форма логіки предикатів задає такий спосіб запису формул, який використовує тільки з`єднувачі типу , і .

Негативна або ж позитивна атомарна формула називається літералом.

Кожна формула – множина літералів, які з`єднані символом . Негативні і позитивні літерали відповідно групуються. Схематично фраза має наступний вигляд:

Р1 Р2 ... Рn N1 N2 ... Nn, де P1 ... Pn – позитивні літерали, а N1...

Nn – негативні. З другої сторони фразу можна розглядати як узагальнення поняття імплікації. Дійсно, якщо А і В атомарні формули, тоді формулу A B

можна переписати і в такому еквівалентному вигляді: ~ A B . Звідки

отримаємо фразову формулу B ~ A .

Фраза має наступну семантику. Всі позитивні атомарні формули виступають в ролі альтернативних заключень, а негативні – є необхідними умовами. Наприклад, A B ~ C ~ D зазначає, що А і В будуть істиними тоді і тільки тоді, коли є істиними С і D.

Елементарна фраза має тільки один літерал. Теорія записується в вигляді множини фраз, які неявно з`єднані між собою символом . В літературі зустрічається і друга форма запису фрази за допомогою зворотньої стрілки,

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

A, B ~ C, ~ D .

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

яка має тільки один позитивний літерал. Одну фразу Хорна можна записати декількома способами. Наприклад, A ~ B ~ C ~ D еквівалентне A B,C, D і в системі Visual PROLOG буде мати вигляд А: В, С, D.

Для любої системи логічного програмування характерною є та обставина,

що для виконання програми (побудови виведення результату)

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

Правило резолюції виведення логічного висновку працює наступним чином. Дві фрази можуть резольвувати між собою, якщо одна з них має позитивний, а друга – негативний літерал з одним і тим же позначенням предикату, та однаковою кількістю аргументів, і якщо аргументи обох літералів можуть бути уніфіковані (погоджені). Наприклад, фраза P(a,b)

Q(c,d) і фраза Q(c,d) R(b,c) дають резольвенту P(a,b) R(b,c). Якщо ж