C3. Prolog Fast Track
Slide: file:///C:/UNI/Magistrale/ISE/C3%20%E2%80%93%20Prolog%20Fast%20Track.pdf
Indice
Obiettivo del Modulo
Definizione
Prolog e un linguaggio di programmazione logica in cui un programma e una teoria di clausole di Horn e l’esecuzione consiste nel provare query tramite risoluzione e unificazione.
Il modulo e un percorso rapido sui concetti necessari per capire ragionamento simbolico, regole, unificazione, backtracking e rappresentazione dichiarativa della conoscenza.
In pratica: in Prolog non si descrive principalmente una sequenza di passi, ma un insieme di relazioni. Poi si fanno domande al sistema, che cerca sostituzioni di variabili capaci di rendere vere le query.
Basi di Prolog
Termini atomi e clausole
Definizione
Un termine Prolog e costruito da variabili e funtori; un atomo applica un predicato a termini; una clausola esprime un fatto, una regola o una query.
Regole sintattiche essenziali:
- Le variabili iniziano con lettera maiuscola o underscore, per esempio
X,Child,_Tmp. _da solo e variabile anonima: significa “non mi interessa il valore”.- I funtori e le costanti iniziano con minuscola, per esempio
term,joey,f(X). - Un atomo ha forma
predicate(t1, ..., tn).
Tipi di clausole:
father(joey,luca). % fatto
grandparent(G,N) :- parent(G,P), parent(P,N). % regola
?- parent(joey,Child). % queryNote
La stessa forma sintattica, come
parent(lino,joey), puo essere vista come termine o come atomo a seconda del contesto. Questo abilita anche meta-programmazione.
Esecuzione e backtracking
Definizione
L’esecuzione Prolog cerca una sostituzione delle variabili che renda vera una query rispetto al programma.
Prolog usa SLD resolution con una strategia precisa:
- i goal sono risolti da sinistra a destra;
- le clausole sono provate dall’alto verso il basso;
- la ricerca e depth-first;
- in caso di fallimento, Prolog torna all’ultimo choice point disponibile.
In pratica: l’ordine delle clausole e dei sottogoal conta. Anche se la logica dichiarativa sembra simmetrica, l’esecuzione concreta puo terminare, non terminare o produrre risposte in ordine diverso.
Warning
Prolog e dichiarativo, ma non e magicamente indipendente dall’ordine. Con ricorsione e liste, mettere prima il caso base e spesso essenziale per terminare.
Rappresentazione della Conoscenza
Fatti e query
Definizione
Un fatto rappresenta una proposizione vera nel dominio; una query chiede se una proposizione e conseguenza del programma.
Esempio di knowledge base:
parent(joey,luca).
parent(joey,simone).
parent(lino,joey).
parent(mirella,joey).Query possibili:
?- parent(joey,luca).
?- parent(joey,Child).
?- parent(Parent,joey).
?- parent(Grandparent,Parent), parent(Parent,Child).In pratica: non ci sono parametri input/output fissati. La stessa relazione puo essere interrogata in direzioni diverse, grazie all’unificazione.
Regole
Definizione
Una regola Prolog definisce una relazione in termini di altre relazioni.
Esempio per i nonni:
grandparent(G,N) :-
parent(G,P),
parent(P,N).Questa regola e universale: vale per ogni sostituzione di G, P e N che renda veri i due sotto-goal nel corpo.
Esempio per fratelli:
sibling(S1,S2) :-
parent(P,S1),
parent(P,S2),
S1 \= S2.\=/2 e un predicato built-in che ha successo quando i due termini non unificano.
Unificazione
Definizione
L’unificazione e il processo che rende due termini uguali trovando una sostituzione per le variabili.
Esempio:
parent(joey,Child)puo unificare con parent(joey,luca) producendo la sostituzione Child = luca.
Lettura operativa
Una query non e solo una domanda vero/falso. Se contiene variabili, Prolog puo generare risposte alternative tramite backtracking.
Numeri e Ricorsione
Numeri naturali alla Peano
Definizione
I numeri naturali alla Peano rappresentano i naturali usando uno zero e un costruttore di successore.
In programmazione logica pura, simboli come 3 e + non hanno significato speciale. Possiamo quindi rappresentare i naturali con:
zper zero;s(N)per il successore diN.
Esempi:
z % 0
s(z) % 1
s(s(z)) % 2Rappresentazione ricorsiva:
nat(z).
nat(s(N)) :- nat(N).In pratica: una sola regola finita rappresenta un insieme infinito di numeri. Questo mostra la forza dell’approccio intensionale rispetto a elencare infiniti fatti.
Somma come relazione
Definizione
In Prolog la somma puo essere rappresentata come relazione ternaria
sum(X,Y,Z), cioeX + Y = Z.
Esempio:
sum(z, N, N).
sum(s(M), N, s(P)) :-
sum(M, N, P).Questa definizione non ha parametri input/output prefissati. Si puo chiedere il risultato di una somma, ma anche generare valori che soddisfano un’equazione.
Warning
La rappresentazione con
s(s(...))e molto espressiva dal punto di vista logico, ma poco pratica per gli esseri umani. Per questo Prolog reale include anche aritmetica built-in, comeX is 1 + 3.
Liste
Notazione delle liste
Definizione
Una lista Prolog e una struttura ricorsiva formata da lista vuota
[]e costruttore testa-coda[H|T].
Notazioni equivalenti:
[a,b,c]
[a|[b,c]]In [H|T], H e la testa e T e la coda. L’unificazione permette di decomporre una lista:
[a,b,c] = [H|T]produce H = a e T = [b,c].
member/2
Definizione
member/2verifica o genera appartenenza:member(X,List)significa cheXe elemento diList.
Definizione tipica:
member(X,[X|_]).
member(X,[_|T]) :-
member(X,T).Il primo caso dice che un elemento e membro se coincide con la testa. Il secondo caso scarta la testa e cerca nella coda.
Query utili:
?- member(b,[a,b,c]).
?- member(X,[a,b,c]).
?- member(blue(X),[red(a),blue(b),red(c),blue(d)]).In pratica: member/2 puo controllare appartenenza, enumerare elementi o generare liste compatibili con una richiesta. Questa flessibilita deriva da unificazione e backtracking.
Prossimi Argomenti
Continueremo con:
- Logic and Computation - basi teoriche di logica e computazione.
- Automated Reasoning - metodi automatici per derivare conclusioni da conoscenza simbolica.
- Lab STRIPS - uso di Prolog per implementare planning simbolico.