PL02_Programowanie_w _jezyku _logiki_wprowadzenie

Transkrypt

PL02_Programowanie_w _jezyku _logiki_wprowadzenie
PROGRAMOWANIE W JĘZYKU LOGIKI – WPROWADZENIE
LOGIKA PIERWSZEGO RZĘDU
Symbole języka pierwszego rzędu. dzielą się na:
a) symbole logiczne (wspólne dla wszystkich języków)
– zmienne przedmiotowe: x, y, z, …
– stałe logiczne: ¬ , ∧ , ∨ , → , ↔ , ∀ , ∃
– symbole techniczne: ( , )
b) symbole pozalogiczne (zależne od języka)
– symbole relacyjne: P, Q, R, …
– symbole funkcyjne: f, g, h, …
– stałe przedmiotowe: a, b, c, …
(Symbole pozalogiczne całkowicie określają dany język)
Językiem pierwszego rzędu nazywamy układ
L = ( Re lL ; FunL ; ConL ; ρ L )
taki, że
– Re l L jest niepustym zbiorem (symboli relacyjnych),
– Fun L jest zbiorem (symboli funkcyjnych),
– Con L jest zbiorem (stałych przedmiotowych),
przy czym zbiory Re l L , Fun L i Con L są rozłączne, natomiast ρ L jest funkcją, która każdemu
symbolowi relacyjnemu i funkcyjnemu przyporządkowuje dodatnią liczbę całkowitą, zwaną
arnością tego symbolu.
Wyróżniamy dwie klasy wyrażeń sensownych języka L:
a) termy – wyrażenia nazwowe,
b) formuły – wyrażenia zdaniowe.
Termami języka L nazywamy wyrażenia języka L określone przez następujące warunki
indukcyjne:
– wszystkie zmienne i stałe przedmiotowe są termami ,
– f (t1 , K , t n ) jest termem, jeżeli f ∈ Fun L , ρ L ( f ) = n oraz t1 , K , t n są tremami.
Formułami atomowymi języka L nazywamy wyrażenia
R(t1 ,K, t n ) ,
takie że R ∈ Re l L , ρ L ( R) = n a t1 , K , t n są tremami języka L.
Formułami języka L nazywamy wyrażenia języka L określone przez następujące warunki
indukcyjne:
– wszystkie formuły atomowe są formułami,
– jeżeli A, B są formułami, to wyrażenia ( ¬A) , ( A ∧ B ) , ( A ∨ B ) , ( A → B ) , ( A ↔ B )
są formułami,
– jeżeli A jest formułą i x jest zmienną przedmiotową, to wyrażenia (∀x A) i (∃x A)
są formułami.
KLAUZULE
Literał pozytywny – formuła atomowa (krótko: atom)
Literał negatywny – negacja atomu
Literał – literał pozytywny lub negatywny
Klauzula – formuła postaci ∀(L1 ∨ L2 ∨ K ∨ Ln ) , gdzie Li , i = 1,2, K , n są literałami.
Przykład klauzuli: ∀x∀y (P(x, y ) ∨ Q( f (x ), h( y ), a ))
Klauzula postaci:
∀( A1 ∨ K ∨ Ak ∨ ¬B1 ∨ K ∨ ¬Bm )
jest równoważna formule
∀(( A1 ∨ K ∨ Ak ) ∨ ¬(B1 ∧ K ∧ Bm )) ,
która z kolei jest równoważna formule
∀(B1 ∧ K ∧ Bm → A1 ∨ K ∨ Ak ) .
Formułę tę zapisujemy w postaci:
A1 , K , Ak ← B1 , K , Bm ,
14
24
3 1424
3
wniosek
przeslanka
przecinki w przesłance (poprzednik implikacji) oznaczają koniunkcje,
przecinki we wniosku (następnik implikacji) oznaczają alternatywy.
Przykład:
klauzula:
zapis:
∀x∀y (P( x ) ∨ ¬A ∨ ¬Q( y ) ∨ B )
P ( x ), B ← A, Q( y )
Szczególne przypadki klauzul:
k =1
Wtedy klauzula jest postaci:
A ← B1 ,K, Bm
Klauzulę tej postaci nazywamy klauzula definitywną.
W szczególności m = 0 .
Wtedy po prawej stronie otrzymujemy pustą koniunkcję (brak przesłanek).
Pusta koniunkcja jest zawsze prawdziwa.
Zatem w tym przypadku klauzula jest postaci:
A ← Prawda
Klauzulę taką nazywamy jednostkową.
k = 0, m > 0 .
Wtedy po prawej stronie otrzymujemy pustą alternatywę (brak wniosków).
Pusta alternatywa jest zawsze fałszywa.
Zatem w tym przypadku klauzula jest postaci:
Fałsz ← B1 ,K , Bm
Klauzulę taką nazywamy negatywną.
k = 0, m = 0 .
Wtedy zarówno koniunkcja jak i alternatywa są puste.
Mamy następującą sytuację :
Fałsz ← Prawda
Zatem w tym przypadku klauzula jest fałszywa.
Nazywamy ja klauzulą pustą i oznaczamy Program w języku logiki.
Programem w języku logiki nazywamy zbiór klauzul postaci:
A ← B1 ,K , Bn ,
nagłówek
n≥0
treść, ciało
Dla n > 0 klauzulę definitywną nazywamy regułą.
Dla n = 0 klauzula definitywna jest klauzula jednostkową i nazywamy ją faktem.
Nieformalne znaczenie klauzuli definitywnej (reguły): dla każdego wartościowania
zmiennych, jeżeli Bi , i = 1,2,K, m są prawdziwe, to A jest prawdziwe.
Nieformalne znaczenie klauzuli jednostkowej (faktu): A jest prawdziwe dla każdego
wartościowania zmiennych.
Interpretacja klauzul programu w języku logiki:
A ← B1 ,K , Bm ,
n≥0
a) deklaratywna (opisowa): A jest prawdziwe, jeśli B1 ,K, Bm są prawdziwe,
b) proceduralna (operacyjna): aby rozwiązać A rozwiąż B1 ,K, Bm .
Zbiór wszystkich klauzul programu P w języku logiki, w których nagłówku występuje P / n
(predykat P o n argumentach) tworzy definicję predykatu (relacji, związku, własności)
P / n . W istocie program P w języku logiki jest zbiorem definicji predykatów.
Program P w języku logiki jest opisem obiektów koniecznych do rozwiązania danego
zagadnienia oraz związków jakie zachodzą pomiędzy tymi obiektami.
Program P w języku logiki jednoznacznie określa język pierwszego rzędu LP .
Zadanie do rozwiązania przedstawione jest w postaci tzw. celu (ang. goal), zapytania.
Zapytanie jest klauzulą negatywna N, taką że N ∈ LP .
Wykonanie programu polega na udowodnieniu, że podany cel wynika logicznie ze zbioru
formuł tworzących program P.
W praktyce wykazujemy, że zbiór formuł P ∪ {N } nie jest spełniany, co w programowaniu w
logice sprowadza się do sprawdzenia, czy ze zbioru formuł P ∪ {N } można wyprowadzić
klauzulę pustą stosując regułę rezolucji liniowej (odpowiadającej stosowaniu bardziej
klasycznych: reguły odrywania i reguły podstawiania).
Cel N ma postać:
← B1 ,K , Bm ,
czyli
∀(B1 ∧ K ∧ Bm → Falsz ) .
Stąd na podstawie prawa KRZ: ( p → Falsz ) → ¬p mamy :
∀(¬(B1 ∧ K ∧ Bm )) ,
co jest równoważne
¬∃(B1 ∧ K ∧ Bm ) .
Jeżeli wykażemy, ze zbiór P ∪ {N } nie jest spełnialny, to ze znanego faktu z logiki
otrzymujemy, że formuła ¬N wynika logicznie ze zbioru formuł tworzących program P.
¬N ⇔ ¬¬∃(B1 ∧ K ∧ Bm ) ⇔ ∃x1 K ∃x k (B1 ∧ K ∧ Bm ) ,
gdzie x1 ,K, x k są zmiennymi występującymi w N. Tym samym znajdziemy obiekty
spełniające cel N.
REGUŁA REZOLUCJI ZDANIOWEJ
{L1 , L2 ,K, Lm , p}
{L1′, L2′ ,K, Ln′ , ¬p}
{L1 , L2 ,K, Lm , L1′, L2′ ,K, Ln′ }
, n, m ≥ 0 .
FAKT
Reguła rezolucji zdaniowej jest logiczną regułą wnioskowania, tzn. wniosek reguły rezolucji
zdaniowej wynika ze zbioru przesłanek tej reguły.
REZOLUCJA LINIOWA.
Niech P będzie programem definitywnym.
Reguła rezolucji liniowej ma postać:
← A1 , K , Am , K , An
B ← B1 , K , Bk
____________________________________
← ( A1 , K , Am −1 , B1 , K , Bk , Am +1 , K , An )σ
– cel G
– wariant klauzuli C programu P
– nowy cel
gdzie σ jest MGU zbioru { Am , B} , tzn. Amσ = Bσ .
Uzasadnienie:
G: ¬( A1 ∧ K ∧ Am ∧ K ∧ An ) ⇔ ¬A1 ∨ K ∨ ¬Am ∨ K ∨ ¬An
C: B ∨ ¬B1 ∨ K ∨ ¬B k
σ : Bσ = Amσ
G σ : ¬A1σ ∨ K ∨ ¬Amσ ∨ K ∨ ¬Anσ
C σ : Bσ ∨ ¬B1σ ∨ K ∨ ¬B k σ
___________________________________rezolucja zdaniowa_
¬A1σ ∨ K ∨ ¬Am −1σ ∨ ¬B1σ ∨ K ∨ ¬B k σ ∨ ¬Am +1σ ∨ K ∨ ¬An σ
c
¬( A1 ∧ K ∧ Am −1 ∧ B1 ∧ K ∧ B k ∧ Am +1 ∧ K ∧ An )σ