Il risolutore SMT è un risolutore SAT + procedura decisionale
Un risolutore SAT è un risolutore di un problema decisionale: il problema SAT è un problema decisionale. Inoltre, questo problema decisionale è "auto-riducibile":
Il problema SAT è auto-riducibile, ovvero ogni algoritmo che risponde correttamente se un'istanza di SAT è risolvibile può essere utilizzato per trovare un compito soddisfacente
- ( wikipedia )
Ciò significa che i risolutori SAT possono anche assegnare l'incarico soddisfacente, oltre a decidere il problema.
I solutori TL; DR SMT risolvono una generalizzazione del problema SAT, a seconda dei tipi / vincoli consentiti nella teoria. Inoltre, consentono anche la codifica di relazioni di tipo di livello superiore rispetto alle codifiche SAT.
Un solutore SAT di solito si occupa di molte variabili booleane singole, che sono correlate solo attraverso le clausole / i vincoli del CNF . Un solutore SMT di teoria QF_BV (quantificatore libero da bitvector) è fondamentalmente un risolutore SAT + maggiori informazioni sulle relazioni. Ad esempio, un solutore QF_BV SMT è riducibile a SAT 1 . Quindi perché usare un risolutore SMT QF_BF? Il vantaggio principale è che in SAT un numero intero è rappresentato da diverse variabili, che a prima vista potrebbero apparire non correlate. Un solutore SAT impiegherebbe molto tempo ad imparare di nuovo relazioni semplici, come a livello intero(A=B)∧(B=C)⟹(A=C) , mentre il solutore SMT sa che i singoli bit sono collegati in questo modo fin dall'inizio, poiché il linguaggio SMT QF_BV è a livello intero (larghezza di bit fissa). Pertanto un risolutore SMT QF_BV può ragionare a livello di numero intero, oltre al livello di bit.
- Vedi il risolutore SMT Beaver che può anche generare il problema SAT equivalente che dovrebbe essere risolto.
Mentre il risolutore SMT QF_BV ha questo vantaggio rispetto a un risolutore SAT, non penso che questo sia un vantaggio di complessità: entrambi essenzialmente equivalenti e impiegano tempo esponenziale per risolvere i loro problemi peggiori. Ma praticamente, un risolutore SMT QF_BV potrebbe essere molto più veloce grazie a questa conoscenza aggiuntiva. Vedi la mia risposta a Limits of solver SMT , per un esempio di qualcosa di considerato "difficile" che i solutori SMT QF_BV e SAT soluti (attuali) avrebbero entrambi soffocato.
Esistono anche solutori di SMT che cercano di risolvere problemi ancora più gravi della soddisfazione booleana (ad esempio consentendo tipi e vincoli sui reali o consentendo quantificatori); ovviamente questi sono teoricamente almeno lenti come un solutore SAT. Questi solutori SMT sono una soluzione a una generalizzazione del problema SAT; invece di usare variabili binarie, ogni "teoria" consente relazioni / vincoli su domini diversi, come reali o vincoli quantificati (per tutti).
Teorema prover
Un dimostratore di teorema automatizzato è un risolutore che, dato una sorta di sistema di prova, alcune ipotesi e un obiettivo da dimostrare, "colmerà le lacune" tra le ipotesi e l'obiettivo. Avrà anche una sorta di verificatore per controllare le prove (che viene eseguito rapidamente). Un dimostratore di teoremi può fare affidamento su un risolutore SAT per riempire gli spazi vuoti; infatti, se e esiste un algoritmo pratico per risolvere i problemi NP-completi, si possono potenzialmente dimostrare quasi tutte le cose dimostrabili utili (in tempi ragionevoli):P=NP
Ma tali cambiamenti possono impallidire di significato rispetto alla rivoluzione che un metodo efficiente per risolvere i problemi NP-completi provocherebbe nella matematica stessa. Secondo Stephen Cook, [19]
... trasformerebbe la matematica consentendo a un computer di trovare una prova formale di qualsiasi teorema che abbia una prova di una lunghezza ragionevole, poiché le prove formali possono essere facilmente riconosciute in tempi polinomiali. Esempi di problemi possono anche includere tutti i problemi con i premi CMI.
- ( wikipedia )
[19]: Cook, Stephen (aprile 2000). Il problema P contro NP. Clay Mathematics Institute (PDF) .
Il motivo per cui ciò funzionerebbe è perché "le prove formali possono essere facilmente riconosciute in tempo polinomiale" tramite il verificatore, e implicherebbe che a quei problemi che possono essere verificati in tempo polinomiale si possa rispondere anche in tempo polinomiale.P=NP
Ma per ora, il teorema automatizzato per lo più dimostratori usano l'euristica o algoritmi temporali esponenziali (ma sono ancora utili).
Risolutore di vincoli
Di solito si tratta di riformulazioni dei solutori SAT / SMT in altre lingue. Se hai mai usato solutori SAT / SMT per risolvere un problema, puoi davvero amare l'abilità non deterministica dei solutori. Cioè, invece di dire al computer come fare qualcosa, gli dici quello che vuoi , cioè. quali proprietà vuoi avere l'output e un risolutore SAT / SMT in un "determinarlo" non deterministico, senza disturbarti con i dettagli dell'implementazione. Questo tipo di paradigma di programmazione è molto interessante e si chiama programmazione dei vincoli e, per funzionare, deve utilizzare un risolutore di vincoli (che potrebbe utilizzare un risolutore SAT / SMT nel backend, a seconda dei tipi e dei vincoli che consente di utilizzare) .
Ma vedo persone che chiamano Z3 un teorema proverente. Quindi non so come distinguere quei termini.
AFAIK, Z3 è una suite di molti strumenti, tra cui un risolutore SMT, diversi linguaggi di verifica / modello di verifica del teorema e altro ancora.
E qual è il termine più generale per tutti loro?
Penso che la generalizzazione del problema della soddisfacibilità sia la Teoria del Modulo di Soddisfazione , e quindi il "risolutore SMT" sarebbe il più generale di tutti questi. Tuttavia, non tutte le implementazioni effettive del solutore SMT risolvono tutte le teorie, quindi ciò non significa che tutti i solutori SMT siano ugualmente generici.