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