Raw

4. Завдання та порядок виконання

Джерело завдання. Умову взято з методичних матеріалів курсу (лабораторна робота «Створення системи логічних предикатів»). Значення для дерева ви обираєте самостійно (індивідуальний варіант); означення похідних предикатів наведено словами й логічними формуламикод мовою Prolog пишете самі.

Мета завдання

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

Середовище

Виконуйте роботу в онлайн-редакторі SWISH SWI-Prologhttps://swish.swi-prolog.org/ (підійде й будь-який інший інтерпретатор Prolog). Нагадування синтаксису — у 2method.md.

Позначення

У формулах нижче предикати записано великими літерами (FATHER(x,y)\mathrm{FATHER}(x,y)), у програмі Prolog ті самі предикати — малими (father(X, Y)). Змінні у формулах — малі x,y,zx, y, z; у Prolog — великі X, Y, Z. Скрізь використано допоміжний предикат

PARENT(x,y)    FATHER(x,y)MOTHER(x,y)(«x — один із батьків y»).\mathrm{PARENT}(x, y) \;\equiv\; \mathrm{FATHER}(x, y) \vee \mathrm{MOTHER}(x, y) \qquad(\text{«}x\text{ — один із батьків }y\text{»}).

Порядок виконання

  1. Сплануйте дерево. Намалюйте на папері родину з трьох поколінь так, щоб у ній були: щонайменше двоє рідних братів/сестер; пара, що має двох дітей (для parents); і дві сестри/брати, у кожного з яких є власна дитина (для cousin). Позначте стать кожної особи.
  2. Опишіть базові предикати (крок 2 нижче) фактами man/1, woman/1, father/2, mother/2 з власними значеннями. Це рівень фактів.
  3. Додайте допоміжний parent/2 двома правилами (через father та mother).
  4. Виводьте похідні предикати рівень за рівнем (кроки 3 → 4 → 5). Перевіряйте кожен предикат запитом, перш ніж переходити до наступного.
  5. Зафіксуйте результати — знімки запитів і відповідей SWISH — для звіту (див. 5report.md).

Завдання за рівнями

Рівень 1 — базовий (оцінка 60–74)

Крок 2. Побудова генеалогічного дерева (базові предикати). Задайте власними значеннями факти:

Предикат Місність Зміст Приклад факту
MAN(x)\mathrm{MAN}(x) 1 xx — чоловік man(ivan).
WOMAN(x)\mathrm{WOMAN}(x) 1 xx — жінка woman(maria).
FATHER(x,y)\mathrm{FATHER}(x, y) 2 xx є батьком yy father(ivan, petro).
MOTHER(x,y)\mathrm{MOTHER}(x, y) 2 xx є матір’ю yy mother(maria, petro).

Крок 3. Похідні предикати (виразити логічними формулами). Реалізуйте правилами:

Предикат Зміст Логічна формула (означення)
BROTHER(x,y)\mathrm{BROTHER}(x, y) xx — брат yy MAN(x)z(PARENT(z,x)PARENT(z,y))xy\mathrm{MAN}(x) \wedge \exists z\,\big(\mathrm{PARENT}(z, x) \wedge \mathrm{PARENT}(z, y)\big) \wedge x \ne y
SISTER(x,y)\mathrm{SISTER}(x, y) xx — сестра yy WOMAN(x)z(PARENT(z,x)PARENT(z,y))xy\mathrm{WOMAN}(x) \wedge \exists z\,\big(\mathrm{PARENT}(z, x) \wedge \mathrm{PARENT}(z, y)\big) \wedge x \ne y
PARENTS(x,y,z)\mathrm{PARENTS}(x, y, z) xx та yy — батьки zz FATHER(x,z)MOTHER(y,z)\mathrm{FATHER}(x, z) \wedge \mathrm{MOTHER}(y, z)

Рівень 2 — середній (оцінка 75–89)

Виконайте все з рівня 1 і додатково виведіть логічними формулами:

Предикат Зміст Логічна формула (означення)
GRANDFATHER(x,y)\mathrm{GRANDFATHER}(x, y) xx — дід yy z(FATHER(x,z)PARENT(z,y))\exists z\,\big(\mathrm{FATHER}(x, z) \wedge \mathrm{PARENT}(z, y)\big)
GRANDMOTHER(x,y)\mathrm{GRANDMOTHER}(x, y) xx — баба yy z(MOTHER(x,z)PARENT(z,y))\exists z\,\big(\mathrm{MOTHER}(x, z) \wedge \mathrm{PARENT}(z, y)\big)

(«Дід yy» — це батько одного з батьків yy; змінна zz — проміжна особа, батько чи мати yy.)

Рівень 3 — високий (оцінка 90–100)

Виконайте все з рівнів 1–2 і додатково виведіть логічними формулами:

Предикат Зміст Логічна формула (означення)
UNCLE(x,y)\mathrm{UNCLE}(x, y) xx — дядько yy z(BROTHER(x,z)PARENT(z,y))\exists z\,\big(\mathrm{BROTHER}(x, z) \wedge \mathrm{PARENT}(z, y)\big)
AUNT(x,y)\mathrm{AUNT}(x, y) xx — тітка yy z(SISTER(x,z)PARENT(z,y))\exists z\,\big(\mathrm{SISTER}(x, z) \wedge \mathrm{PARENT}(z, y)\big)
COUSIN(x,y)\mathrm{COUSIN}(x, y) xx — двоюрідний(-а) брат/сестра yy ab(PARENT(a,x)PARENT(b,y)SIBLING(a,b))\exists a\,\exists b\,\big(\mathrm{PARENT}(a, x) \wedge \mathrm{PARENT}(b, y) \wedge \mathrm{SIBLING}(a, b)\big)

де SIBLING(a,b)z(PARENT(z,a)PARENT(z,b))ab\mathrm{SIBLING}(a, b) \equiv \exists z\,\big(\mathrm{PARENT}(z, a) \wedge \mathrm{PARENT}(z, b)\big) \wedge a \ne baa і bb — рідні брат/сестра»). Тобто двоюрідні мають спільного діда чи бабу, але різних батьків.

Порада. Означення вище — композиції: «дід» = «батько» ∘ «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 зі знімками запитів і відповідей;
  • усно на захисті: пояснити будь-яке своє правило й хід виконання одного запиту.

Оцінка = найвищий рівень, виконаний повністю та правильно (усі предикати рівня працюють і перевірені запитами).

Laboratory/Laboratory2/4task.md · 8.4 KB · updated 2026-08-04 14:37