I risolutori SMT come Z3 o Boolector utilizzano un insieme complesso di euristiche per risolvere i problemi. Tuttavia, ciò rende anche molto difficile prevedere le prestazioni di un tale risolutore per un determinato problema. La mia domanda è quindi:
Domanda
Esiste un modo per comprendere o ottenere approfondimenti sulle prestazioni di un risolutore SMT per uno specifico nella teoria dei bitvector liberi da quantificatori (QFBV)?
Ciò include anche tutti gli strumenti di visualizzazione che aiuterebbero a capire dove il risolutore è "bloccato" / senza fare progressi.
applicazioni
Capire in anticipo in che modo diverse codifiche dello stesso problema influiscono sulle prestazioni del risolutore (lo stato dell'arte qui non può essere "basta provare alcune codifiche diverse e sperare che uno sia abbastanza veloce", giusto?)
Se un determinato problema non è risolvibile da un risolutore SMT a causa di vincoli temporali, trovare un modo per esprimere il problema in modo diverso in modo che possa essere risolto.
Evita di perdere tempo con le semplificazioni dei problemi specifici del dominio che non influiranno affatto sulle prestazioni del risolutore o influenzeranno negativamente le prestazioni del risolutore.
Ricerca esistente
Ho cercato di trovare ricerche su questo argomento, ma non sono stato in grado di trovare molto. Non ho ancora molta esperienza nel campo dei solutori SAT / SMT, quindi mi scuso se mi sono perso qualcosa.
SATzilla : prevede il solutore con le migliori prestazioni in base alle funzionalità estratte dal problema utilizzando tecniche di apprendimento automatico.
Questo vale solo per SAT anziché SMT e non spiega i motivi delle prestazioni dei solutori.
Profiler dell'assioma Z3 Una visualizzazione del grafico di istanza Z3 e analisi dei loop corrispondenti
Sembra che questo si concentri solo sulle teorie quantificate.