Semantica Operazionale

Transcript

Semantica Operazionale
Principio di risoluzione
Siano c1: AvA1v…vAn e c2: not(D)vB1v…v Bm
due clausole generali e sia Aθ = Dθ,
la clausola (A1v…vAn v B1v…v Bm) θ
viene detta risolvente di c1 e c2, ovvero,
ottenuta con un passo della regola di
risoluzione da c1 e c2.
Semantica Operazionale
Risoluzione
nota1: l'ordine dei letterali in una disgiunzione non è significativo.
nota2: A1v…vAnvB1v…v Bm è equivalente a
A1v…vAn <- not(B1)∧ … ∧not(Bm)
2
1
Risoluzione: esempio
c1:
uccello(pippo) v insetto(pippo) v not(vola(pippo))
c2:
vola(pippo) v not(ali(pippo))
Derivazione per risoluzione
Una derivazione per risoluzione da
un insieme di clausole P0 è una
sequenza P0 P1, P2, …….. di insiemi di
clausole dove ogni Pi è ottenuto da Pi-1
aggiungendo un risolvente di due
clausole di Pi.
risolvente c1 e c2:
uccello(pippo) v insetto(pippo) v not(ali(pippo))
3
4
Refutazione
Refutazione: esempio-1
P0= {ucc(pippo) v not(vola(pippo)), vola(pippo) v
not(ali(pippo)), not(ucc(pippo), ali(pippo)}
P1= {ucc(pippo) v not(vola(pippo)), vola(pippo) v
not(ali(pippo)), not(ucc(pippo), ali(pippo), ucc(pippo) v
not(ali(pippo)) }
P2={ ucc(pippo) v not(vola(pippo)), vola(pippo) v
not(ali(pippo)), not(ucc(pippo), ali(pippo), ucc(pippo) v
not(ali(pippo)), ucc(pippo)}
P3={ ucc(pippo) v not(vola(pippo)), vola(pippo) v
not(ali(pippo)), not(ucc(pippo), ali(pippo), ucc(pippo) v
not(ali(pippo)), ucc(pippo), '}
Una refutazione per P è una
derivazione per risoluzione finita che
termina con un insieme che contiene la
clausola vuota (insoddisfacibile).
---------Notazione: la clausola vuota viene denotata
con '.
5
6
Proprietà
Risoluzione di clausole definite
Proposizione
Una formula F è conseguenza logica di una teoria
T se e solo se T ∪ not(F) è insoddisfacibile (non
ha modelli).
Proposizione
Ogni risolvente di due clausole di Horn definite è
una clausola di Horn definita.
Ogni risolvente di una clausola di Horn definita e di
una clausola goal è una clausola goal.
Proposizione
Un insieme P di clausole è insoddisfacibile sse
esiste una refutazione per P.
c1: Av¬B1 v¬B2…v ¬Bn e C2: B1 v¬D1v…v ¬Dm
G: ¬B1 v¬B2…v ¬Bn
risolvente(c1,c2): Av ¬D1 v…v ¬Dm ¬B2v…v ¬Bn
risolvente(G,c2): ¬D1 v…v ¬Dm ¬B2v…v ¬Bn
7
8
Refutazione e clausole di Horn
Risoluzione SLD
Sia P un insieme di clausole di Horn definite e G
una clausola goal. Se esiste una refutazione per
P ∪ G allora not(G) è conseguenza logica di P.
La risoluzione SLD (con Selection rule, Linear, per
clausole di Horn Definite) è un metodo per
costruire refutazioni a partire da un insieme di
clausole definite ed una clausola goal.
P0= {ucc(pippo) v not(vola(pippo)), vola(pippo)
v not(ali(pippo)), ali(pippo)} ∪
{not(ucc(pippo)}
Lineare: si parte da un insieme iniziale di clausole
definite e da una clausola goal e si aggiunge
sempre una nuova clausola goal (nuovo risolvente)
considerando l'ultimo risolvente (clausola goal)
ottenuto ed una clausola di programma.
ucc(pippo) è conseguenza logica di P0
9
10
Esempio risoluzione SLD
Regola di selezione
P0= {ucc(pippo) v not(vola(pippo)),
vola(pippo) v not(ali(pippo)), ali(pippo)}
G0= {not(ucc(pippo)}
Quando un goal contiene più atomi la regola di
selezione ci dice quale atomo del goal
considerare ad ogni passo di refutazione.
P1 = P0 ∪ G0 ∪ G1
G1={not(vola(pippo)}
es.
es.
es.
es.
P2 = P1 ∪ G2
G2 = {not(ali(pippo)}
sempre il più a sinistra (leftmost)
sempre il più a destra (rightmost)
seguendo un dato ordine dei predicati
alternando le prime 2 regole
P3 = P2 ∪ {'}
11
12
Esempio -1
Esempio - 2
P2= {volo_diretto(venezia, londra)., volo_diretto(roma,
atene)., volo_diretto(roma, venezia)., volo(x,y) ←
volo_diretto(x,z) and volo(z,y)., volo(x,y) ←
volo_diretto(x,y).} ∪ { ← volo(venezia,w).}
θ3 = {x/venezia,y/w},
volo(x,y) θ3 = volo(venezia,w) θ3
P4 = P3 ∪ { ← volo_diretto(venezia,w).}
θ4 = {w/londra},
volo_diretto(venezia, londra)θ4 = volo_diretto(venezia, w)θ4
Clausole non ground e selezione leftmost
P0= {volo_diretto(venezia, londra)., volo_diretto(roma,
atene)., volo_diretto(roma, venezia)., volo(x,y) ←
volo_diretto(x,z) and volo(z,y)., volo(x,y) ←
volo_diretto(x,y).} ∪ { ← volo(roma,w).}
θ1={x/roma, y/w}, volo(roma,w) θ1 = volo(x,y) θ1
P1 = P0 ∪ { ← volo_diretto(roma,z) and volo(z,w).}
θ2={z/venezia},
volo_diretto(roma,z) θ2 = volo_diretto(roma, venezia) θ2
P2 = P1 ∪ { ← volo(venezia,w).}
P5 = P4 ∪ {'}
13
Esempio - 3
Sostituzioni utilizzate per la refutazione
θ1 = {x/roma, y/w}
θ2 = {z/venezia}
θ3 = {x/venezia,y/w}
θ4 = {w/londra}
Si noti anche che:
(θ1 θ2 θ3 θ4) |{w} = θ4 = {w/londra}
volo(roma,w) θ4 = volo(roma,londra)
15
14