Algoritmi di Inferenza per il Calcolo Proposizionale

Algoritmi di Inferenza per il Calcolo Proposizionale Algoritmi di Inferenza per il Calcolo Proposizionale

<strong>Algoritmi</strong> <strong>di</strong> <strong>Inferenza</strong> <strong>per</strong> <strong>il</strong> <strong>Calcolo</strong><br />

<strong>Proposizionale</strong><br />

Antonino Freno<br />

freno@<strong>di</strong>i.unisi.it<br />

Corso <strong>di</strong> Intelligenza Artificiale – A.A. 2008/2009


Clausole <strong>di</strong> Horn (I)<br />

◮ Una clausola <strong>di</strong> Horn è una <strong>di</strong>sgiunzione <strong>di</strong> letterali <strong>di</strong> cui al<br />

massimo uno è positivo;<br />

◮ Esempi: ¬α ∨ ¬β ∨ γ è una clausola <strong>di</strong> Horn, mentre<br />

¬α ∨ β ∨ γ non lo è;<br />

◮ Caratteristiche:<br />

◮ Qualunque clausola <strong>di</strong> Horn può essere riscritta come<br />

un’implicazione in cui l’antecedente è una congiunzione <strong>di</strong><br />

letterali positivi, e <strong>il</strong> conseguente è un singolo letterale positivo;<br />

◮ <strong>Inferenza</strong> con le clausole <strong>di</strong> Horn si può fare con gli algoritmi <strong>di</strong><br />

forward chaining e backward chaining;<br />

◮ Il tempo necessario a decidere un’implicazione rispetto a una<br />

base <strong>di</strong> conoscenza in clausole <strong>di</strong> Horn cresce solo linearmente<br />

con le <strong>di</strong>mensioni della base.


Clausole <strong>di</strong> Horn (II)<br />

◮ Una clausola che contiene esattamente un letterale positivo si<br />

chiama ‘clausola definita’. Il letterale positivo forma la testa<br />

della clausola, e i letterali rimanenti formano <strong>il</strong> corpo;<br />

◮ Una clausola definita priva <strong>di</strong> letterali negativi si chiama<br />

‘fatto’;<br />

◮ Le clausole definite sono la base della programmazione logica;<br />

◮ Una clausola <strong>di</strong> Horn che sia priva <strong>di</strong> letterali positivi si<br />

chiama ‘vincolo <strong>di</strong> integrità’.


Forward Chaining


Forward Chaining: Esempio<br />

◮ Base <strong>di</strong> conoscenza:<br />

◮ Regole: P ⇒ Q, L ∧ M ⇒ P, B ∧ L ⇒ M, A ∧ P ⇒ L,<br />

A ∧ B ⇒ L;<br />

◮ Fatti: A, B;<br />

◮ Query: Q;<br />

◮ Derivazione:<br />

1. L<br />

2. M<br />

3. P<br />

4. Q


Forward Chaining: Vali<strong>di</strong>tà e completezza<br />

◮ Vali<strong>di</strong>tà: ogni inferenza è semplicemente un’applicazione del<br />

modus ponens (⇒ E);<br />

◮ Completezza:<br />

◮ Consideriamo <strong>il</strong> momento in cui l’algoritmo ha raggiunto un<br />

punto fisso (quando nessun’altra inferenza è possib<strong>il</strong>e);<br />

◮ Supponiamo che ci sia un atomo α derivab<strong>il</strong>e dalla base <strong>di</strong><br />

conoscenza, ma non derivato dall’algoritmo;<br />

◮ Se α è derivab<strong>il</strong>e, allora ci sarà una regola del tipo<br />

β1 ∧ . . . ∧ βn ⇒ α, dove i letterali β1, . . . , βn sono tutti veri;<br />

◮ La possib<strong>il</strong>ità che β1, . . .,βn siano veri e α non sia stato<br />

derivato dall’algoritmo contrad<strong>di</strong>ce l’ipotesi che l’algoritmo<br />

abbia raggiunto un punto fisso, <strong>per</strong>chè in questo caso dovrebbe<br />

aver derivato anche α!


