Kapitola 11: Negace a Uzavřený svět – Co nevíme, to není

Představte si, že se zeptáte kamaráda: "Má Karel auto?" Kamarád odpoví: "Nevím." To je normální lidská odpověď. Ale Prolog není člověk. Prolog je jako velmi přísný byrokrat nebo vyhazovač v klubu. Pokud se ho zeptáte na něco, co nemá ve svých papírech, neřekne "nevím". Řekne striktní "NE" (false). Tento rozdíl je zásadní pro pochopení toho, jak Prolog vnímá pravdu a lež.

11.1 Předpoklad uzavřeného světa (CWA)

Prolog žije v bublině. Věří, že jeho databáze obsahuje veškerou pravdu o světě. Cokoliv, co v databázi není (nebo se z ní nedá odvodit), je automaticky považováno za nepravdu. Tomuto principu říkáme Předpoklad uzavřeného světa.

PŘEDPOKLAD UZAVŘENÉHO SVĚTA (CWA) Princip, podle kterého je vše, co není známo (není v databázi faktů a pravidel), považováno za nepravdivé. Prolog nezná stav "možná" nebo "neznámé".

Představte si to jako seznam hostů na VIP párty. Přijde někdo ke dveřím. Vyhazovač (Prolog) se podívá na seznam.

Vyhazovače nezajímá, že jste možná pozvánku ztratili nebo že vás zapomněli napsat. Nejste na seznamu, takže pro něj "neexistujete".

Robot vyhazovač (CWA)
Obrázek 11.1: Prolog jako vyhazovač. Pokud nejste na seznamu (v databázi), neexistujete.

11.2 Negace jako neúspěch

V Prologu používáme pro negaci ("není pravda, že...") operátor \+ (nebo někdy not). Ale pozor! Tento operátor neznamená "je to lež". Znamená to "nepodařilo se mi dokázat, že je to pravda".

NEGACE JAKO NEÚSPĚCH (NEGATION AS FAILURE) Logická negace v Prologu. Výraz \+ X je pravdivý, pokud se Prologu nepodaří dokázat X.

Příklad: Kdo je sirotek?

rodic(homer, bart).
sirotek(X) :- \+ rodic(_, X).

Čteme: X je sirotek, pokud se mi nepodaří najít nikoho, kdo je jeho rodičem.

⚠️ Nebezpečná negace: Nikdy nepoužívejte negaci s proměnnou, která ještě nemá hodnotu!
?- \+ rodic(X, bart).
Prolog se snaží dokázat: "Existuje někdo, kdo je rodičem Barta?" Ano, Homer. Takže důkaz uspěl. Negace z toho udělá false. Výsledek je "false". Prolog vám neřekne "kdo není rodičem Barta". Jen řekne "není pravda, že nikdo není rodičem Barta".

Klíčový koncept: Nevím vs. Ne

V reálném světě absence důkazu není důkazem neexistence (to, že jsem neviděl mimozemšťana, neznamená, že neexistují). V Prologu (CWA) absence důkazu JE důkazem neexistence. To je obrovská síla, ale i past, na kterou si musíte dát pozor.

Otázky k zamyšlení

  1. Představte si, že hledáte v šuplíku své oblíbené tričko. Nenajdete ho. Co by řekl člověk a co by řekl Prolog o existenci trička?
  2. Proč je nebezpečné ptát se Prologu ?- \+ muz(X). (Kdo není muž?)? Co by Prolog udělal? (Zkusil by najít někoho, kdo JE muž. Pokud by ho našel, řekl by false).
  3. Jak byste vysvětlili princip "Closed World Assumption" své babičce?

🧪 Laboratoř: Bezpečná a nebezpečná negace