2011-01-06 19 views
5

Mi sono interessato e ho cercato esempi pratici di utilizzo di SMT Z3 (come DbC) con codice e alternative open source a questo strumento. Quindi, in realtà, io sono interessato a simili strumenti solving formale Z3, ma:Alla ricerca di esempi pratici di applicazioni SMT Z3 (come DbC) e alternative open source a Z3?

  • si deve essere open source
  • fornire sia a basso livello (API) e di alto livello (script testo) interazione
  • supporto SMT-LIB
  • adatto (utilizzabile) in strumenti/scritti in/per le lingue come Java, Python, ruby, Vala, e non Haskell
  • dispone di strumenti stabili (utilizzabili in pratica) basati su di esso, come progettazione per contratto (DbC), verifica del tipo statico, ecc.

Secondo SMT-LIB home page (vedi bit.ly impacchettare per i dettagli) l'elenco dei 2010 solutori SMT è: "Alt-Ergo, Barcelogic, Castoro, Boolector, CVC3, DPT, MathSAT, OpenSMT, raso, Lancia, STP, SWORD, UCLID, veriT, Yices, Z3. "

Si prega di fornire un feedback sull'utilizzo di nessuno di essi nella pratica (esempi di codice sono i migliori)?

Infine, qualsiasi informazione sul confronto di esso con le possibilità di GHC sarebbe utile, ma solo nel caso esista un esempio di implementazione (non una "caratteristica" linguistica).

Maggiori informazioni rapide su Z3 qui http://bit.ly/bundles/ewiger/1

risposta

3

Al meglio della mia conoscenza, CVC3 più si avvicina alle vostre esigenze, in quanto:

  1. Ha un set di funzionalità che è simile a Z3 di.
  2. Ha un BSD-style license
  3. È il risolutore sottostante per un numero di progetti esistenti.

CVC3 ha bindings per C++ e Java e probabilmente altre lingue. In generale, penso che l'API sia molto più difficile da usare rispetto al (testuale) input language. Questo ha l'ulteriore vantaggio che, se si conficca con la lingua SMT-LIB2, si potrebbe essere in grado di passare a uno strumento diverso in seguito, se necessario. Un grande esempio di esempi è disponibile su SMT-LIB website.

3

Hai chiesto di alternative opensource per Z3:

Secondo SMT-Wikipedia al 2011-08, abbiamo:

Sulla base di queste misure, sembra che il più vivace, ben organizzato i progetti sono OpenSMT, STP e CVC4.

Sto solo controllando questa roba - finora, tutti e tre sembrano ragionevoli, oltre a CVC più vecchi -> intendo CVC3.