AP14 Predikátová logika prvního řádu
Zadání
(syntax, sémantika, prenexace, skolemizace, unifikace, rezoluce)
Vypracování
Syntax
Predikát (značíme velkými písmeny, např. predikáty
) je n-ární relace; vyjadřuje vlastnosti objektů a vztahy mezi objekty.
unární predikáty vyjadřují vlastnosti
binární, ternární, …, n-ární vyjadřují vztahy mezi dvojicemi, trojicemi, …, n-ticemi objektů.
nulární predikáty (sentence) představují původní výroky ve výrokové logice (bez vypuštěných výrazů)
Konstanty (značíme
) reprezentují jména objektů; jedná se o prvky předem specifikované množiny hodnot D – domény
Proměnné (značíme
) zastupují jména objektů, mohou nabývat libovolných hodnot z dané domény
Funkce (značíme
) reprezentují složená jména objektů,
Příklad1)
Nechť funkce
![f(x,y)](http://tex.dqd.cz/img?f%28x%2Cy%29)
reprezentují sčítání. Pak
![f(1,2)](http://tex.dqd.cz/img?f%281%2C2%29)
(stejně jako
![f(0,3)](http://tex.dqd.cz/img?f%280%2C3%29)
,
![f(2,1)](http://tex.dqd.cz/img?f%282%2C1%29)
) jsou možná složená jména pro konstantu 3.
Termy jsou výrazy složené pouze z funkčních symbolů, konstant a proměnných
každá proměnná a každá konstanta je term
je-li
n-ární funkční symbol a
![t_1,...,t_n](http://tex.dqd.cz/img?t_1%2C...%2Ct_n)
jsou termy, pak
![f(t_1,...,t_n)](http://tex.dqd.cz/img?f%28t_1%2C...%2Ct_n%29)
je term
nic jiného není term
příklad termu:
Atomická formule
je-li
n-ární predikátový symbol a
![t_1,...,t_n](http://tex.dqd.cz/img?t_1%2C...%2Ct_n)
jsou termy, pak
![P(t_1,...,t_n)](http://tex.dqd.cz/img?P%28t_1%2C...%2Ct_n%29)
je atomická formule
jsou-li
![t_1](http://tex.dqd.cz/img?t_1)
a
![t_2](http://tex.dqd.cz/img?t_2)
termy, pak
![t_1 = t_2](http://tex.dqd.cz/img?t_1+%3D+t_2)
je atomická formule
nic jiného není atomická formule
Je to tedy vlastně také predikát, ale často se uvádí zvlášť.
Formule jsou výrazy složené pouze z funkčních symbolů, konstant a proměnných
každá atomická formule je formule
je-li
![A](http://tex.dqd.cz/img?A)
formule, pak
![\neg A](http://tex.dqd.cz/img?%5Cneg+A)
je formule
jsou-li
![A, B](http://tex.dqd.cz/img?A%2C+B)
formule, pak
![(A \vee B),(A \wedge B),(A \Rightarrow B),(A \Leftrightarrow B)](http://tex.dqd.cz/img?%28A+%5Cvee+B%29%2C%28A+%5Cwedge+B%29%2C%28A+%5CRightarrow+B%29%2C%28A+%5CLeftrightarrow+B%29)
jsou formule
je-li
![x](http://tex.dqd.cz/img?x)
proměnná a
![A](http://tex.dqd.cz/img?A)
formule, pak
![(\forall x A)](http://tex.dqd.cz/img?%28%5Cforall+x+A%29)
a
![(\exists x A)](http://tex.dqd.cz/img?%28%5Cexists+x+A%29)
jsou formule
nic jiného není formule
Podformule formule
je libovolná spojitá podčást
, která je sama formulí.
Příklad podformule3)
Formule
![A = \exists x((\forall y P(z)) \Rightarrow R(x,y))](http://tex.dqd.cz/img?A+%3D+%5Cexists+x%28%28%5Cforall+y+P%28z%29%29+%5CRightarrow+R%28x%2Cy%29%29)
má kromě sebe samé následující podformule:
![(\forall y P(z)) \Rightarrow R(x,y)](http://tex.dqd.cz/img?%28%5Cforall+y+P%28z%29%29+%5CRightarrow+R%28x%2Cy%29)
,
![\forall y P(z)](http://tex.dqd.cz/img?%5Cforall+y+P%28z%29)
,
![R(x,y)](http://tex.dqd.cz/img?R%28x%2Cy%29)
,
Vázaný/volný výskyt
výskyt proměnné
![x](http://tex.dqd.cz/img?x)
ve formuli
![A](http://tex.dqd.cz/img?A)
je
vázaný, pokud existuje podformule
![B](http://tex.dqd.cz/img?B)
formule
![A](http://tex.dqd.cz/img?A)
, která obsahuje tento výskyt
![x](http://tex.dqd.cz/img?x)
a začíná
![\forall x](http://tex.dqd.cz/img?%5Cforall+x)
, resp.
výskyt proměnné je
volný, není-li vázaný
4)
Výskyt proměné
![x](http://tex.dqd.cz/img?x)
z formule
![A](http://tex.dqd.cz/img?A)
předchozího příkladu je vázaný (podformulí je celá formule
![A](http://tex.dqd.cz/img?A)
), proměnné
![y](http://tex.dqd.cz/img?y)
a
![z](http://tex.dqd.cz/img?z)
jsou volné.
Sentence (uzavřená formule) – formule bez volných výskytů proměnných (všechny výskyty všech proměnných jsou vázané)
Otevřená formule – formule bez kvantifikátorů
Substituce – substituovat lze pouze volné proměnné.
Příklad substituce5)
Ve formuli:
![A = \exists x P(x,y)](http://tex.dqd.cz/img?A+%3D+%5Cexists+x+P%28x%2Cy%29)
lze provést například následující substituce.
substituce:
![A](http://tex.dqd.cz/img?A)
(
![y/z](http://tex.dqd.cz/img?y%2Fz)
) =
![\exists x P(x,z)](http://tex.dqd.cz/img?%5Cexists+x+P%28x%2Cz%29)
,
![A](http://tex.dqd.cz/img?A)
(
![y/2](http://tex.dqd.cz/img?y%2F2)
) =
![\exists x P(x,2)](http://tex.dqd.cz/img?%5Cexists+x+P%28x%2C2%29)
,
![A](http://tex.dqd.cz/img?A)
(
![y/f(z,z)](http://tex.dqd.cz/img?y%2Ff%28z%2Cz%29)
) =
nelze!:
![A](http://tex.dqd.cz/img?A)
(
![y/f(x,x)](http://tex.dqd.cz/img?y%2Ff%28x%2Cx%29)
) =
![\exists x P(x,f(x,x))](http://tex.dqd.cz/img?%5Cexists+x+P%28x%2Cf%28x%2Cx%29%29)
– došlo by k nežádoucí vazbě proměnných
Sématika
Interpretace (realizace) jazyka predikátové logiky je struktura
složená z
libovolné neprázdné množiny
![D](http://tex.dqd.cz/img?D)
(domény, oboru interpretace)
zobrazení
![I(f): D^n \rightarrow D](http://tex.dqd.cz/img?I%28f%29%3A+D%5En+%5Crightarrow+D)
pro každý
n-ární funkční symbol
n-ární relace
![I(P) \subseteq D^n](http://tex.dqd.cz/img?I%28P%29+%5Csubseteq+D%5En)
pro každý
n-ární predikátový symbol
![P](http://tex.dqd.cz/img?P)
,
Příklad6)
![D](http://tex.dqd.cz/img?D)
= celá čísla
![I(a) = 0](http://tex.dqd.cz/img?I%28a%29+%3D+0)
,
![I(a_1)= 1, ...](http://tex.dqd.cz/img?I%28a_1%29%3D+1%2C+...)
(nulární funkce)
![I(f) = +](http://tex.dqd.cz/img?I%28f%29+%3D+%2B)
(funkce zadaná pomocí rovnosti funkcí: zobrazení
![I(f)](http://tex.dqd.cz/img?I%28f%29)
definujeme jako funkci sčítání celých čísel; pak např.
![I(f)(4;-2) = 2](http://tex.dqd.cz/img?I%28f%29%284%3B-2%29+%3D+2)
)
(relace zadaná pomocí rovnosti relací:
definujeme jako relaci „větší než“ pro celá čísla; např.
a
)
Neformálně řečeno, interpretace je přiřazení konkrétních významů všem konstantám, funkčním a predikátovým symbolům.
Valuace – Interpretace volných proměnných spočívá v jejich ohodnocení, což je libovolné zobrazení
(valuace) z množiny všech proměnných do
. Neformálně řečeno, přiřazení konkrétních hodnot proměnným.
![V[x/d]](http://tex.dqd.cz/img?V%5Bx%2Fd%5D)
značí ohodnocení, které přiřazuje proměnné
![x](http://tex.dqd.cz/img?x)
prvek
![d \in D](http://tex.dqd.cz/img?d+%5Cin+D)
a na ostatních proměnných splývá s valuací
Hodnota termu
v interpretaci
a valuaci
je prvek
z
takový že:
je-li
![t](http://tex.dqd.cz/img?t)
proměnná,
je-li
![t = f(t_1,...,t_n)](http://tex.dqd.cz/img?t+%3D+f%28t_1%2C...%2Ct_n%29)
, pak
![|t|_{I,V}](http://tex.dqd.cz/img?%7Ct%7C_%7BI%2CV%7D)
je hodnotou funkce
![I(f)](http://tex.dqd.cz/img?I%28f%29)
pro argumenty
Příklad7)
Mějme interpretaci
![I](http://tex.dqd.cz/img?I)
z předchozího příkladu (celá čísla s > a +) a valuaci
![V(x) = 2](http://tex.dqd.cz/img?V%28x%29+%3D+2)
. Pak
Pravdivost formulí
Formuli
![A](http://tex.dqd.cz/img?A)
nazveme pravdivou v interpretací
![I](http://tex.dqd.cz/img?I)
, je-li splňována
![I](http://tex.dqd.cz/img?I)
pro libovolnou valuaci; píšeme
Formule
![A](http://tex.dqd.cz/img?A)
je
tautologie, pokud je pravdivá pro každou interpretaci
splnitelná, pokud je pravdivá pro alespoň jednu interpretaci a valuaci.
kontradikce, pokud
![\neg A](http://tex.dqd.cz/img?%5Cneg+A)
je tautologie
Prenexace
Cílem Prenexové normální formy je převést libovolnou (uzavřenou) formuli do tvaru, v němž jsou všechny kvantifikátory na začátku a následuje otevřené (= bez kvantifikátorů) jádro v KNF (DNF).
Algoritmus převodu
eliminovat zbytečné kvantifikátory
přejmenovat proměnné tak, aby u každého kvantifikátoru byla jiná proměnná
eliminovat všechny spojky různé od
![\neg](http://tex.dqd.cz/img?%5Cneg)
,
![\wedge](http://tex.dqd.cz/img?%5Cwedge)
a
přesunout negaci dovnitř
přesunout kvantifikátory doleva
použít distributivní zákony k převodu jádra do KNF (DNF)
Skolemizace
Skolemova normální forma je prenexová normální forma s pouze univerzálními kvantifikátory.
odstraníme existenční (
![\exists](http://tex.dqd.cz/img?%5Cexists)
) kvantifikátory
formuli
![\forall x_1,...,\forall x_n \exists y P(x_1,...,x_n,y)](http://tex.dqd.cz/img?%5Cforall+x_1%2C...%2C%5Cforall+x_n+%5Cexists+y+P%28x_1%2C...%2Cx_n%2Cy%29)
převedeme na
Algoritmus převodu
převést formuli do (konjunktivní) pnf
provést Skolemizaci: odstranit všechny existenční kvantifikátory a nahradit jimi vázané proměnné pomocnými Skolemovými funkcemi
Unifikace
směřuje k rezoluci v predikátové logice
formule uvádíme ve Skolemově normální formě
všeobecné kvantifikátory nepíšeme
problém se substitucemi proměnných obecně řeší unifikace
Konečná substituce
je konečná množina
, kde všechna
jsou vzájemně různé proměnné a každé
je term různý od
.
pokud jsou všechna
![t_i](http://tex.dqd.cz/img?t_i)
uzavřené termy (neobsahují proměnné), jedná se o
uzavřenou substituci
pokud jsou
![t_i](http://tex.dqd.cz/img?t_i)
proměnné, označujeme
![\phi](http://tex.dqd.cz/img?%5Cphi)
jako
přejmenování proměnných
Konečná substituce
označme libovolný term nebo literál jako výraz
![E \phi](http://tex.dqd.cz/img?E+%5Cphi)
je pak výsledek nahrazení všech výskytů všech
![x_i](http://tex.dqd.cz/img?x_i)
odpovídajícími termy
!POZOR! Nahrazení v rámci jedné substituce
![\phi](http://tex.dqd.cz/img?%5Cphi)
probíhají paralelně. Když se použijí dvě substituce
![\phi\psi](http://tex.dqd.cz/img?%5Cphi%5Cpsi)
, probíhají postupně.
Kompozice substitucí – postupně bereme prvky z první substituce a hledáme ve druhé, zda není možnost nahradit nahrazovaného (tranzitivně)
Unifikátor
Substituci
nazveme unifikátorem množiny formulí
, pokud
, tedy v případě, že
má jeden prvek.
Unifikátor
množiny
je nejobecnějším unifikátorem (mgu)
, pokud pro libovolný unifikátor
množiny
existuje substituce
taková, že
– pro unifikovatelné množiny existuje pouze jediný mgu (až na přejmenování proměnných)
Rozdíly mezi výrazy označujeme jako
Mějme množinu výrazů S. Najdeme první (nejlevější) pozici, na které nemají všechny prvky S stejný symbol. Rozdíl D(S) mezi výrazy pak definujeme jako množinu podvýrazů všech
![E \in S](http://tex.dqd.cz/img?E+%5Cin+S)
začínajících na této pozici.
8)
Unifikační algoritmus pro množinu výrazů S
krok 0:
![S_{0} := S](http://tex.dqd.cz/img?S_%7B0%7D+%3A%3D+S)
,
krok k+1:
je-li
![S_{k}](http://tex.dqd.cz/img?S_%7Bk%7D)
jednoprvková, ukonči algoritmus s výsledkem
jinak, pokud v
![D(S_{k})](http://tex.dqd.cz/img?D%28S_%7Bk%7D%29)
není proměnná v a term t, který ji neobsahuje, ukonči algoritmus s výsledkem neexistuje
jinak vyber takovou proměnnou v a term t, který neobsahuje v,
![\phi_{k+1} := \{v/t\}](http://tex.dqd.cz/img?%5Cphi_%7Bk%2B1%7D+%3A%3D+%5C%7Bv%2Ft%5C%7D)
,
![S_{k+1} := S_{k}\phi_{k+1}](http://tex.dqd.cz/img?S_%7Bk%2B1%7D+%3A%3D+S_%7Bk%7D%5Cphi_%7Bk%2B1%7D)
a pokračuj krokem k+2
Na pochopení fungování unifikačního algoritmu je dobré se podívat do skript Úvod do logiky a logického programování, na posledni stranu kapitoly
Predikátová logika III.
Rezoluce
Metoda vhodná pro strojové zpracování. Založená na vyvracení.
formule ve Skolemově normální formě, nepíšeme kvantifikátory
literály představují atomické formule a jejich negace
klauzule: množiny reprezentující disjunkci literálů
formule: množiny klauzulí reprezentující jejich konjunkci
Příklad rezoluční formule
formule:
![\forall x \forall y ((P(x,f(x))\vee \neg Q(y))\wedge(\neg R(f(x))\vee \neg Q(y)))](http://tex.dqd.cz/img?%5Cforall+x+%5Cforall+y+%28%28P%28x%2Cf%28x%29%29%5Cvee+%5Cneg+Q%28y%29%29%5Cwedge%28%5Cneg+R%28f%28x%29%29%5Cvee+%5Cneg+Q%28y%29%29%29)
rezoluční forma:
Rezoluční pravidlo pro predikátovou logiku. Mějme klauzule
,
bez společných proměnných (po případném přejmenování) ve tvaru:
-
![C_2 = C_2' \cup \{\neg P(y_1),...,\neg P(y_m)\}](http://tex.dqd.cz/img?C_2+%3D+C_2%26%23039%3B+%5Ccup+%5C%7B%5Cneg+P%28y_1%29%2C...%2C%5Cneg+P%28y_m%29%5C%7D)
.
Je-li
![\phi](http://tex.dqd.cz/img?%5Cphi)
mgu množiny
![\{P(x_1),...,P(x_n),P(y_1),...,P(y_m)\}](http://tex.dqd.cz/img?%5C%7BP%28x_1%29%2C...%2CP%28x_n%29%2CP%28y_1%29%2C...%2CP%28y_m%29%5C%7D)
, pak rezolventou
![C_1](http://tex.dqd.cz/img?C_1)
a
![C_2](http://tex.dqd.cz/img?C_2)
je
Příklad rezolventy
Rezolvujeme klauzule
![\{{P(x,y),\neg R(x)}\}](http://tex.dqd.cz/img?%5C%7B%7BP%28x%2Cy%29%2C%5Cneg+R%28x%29%7D%5C%7D)
a
![\{\neg P(a,b)\}](http://tex.dqd.cz/img?%5C%7B%5Cneg+P%28a%2Cb%29%5C%7D)
mgu
aplikujeme mgu na
rezolventa
Vlastnosti rezoluce:
stejně jako ve výrokové logice je rezoluce v predikátové logice korektní a úplná
stejný problém jako ve výrokové logice: strategie generování rezolvent (příliš velký prohledávaný prostor)
lze použít všechny metody zjemnění uvedené pro výrokovou logiku
Druhy rezolucí:
Lineární rezoluce
LI-rezoluce
LD-rezoluce
SLD-rezoluce
Předměty
FI:IB101 Úvod do logiky a logického programování, doc. RNDr. Lubomír Popelínský, Ph.D.
Použitá literatura
Vypracoval
Martin Kotlík, UČO: 143208.
Otázku si přečetl pan RNDr. Jan Bouda a rámcově prošel. Jeho podněty pro doplnění textu, opravy nesrovnalostí a odstranění matoucích či k otázce se nevztahujících textů byly do otázky zaneseny. Tato kontrola je jen rámcová, stále se může stát, že v otázce zůstala zapomenutá chybka či nesrovnalost, vyučující za toto nenese odpovědnost, berte tuto rámcovou kontrolu jako formu pomoci od vyučujících pro studenty.