Backward Chaining<br />

◮ La strategia <strong>di</strong> backward chaining lavora ‘all’in<strong>di</strong>etro’ anzichè<br />

‘in avanti’;<br />

◮ L’idea è <strong>di</strong> partire dai goal anzichè dalle premesse, e <strong>di</strong><br />

generare via via i fatti che abbiamo bisogno <strong>di</strong> provare <strong>per</strong><br />

derivare la conclusione che ci interessa;<br />

◮ Il backward chaining <strong>di</strong> solito è più parsimonioso del forward<br />

chaining, <strong>per</strong>chè si limita a lavorare sui fatti che sono<br />

strettamente r<strong>il</strong>evanti <strong>per</strong> la conclusione. E’ usato nell’ambito<br />

del planning;<br />

◮ In pratica, strategie miste forward-backward possono essere<br />

usate nel modo che conviene <strong>di</strong> più.


Forma normale congiuntiva<br />

◮ Qualunque FBF può essere ridotta ad una FBF in forma<br />

canonica, detta ‘forma normale congiuntiva’ (FNC). Una FBF<br />

φ è in FNC se φ = (ψ11 ∨ ... ∨ ψ1l ) ∧ ... ∧ (ψn1 ∨ ... ∨ ψnm),<br />

cioè se φ è una congiunzione <strong>di</strong> <strong>di</strong>sgiunzioni <strong>di</strong> letterali.<br />

◮ Per ridurre una qualunque FBF a FNC, usiamo la seguente<br />

procedura:<br />

1. Eliminiamo ⇔ usando ⇒ e ∧;<br />

2. Eliminiamo ⇒ usando ¬ e ∨;<br />

3. Spostiamo ¬ verso l’interno ogni volta che ¬ è davanti a una<br />

proposizione complessa;<br />

4. Distribuiamo ∨ su ∧ ogni volta che è possib<strong>il</strong>e.


Forma normale congiuntiva: Esempio (I)<br />

◮ (α ∧ (α ⇒ β)) ⇒ (α ∧ β)<br />

1. ¬(α ∧ (α ⇒ β)) ∨ (α ∧ β)<br />

2. ¬(α ∧ (¬α ∨ β)) ∨ (α ∧ β)<br />

3. ¬α ∨ ¬(¬α ∨ β) ∨ (α ∧ β)<br />

4. (¬α ∨ (α ∧ ¬β)) ∨ (α ∧ β)<br />

5. ((¬α ∨ α) ∧ (¬α ∨ ¬β)) ∨ (α ∧ β)<br />

6. ((α ∧ β) ∨ (¬α ∨ α)) ∧ ((α ∧ β) ∨ (¬α ∨ ¬β))<br />

7. (α ∨ ¬α ∨ α) ∧ (α ∨ ¬α ∨ β) ∧ (¬α ∨ ¬β ∨ α) ∧ (¬α ∨ ¬β ∨ β)


Forma normale congiuntiva: Esempio (II)<br />

◮ (((α ∧ β) ⇒ γ) ∧ (β ⇒ α) ∧ β) ⇒ γ<br />

1. ((¬(α ∧ β) ∨ γ) ∧ (¬β ∨ α) ∧ β) ⇒ γ<br />

2. ((¬α ∨ ¬β ∨ γ) ∧ (¬β ∨ α) ∧ β) ⇒ γ<br />

3. ¬((¬α ∨ ¬β ∨ γ) ∧ (¬β ∨ α) ∧ β) ∨ γ<br />

4. ¬(¬α ∨ ¬β ∨ γ) ∨ ¬(¬β ∨ α) ∨ ¬β ∨ γ<br />

5. (α ∧ β ∧ ¬γ) ∨ (β ∧ ¬α) ∨ ¬β ∨ γ<br />

6. (((α ∧ β ∧ ¬γ) ∨ β) ∧ ((α ∧ β ∧ ¬γ) ∨ ¬α)) ∨ ¬β ∨ γ<br />

