Klauzulární logika úvod Šárka Vavrečková Ústav informatiky Filozoficko-Přírodovědecká fakulta Slezské univerzity, Opava 20. října 2008
Klauzulární logika Hlavní vlastnosti pracujeme s klauzulemi, které získáváme z klauzulí predikátové logiky klauzule klauzulární logiky: 1 ekvivalentními operacemi předsuneme postupně všechny kvantifikátory na začátek klauzule 2 takto vytvořený prefix z kvantifikátorů odstraníme (ale při případných úpravách bereme v úvahu kvantifikaci jednotlivých proměnných a pořadí kvantifikátorů) 3 jádro formule bez kvantifikátorů upravíme do klauzulární formy používáme pouze jedinou logickou spojku implikaci (žádnou jinou, ani negaci!), specifické vlastnosti nevyjádřitelné implikací reprezentujeme jinak
Klauzulární logika Hlavní vlastnosti pracujeme s klauzulemi, které získáváme z klauzulí predikátové logiky klauzule klauzulární logiky: 1 ekvivalentními operacemi předsuneme postupně všechny kvantifikátory na začátek klauzule 2 takto vytvořený prefix z kvantifikátorů odstraníme (ale při případných úpravách bereme v úvahu kvantifikaci jednotlivých proměnných a pořadí kvantifikátorů) 3 jádro formule bez kvantifikátorů upravíme do klauzulární formy používáme pouze jedinou logickou spojku implikaci (žádnou jinou, ani negaci!), specifické vlastnosti nevyjádřitelné implikací reprezentujeme jinak
Klauzulární logika Hlavní vlastnosti pracujeme s klauzulemi, které získáváme z klauzulí predikátové logiky klauzule klauzulární logiky: 1 ekvivalentními operacemi předsuneme postupně všechny kvantifikátory na začátek klauzule 2 takto vytvořený prefix z kvantifikátorů odstraníme (ale při případných úpravách bereme v úvahu kvantifikaci jednotlivých proměnných a pořadí kvantifikátorů) 3 jádro formule bez kvantifikátorů upravíme do klauzulární formy používáme pouze jedinou logickou spojku implikaci (žádnou jinou, ani negaci!), specifické vlastnosti nevyjádřitelné implikací reprezentujeme jinak
Klauzulární logika Hlavní vlastnosti pracujeme s klauzulemi, které získáváme z klauzulí predikátové logiky klauzule klauzulární logiky: 1 ekvivalentními operacemi předsuneme postupně všechny kvantifikátory na začátek klauzule 2 takto vytvořený prefix z kvantifikátorů odstraníme (ale při případných úpravách bereme v úvahu kvantifikaci jednotlivých proměnných a pořadí kvantifikátorů) 3 jádro formule bez kvantifikátorů upravíme do klauzulární formy používáme pouze jedinou logickou spojku implikaci (žádnou jinou, ani negaci!), specifické vlastnosti nevyjádřitelné implikací reprezentujeme jinak
Klauzulární logika Hlavní vlastnosti pracujeme s klauzulemi, které získáváme z klauzulí predikátové logiky klauzule klauzulární logiky: 1 ekvivalentními operacemi předsuneme postupně všechny kvantifikátory na začátek klauzule 2 takto vytvořený prefix z kvantifikátorů odstraníme (ale při případných úpravách bereme v úvahu kvantifikaci jednotlivých proměnných a pořadí kvantifikátorů) 3 jádro formule bez kvantifikátorů upravíme do klauzulární formy používáme pouze jedinou logickou spojku implikaci (žádnou jinou, ani negaci!), specifické vlastnosti nevyjádřitelné implikací reprezentujeme jinak
Klauzulární logika Hlavní vlastnosti pracujeme s klauzulemi, které získáváme z klauzulí predikátové logiky klauzule klauzulární logiky: 1 ekvivalentními operacemi předsuneme postupně všechny kvantifikátory na začátek klauzule 2 takto vytvořený prefix z kvantifikátorů odstraníme (ale při případných úpravách bereme v úvahu kvantifikaci jednotlivých proměnných a pořadí kvantifikátorů) 3 jádro formule bez kvantifikátorů upravíme do klauzulární formy používáme pouze jedinou logickou spojku implikaci (žádnou jinou, ani negaci!), specifické vlastnosti nevyjádřitelné implikací reprezentujeme jinak
Definice (Klauzule) Definice klauzulí Báze: Literály predikátů jsou klauzule. Indukce: Jestliže A a B jsou klauzule, pak A B je také klauzule. Zobecnění: Všechny formule, které jsou utvořeny použitím konečného počtu pravidel v bázi a indukci, jsou klauzule, žádná jiná formule není klauzule.
Definice (Hornovy klauzule) Definice klauzulí jsou klauzule s nejvýše jedním pozitivním literálem (tj. literálem bez negace). Můžeme je psát v následujících tvarech: Definice ((Obecné) klauzule) A 1 A 2... A n B (A 1, A 2,..., A n ) B A 1 A 2... A n B 1 B 2 B m (A 1 &A 2 &... &A n ) (B 1 B 2... B m )
Definice (Hornovy klauzule) Definice klauzulí jsou klauzule s nejvýše jedním pozitivním literálem (tj. literálem bez negace). Můžeme je psát v následujících tvarech: Definice ((Obecné) klauzule) A 1 A 2... A n B (A 1, A 2,..., A n ) B A 1 A 2... A n B 1 B 2 B m (A 1 &A 2 &... &A n ) (B 1 B 2... B m )
1 proměnné (X, Prom,... ) Abeceda 2 individuové konstanty (28, 3.4, jaguár,... ) 3 logické konstanty (true, false T, F) 4 existenční (Skolemovy) konstanty (@a, @něco,... ) 5 funkční symboly (funktory) mají přiřazenu aritu = přirozené číslo (vč. nuly) = počet argumentů 6 existenční (Skolemovy) funktory (@f,... ) mají aritu 7 predikátové symboly začínají písmenem, mají aritu 8 pomocné symboly čárky, závorky 9 logická spojka implikace
Term: proměnná Syntaktické prvky konstanta (individuová, logická) existenční konstanta funktor, jehož argumenty jsou termy existenční funktor, jehož argumenty jsou termy Atom: predikátový symbol, jehož argumenty jsou termy logická konstanta
Term: proměnná Syntaktické prvky konstanta (individuová, logická) existenční konstanta funktor, jehož argumenty jsou termy existenční funktor, jehož argumenty jsou termy Atom: predikátový symbol, jehož argumenty jsou termy logická konstanta
Klauzule: kde p i, q j jsou atomy. Význam: p 1, p 2,..., p n antecedent(a) konjunkce Syntaktické prvky q 1, q 2,..., q m konsekvent(k) disjunkce (p 1 &p 2 &... &p n ) (q 1 q 2... q m ) (p 1 &p 2 &... &p n ) (q 1 q 2... q m ) p 1 p 2... p n q 1 q 2... q m
Klauzule: kde p i, q j jsou atomy. Význam: p 1, p 2,..., p n antecedent(a) konjunkce Syntaktické prvky q 1, q 2,..., q m konsekvent(k) disjunkce (p 1 &p 2 &... &p n ) (q 1 q 2... q m ) (p 1 &p 2 &... &p n ) (q 1 q 2... q m ) p 1 p 2... p n q 1 q 2... q m
Syntaxe Formy klauzulí p 1, p 2,... p n q 1, q 2,... q m (1) q 1, q 2,... q m (2) p 1, p 2,... p n (3) Význam 1 žádná z množin A, K není prázdná (základní forma), 2 A = je FAKT, 3 K = NEPLATNÉ tvrzení.
Odvození vzorce: Rezoluce v klauzulární logice p X, X q p q p X, X q p q substituce [A p], [B q] A X, X B A B
Odvození vzorce: Rezoluce v klauzulární logice p X, X q p q p X, X q p q substituce [A p], [B q] A X, X B A B
Odvození vzorce: Rezoluce v klauzulární logice p X, X q p q p X, X q p q substituce [A p], [B q] A X, X B A B
Tvrzení jsou Typy tvrzení univerzální (tvrzení platí obecně pro vše, co je dosazeno), může obsahovat pouze univerzálně vázané proměnné (X, P rom, N ekdo, apod.), konstanty. existenční (existuje hodnota taková, že po dosazení bude formule splněna), může obsahovat vše z předchozího bodu, existenční konstanty, existenční funktory.
Tvrzení jsou Typy tvrzení univerzální (tvrzení platí obecně pro vše, co je dosazeno), může obsahovat pouze univerzálně vázané proměnné (X, P rom, N ekdo, apod.), konstanty. existenční (existuje hodnota taková, že po dosazení bude formule splněna), může obsahovat vše z předchozího bodu, existenční konstanty, existenční funktory.
Příklad Slovně V létě mají všichni školáci prázdniny. Predikátová logika v klauzulárním tvaru (chceme, aby každá proměnná byla vázaná obecným kvantifikátorem): x rocni obd(leto) skolak(x)) ma(x, prazdniny) Klauzulární logika: rocni obd(leto), skolak(x) ma(x, prazdniny)
Příklad Slovně V létě mají všichni školáci prázdniny. Predikátová logika v klauzulárním tvaru (chceme, aby každá proměnná byla vázaná obecným kvantifikátorem): x rocni obd(leto) skolak(x)) ma(x, prazdniny) Klauzulární logika: rocni obd(leto), skolak(x) ma(x, prazdniny)
Příklad Slovně V létě mají všichni školáci prázdniny. Predikátová logika v klauzulárním tvaru (chceme, aby každá proměnná byla vázaná obecným kvantifikátorem): x rocni obd(leto) skolak(x)) ma(x, prazdniny) Klauzulární logika: rocni obd(leto), skolak(x) ma(x, prazdniny)
Příklad Slovně Psi štěkají (všichni psi štěkají, každý pes štěká). Predikátová logika v klauzulárním tvaru x pes(x) steka(x) Klauzulární logika: pes(x) steka(x)
Příklad Slovně Psi štěkají (všichni psi štěkají, každý pes štěká). Predikátová logika v klauzulárním tvaru x pes(x) steka(x) Klauzulární logika: pes(x) steka(x)
Příklad Slovně Psi štěkají (všichni psi štěkají, každý pes štěká). Predikátová logika v klauzulárním tvaru x pes(x) steka(x) Klauzulární logika: pes(x) steka(x)
Příklad Slovně V létě má listí zelenou barvu, zatímco na podzim má listí žlutou nebo červenou barvu. Predikátová logika v klauzulárním tvaru x rocni obd(leto) & listi(x) barva(x, zelena) & rocni obd(podzim) & listi(x) barva(x, zluta) barva(x, cervena) Klauzulární logika: rocni obd(leto), listi(x) barva(x, zelena) rocni obd(podzim), listi(x) barva(x, zluta), barva(x, cervena)
Příklad Slovně V létě má listí zelenou barvu, zatímco na podzim má listí žlutou nebo červenou barvu. Predikátová logika v klauzulárním tvaru x rocni obd(leto) & listi(x) barva(x, zelena) & rocni obd(podzim) & listi(x) barva(x, zluta) barva(x, cervena) Klauzulární logika: rocni obd(leto), listi(x) barva(x, zelena) rocni obd(podzim), listi(x) barva(x, zluta), barva(x, cervena)
Příklad Slovně V létě má listí zelenou barvu, zatímco na podzim má listí žlutou nebo červenou barvu. Predikátová logika v klauzulárním tvaru x rocni obd(leto) & listi(x) barva(x, zelena) & rocni obd(podzim) & listi(x) barva(x, zluta) barva(x, cervena) Klauzulární logika: rocni obd(leto), listi(x) barva(x, zelena) rocni obd(podzim), listi(x) barva(x, zluta), barva(x, cervena)
Slovně Stůl je tvrdý. Příklad Predikátová logika v klauzulárním tvaru X stul(x) tvrdy(x) Klauzulární logika: nebo stul(x) tvrdy(x) tvrdy(stul)
Slovně Stůl je tvrdý. Příklad Predikátová logika v klauzulárním tvaru X stul(x) tvrdy(x) Klauzulární logika: nebo stul(x) tvrdy(x) tvrdy(stul)
Slovně Stůl je tvrdý. Příklad Predikátová logika v klauzulárním tvaru X stul(x) tvrdy(x) Klauzulární logika: nebo stul(x) tvrdy(x) tvrdy(stul)
Příklad Slovně Když je hezké počasí, děti jdou na procházku. Predikátová logika v klauzulárním tvaru X pocasi(hezke) & dite(x) jde(x, prochazka) Klauzulární logika: pocasi(hezke), dite(x) jde(x, prochazka)
Příklad Slovně Když je hezké počasí, děti jdou na procházku. Predikátová logika v klauzulárním tvaru X pocasi(hezke) & dite(x) jde(x, prochazka) Klauzulární logika: pocasi(hezke), dite(x) jde(x, prochazka)
Příklad Slovně Když je hezké počasí, děti jdou na procházku. Predikátová logika v klauzulárním tvaru X pocasi(hezke) & dite(x) jde(x, prochazka) Klauzulární logika: pocasi(hezke), dite(x) jde(x, prochazka)
Příklad Slovně Musím do školy, protože píšu písemku. Predikátová logika v klauzulárním tvaru Klauzulární logika: pise(ja, pisemka) musi do(ja, skola) pise(ja, pisemka) musi do(ja, skola) nebo ja(x), pise(x, pisemka) musi do(x, skola)
Příklad Slovně Musím do školy, protože píšu písemku. Predikátová logika v klauzulárním tvaru Klauzulární logika: pise(ja, pisemka) musi do(ja, skola) pise(ja, pisemka) musi do(ja, skola) nebo ja(x), pise(x, pisemka) musi do(x, skola)
Příklad Slovně Musím do školy, protože píšu písemku. Predikátová logika v klauzulárním tvaru Klauzulární logika: pise(ja, pisemka) musi do(ja, skola) pise(ja, pisemka) musi do(ja, skola) nebo ja(x), pise(x, pisemka) musi do(x, skola)
Příklad Slovně Děti mladší 10 let půjdou po zelené značce, děti starší půjdou po stejné značce jako dospělí. Predikátová logika v klauzulárním tvaru X X Y Z dite(x) & vek(x) < 10 jde po(x, zelena) dite(x) & vek(x) = 10 & & dospely(y ), jde po(y, Z) jde po(x, Z) Klauzulární logika: dite(x), vek(x) < 10 jde po(x, zelena) dite(x), vek(x) = 10, dospely(y ), jde po(y, Z) jde po(x, Z)
Příklad Slovně Děti mladší 10 let půjdou po zelené značce, děti starší půjdou po stejné značce jako dospělí. Predikátová logika v klauzulárním tvaru X X Y Z dite(x) & vek(x) < 10 jde po(x, zelena) dite(x) & vek(x) = 10 & & dospely(y ), jde po(y, Z) jde po(x, Z) Klauzulární logika: dite(x), vek(x) < 10 jde po(x, zelena) dite(x), vek(x) = 10, dospely(y ), jde po(y, Z) jde po(x, Z)
Příklad Slovně Děti mladší 10 let půjdou po zelené značce, děti starší půjdou po stejné značce jako dospělí. Predikátová logika v klauzulárním tvaru X X Y Z dite(x) & vek(x) < 10 jde po(x, zelena) dite(x) & vek(x) = 10 & & dospely(y ), jde po(y, Z) jde po(x, Z) Klauzulární logika: dite(x), vek(x) < 10 jde po(x, zelena) dite(x), vek(x) = 10, dospely(y ), jde po(y, Z) jde po(x, Z)
Převod z predikátové logiky x y z A(x,y,z) x y z A(x,y,z) A(@X, Y, Z) A(X, @Y (X), Z) x y z A(x,y,z) A(X, Y, @Z(X, Y ))
Převod z predikátové logiky Existenční vazba Existenční vazba x y z A(x,y,z) x y z A(x,y,z) Univerzální vazby A(@X, Y, Z) Univerzální vazby A(X, @Y (X), Z) Existenční vazba x y z A(x,y,z) Univerzální vazby A(X, Y, @Z(X, Y ))
Převod z predikátové logiky Existenční vazba Existenční vazba x y z A(x,y,z) x y z A(x,y,z) Univerzální vazby A(@X, Y, Z) Univerzální vazby A(X, @Y (X), Z) Existenční vazba x y z A(x,y,z) Univerzální vazby A(X, Y, @Z(X, Y ))
Existenční konstanty Příklady 1 Jana něco vlastní (existuje něco, co vlastní Jana). vlastni(jana, @neco) 2 Někdo jde lesem. jde kudy(@nekdo, les) 3 Existuje někdo, koho baví logika (někoho baví logika). bavi(@nekdo, logika) 4 Vidím něco modrého. modre(@c) vidi(ja, @c)
Existenční konstanty Příklady 1 Jana něco vlastní (existuje něco, co vlastní Jana). vlastni(jana, @neco) 2 Někdo jde lesem. jde kudy(@nekdo, les) 3 Existuje někdo, koho baví logika (někoho baví logika). bavi(@nekdo, logika) 4 Vidím něco modrého. modre(@c) vidi(ja, @c)
Existenční konstanty Příklady 1 Jana něco vlastní (existuje něco, co vlastní Jana). vlastni(jana, @neco) 2 Někdo jde lesem. jde kudy(@nekdo, les) 3 Existuje někdo, koho baví logika (někoho baví logika). bavi(@nekdo, logika) 4 Vidím něco modrého. modre(@c) vidi(ja, @c)
Existenční konstanty Příklady 1 Jana něco vlastní (existuje něco, co vlastní Jana). vlastni(jana, @neco) 2 Někdo jde lesem. jde kudy(@nekdo, les) 3 Existuje někdo, koho baví logika (někoho baví logika). bavi(@nekdo, logika) 4 Vidím něco modrého. modre(@c) vidi(ja, @c)
Existenční konstanty Příklady 1 Jana něco vlastní (existuje něco, co vlastní Jana). vlastni(jana, @neco) 2 Někdo jde lesem. jde kudy(@nekdo, les) 3 Existuje někdo, koho baví logika (někoho baví logika). bavi(@nekdo, logika) 4 Vidím něco modrého. modre(@c) vidi(ja, @c)
Kdy použít existenční funktor Existenční funktory Každý zaměstnanec má svého nadřízeného.
Existenční funktory Kdy použít existenční funktor Každý zaměstnanec má svého nadřízeného. Špatně: zamestnanec(x) nadrizeny(y, X) (1) zamestnanec(x) nadrizeny(@c, X) (2)
Kdy použít existenční funktor Existenční funktory Každý zaměstnanec má svého nadřízeného. Špatně: zamestnanec(x) nadrizeny(y, X) (1) zamestnanec(x) nadrizeny(@c, X) (2) Ve skutečnosti znamená: 1 Každý zaměstnanec má nadřízeného, který je v proměnné Y (tj. všichni jsou nadřízenými všech zaměstnanců). 2 Existuje nadřízený společný všem zaměstnancům.
Kdy použít existenční funktor Existenční funktory Každý zaměstnanec má svého nadřízeného. Dobře: zamestnanec(x) nadrizeny(@zam(x), X) Každého nadřízeného vážeme vždy na konkrétního zaměstnance, existenční funktor @zam(x) je interpretován tabulkou.