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
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
120 CAPITOLO 5. CALCOLO DELLA RISOLUZIONE<br />
tralasciamo altri dettagli zuccorosi dei veri e propri l<strong>in</strong>guaggi <strong>di</strong> programmazione<br />
come prolog, come un punto alla f<strong>in</strong>e <strong>di</strong> ogni clausola o un punto<br />
<strong>in</strong>terrogativo per il goal. Un <strong>in</strong>sieme P <strong>di</strong> clausole <strong>di</strong> Horn pos<strong>it</strong>ive o miste<br />
scr<strong>it</strong>te nel modo <strong>in</strong><strong>di</strong>cato si chiama anche programma.<br />
Esempio 5.2.3. L’<strong>in</strong>sieme <strong>di</strong> clausole <strong>di</strong> Horn S = {p ∨ ¬r ∨ ¬q, q, r} si<br />
rappresenta con il programma<br />
q ←<br />
r ←<br />
p ← q, r<br />
Un’<strong>in</strong>terrogazione <strong>di</strong> un programma si realizza chiedendo se una proposizione<br />
atomica, o una congiunzione <strong>di</strong> proposizioni atomiche, sono conseguenza<br />
logica del programma. questo equivale a chiedere se aggiungendo la loro<br />
negazione all’<strong>in</strong>sieme <strong>di</strong> clausole del programma si ottiene un <strong>in</strong>sieme <strong>in</strong>sod<strong>di</strong>sfacibile.<br />
Al programma si aggiunge pertanto l’<strong>in</strong>terrogazione nella forma<br />
<strong>di</strong> un goal semplice, la negazione <strong>di</strong> una lettera, ovvero una clausola negativa.<br />
Esempio 5.2.4. Il precedente programma può essere <strong>in</strong>terrogato aggiungendo<br />
il goal ¬p, ottenendo<br />
q ←<br />
r ←<br />
p ← q, r<br />
← p<br />
Il teorema sulla completezza della <strong>in</strong>put-risoluzione suggerisce <strong>di</strong> partire<br />
per una <strong>in</strong>put-refutazione dal goal. Nella notazione della programmazione<br />
logica, che seguiamo sull’esempio <strong>di</strong> sopra, la risoluzione <strong>di</strong> ¬p con la clausola<br />
p ∨ ¬r ∨ ¬q, che dà orig<strong>in</strong>e alla nuova clausola negativa, nuovo goal, ¬r ∨ ¬q,<br />
viene sost<strong>it</strong>u<strong>it</strong>a dalla identificazione del p del goal ← p con la testa <strong>di</strong> una<br />
legge o con un fatto, <strong>in</strong> questo caso la legge p ← q, r, e nello spostamento<br />
del problema del sod<strong>di</strong>sfacimento del goal p con quello del sod<strong>di</strong>sfacimento<br />
del nuovo goal multiplo ← q, r. Formalmente, p viene rimpiazzato <strong>in</strong> ← p<br />
dal corpo q, r della clausola con la cui testa p si identifica. Si <strong>di</strong>ce anche, <strong>in</strong><br />
vista dell’estensione ai l<strong>in</strong>guaggi pre<strong>di</strong>cativi, che p unifica con la testa <strong>di</strong> una<br />
clausola.<br />
Un goal multiplo si sod<strong>di</strong>sfa cercando <strong>di</strong> sod<strong>di</strong>sfare il primo sottogoal q<br />
con lo stesso proce<strong>di</strong>mento <strong>di</strong> prima, che corrisponde a cercare <strong>di</strong> risolvere la<br />
clausola ¬r ∨ ¬q rispetto al suo ultimo letterale. Poiché q unifica con il fatto<br />
q ←, q è sod<strong>di</strong>sfatto, e il goal ← q, r si riduce, sost<strong>it</strong>uendo a q il corpo del<br />
fatto q ←, che è vuoto, a ← r. Anche questo sottogoal r unifica con il fatto