Sunteți pe pagina 1din 24

Curs 7

P ROLOG s i Logica Predicatelor de Ordinul I


Partea I

Programare logica

Obsevatii preliminare

P ROLOG = limbaj de programare logica


Conceput initial ca un interpretor de limbaj natural
Limbaj util pentru construirea de demonstratoare automate
de teoreme, bazat pe principiul rezolutiei.
Pentru a putea folosi P ROLOG, toate cunostintele (axiome

s i teoreme) trebuie exprimate n forma clauzala.

Scopul acestui curs este se clarifice:


1
2

3
4

Care este forma clauzala a cunostintelor.


Cum putem aduce o formula oarecare n o forma clauzala

echivalenta.
Care sunt formele clauzale permise n P ROLOG.
Ce este principiul rezolutiei.

Programare logica

Observatii preliminare
Traducerea cunostintelor din limbaj natural n limbaj artificial

Formalizare = transformarea cunostintelor imprecise din


limbaj natural n cunostinte precise scrise n un limbaj
artificial, de exemplu n limbajul logicii de ordinul I.
Limbajul logicii de ordinul nti = limbajul artificial cel mai
studiat.
ator

B Aseman
cu limbajul natural traducere usoara a
cunostintelor din limbaj natural n formule din limbajul logicii
de ordinul I.

Toate formulele din limbajul logicii de ordinul I pot fi


transformate n forme clauzale echivalente.
Clauzele Horn sunt forme clauzale speciale.
Doar clauzele Horn pot fi folosite n programarea logica
cu P ROLOG.

Programare logica

Formalizarea cunostintelor n forma clauzala

Limbaj
natural

formalizare

Limbajul
logicii de
ordinul I

transformari logice

Forme
clauzale

Clauze
Horn
programare n P ROLOG

Programare logica

Limbajul logicii de ordinul I


Termeni. Exemple

Obiectele sunt descrise ca termeni. Un termen poate fi


1

o constanta (daca nu ne intereseaza structura lui),

variabila (daca este un obiect necunoscut)

o expresie de forma f (t1 , . . . , tn ) unde f este simbol


functional cu aritatea n iar t1 , . . . , tn sunt alti termeni.

Exemple de obiecte descrise ca termeni


Masina Dacia de culoare rosie: masina(dacia, rosie)
constante: dacia, rosie
simbol functional cu aritatea 2: masina
Expresia aritmetica sin(x) + f (y , 1)
constante: 1
simboluri functionale: sin cu aritatea 1; f cu aritatea 2.
variabile: x, y
Programare logica

Limbajul logicii de ordinul I


Expresii atomice. Exemple

O expresie atomica (sau atom) se refera la o relatie elementara


ntre termeni. Expresiile atomice sunt de forma
predicat(t1 , t2 , . . . , tn )
unde predicat este un simbol predicativ cu aritatea n, iar
t1 , t2 , . . . , tn sunt termeni.
Exemple de atomi
Ion este posesorul Daciei de culoare rosie:
posesor (ion, masina(dacie, rosie))
Cel mai mare numar natural este 7: nr _maxim(natural, 7)
simbol predicativ binar: nr _maxim
termeni: natural, 7.

O BSERVATIE : Atomii pot exprima s i cunostinte false.


Programare logica

Limbajul logicii de ordinul I


Formule. Exemple

O formula este fie un atom, sau

Una din urmatoarele


combinatii logice de formule F1 s i F2 :
F1 , F1 F2 , F1 F2 , F1 F2 , F1 F2

O formula cuantificata universal: (x)F


(F are loc pentru toti x)
O formula cuantificata existential: (x)F
(Exista x pentru care F are loc)
Exemple de formule
Cineva este mai puternic dect toti oamenii din lume:
(x)om(x) (y )(om(y ) mai_puternic(x, y )).
x este egal x + 1: (x)(egal(x, plus(x, 1))).
Orice numar

Oricine este inteligent s i harnic va reusi n viata.


(x)(inteligent(x) harnic(x) reuseste(x)).
Programare logica

Limbajul logicii de ordinul I


Variatii de reprezentare a termenilor s i atomilor

Variatii de reprezentare a termenilor


