Variabili distinte per diverse clausole


10

Nella dimostrazione del teorema della risoluzione, si presume che le variabili nelle diverse clausole siano distinte. Questo non è qualcosa che accade automaticamente; richiede un codice e un calcolo extra significativi da implementare. Detto questo, sto cercando un test case per questo.

Il problema è che, in tutti i casi di test che ho provato finora, non fa alcuna differenza. Presumibilmente importa solo in casi limite insoliti. Come dice Wikipedia , "le variabili in diverse clausole sono distinte ... Ora, unificando Q (X) nella prima clausola con Q (Y) nella seconda clausola significa che X e Y diventano comunque la stessa variabile".

Esistono casi di test noti che daranno effettivamente la risposta sbagliata se clausole diverse utilizzano le stesse variabili?

Risposte:


6

Modifica: ho trovato un esempio migliore. Considera queste clausole: Ovviamente, questo insieme di clausole è contraddittorio. Ma senza rinominare le variabili, l'unico risolvente possibile èP(f(x))e non sono più possibili risolventi - tutti portano a sostituiref(x)conx, il che è impossibile.

¬P(x)P(f(x))P(x)¬P(f(f(x)))
P(f(x))f(x)x

Modifica: considera il significato delle clausole. Ogni clausola è implicitamente quantificata universalmente. Quindi il significato delle sue variabili non è fissato a nulla. Ora supponiamo che tu abbia due clausole contenenti entrambe . Se esegui la risoluzione senza rinominare x in una di esse, aggiungi un significato a x che non ha: dici che x significa la stessa cosa in entrambe le clausole, il che non è vero. Se non hai variabili distinte nelle tue clausole, la risoluzione ti darà conclusioni troppo deboli.xxxx


(La risposta originale.) Ad esempio, abbiamo 4 clausole:

  1. AB(x)
  2. ¬AC(x)
  3. ¬B(c)
  4. ¬C(d)

dove sono variabili e c , d costanti. Se eseguiamo la risoluzione sui primi due senza rinominare x , otterremo B ( x ) C ( x ) . Possiamo procedere con ¬ B ( c ) per ottenere C ( c ) ma ora non possiamo risolverlo con ¬ C ( d ) .x,yc,dxB(x)C(x)¬B(c)C(c)¬C(d)

xyB(x)C(y)¬B(c)¬B(d)


B(x)¬B(c)A¬A

@rwallace Non avere variabili distinte non significa che non puoi derivare la clausola vuota, solo che i metodi non sono completi. Se rinomini sempre le variabili, non importa in quale ordine scegli le clausole, otterrai sempre la clausola vuota se l'insieme originale non è soddisfacente - il metodo è completo. Ma se non rinominate le variabili, allora (come mostra l'esempio) all'improvviso l'ordine conta: alcune sequenze di derivazioni non troveranno la clausola vuota. E un prover non può "dire" in anticipo quale sequenza di derivazioni è quella corretta.
Petr Pudlák,

Ma non è forse possibile che un metodo completo alla fine provi ogni possibile derivazione (a meno che non trovi prima la clausola vuota)? A dire il vero non c'è alcuna garanzia che proverà le derivazioni che ho menzionato prima di quelle che hai menzionato, ma quando quelle che hai menzionato falliscono a causa della mancanza di variabili distinte, quelle che ho menzionato sono ancora aperte e un metodo completo deve tornare indietro e provare quelli prima o poi?
rwallace,

Il tuo addendum sul significato delle clausole in astratto ha senso, ma mi sembra che sia così, quindi dovrebbe essere possibile trovare un caso di prova, qualcosa che posso alimentare in un prover e indurlo a dare la risposta sbagliata se la funzione variabili distinte è disabilitata. Finora non sono riuscito a trovare un simile test.
rwallace,

@rwallace Perché dovresti farlo? La risoluzione è un metodo completo e sai che in ogni caso è necessario eseguire la risoluzione su ciascuna coppia di clausole una sola volta. Suggerisci eventualmente di provare tutte le possibili sequenze su come procedere con il backtracking. Ciò comporterà un aumento davvero enorme della complessità dell'algoritmo, nemmeno lontanamente comparabile con la semplice ridenominazione delle variabili ad ogni passo.
Petr Pudlák,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.