# Лабораторна робота 2 — Створення системи логічних предикатів > Друга лабораторна робота курсу **«Основи дискретної математики»**. Ви будуєте > невелику **базу знань** мовою логічного програмування **Prolog**: описуєте > генеалогічне дерево набором **фактів** і виражаєте родинні відношення > (брат, сестра, батьки, дід, баба, дядько, тітка, двоюрідні) через **правила** — > логічні формули над базовими предикатами. Робота виконується в онлайн-середовищі > [SWISH](https://swish.swi-prolog.org/) і є практичним продовженням > [Лекції 6 «Логіка предикатів»](../../Lectures/ODM-L06.md). ## Стисло | | | |---|---| | **Тема** | Предикати як відношення; факти, правила та запити в Prolog | | **Передумова** | [Лекція 6 — Логіка предикатів](../../Lectures/ODM-L06.md) | | **Середовище** | [SWISH SWI-Prolog](https://swish.swi-prolog.org/) — у браузері, реєстрація не потрібна | | **Результат** | База знань (`.pl`-програма) + звіт (див. [5report.md](5report.md)) | | **Оцінювання** | Три рівні: базовий 60–74 / середній 75–89 / високий 90–100 (див. [4task.md](4task.md)) | ## Зміст | # | Частина | Файл | |:--:|---|---| | 1 | Мета роботи | [1purpose.md](1purpose.md) | | 2 | Методичні вказівки (теорія, середовище, приклади) | [2method.md](2method.md) | | 4 | Завдання та порядок виконання | [4task.md](4task.md) | | 5 | Зміст звіту | [5report.md](5report.md) | | 6 | Контрольні запитання | [6questions.md](6questions.md) | ## Домовленості - **Мова.** Програма (факти, правила, запити) — мовою Prolog; звіт — українською. - **Індивідуальний варіант.** Значення для дерева (імена людей, зв'язки) ви обираєте **самостійно**; двох однакових дерев у групі бути не повинно. Дерево має бути достатньо розгалуженим, щоб **усі** предикати вашого рівня давали непорожні відповіді (див. вимоги в [4task.md](4task.md)). - **Пишете самі.** У [2method.md](2method.md) показано **метод** на демонстраційному прикладі; правила для власного дерева ви складаєте самостійно. Готового коду для завдання не наведено. - **Синтаксична дисципліна Prolog.** Імена-константи (атоми) пишуть з **малої** літери (`ivan`, `petro`), змінні — з **великої** (`X`, `Y`, `Z`). Кожне речення програми завершують крапкою. - **Самодостатність.** Уся потрібна теорія зібрана в [2method.md](2method.md); зовнішні джерела не потрібні. ## Підсумок Робота перетворює поняття [Лекції 6](../../Lectures/ODM-L06.md) — **предикат** як відношення, **квантори**, вираження одних відношень через інші — на працездатну програму. Спочатку родину описують **фактами** (`man/1`, `woman/1`, `father/2`, `mother/2`), потім складніші відношення **виводять правилами**: `brother`, `sister`, `parents` (базовий рівень), `grandfather`, `grandmother` (середній рівень), `uncle`, `aunt`, `cousin` (високий рівень). Перевіряють результат **запитами** в SWISH, спостерігаючи, як інтерпретатор виконує **уніфікацію** та **пошук із поверненням**. Це прямий місток від логіки предикатів до декларативного програмування.