prefix: +(x, y ) n loc de x + y , list(h, t)
infix: x + y , 47/225
mixt: [H | T ] n loc de list(h, t)
Aceleasi variatii de reprezentare pot fi folosite s i pentru atomi:
prefix: = (x, y ) n loc de x = y
infix: x = y , x < y ,
mixt: if x then y else z n loc de if(x, y , z)

Programare logica

Formalizarea n limbajul logicii de ordinul I


Exemple

rational este un numar


real. Exista un numar
prim.
Orice numar
x exista un numar
y astfel nct x < y .
Pentru fiecare numar
B O formalizare a acestor cunostinte in limbajul logicii de ordinul I
este multimea de formule
(x)(rational(x) real(x))
(x)prim(x)
(x)(y )mai_mic(x, y )
Nimeni nu este nemuritor. Orice sportiv este puternic. Exista un
au
s.
sportiv bat
B O formalizare a acestor cunostinte n limbajul logicii de ordinul I
este multimea de formule
(x)nemuritor (x)
(x)(sportiv (x) puternic(x))
(x)(sportiv (x) bataus(x))

Programare logica

Formule logic echivalente


Notiuni preliminare

fvar (F ) =multimea variabilelor care apar necuantificate n


formula F .
Daca x fvar (F ) s i t este un termen, atunci F [x 7 t] este
formula care se obtine nlocuind toate aparitiile necuantificate
ale variabilei x n F cu termenul t.
Exemplu
Daca F este formula f (x, y , x) < x (x)(t)(f (x, y , t) < a) atunci
fvar (F ) = {x, y } s i F [x 7 z] este formula
f (z, y , z) < z (x)(t)(f (x, y , t) < a).
Un variant al unei formule F este orice formula care se obtine din F
prin o secventa de nlocuiri de subformule, astfel:
(x)G se nlocuieste cu (y )(G[x 7 y ]) unde y este o variabila
care nu apare n fvar (G)
(x)G se nlocuieste cu (y )(G[x 7 y ]) unde y este o variabila
care nu apare n fvar (G)
Programare logica

Formule logic echivalente


Varianti

