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  A1
 ...  An 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  A1  ...  An
 (A1  ...  Ai – 1  A1  ...  An  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