7. ((β ∨ α) ∧ (β ∨ β) ∧ (β ∨ ¬γ) ∧ (¬α ∨ α) ∧ (¬α ∨ β) ∧ (¬α ∨<br />

¬γ)) ∨ ¬β ∨ γ<br />

8. ((¬ ∨ β ∨ α) ∧ (¬β ∨ β) ∧ (¬β ∨ β ∨ ¬γ) ∧ (¬β ∨ ¬α ∨ α) ∧<br />

(¬β ∨ ¬α ∨ β) ∧ (¬β ∨ ¬α ∨ ¬γ)) ∨ γ<br />

9. (γ ∨ ¬ ∨ β ∨ α) ∧ (γ ∨ ¬β ∨ β) ∧ (γ ∨ ¬β ∨ β ∨ ¬γ) ∧ (γ ∨<br />

¬β ∨ ¬α ∨ α) ∧ (γ ∨ ¬β ∨ ¬α ∨ β) ∧ (γ ∨ ¬β ∨ ¬α ∨ ¬γ)


Regola <strong>di</strong> risoluzione<br />

◮ Risoluzione unitaria:<br />

α1 ∨ . . . ∨ αn<br />

α1 ∨ . . . ∨ αi−1 ∨ αi+1 ∨ . . . ∨ αn<br />

dove αi e β sono dei letterali complementari, cioè hanno la<br />

forma p e ¬p (o viceversa).<br />

◮ Risoluzione generalizzata:<br />

α1 ∨ . . . ∨ αm<br />

β<br />

β1 ∨ . . . ∨ βn<br />

α1 ∨ . . . ∨ αi−1 ∨ αi+1 ∨ . . . ∨ αm ∨ β1 ∨ . . . ∨ βj−1 ∨ βj+1 ∨ . . . ∨ βn<br />

dove αi e βj sono dei letterali complementari. Restrizione: <strong>il</strong><br />

risultato della risoluzione deve contenere soltanto una copia <strong>di</strong><br />

ciascun letterale.


Vali<strong>di</strong>tà della regola <strong>di</strong> risoluzione<br />

◮ Consideriamo <strong>il</strong> caso:<br />

φ ∨ α ψ ∨ ¬α<br />

φ ∨ ψ<br />

dove φ = α1 ∨ ... ∨ αm e ψ = β1 ∨ ... ∨ βn.<br />

◮ Ci sono due possib<strong>il</strong>ità:<br />

◮ Se α è vero, ¬α è falso, quin<strong>di</strong> ψ è vero, ed è vero anche φ ∨ψ;<br />

◮ Se α è falso, φ è vero, quin<strong>di</strong> è vero anche φ ∨ ψ.<br />

◮ In entrambi i casi, φ ∨ ψ è garantito.


Algoritmo <strong>di</strong> risoluzione


Completezza della regola <strong>di</strong> risoluzione<br />

◮ Dato un insieme Σ <strong>di</strong> FBF, la chiusura rispetto alla risoluzione<br />

<strong>di</strong> Σ è l’insieme RC(Σ) <strong>di</strong> tutte le FBF derivab<strong>il</strong>i da Σ tramite<br />

applicazione ricorsiva della regola <strong>di</strong> risoluzione;<br />

◮ Se Σ è ricavato da un insieme finito <strong>di</strong> simboli primitivi<br />

p1,... ,pn, RC(Σ) è sempre finito (in quanto non accettiamo<br />

letterali ripetuti dentro ciascuna clausola). Questo garantisce<br />

che l’algoritmo <strong>di</strong> risoluzione termini sempre;<br />

◮ Ground resolution theorem. Se un insieme Σ <strong>di</strong> clausole<br />

non è sod<strong>di</strong>sfacib<strong>il</strong>e, allora RC(Σ) contiene la clausola vuota.


L’algoritmo <strong>di</strong> Davis-Putnam-Logemann-Loveland (I)<br />

◮ E’ un algoritmo <strong>per</strong> la verifica della sod<strong>di</strong>sfacib<strong>il</strong>ità;<br />

◮ L’input è un enunciato in FNC, e l’idea <strong>di</strong> base è <strong>di</strong> enumerare<br />