Exemplu
(x)(y )((x < y ) (sin(x) < sin(y )) este un variant al formulei
(z)(t)((z < t) (sin(z) < sin(t))
Doua formule F s i G sunt logic echivalente s i scriem
F G daca au acelasi nteles n orice interpretare.
Daca G este un variant al lui F atunci F G.
B Intuitiv, acest lucru nseamna ca interpretarea unei formule
nu depinde de numele alese pentru variabile.

Programare logica

Forme clauzele
Un literal este fie un atom sau negatia unui atom.
O forma prenex este o formula de forma
(Q1 x1 )(Q2 x2 ) (Qn xn )F
a
unde fiecare Qi este sau , iar F este o formula far
cuantificatori.
O forma clauzala este o formula din limbajul logicii
predicatelor de ordinul I, de forma
(x1 ) . . . (xn ).(L1 L2 . . . Lm )
unde fiecare subformula Li este un literal.
Exemple de forme clauzale
(x)(sportiv (x) puternic(x))
(x)(y )(sportiv (x) puternic(y ) frate(x, y ))
parinte(dan, ion) parinte(ion, dan).
Programare logica

Reguli de transformare n forma clauzala


Orice formula F din limbajul logicii predicatelor de ordinul I
poate fi redusa ntr-o conjunctie de forme clauzale echivalente.
Transformarea lui F n forma clauzala se face n 4 pasi:
1

Se aplica repetat un set de reguli care transforma F n o


forma prenex logic echivalenta de forma (Q1 x1 ) . . . (Qp xp )G
unde G contine doar operatorii logici , s i .
Se elimina cuantificatorii existentiali din forma prenex
obtinuta n pasul 1 s i se obtine o formula logic echivalenta
de forma (x1 ) . . . (xn )G
Se aplica repetat un set de reguli care transforma G n o
formula logic echivalenta de forma
m
(L11 . . . L1n1 ) . . . (Lm
1 . . . Lnm )
|
{z
}
|
{z
}
Cm

C1

numita forma normala conjunctiva (CNF) a lui G.


F este echivalenta cu conjunctia de forme clauzale
(x1 ) (xn )C1 . . . (x1 ) (xn )Cm
Programare logica

Reguli de transformare n forma clauzala


Observatii

n general, urmatoarele
formule sunt logic echivalente:
(x)(P Q) ((x)P) ((x)Q)
(x)(P Q) ((x)P) ((x)Q)

n general, urmatoarele
formule nu sunt logic echivalente:
(x)(P Q) 6 ((x)P) ((x)Q)
(x)(P Q) 6 ((x)P) ((x)Q)

Exemple
(x)(x = 0 x 6= 0) 6 ((x)(x = 0)) ((x)(x 6= 0))
|
{z
}
{z
}
|
{z
}
|
true

false

false

(x)(x = 0 x 6= 0) 6 ((x)(x = 0)) ((x)(x 6= 0))


|
{z
}
|
{z
}
{z
}
|
false

true

Programare logica

true

1. Transformarea n forma prenex


Orice formula este echivalenta logic cu o forma prenex.

Se aplica top-down transformarile


urmatoare:
. Se elimina implicatiile s i disjunctiile:
F G F G
F G (F G) (G F ).

. Se propaga negatiile:
F F
F F
(F G) F G
(F G) F G

. Se grupeaza disjunctiile sub acelasi cuantificator


(Qx)F G (Qy )(F [x 7 y ] G) unde y 6 fvar (F ) fvar (G)
F (Qx)G (Qy )(F G[x 7 y ]) unde y 6 fvar (F ) fvar (G)

. Se grupeaza conjunctiile sub acelasi cuantificator


(Qx)F G (Qy )((F [x 7 y ]) G) unde y 6 fvar (F ) fvar (G)
F (Qx)G (Qy )(F (G[x 7 y ])) unde y 6 fvar (F ) fvar (G)

Programare logica

1. Transformarea n forma prenex


Exemplu
(x)p(x, y ) (z)(y )q(x, y , z)
{z
}
|
{z
}
|
F

(x)p(x, y ) (z)(y )q(x, y , z)

(x) p(x, y ) (z)(y )q(x, y , z)


| {z } |
{z
}
F

(u)(p(u, y ) (z) (y )q(x, y , z))


| {z }
|
{z
}
F

(u)(t)(p(u, y ) (y ) q(x, y , t))


| {z }
| {z }
F

(u)(t)(w)(p(u, y ) q(x, w, t))


Programare logica

2. Eliminarea cuantificatorilor existentiali


Forma Skolem standard

Forma Skolem standard sau forma standard a unei forme prenex


F Q1 x1 .Q2 x2 . .Qn xn .G este formula FH care se obtine prin
eliminarea repetata a cuantificatorilor existentiali, de la stnga la
dreapta, s i introducerea de constante s i simboluri functionale noi,
astfel:
. Fie Qk primul cuantificator existential care apare de la stnga la
dreapta n F :
F x1 . xk 1 .xk . Qk +1 xk +1 . .Qn xn .F .
{z
}
|
G

. Se produce transformarea
F x1 . xk 1 .G[xk 7 f (x1 , . . . , xk 1 )]
unde f este un simbol nou introdus n limbaj:

daca k = 1 atunci f este o constanta nou introdusa.


altfel, f este un simbol functional nou cu aritatea k 1.
Programare logica

2. Eliminarea cuantificatorilor existentiali


Forma Skolem standard

F x.y .z.u.v .w.p(x, y , z, u, v , w).


. Prima eliminare:
x.y .z.u.v .w.p(x, y , z, u, v , w) y .z.u.v .w.p(a, y , z, u, v , w)

unde a este o constanta noua.


. A doua eliminare:
y .z.u.v .w.p(a, y , z, u, v , w) y .z.v .w.p(a, y , z, f (y , z), v , w)

unde f /2 este un simbol functional nou.


. A treia eliminare:
y .z.v .w.p(a, y , z, f (y , z), v , w) y .z.v .p(a, y , z, f (y , z), v , g(y , z, v ))

. Toti au fost eliminati, deci forma Skolem a lui F este


FH y .z.v .p(a, y , z, f (y , z), v , g(y , z, v )).
Programare logica

3. Calculul formei normale conjunctive


Fie o formula cu forma Skolem standard: F (x1 ) (xn )G

Se aplica repetat transformarile


urmatoare
asupra lui G:
negatiile duble: G1 G1
Eliminam
Distribuim disjunctiile:
G1 (G2 G3 ) (G1 G2 ) (G1 G3 )
(G1 G2 ) G3 (G1 G3 ) (G2 G3 )
negatiile n interiorul parantezelor:
Propagam
(G1 G2 ) G1 G2
(G1 G2 ) G1 G2
m
G devine (L11 . . . L1n1 ) . . . (Lm
1 . . . Lnm )
|
{z
}
|
{z
}
C1

Cm

unde fiecare Ci este o disjunctie de literali


F devine conjunctie de m forme clauzale
F (x1 ) (xn )C1 . . . (x1 ) (xn )Cm
|
{z
}
|
{z
}
forma clauzala

forma clauzala

Programare logica

Forme clauzale
Reprezentare simplificata

Reprezentarea simplificata a unei forme clauzale


(x1 ) (xn )(L1 . . . Lm )
este secventa de literali
L01 , . . . , L0n .
n care toate variabilele se scriu ncepnd cu litera mare:
L0i = Li [x1 7 X1 ] . . . [xn 7 Xn ]
Implicit, se presupune ca toate simbolurile ce ncep cu litera mare
sunt cuantificate universal.
Exemplu
Forma clauzala
(x)(y )(z)(bunic(x, y ) tata(x, z) mama(z, y ))

are reprezentarea simplificata


bunic(X , Y ), tata(X , Z ), mama(Z , Y ).
Programare logica

Clauze Horn
Clauza Horn = forma clauzala ce contine un singur atom
B toti ceilalti literali sunt negatii de atomi.
Doar clauzele Horn se pot rescrie ca reguli si
fapte n
P ROLOG.
n general, o clauza Horn
A1 , . . . , Ai1 , Ai , Ai+1 , . . . , Am .
se poate rescrie ca
Ai :- A1 , . . . , Ai1 , Ai+1 , . . . , Am .
Exemplu
Forma clauzala cu reprezentarea simplificata
bunic(X , Y ), tata(X , Z ), mama(Z , Y ).
este clauza Horn care se poate scrie astfel:
bunic(X , Y ):-tata(X , Z ), mama(Z , Y ).
Programare logica

De la limbaj natural la programe P ROLOG


Exemplu
rational este un numar
real. Exista un numar
prim. Pentru fiecare numar
x
Orice numar
y astfel nct x < y . Numarul

exista un numar
1 nu este prim.
Formalizarea textului produce 4 formule n logica predicatelor de ordinul I:
(x)(rational(x) real(x)).
(x)prim(x).
(x)(y )mai_mic(x, y ).
prim(1).
Eliminarea implicatiei transforma prima formula n
(x)(rational(x) real(x)).
Formele Skolem standard ale celor 4 formule sunt
(x)(rational(x) real(x)).
prim(a).
(x)(mai_mic(x, mai_mare(x)).
prim(1).
Primele 3 formule sunt clauze Horn pot fi scrise n P ROLOG:
real(X):-rational(X).
prim(a).
mai_mic(mai_mare(X)).
Ultima formula nu este clauza Horn nu poate fi scrisa n P ROLOG.
Programare logica

P ROLOG

Programe s i ntrebari

Program: conjunctie de clauze Horn


A:- B1 , . . . , Bn .
unde A, B1 , . . . , Bn sunt atomi. Daca n = 0 avem o
iar daca n > 0 avem o regula.

fapta,
A este antetul sau capul regulii (sau faptei)
respective.
B1 , . . . , Bn este corpul regulii respective. Daca
a corp. Corpul unei fapte
n = 0 avem fapta far
este implicit atomul true.
ntrebare: conjunctie de atomi scrisa sub forma
?- A1 , . . . , Ap .
unde A1 , . . . , Ap sunt atomi.
Programare logica

Referinte bibliografice

B Capitolele 3-4 din


Chin-Liang Chang, Richard Char-Tung Lee. Symbolic Logic
and Mechanical Theorem Proving.
Computer Science Classics. Academic Press, 1973.

B Capitolul 3: Limbajul Prolog s i logica cu predicate de


ordinul I din
A.M. Florea, B. Dorohonceanu, C. Frncu. Programare n

Prolog pentru Inteligenta Artificiala.


Universitatea Politehnica Bucuresti, 1997.

Programare logica

S-ar putea să vă placă și