Elementy programowania w logice
Transkrypt
Elementy programowania w logice
2017 © Adam Meissner Instytut Automatyki i Inżynierii Informatycznej Politechniki Poznańskiej Adam Meissner [email protected] http://www.man.poznan.pl/~ameis STUCZNA INTELIGENCJA Elementy programowania w logice Literatura [1] Clocksin W.F, Mellish C.S., Prolog. Programo-wanie, Wyd. Helion, Gliwice, 2003. [2] Bartoszek J., Cybulka J., Programowanie deklaratywne, Wydawnictwo PP, 1999. [3] Brzykcy G., Meissner A., Programowanie w Prologu i programowanie funkcyjne, Wyd. PP, 1999. [4] Nilsson U., Małuszyński J., Logic, Programming and Prolog (2ed), John Wiley & Sons Ltd, 1995. [5] Sterling L., Shapiro E., The Art of Prolog, The MIT Press, 1999. [6] Wójcik M.: Zasada rezolucji; teoria, praktyka, kierunki rozwoju; raport IPI PAN 662, czerwiec 1989. 1 2017 © Adam Meissner Wprowadzenie programowanie w logice stanowi szczególny przypadek programowania deklaratywnego program jest opisem rozpatrywanego problemu, a nie opisem jego rozwiązania program ma postać skończonego zbioru klauzul, będących odpowiednimi formułami logiki pierwszego rzędu najpopularniejszym językiem programowania w logice jest Prolog przykładowe obszary zastosowań progr. w logice dedukcyjne bazy danych, systemy eksperckie transformowanie programów analiza języka naturalnego zalety programowania w logice stosunkowa łatwość weryfikowania intuicyjnej i formalnej poprawności programu zwolnienie (częściowe) programisty z obowiązku znalezienia rozwiązania problemu możliwość programowania na wysokim poziomie ogólności – „zwięzłość” programu i krótki czas implementowania wady programowania w logice dość mała efektywność wykonywania programu pewna niekonwencjonalność stylu programowania. 2 2017 © Adam Meissner Reguła rezolucji Def. (literał, literał pozytywny, literał negatywny) Literałem nazywa się formułę atomową lub formułę atomową z negacją. Formuła atomowa jest literałem pozytywnym, a formuła atomowa z negacją jest literałem negatywnym. Dowolne literały postaci A oraz stanowią parę literałów komplementarnych. Def. (klauzula) Klauzulą nazywa się dowolną formułę, przyjmującą jedną z wymienionych postaci: 1. ( x1) ... ( xm) L1 … Ln dla n > 1, 2. ( x1) ... ( xm) L1 3. Formuła pusta (tzw. klauzula pusta, oznaczana symbolem ) przy założeniu, że L1, …, Ln dla n > 1 są dowolnymi literałami, nie zawierającymi żadnych zmiennych oprócz x1, …, xm dla m 1. Przyjmuje się, że kwantyfikatory w zapisie klauzuli mogą być pominięte. Def. (reguła rezolucji, rezolwenta, literał aktywny) Niech A B1 … Bm oraz A C1 … Cn będą dowolnymi klauzulami, gdzie A jest formułą atomową a B1, …, Bm i C1, …, Cn to dowolne literały. Regułę wnioskowania postaci A B1 … Bm, A C1 … Cn B1 … Bm C1 … Cn nazywa się regułą rezolucji. Formuła B1 … Bm C1 … Cn nosi nazwę rezolwenty a literały A oraz A noszą nazwę literałów aktywnych. 3 2017 © Adam Meissner Unifikacja Def. (przypisanie) Przypisaniem nazywa się parę x/t, gdzie x jest zmienną, zaś t jest dowolnym termem, który stanowi wartość przypisaną zmiennej x. Def. (podstawienie) Podstawieniem nazywa się skończony zbiór przypisań = {x1/t1, ..., xn/tn}, w którym wszystkie zmienne x1, ..., xn są różne i żadna zmienna xi (i = 1,…, n) nie występuje w żadnym termie tj (j = 1,…, n). W szczególnym przypadku podstawienie może być zbiorem pustym, co oznacza się za pomocą symbolu . Def. (wyrażenie) Wyrażeniem nazywa się formułę lub term. Def. (wynik zastosowania podstawienia) Niech W będzie dowolnym wyrażeniem a podstawieniem postaci = {x1/t1, ..., xn/tn}. Wynikiem zastosowania podstawienia do wyrażenia W (ozn. W) nazywa się wyrażenie W = W powstające przez zastąpienie w wyrażeniu W wszystkich wystąpień każdej zmiennej xi takiej, że xi/ti przez term ti. Def. (złożenie podstawień) Niech = {x1/t1, ..., xn/tn} i = {y1/s1, ..., ym/sm} będą podstawieniami. Podstawienie nazywane złożeniem podstawień i (ozn. =), uzyskuje się ze zbioru {x1/t1, ..., xn/tn, y1/s1, ..., ym/sm} poprzez usunięcie wszystkich przypisań xi/ti, takich że xi ti oraz wszystkich przypisań yj/sj, takich że yj {x1, ..., xn}. 4 2017 © Adam Meissner Def. (ogólność podstawienia) Podstawienie jest tak samo lub bardziej ogólne niż podstawienie , jeżeli istnieje takie podstawienie , że =. Def. (unifikator, najogólniejszy unifikator) Podstawienie nazywa się unifikatorem wyrażeń U i W, jeżeli W = U. Podstawienie nazywa się najogólniejszym unifikatorem wyrażeń U i W, jeżeli dla każdego podstawienia będącego unifikatorem U i W istnieje takie podstawienie , że =. Przykład 1 oznaczenia: p – symbol predykatowy; a, b, c – stałe; r, v, w, x, y, z – zmienne; f, g – symbole funkcyjne; – W = p(x, x, y, z), – = { x/a, y/g(b), z/v }, – W = p(a, a, g(b), v), – = { x/f(y,v), r/z }, = { x/a, y/b, v/c, w/c, z/r }, – = { x/f(b,c), y/b, v/c, w/c, z/r}. Unifikatorami zbioru wyrażeń { p(a, x, y), p(z, b, y) } są np. podstawienia { x/b, y/c, z/a } lub { x/b, y/d, z/a }. Najogólniejszym unifikatorem tego zbioru jest podstawienie {x/b, z/a}. 5 2017 © Adam Meissner Strategie wnioskowania rezolucyjnego Def. (rezolucja liniowa) Rezolucja liniowa jest to strategia wnioskowania za pomocą reguły rezolucji, w której każdą, kolejną parę przesłanek tworzą następujące dwa elementy: (1) w pierwszym kroku - negacja hipotezy, w każdym kolejnym kroku - rezolwenta uzyskana w kroku poprzednim, (2) dowolny aksjomat, negacja hipotezy lub dowolna rezolwenta skonstruowana wcześniej. Przykład 2 (zastosowanie rezolucji liniowej) teoria : {A1 A2 , A1 A2 } hipoteza: A1 A1 A1 A2 A2 A1 A2 A1 A1 Def. (rezolucja źródłowa) Rezolucja źródłowa jest to strategia wnioskowania za pomocą reguły rezolucji, w której każdą, kolejną parę przesłanek tworzą następujące dwa elementy: (1) w pierwszym kroku - negacja hipotezy, w każdym kolejnym kroku - rezolwenta uzyskana w kroku poprzednim, (2) dowolny aksjomat. 6 2017 © Adam Meissner Przykład 3 (niepełność rezolucji źródłowej) teoria : T = {A1 A2 , A1 A2 } hipoteza: A1 A1 A2 A1 A2 A1 A1 A2 A1 A2 A2 A1 A2 A1 A1 Hipotezy A1 , dowodliwej w teorii T, nie można udowodnić za pomocą rezolucji źródłowej (tj. uzyskać klauzuli pustej) bez względu na sposób konstruowania wywodu (czyli kolejność wyboru przesłanek). Rezolucja źródłowa dla klauzul horna Def. (klauzula Horna) Klauzula Horna jest to dowolna klauzula, zawierająca co najwyżej jeden literał pozytywny. Def. (implikacyjna postać klauzuli Horna) Dowolną klauzulę Horna A A1 … Am, gdzie A oraz A1, …, Am są formułami atomowymi, można zapisać w postaci A A1 … Am lub równoważnie ( x1) ... ( xn) (A ( y1) ... ( yp) A1 … Am) gdzie x1, …, xn to wszystkie zmienne występujące w formule A a y1, …, yp są wszystkimi zmiennymi, które występują wyłącznie w formule A1 … Am. 7 2017 © Adam Meissner Def. (SLD-rezolucja) Rezolucja źródłowa w zbiorze klauzul Horna z określoną strategią wyboru literału aktywnego nosi nazwę SLD-rezolucji [4] (ang. Linear resolution with Selection function for Definite clauses). Def. (nagłówek klauzuli, ciało klauzuli) Niech A A1 … Am będzie klauzulą Horna w postaci implikacyjnej. Formułę atomową A nazywa się nagłówkiem klauzuli, a koniunkcję atomów A1 … Am określa się mianem ciała klauzuli. Def. (fakt, reguła, klauzula pusta) W szczególnym przypadku ciało klauzuli może być formułą pustą; A klauzule takie nazywa się faktami. Dla rozróżnienia, klauzule o niepustych ciałach określa się mianem reguł. Klauzula o pustym ciele i pustym nagłówku reprezentuje klauzulę pustą, którą oznacza się symbolem . Def. (program w logice) Program w logice jest skończonym zbiorem faktów lub reguł. Def. (definicja predykatu w programie) Definicją predykatu o nazwie r i arności n (co oznacza się jako r/n) w programie P jest zbiór wszystkich klauzul z programu P, których nagłówki zawierają predykat r/n Def. (zapytanie, cel) Celem nazywa się klauzulę o pustym nagłówku A1 … Am Formuła A1 … Am nosi nazwę zapytania, a wchodzące w jej skład literały to podcele. 8 2017 © Adam Meissner Przykład 4 Poniższy, przykładowy program w logice opisuje relacje rodzinne w pewnym zbiorze osób. ojciec(x, y) rodzic(x, y) mężczyzna(x) męski_potomek(x, y) rodzic(y, x) mężczyzna(x) męski_potomek(x, y) rodzic(y, z) męski_potomek(x, z) rodzic(adam, piotr) rodzic(ewa, piotr) rodzic(anna, wanda) rodzic(jan, wanda) rodzic(piotr, maria) rodzic(piotr, roman) rodzic(wanda, maria) rodzic(wanda, roman) mężczyzna(adam) mężczyzna(piotr) mężczyzna(jan) mężczyzna(roman) Przykłady zapytań do programu: ● męski_potomek(x, adam) - kto jest męskim potomkiem Adama? ● rodzic(wanda, x) - czyim rodzicem jest Wanda? Def. (odpowiedź) Niech B będzie dowolnym celem. Odpowiedzią dla zapytania B i programu P nazywa się najogólniejsze podstawienie , takie że P ()B. 9 2017 © Adam Meissner Def. (reguła SLD-rezolucji) Niech A1 ... Ai ... Am będzie dowolnym celem; niech będzie dany program, do którego należą klauzule A A1 ... An oraz A . Ponadto zakłada się, że istnieje podstawienie będące najogólniejszym unifikatorem atomów A i Ai. Regułę SLD-rezolucji określa się następująco (w dwóch wariantach) A1 ... Ai ... Am, A A1 ... An (A1 ... Ai – 1 A1 ... An Ai + 1 ... Am) A1 ... Ai ... Am, A (A1 ... Ai – 1 Ai + 1 ... Am) Def. (wywód SLD-rezolucyjny) Niech Bi oznacza dowolną koniunkcję literałów pozytywnych, a i niech będzie podstawieniem. Wywodem SLD-rezolucyjnym dla celu G i programu P nazywa się (być może nieskończony) ciąg par: (B0, 0), (B1, 1), (B2, 2), ... gdzie B0 = G, 0 = , zaś w stosunku do każdego elementu (Bi + 1, i + 1), gdzie i 0, przyjmuje się założenie, że istnieje klauzula C P i podstawienie takie, że formuła Bi + 1 jest wnioskiem uzyskanym poprzez zastosowanie reguły SLD-rezolucji do wybranego aktywnego literału w Bi i C przy użyciu najogólniejszego unifikatora , zaś i+ 1 jest złożeniem podstawień i, z którego zostały usunięte wszystkie przypisania zmiennych nie występujących w G. 10 2017 © Adam Meissner Def. (dowód SLD-rezolucyjny) Dowodem SLD-rezolucyjnym dla celu G i programu P nazywa się wywód SLD-rezolucyjny dla G i P, którego ostatnim elementem jest para (, ). Def. (odpowiedź obliczona) Odpowiedzią obliczoną dla zapytania B i programu P, nazywa się podstawienie takie, że istnieje dowód SLD-rezolucyjny dla celu B i programu P, którego ostatnim elementem jest para (, ). Przykład 5 W przykładzie przedstawia się dowód SLD-rezolucyjny dla celu męski_potomek(x,adam) i programu z przykładu 4. ( męski_potomek(x,adam), ), ( rodzic(adam,x) mężczyzna(x), ), ( mężczyzna (piotr), {x/piotr}), (, {x/piotr}) Odpowiedzią na postawione zapytanie jest podstawienie {x/piotr} wchodzące w skład ostatniego elementu dowodu. Def. (drzewo wywodów SLD-rezolucyjnych) Drzewem wywodów SLD-rezolucyjnych dla programu P i celu G nazywa się drzewo, którego wierzchołkami są elementy wywodów dla P i G. Korzeniem drzewa jest para (G, ). Niech V będzie dowolnym wierzchołkiem drzewa, zawierającym rezolwentę z jednym, wybranym literałem aktywnym. Wierzchołek V przylega do wierzchołka V wtedy i tylko wtedy, gdy istnieje wywód dla P i G, w którym V i V występują jako kolejne elementy. 11 2017 © Adam Meissner Przykład 6 Fragment (tj. niektóre gałęzie) drzewa wywodów dla celu męski_potomek(x,adam) i programu z przykładu 4; skróty: p – męski_potomek, m – mężczyzna, r – rodzic, ad – adam, ma – maria, pi – piotr, ro – roman. ( p(x,ad), ) ( r(ad,x) m(x), ) ( r(ad,z) p(x,z), ) ( m(pi), {x/pi}) ( p(x,pi), ) (, {x/pi}) sukces ( r(pi,x) m(x), ) (m(ro), {x/ro}) (, {x/ro}) sukces Reprezentacja klauzul w Prologu reguła meski_potomek(X, Y) rodzic(Y, X), mezczyzna(X) fakt mezczyzna(adam) cel meski_potomek(X, Y) 12 ( m(ma), {x/ma}) porażka 2017 © Adam Meissner Przykład 7 program stypendysta(X):student(X), bardzo_dobry(X). bardzo_dobry(X):srednia(X,S), S >= 4.0. student(adam). student(jan). srednia(jan,4.3). srednia(adam,3.9). cel :- stypendysta(X). drzewo wywodów (:- stypendysta(X)., ) (:- student(X), bardzo_dobry(X)., ) (:- bardzo_dobry(adam)., {X/adam}) (:- bardzo_dobry(jan)., {X/jan}) (:- srednia(adam,S)., S>=4.0., {X/adam}) (:- srednia(jan,S)., S>=4.0., {X/jan}) (:- 3.9 >= 4.0., {X/adam}) porażka (:- 4.3 >= 4.0., {X/jan}) (, {X/jan}) sukces odpowiedź = { X/jan} 13