Non si ritiene che la soddisfazione generale (con poche eccezioni come le clausole di Horn) abbia una soluzione algoritmica. Tuttavia, il seguente algoritmo sembra essere una soluzione per la soddisfazione generale. Qual è esattamente il difetto con il seguente algoritmo?
- Sia un insieme vuoto che conterrà tutte le variabili che devono necessariamente essere vere o false.
- Sia l'insieme di clausole.
- Loop attraverso .
- Ogni volta che una variabile non condizionale † viene trovato, rimuoverla dal e inserirla .
- Se questo lascia un vuoto E implicazione ‡ , rimuovere tutte le variabili che implicazione vuoto da e inserto in .
- Se ciò lascia un'implicazione OR vuota ‡ , crea nuove istanze dell'algoritmo, in cui ogni istanza si occupa di una variabile nell'implicazione (ovvero se l'implicazione è: , crea un'istanza in cui è inserito in , uno dove è inserito in e uno in cui ed sono inseriti in ).
- Impostare tutte le variabili in sul valore che devono necessariamente essere.
- Reinserire le variabili in in con i loro valori modificati e verificare se tutte le clausole sono soddisfatte.
- Se viene soddisfatta la soddisfazione, quindi restituire , altrimenti restituire "Non soddisfacente".
† Una variabile non condizionale è definita come una variabile che è necessariamente vera o falsa, ad esempio o .
‡ Un'implicazione vuota è definita come un'implicazione in cui una parte è vuota (ad es. ) o l'altra parte è necessariamente vera (ad es. .
Per una comprensione più intuitiva dell'algoritmo, prendere in considerazione la seguente serie di clausole :
L'algoritmo eseguirà le seguenti operazioni:
1) Poiché , , sono variabili non condizionali, l'algoritmo inserirle in . .
2) Rimozione , e lasceranno le clausole vuoti: . Essi verranno aggiunti a . .
3) Il reinserimento delle variabili in comporterà la violazione delle prime clausole: . Poiché è falso, è falso, il che significa che la clausola (v) è stata violata. L'algoritmo restituirà "Non soddisfacente"
Sono consapevole che l'algoritmo appare confuso. Non esitate a chiedere chiarimenti.
Dai commenti ora mi rendo conto che non esiste un algoritmo di soddisfacibilità generale efficiente noto . Sono ancora interessato al feedback sul mio algoritmo. Funziona? Come si confronta con algoritmi comuni?