Parte 1

Transcript

Parte 1
Linguaggi di Programmazione
Prolog (1)
FMZ
Prolog
• Linguaggio:
– basato su una restrizione della logica del primo
ordine
– “dichiarativo”
• Utile per:
– Prototipizzazione radipa (di alcuni problemi)
– Applicazioni di Intelligenza Artificiale basate
sulla logica
FMZ
Processo di dimostrazione
(limiti)
S
F
Una dimostrazione per
F è conseguenza di S
è una sequenza
DIM=P1,P2,…,Pn
dove
• Pn=F
• Pi∈S oppure Pi è ottenibile da Pi1,…,Pim (con i1<i,.., im<i)
applicando una regola di inferenza
FMZ
1
Processo di dimostrazione
(limiti)
S
F
DIM=P1,P2,…,Pn
Come scegliamo:
• Il percorso da fare?
• Quale formule Pi1,…,Pim attivano una regola di
inferenza?
E’ possibile standardizzare il processo?
FMZ
Processo di dimostrazione
(standardizzazione)
Tentativo (In logica proposizionale):
• Ammettiamo formule del tipo:
– A1∧…∧ Am B
(tipo 1)
–B
(tipo 2)
con A1,…,Am,B letterali
FMZ
Processo di dimostrazione
(standardizzazione)
S
F
Per dimostrare:
• In S solo regole di tipo 1 o tipo 2
• Partiamo da F=Pn
• Pi è deducibile se:
– Pi ∈S
– Utilizzando MP e AE,
esiste A1∧…∧ Am Pi e
A1,…, Am sono deducibili
FMZ
2
Legami con la logica del primo
ordine
Clausole di Horn
∀x1,…,xn A1∧…∧ Am B
FMZ
Prolog e la logica del primo
ordine
• Prolog è un linguaggio di programmazione
basato sulle ‘Horn Clauses’
• Le ‘Horn Clauses’ sono un sottoinsieme dei
predicati esprimibili in logica dei predicati
– Esiste un algoritmo per cui la dimostrazione di
un teorema scritto in clausole di Horn è
computabile in tempo polinomiale
FMZ
Prolog e la logica del primo
ordine
∀x1,…,xn A1∧…∧ Am B
Clausola di Horn
B:- A1,…,Am
Sintassi in Prolog
:- si pronuncia se
FMZ
3
Sintassi del prolog
Sintassi legata alla logica del primo ordine
• Costanti
costanti individuali
• Variabili
variabili individuali
• Funtori
lettere funzionali,
predicative
FMZ
Sintassi del linguaggio
Atomi: Costanti, funtori
• Il simbolo :- è considerato atomo.
• Sequenza di caratteri (lettere o numeri o
underscore) che comincia con una lettera
minuscola
• Oppure qualsiasi cosa contenuto tra ‘ ’.
FMZ
Sintassi del linguaggio
Variabili:
• qualsasi stringa che cominici con una lettera
maiuscola o con un underscore
• Il singolo underscore ‘_’ è cosiderata una
variabile anonima, cioè non importante.
• Le variabili vengono istanziate (legate ad un
valore) al procedere del programma (nella
risoluzione del teorema)
FMZ
4
Esempi di atomi e variabili:
• Atomi:
a_boy, peanut, ‘Jack-Smith’, i12345
• Non Atomi:
231as, Jack-Smith, _crack
• Varuabili:
Answer, X, I_like, _Marbles
• Non varibili:
mother, 3blind_mice
FMZ
Costruzione dei predicati
Se t1,…,tn e P sono atomi o variabili allora
P(t1,…,tn) è un predicato
Esempi:
• parent(X,Y)
• parent(paolo,X)
FMZ
Clausole: come fatti e regole
• I fatti sono predicati seguiti da ‘.’ (punto)
• Le regole sono della forma vista in
precedenza per le clausole di Horn
FMZ
5
“Programmare” in prolog
• Dato un problema costruire S che permetta di
dimostrare F (o un insieme di formule)
• Costruire S:
– Definire fatti
– Definire regole
• Costruito S abbiamo programmato in Prolog J
FMZ
Esempio
• Conoscendo il sesso delle persone e se uno
è genitore dell’altro, vogliamo sapere
– chi è padre di chi
– chi è madre di chi
FMZ
Fatti - esempi
male(alan).
male(gary).
female(margaret).
parent(alan, gary).
parent(alan, margaret).
FMZ
6
Regole – esempi
mother(X,Y) :parent(X,Y), female(Y).
father(X,Y) :parent(X,Y), male(Y).
FMZ
Interrogare il programma
• Richidere la dimostrazione di un teorema
?- mother(alan,Mom).
FMZ
Regola di inferenza
Teorema che si vuole dimostrare
∃xB(…x…)
Introduzione del quantificatore esistenziale
F(…a…)
∃xF(…x…)
FMZ
7
Unificazione: regola di inferenza
∀x1,…,xn A1∧…∧ Am B
Eliminazione del quantificatore universale
∀x.F(…x…)
F(…a…)
Modus ponens
P
B,P
B
MP
FMZ
Interrogare il programma
?- mother(alan,Mom).
Ci stiamo chiedendo
∃Mom.mother(alan,Mom)
FMZ
L’algoritmo di risoluzione
• in profondità
male(alan).
male(gary).
female(margaret).
parent(alan, gary).
parent(alan, margaret).
mother(X,Y) :- parent(X,Y), female(Y).
father(X,Y) :- parent(X,Y), male(Y).
Goal: ?- mother(alan,Mom).
FMZ
8
L’interprete prolog for dummies
• come si lancia?
• come si esce?
• quale interprete usiamo (dove si trova e
dove si trovano i manuali)
• come scrivo un programma?
• come uso un programma all’interno
dell’interprete?
FMZ
L’interprete prolog for dummies
• come si lancia?
swipl
e’ sempre in modalità
?prompt
ovvero voglio soddisfare un goal
• come si esce?
?- halt.
FMZ
L’interprete prolog for dummies
• quale interprete usiamo
SWI Prolog
http://www.swi.psy.uva.nl/projects/SWI-Prolog/download.html
– interprete
– manuale
• come scrivo un programma?
– Con l’editor di testo preferito
• come uso un programma all’interno
dell’interprete?
?- consult(‘NomeProgramma’).
oppure
?- [‘NomeProgramma’].
FMZ
9
Le trappole dell’algoritmo di
risoluzione
• Scriviamo
ancestor(X,Y)
ancestor(X,Y):ancestor(X,Z),
parent(Z,Y).
ancestor(X,Y):parent(X,Y).
FMZ
L’algoritmo di risoluzione
• in profondità
male(alan).
male(gary).
female(margaret).
parent(alan, gary).
parent(alan, margaret).
ancestor(X,Y):ancestor(X,Z),parent(Z,Y).
ancestor(X,Y):-parent(X,Y).
Goal: ?- ancestor(alan,Mom).
FMZ
Costruzione delle funzioni
(Apparente dimenticanza)
Se t1,…,tn e f sono atomi o variabili allora
f(t1,…,tn) è un funzione
Esempi:
• parent(X,Y)
• parent(paolo,X)
FMZ
10
Esercizi
Dati fatti del tipo:
male(pippo).
female(pippo).
father(pippo,pluto). pippo è padre di pluto
mother(pippo,pluto). pippo è madre di pluto
Definire le regole per :
(a) part_of_parent(X,Y). X è uno dei genitori di Y
(b) cousin(X,Y). X è cugino di Y
FMZ
11