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 )σ