Zamotaný výsluch

Riešenie problému môžeme rozdeliť na niekoľko častí. Začneme pretransformovaním viet zo vstupu do takej podoby, aby sme s nimi neskôr mohli pohodlne pracovať. Na tzv. parsovanie vstupu použijeme funkcie na prehľadávanie reťazcov, ktoré sú zabudované v našom obľúbenom programovacom jazyku. Ďalej si bolo treba uvedomiť, že maximálny počet rôznych osôb v jednom výsluchu je 5 a každá osoba je z jedného z 3 rodov. Z toho vyplýva, že počet všetkých možností priradenia jednotlivých ľudí do rodov je maximálne 35, a teda nie je problém si všetky tieto možnosti vygenerovať. Ku každému z 35 rozložení rodov ešte potrebujeme generovať 2 rôzne stavy počasia, a teda výsledný počet všetkých možností, ktoré môžu nastať je maximálne 2 × 35.

Pre potreby opisu riešenia si zavedieme pojmy:
Fakt definujeme ako jedno priradenie konkrétnej hodnoty k premennej použitej vo výsluchu.
Príklady faktov:
B -> Bianchi
počasie -> slnečno

Stav definovaný priradením rodov k účastníkom výsluchu a priradením stavu počasia budeme volať situácia. Situácia je množina faktov.
Príklad situácie:
Vo výsluchu sa objavia: {B,C,E} (počasie)
Jedna z možných situácií pre daný výsluch je symbolicky: {B,C,E} (počasie) -> {Bianchi,Castiglione,Bianchi} (slnečno)

Máme teda súbor nejakých výrokov a vieme generovať všetky možné situácie, ktoré mohli nastať. Treba si uvedomiť, že platí:

Pre každú situáciu A vieme priradiť očakávané pravdivostné hodnoty výrokov každého z jej účastníkov.

Napríklad keď máme situáciu:

{B,C,E} (počasie) -> {Bianchi,Castiglione,Bianchi} (slnečno)

tak vieme, že B by mal hovoriť pravdu (lebo je Bianchi), C by mal tiež hovoriť pravdu (lebo je Castiglione a je slnečno) a E by mal tiež hovoriť pravdu (lebo je tiež Bianchi).

Definujme si konzistenciu výroku a situácie: Výrok v je konzistentný so situáciou A práve vtedy, ak sa jeho pravdivostná hodnota zhoduje s očakávanou pravdivostnou hodnotou vyplývajúcou z faktov danej situácie A. Súbor výrokov S je konzistentný so situáciou A práve vtedy, ak sú všetky výroky súboru S konzistentné so situáciou A.

Teraz z množiny všetkých možných situácií pre daný výsluch vyberme podmnožinu situácií X, s ktorými je súbor výrokov daného výsluchu konzistentný.

Ako posledný krok spravíme „faktový“ prienik všetkých situácii v X, takto dostaneme množinu faktov Y. Príklad faktového prieniku troch situácií:

Vstupné množiny:
{A,B,C,D,E} (počasie) -> {Arcuri,Castiglione ,Bianchi,Arcuri,     Bianchi} (slnečno)
{A,B,C,D,E} (počasie) -> {Arcuri,Bianchi     ,Bianchi,Arcuri,     Bianchi} (slnečno)
{A,B,C,D,E} (počasie) -> {Arcuri,Bianchi     ,Bianchi,Castiglione,Bianchi} (slnečno)
Výsledná množina Y:
{A,C,E} (počasie) -> {Arcuri,Bianchi,Bianchi} (slnečno)

Množina Y je množina faktov, ktoré sa dajú vydedukovať zo súboru výrokov pre daný výsluch.

Ako sa teraz dopracujeme k žiadanému výsledku (pre vstupný súbor výrokov S, a faktový prienik Y)?

Autor: Daniel Švoňava