10.06.2013 Views

Logica Matematica Corso di Laurea in Informatica ... - Mbox.dmi.unict.it

Logica Matematica Corso di Laurea in Informatica ... - Mbox.dmi.unict.it

Logica Matematica Corso di Laurea in Informatica ... - Mbox.dmi.unict.it

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

178 CAPITOLO 8. CALCOLI LOGICI<br />

Se <strong>in</strong>vece <strong>in</strong> questa derivazione, da ¬P (z) si risolvesse con la prima con<br />

l’unificatore {z/x} si otterrebbe P (F (x)), e questa con la seconda e l’unificatore<br />

{y/F (x)} darebbe Q(F (x)) risolvibile <strong>in</strong>f<strong>in</strong>e con la terza. Oppure<br />

P (F (x)) si risolve con la clausola precedentemente ottenuta ¬P (z).<br />

Ma quando si voglia meccanizzare il proce<strong>di</strong>mento, l’algor<strong>it</strong>mo <strong>di</strong> unificazione<br />

è fissato, e <strong>in</strong> esso un or<strong>di</strong>ne <strong>in</strong> cui considerare le variabili e scegliere ad<br />

esempio tra {x/z} e {z/x}, non si può mo<strong>di</strong>ficarlo secondo astuzia o convenienza.<br />

Alcune euristiche si possono <strong>in</strong>serire nel programma, ad esempio tra<br />

due unificatori {x/z} e {z/x} preferire quello <strong>in</strong> cui la variabile da sost<strong>it</strong>uire<br />

ha meno occorrenze, ma una volta fissate, queste vengono applicate. Programmare<br />

l’applicazione <strong>di</strong> tutti i possibili unificatori peraltro non sembra la<br />

soluzione più ragionevole.<br />

Se ora torniamo alla prima risoluzione ed eseguiamo la r<strong>in</strong>om<strong>in</strong>a {y/v},<br />

possiamo risolvere la clausola ottenuta con la terza (usando <strong>in</strong><strong>di</strong>fferentemente<br />

sia {v/z} sia {z/v}) e procedere f<strong>in</strong>o alla clausola vuota.<br />

Schematicamente, se numeriamo le tre clausole<br />

1 P (x) ∨ P (F (x))<br />

2 ¬P (y) ∨ Q(y)<br />

3 ¬Q(z)<br />

possiamo rappresentare la derivazione con<br />

1 2<br />

↓ ↙{x/y}<br />

P (F (y)) ∨ Q(y)<br />

P (F (v)) ∨ Q(v) 3<br />

↓ ↙{z/v}<br />

P (F (v))<br />

P (F (u)) 2<br />

↓ ↙{y/F (u)}<br />

Q(F (u))<br />

Q(F (w)) 3<br />

↓ ↙{z/F (w)}<br />

✷<br />

La con<strong>di</strong>zione <strong>di</strong> avere sempre tutte le clausole a variabili <strong>di</strong>sgiunte d’altra<br />

parte provoca altre complicazioni, come quella <strong>di</strong> dover unificare più letterali<br />

contemporaneamente. Se si considera {P (x)∨P (y), ¬P (z)∨¬P (u)}, che con<br />

una sola risoluzione dà ✷, non è possibile refutarlo risolvendo un letterale alla<br />

volta; <strong>in</strong>fatti risolvendo ad esempio rispetto a P (x) e ¬P (z) la risolvente non<br />

sarebbe P (y)∨¬P (u), che risolta con la prima, con {x/u}, darebbe P (y) che

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

Saved successfully!

Ooh no, something went wrong!