Dipende da cosa intendi per "provare una proprietà". Per quanto ne so, ci sono molti strumenti di analisi statica per il controllo delle proprietà semplici dei programmi C, e variano molto in termini di espressività, facilità d'uso, solidità dell'analisi, ecc. Sono tipicamente usati per verificare che i programmi siano gratuiti degli errori di runtime, ma non sono molto utili per il controllo delle specifiche funzionali complete. Per questo tipo di proprietà, potrebbe essere necessario ricorrere a un rilevatore più potente che richiede di annotare manualmente una prova, invece di averne una controllata automaticamente.
Dato che si parla di Coq, vorrei fare riferimento a due strumenti basati su Coq per verificare i programmi C (tuttavia non funzionano con C++): in quest'ultima categoria, c'è lo Verified Software Toolchain, una logica per ragionamento sui programmi C che è incorporato all'interno di Coq. Puoi usarlo per scrivere prove sul comportamento del tuo programma e fare in modo che Coq li controlli, mostrando anche che un programma soddisfa le sue specifiche funzionali. Nella prima categoria, c'è lo Verasco, uno strumento automatico di analisi statica che ispeziona il tuo programma per l'assenza di errori di run-time. Una buona caratteristica di questi strumenti è che sono essi stessi programmi verificati, il che implica che si può avere un ulteriore grado di fiducia nelle analisi che forniscono.
Altri strumenti interessanti includono Frama-C, come menzionato nel commento sopra, e VCC, un analizzatore statico di Microsoft. Tuttavia, non funzionano con C++.
fonte
2014-12-14 20:20:16
Per C, c'è [Frama-C] (http://frama-c.com/), che tenta di ragionare sul comportamento di un programma. Se il codice dell'algoritmo del codice è compatibile con/compilabile come C, potresti essere in grado di usarlo. –