Documente Academic
Documente Profesional
Documente Cultură
2017 / 2018
V. Negru
Universitatea de Vest din Timişoara
Departamentul de Informatică
e-mail: vnegru@info.uvt.ro
Prolog
• pattern matching
• backtracking automat
Bibliografie
3 Bibliografie
• http://web.info.uvt.ro/˜ cizbasa/prolog/
Introducere
3 Lisp, Prolog
• două semantici
3 Prolog
• nedeterminism
Introducere
Maria → maria
Termeni
are(maria,carte)
3 Definiţie termeni:
3) dacă f este o funcţie de aritate n şi t1, t2, ..., tn sunt termeni
atunci f (t1, t2, ..., tn) este termen (termen construit).
Clauze
3 Clauze
• aserţiuni / fapte
• reguli
• goal
Clauze
ceea ce ı̂nseamnă:
c1 ∧ c2 ∧ ... ∧ cn ⇒ a1 ∧ a2 ∧ ... ∧ am
• clauză Horn
ceea ce ı̂nseamnă:
c1 ∧ c2 ∧ ... ∧ cn ⇒ c
Fapte
Ex. are(maria,carte).
Reguli
c :- c1, c2.
sau
sau
Reguli
c :- c1; c2.
c :- c1.
c :- c2.
c :- c1, c2.
• goals
Exemplu
domains
nume=symbol
obiect=simbol
predicates
are(nume, obiect)
clauses
are(maria, carte).
are(maria, caiet).
are(nicu, stilou).
goal
are(maria, carte)
yes
are(maria, stilou)
no
Mecanismul de unificare
1) xi este o variabilă
2) ti este un termen
3) xi ̸= xj pentru toţi i ̸= j
T −→ TS
Unificare
• Instanţă
În general este posibil ca nici unul să fie instanţă a celuilalt
• Instanţă comună
Unificare
• Termeni unificabili
Doi termeni sunt unificabili dacă au una sau mai multe instanţe
comune
• Exemplu
X = carte
X = caiet
∃x are(maria, x)
∧
∃x are(maria, x) ∃y are(nicu, y)
∧
sau ∃x ∃y (are(maria, x) are(nicu, y))
Algoritmul de ştergere
- fie S substituţia
- reluăm cu succes
Algoritmul de ştergere
• alegere:
- retur ı̂napoi
• strategie
Baza de clauze
aduna(0, X, X).
goal
aduna(0, 1, 1)
yes
∀x 0+x=x
Baza de clauze
aduna(0, X, X).
Goal
aduna(0, 1, V).
barbat(ion).
barbat(mihai).
barbat(alin).
barbat(george).
femeie(maria).
femeie(silvia).
femeie(ioana).
tata(ion, mihai).
tata(mihai, alin).
tata(george, maria).
mama(maria, alin).
mama(silvia, mihai).
mama(ioana, maria).
parinte(X, Y) :- tata(X, Y).
parinte(X, Y) :- mama(X, Y).
fiica(X, Y) :- parinte(Y, X), femeie(X).
goal
fiica(X, george)
X = Maria
No
∧
∀x∀y (fiica(x,y) ⇐ parinte(y, x) femeie(x))
3 Reguli de inferenţă
• modus-ponens
∧ ∧ ∧
A1 ,A2 ,...,An ;B⇐A1 A2 ... An
B
• modus-ponens universal
∧ ∧ ∧
A1 (a),A2 (a),...,An (a);B⇐A1 (x) A2 (x) ... An (x)
B(a)
Algoritmul general
- fie U unificatorul
- reluăm cu succes
Arborele de căutare
3 arbore şi/sau
Strategia
3 backtracking cronologic
Recursivitate
goal
stramos(X, Alin)
X = ion
...
Reducerea nedeterminismului
3 Cut (!)
% Exemplu
P :- P1,P2,!,P3.
P.
Tăietura cut
Fie N nodul părinte al nodului ı̂n care apare cut şi NC nodul
ı̂n care subţinta cut este aleasă.
Tăietura cut
Exemple
dif(X, X) :- !, fail.
dif(X, Y).
A nu este deductibil de P
⌉A
A esueaza f init
⌉A
not(P) :- P, !, fail.
not(P).
Liste
• Exemple
[a, b, c],
• Lista vida: []
• functor special .
Head, Tail
3 O listă este fie lista vidă, fie constă din două părţi head şi
tail:
L = [a, b, c]
Tail = [b, c]
L = .(a, Tail)
L = [a | Tail]
Liste
Avem:
2) [Head | Tail]
Operaţii cu liste
• member
% member(El, L)
% El este membru a lui L dacă
% i) El este head-ul lui L
% ii) El este membru ^ın tail a lui L
%
member (El, [El | Rest]).
member (El, [Head | Rest]) :- member (El, Rest).
goal
member(b, [a, b, c])
true
Operaţii cu liste
3 Concatenare liste
goal
conc([a, b], [c, d], [a, b, c, d])
true
conc([a, b], [c, d], [a, b, c, d, e])
false
conc([1, 2], [a, c, c], L)
L=[1, 2, a, b, c]
Operaţii cu liste
goal
conc(_, [X, 4, Y | _], [1, 2, 3, 4, 5, 6])
X = 3 Y = 5
%
member(El, L) :- conc(L1, [El | L2], L).
% variabile anomime
member(El, L) :- conc(_, [El | _], L).
Operaţii cu liste
% adauga element
adaug(X, L, [X | L]).
% sterge element
delete(X, [X | Rest], Rest).
delete(X, [Y | Rest], [Y | Rest1] :-
delete(X, Rest, Rest1).
goal
delete(a, [a, a, b, b, a], L)
L = [a, b, b, a]
L = [a, b, b, a]
L = [a, a, b, b]
% input devine output
delete(1, L, [a, b])
L = [1, a, b]
L = [a, 1, b]
L = [a, b, 1]
Operaţii cu liste
goal
sublist([2, 3], [1, 2, 3])
true
Permutări
%
permutare([], []).
permutare([X | L], P) :- permutare(L, L1),
inserare(X, L1, P).
goal
permutare([1, 2, 3], P
P = [1, 2, 3]
P = [1, 3, 2]
P = [2, 1, 3]
...
Artimetica in Prolog
3 matching (=)
3+2=2+3
No
X is 2 + 3
X=8
Yes
Artimetica in Prolog
X is max(2,4) + 5 * 2
X = 14
Yes
3 comparaţii
3 + 2 =:= 2 + 3
Yes
3 Precedenţă operatori
Operaţii cu liste
%
our-length([], 0).
our-length([_ | Rest], N) :- our-length(Rest, N1),
N is 1 + N1.
% N1 trebuie să fie instanţiat cand
% se evaluează 1 + N1
goal
lenght([1, [2, 3], 4], N)
N = 3
% varianta cu =
length([], 0).
length([_ | Rest], N) :- length(Rest, N1),
N = 1 + N1.
goal
length([1, [2, 3], 4], N)
N = 1 + (1 + (1 + 0))
Operaţii cu liste
% mai simplu
length([], 0).
length([_ | Rest], 1 + N) :- length(Rest, N).
cmmd
cmmd(X, X, X).
cmmd(X, Y, D) :- X < Y,
Y1 is Y - X,
cmmd(X, Y1, D).
ccmd(X, Y, D) :- Y < X,
cmmd(Y, X, D).
cmmd(X, Y, D) :- Y < X,
X1 is X - Y,
cmmd(X1, Y, D).
% ^
ın cazul comparaţiilor se forţează
% evaluarea argumentelor