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

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

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

Saved successfully!

Ooh no, something went wrong!