Homepage  Il progetto dsy.it è l'unofficial support site dei corsi di laurea del Dipartimento di Scienze dell'Informazione e del Dipartimento di Informatica e Comunicazione della Statale di Milano. E' un servizio degli studenti per gli studenti, curato in modo no-profit da un gruppo di essi. I nostri servizi comprendono aree di discussione per ogni Corso di Laurea, un'area download per lo scambio file, una raccolta di link e un motore di ricerca, il supporto agli studenti lavoratori, il forum hosting per Professori e studenti, i blog, e molto altro...
In questa sezione è indicizzato in textonly il contenuto del nostro forum


.dsy:it. .dsy:it. Archive > Didattica > Corsi G - M > Logica matematica
 
[LPA] SPASS - mgu e massimali
Clicca QUI per vedere il messaggio nel forum
Gilbert
Usando spass a volte mi imbatto in cose strane che non riesco a capire, vorrei capire dove sbaglio.

1) Nel calcolo dell'MGU (upg o come volete) tra less(U,V) e less(zero, U)

io farei questi passaggi:
- U = zero / V = U
- U = zero / V = zero

Invece SPASS si ferma al primo, ovvero sostituisce U con zero e V con U. Ma l'algoritmo (vedi dispensa pag. 22) non dice (punto 4) di sostituire, nel caso si incontri una equazione x=t, tutte le occorrenze di x con t?

Possibile motivo: t non deve essere una variabile, ma una variabile in una funzione. In questo caso U non è in una funzione quindi non lo sostituisce.

2) Mi trovo che a volte SPASS effettua risoluzioni tra due clausole usando un letterale massimale ed uno no.

Es.: Risoluzione tra
=> less(b,c)*
e
less(U,V) => equal(divide(U,V), zero)**

viene fatta tra less(b,c) e less(U,V).

E' chiaro che non sarebbe stato possibile farla con il secondo letterale della seconda clausola, ma non si doveva evitare di fare la risoluzione del tutto?

La dispensa (pag. 42) dice: "Nei dimostratori automatici come SPASS, i letterali massimali vengono memorizzati mediante un asterisco: in tal modo, vengono prese in considerazione solo le inferenze che coinvolgono letterali asteriscati."

Vuol dire che ne basta uno o che devono essere entrambi asteriscati?

Possibile motivo: basta che l'inferenza coinvolga un solo letterale asteriscato.

3) Usando un lpo e come precedenza divide>zero>c>a e calcolando i massimali, mi trovo questa cosa:

divide(a,c) = zero**

Per esserci il doppio asterisco è necessario che divide(a,c) >lpo zero

Per LPO1 dovrei avere che a>=zero oppure c>=zero ma nessuna di queste condizioni è vera.

Oppure devo considerare zero come una funzione di arietà zero?

In tal caso per LPO2 ho che divide>zero e a>(nulla) e c>(nulla).

Però bisogna mettersi d'accordo. Perchè in LPO1 t è un termine (quindi può essere anche una costante e quindi una funzione di arietà 0).

Quando sono di fronte ad una costante la devo vedere come termine o come funzione di arietà 0? (che poi è la stessa cosa, ma per LPO pare di no...)

Possibile motivo: le costanti vanno viste sempre come funzioni di arietà 0 in LPO.

Gilbert
Nessuno sta preparando logica e vuole darmi una mano?

Barone
Alla seconda domanda risponderei che probabilmente avviene una post ordered check..cioè dopo aver applicato alla clausola il mgu scopre che in realtà less(U,V) è il letterale massimale e quindi utilizza quello in luogo di quello precedentemente asteriscato..spero di averci preso.

Gilbert
Non può essere così perchè il letterale asteriscato nella seconda clausola è positivo, così come quelo nella prima. In tal caso non è possibile fare la risoluzione (ce ne vuole uno positivo ed uno negativo).

Per quanto riguarda la prima domanda, sicuramente è dovuto al fatto che dato che i due letterali fanno parte di due clausole tra le quali viene effettuata risoluzione, è necessario rinominare le variabili in comune (infatti devono essere disgiunte). Per cui, la "U" del secondo letterale non è la stessa "U" del primo..

Powered by: vbHome (lite) v4.1 and vBulletin v2.3.1 - Copyright ©2000 - 2002, Jelsoft Enterprises Limited
Mantained by dsy crew (email) | Collabora con noi | Segnalaci un bug | Archive | Regolamento |Licenze | Thanks | Syndacate