Факти і правила - уявлення знань

Логічне програмування - це напрямок сучасного про- грам-мування, що виникло спочатку в рамках робіт по шу-кусства-ному інтелекту і який отримав свій розвиток у другій половині вось-мідесятих років, завдяки японському проекту ЕОМ п'ятого по-ко-ле-ня. Найбільш повне вираження ідеї логічного програмування наш-ли в мові Prolog (PROgramming in LOGic - програмування в термінах логіки). Початковий варіант мови Prolog був розроблений під керівництвом Алена Кольмерое (Alain Colmerauer) в Марсельському уні-тет в 1972 році. В даний час існують різноманітні версії для DOS (PDC Prolog, Arity Prolog і ін.), Windows (Visual Prolog, Strawberry Prolog, Trinc Prolog і ін.), Linux (Arity Prolog, Visual Prolog і ін.).

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

Програма на Prolog є сукупність тверджень. Утверж-де-ня складаються з цілей. В кінці затвердження ставиться крапка «.». Іноді ут - вір-ж-дення називається пропозицією.

Основна операція Prolog - доказ цілей, що входять в ут - Верже-дення.

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

  • факт - це одиночна мета, яка, безумовно, істинна;
  • правило складається з одним головним мети і однієї або більше хвостових цілей, які істинні при деяких умовах.

Правило зазвичай має кілька хвостових цілей в формі кон'юнкції цілей.

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

Виберемо для реалізації систему Visual Prolog (www.visual-prolog.com).

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

Той факт, що Том є батьком Боба, можна записати на Prolog так:

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

описується наступною програмою на мові Visual Prolog:

Для програмування необхідно

1. Запустити систему Visual Prolog.

Факти і правила - уявлення знань

Мал. 12.1. Вікно Visual Prolog 5.0

2. Ввести програму File ® New.

3. Протестувати мета Project ® Test Goal.

На поставлене запитання: «Чи є Боб батьком Пат?» - система відповість yes (та), знайшовши такий факт в програмі.

Інше питання: «Хто є батьком Ліз?»

Питання «Хто діти Боба?» Можна передати в такій формі:

Програмі можна задавати і більш загальні питання: «Хто чий батько?» Сформулюємо його таким чином:

Знайти X і Y такі, що X - батько Y.

На Prolog це записується так:

Система буде по черзі знаходити все пари виду «батько-дитина».

Визначити правила: жінка, чоловік, батько, батьки, дідусь, бабуся.

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

Аналогічно правило чоловік.

Цілі можна поставити наступні.

Вирішимо задачу про родинні стосунки сім'ї Романових, і знайдемо дітей Олексія Михайловича.

Знайдемо всіх цариць за допомогою складеного питання.

Додамо кілька правил: брат (brother), сколько_правіл (how_reign).

Правило визначення брата можна прочитати так:

Для будь-яких X і Y, X є братом Y, якщо

  • у X і Y є загальний батько, і
  • X - чоловік, і
  • X сам собі не брат.

У процесі досягнення мети Prolog здійснює автоматичний перебір варіантів, роблячи повернення при неуспіху будь-якого з них. Іноді потрібно його обмежити або виключити зовсім.

Для цього в Prolog існує обмежує перебір мета «відсікання» (!), Яка безумовна вірна.

Знайдемо тільки одного сина Олексія Михайловича

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

Ці правила є взаємовиключними. Якщо виконується перше, друге обов'язково зазнає невдачі. Можна видозмінити за допомогою відсікання правила.

Prolog містить стандартний предикат, виконання якого закан-чивается завжди невдачею - fail. Предикат fail ініціює процес бектрекінга (backtracking), тобто пошуку нових рішень, або передоказательства цілей. Покажемо на прикладі.

Для реалізації заперечення використовується предикат not. Особливість його ис-користування полягає в тому, що всі передані пе-ре-менниє належні бути свя-заннимі, тобто конкретизованими. Наприклад, відповідь на питання: «Леонард не батько Джейсону?» Буде знайдений.

не сприйматиметься системою. Можна переформулювати мету: «Хто з відомих системі батьків не є батьком Джейсона?».

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

У наведених програмах на Visual Prolog можна виділити і доповнити:

Схожі статті