tutti i possib<strong>il</strong>i modelli;<br />

◮ Rispetto ad un’enumerazione a forza bruta, si introducono tre<br />

miglioramenti:<br />

1. Terminazione rapida;<br />

2. Euristica dei simboli puri;<br />

3. Euristica delle clausole unitarie.


L’algoritmo <strong>di</strong> Davis-Putnam-Logemann-Loveland (II)<br />

◮ Terminazione rapida. Se un’enunciato si scopre<br />

necessariamente vero (o falso) anche quando <strong>il</strong> modello è solo<br />

parzialmente specificato, l’algoritmo si arresta senza<br />

completare <strong>il</strong> modello;<br />

◮ Euristica dei simboli puri. Un simbolo è puro se ha lo stesso<br />

segno in tutte le clausole. Se l’enunciato in FNC ha un<br />

modello, allora ha anche un modello in cui tutti i simboli puri<br />

ricevono <strong>il</strong> valore che rende <strong>il</strong> loro letterale vero;<br />

◮ Euristica delle clausole unitarie. Una clausola è unitaria se<br />

contiene un solo letterale. Le clausole unitarie forzano<br />

l’assegnazione <strong>di</strong> un certo valore sul simbolo che contengono,<br />

<strong>per</strong> cui è conveniente elaborarle prima <strong>di</strong> enumerare modelli<br />

alternativi (‘propagazione <strong>di</strong> unità’).


L’algoritmo <strong>di</strong> Davis-Putnam-Logemann-Loveland (III)


L’algoritmo WalkSAT (I)


L’algoritmo WalkSAT (II)<br />

◮ Vantaggi: semplice da implementare, minimo consumo <strong>di</strong><br />

memoria, può funzionare bene <strong>per</strong> scopi pratici;<br />

◮ Svantaggi: WalkSAT non può essere usato <strong>per</strong> <strong>il</strong><br />

theorem-proving in senso stretto. Se WalkSAT restituisce una<br />

soluzione, allora <strong>il</strong> nostro insieme <strong>di</strong> clausole è sod<strong>di</strong>sfacib<strong>il</strong>e,<br />

ma se WalkSAT fallisce, non possiamo concludere che non sia<br />

sod<strong>di</strong>sfacib<strong>il</strong>e. In altre parole: se un modello (<strong>per</strong> <strong>il</strong> nostro<br />

insieme <strong>di</strong> clausole) esiste, WalkSAT ha una certa probab<strong>il</strong>ità<br />

<strong>di</strong> trovarlo, ma WalkSAT non può verificare che un modello<br />

non esiste.


L’algoritmo GSAT<br />

◮ GSAT è un altro algoritmo <strong>di</strong> ricerca locale <strong>per</strong> <strong>il</strong><br />

sod<strong>di</strong>sfacimento <strong>di</strong> insiemi <strong>di</strong> clausole;<br />

◮ GSAT è quasi uguale a WalkSAT, eccetto che non si usa <strong>il</strong><br />

parametro probab<strong>il</strong>istico p <strong>di</strong> WalkSAT, ma si o<strong>per</strong>a sempre in<br />

modo greedy. In altre parole, presa una clausola falsa, si<br />

apporta sempre la mo<strong>di</strong>fica che massimizza <strong>il</strong> numero <strong>di</strong><br />

clausole sod<strong>di</strong>sfatte dall’assegnazione <strong>di</strong> verità ottenuta;<br />

◮ Il problema dei minimi locali si affronta lanciano l’algoritmo<br />

più volte, partendo ogni volta da un’assegnazione casuale<br />

<strong>di</strong>versa.


Importanza della sod<strong>di</strong>sfacib<strong>il</strong>ità<br />

◮ Il problema della sod<strong>di</strong>sfacib<strong>il</strong>ità delle formule booleane è<br />

NP-completo (Cook 1971);<br />

◮ Vari importanti problemi si riducono alla sod<strong>di</strong>sfacib<strong>il</strong>ità <strong>di</strong><br />

formule booleane (puzzle <strong>di</strong> Sam Loyd, clique, knapsack, ...).

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!