4. Завдання та порядок виконання
Джерело завдання. Умову взято з методичних матеріалів курсу (лабораторна робота «Створення системи логічних предикатів»). Значення для дерева ви обираєте самостійно (індивідуальний варіант); означення похідних предикатів наведено словами й логічними формулами — код мовою Prolog пишете самі.
Мета завдання
Створити генеалогічне дерево у вигляді системи логічних предикатів і реалізувати її в SWISH: описати родину базовими предикатами (факти) та вивести родинні відношення правилами (логічні формули). Оцінка відповідає найвищому повністю й правильно виконаному рівню.
Середовище
Виконуйте роботу в онлайн-редакторі SWISH SWI-Prolog — https://swish.swi-prolog.org/ (підійде й будь-який інший інтерпретатор Prolog). Нагадування синтаксису — у 2method.md.
Позначення
У формулах нижче предикати записано великими літерами (),
у програмі Prolog ті самі предикати — малими (father(X, Y)). Змінні у формулах —
малі ; у Prolog — великі X, Y, Z. Скрізь використано допоміжний предикат
Порядок виконання
- Сплануйте дерево. Намалюйте на папері родину з трьох поколінь так, щоб у ній
були: щонайменше двоє рідних братів/сестер; пара, що має двох дітей (для
parents); і дві сестри/брати, у кожного з яких є власна дитина (дляcousin). Позначте стать кожної особи. - Опишіть базові предикати (крок 2 нижче) фактами
man/1,woman/1,father/2,mother/2з власними значеннями. Це рівень фактів. - Додайте допоміжний
parent/2двома правилами (черезfatherтаmother). - Виводьте похідні предикати рівень за рівнем (кроки 3 → 4 → 5). Перевіряйте кожен предикат запитом, перш ніж переходити до наступного.
- Зафіксуйте результати — знімки запитів і відповідей SWISH — для звіту (див. 5report.md).
Завдання за рівнями
Рівень 1 — базовий (оцінка 60–74)
Крок 2. Побудова генеалогічного дерева (базові предикати). Задайте власними значеннями факти:
| Предикат | Місність | Зміст | Приклад факту |
|---|---|---|---|
| 1 | — чоловік | man(ivan). |
|
| 1 | — жінка | woman(maria). |
|
| 2 | є батьком | father(ivan, petro). |
|
| 2 | є матір’ю | mother(maria, petro). |
Крок 3. Похідні предикати (виразити логічними формулами). Реалізуйте правилами:
| Предикат | Зміст | Логічна формула (означення) |
|---|---|---|
| — брат | ||
| — сестра | ||
| та — батьки |
Рівень 2 — середній (оцінка 75–89)
Виконайте все з рівня 1 і додатково виведіть логічними формулами:
| Предикат | Зміст | Логічна формула (означення) |
|---|---|---|
| — дід | ||
| — баба |
(«Дід » — це батько одного з батьків ; змінна — проміжна особа, батько чи мати .)
Рівень 3 — високий (оцінка 90–100)
Виконайте все з рівнів 1–2 і додатково виведіть логічними формулами:
| Предикат | Зміст | Логічна формула (означення) |
|---|---|---|
| — дядько | ||
| — тітка | ||
| — двоюрідний(-а) брат/сестра |
де (« і — рідні брат/сестра»). Тобто двоюрідні мають спільного діда чи бабу, але різних батьків.
Порада. Означення вище — композиції: «дід» = «батько» ∘ «parent», «дядько» = «брат» ∘ «parent», «двоюрідні» будуються через
sibling. Тому реалізовуйте предикати знизу вгору: спочаткуparent, потімbrother/sister, і лише тодіuncle/aunt/cousin, які на них спираються.
Вимоги до перевірки
Для кожного реалізованого предиката наведіть у звіті щонайменше один запит з відповіддю SWISH. Радимо перевірити:
- факти — напр.
?- father(ivan, petro).(очікуваноtrue); - предикат з однією змінною — напр.
?- brother(X, olha).(перелік усіх братів); - предикат-перевірку — напр.
?- grandfather(ivan, andrii).(true/false); - запит без розв’язку — переконайтеся, що хибне відношення дає
false(напр.?- sister(petro, _).); - запит із кількома відповідями — покажіть перебір через
;і поясніть порядок (backtracking; можливі повтори — див. зауваження в 2method.md).
Що здавати
- Текст програми (усі факти й правила) — файл
.plабо лістинг у звіті; - звіт за структурою 5report.md зі знімками запитів і відповідей;
- усно на захисті: пояснити будь-яке своє правило й хід виконання одного запиту.
Оцінка = найвищий рівень, виконаний повністю та правильно (усі предикати рівня працюють і перевірені запитами).