Différences

Cette page vous donne les différences entre la révision choisie et la version actuelle de la page.

Lien vers cette vue

free_software_for_formal_verification [Le 27/02/2009 à 16:09]
DavidMentre modification
— (Version actuelle)
Ligne 1: Ligne 1:
-====== Free software tools for formal verification of computer programs ====== 
-\\ 
-by David Mentré <dmentre @ linux-france.org>\\ 
  
-//Version 1.12 - 2008-11-27//\\ 
- 
-We are now living in 2007. We should no longer make software as in the sixties or seventies, with a few tests. We are now able to make software without **any** bugs. This is possible using specialised tools called //formal tools//. Such tools are able to match a computer program against a specification, i.e. a formal description of the expected behavior of the program. If the  specification is correct and the formal verification can be done, then the program is guaranted to be bug free. Of course, this is the ideal case and we are far from guaranteed bug free  programs in the real world. But, as developer of free software, we should try to be as close as possible of this goal. As a first step, I list here free software tools that can help verification of computer programs.\\ 
- 
-Note: David A. Wheeler as made a lengthy paper on [[http://www.dwheeler.com/essays/high-assurance-floss.html|High Assurance (for Security or Safety) and [[free_-_libre|Free-Libre]] / Open Source Software (FLOSS)... with Lots on Formal Methods]]. You should read it if you are interested in the subject!\\ 
- 
-\\ 
-===== Proof assistants ===== 
-\\ 
-Proof assistants are computer programs that aids a human to prove things (so they are sometimes called /theorem provers/). Generally, they understand several formal logics with there rules and are able to apply those rules, automatically or guided by the human verifier. Such tools are at the core of the verification process.\\ 
- 
-\\ 
-==== Coq ==== 
-\\ 
-Coq is a proof assistant environment.\\ 
- 
-    * License: GNU LGPL 2.1\\ 
-    * Web site: http://coq.inria.fr/\\ 
-    * Debian packages: coq coq-doc proofgeneral-coq\\ 
- 
-\\ 
-==== ACL2 ==== 
-\\ 
-ACL2 is an environment where programs are described using an applicative subset of Common Lisp. Each function of the program entered in the environment is formally proven (termination, ...).\\ 
- 
-    * License: GNU GPL\\ 
-    * Web site: http://www.cs.utexas.edu/users/moore/acl2/\\ 
-    * Debian packages: acl2 acl2-books acl2-books-certs\\ 
-acl2-books-source acl2-doc acl2-emacs acl2-infix acl2-infix-source\\ 
-acl2-source\\ 
- 
-\\ 
-==== Phox ==== 
-\\ 
-%%PhoX%%is a proof assistant based on High Order logic and it is eXtensible. One of the principle of this proof assistant is to be as user friendly as possible and so to need a minimal learning time. The current version is still expirimental but starts to be really usable. It is a good idea to try it and make comments to improve the final version.\\ 
- 
-    * License: ??\\ 
-    * Web site:\\ 
-http://www.lama.univ-savoie.fr/sitelama/Membres/pages_web/RAFFALLI/phox.html\\ 
- 
-\\ 
- 
-==== HOL Light ==== 
-\\ 
-HOL Light is a computer program to help users prove interesting mathematical theorems completely formally in higher order logic. It sets a very exacting standard of correctness, but provides a number of automated tools and pre-proved mathematical theorems (e.g. about arithmetic, basic set theory and real analysis) to save the user work. It is also fully programmable, so users can extend it with new theorems and inference rules without compromising its soundness.\\ 
- 
-    * License: BSD like\\ 
-    * Web site: http://www.cl.cam.ac.uk/users/jrh/hol-light/\\ 
- 
-\\ 
-==== haRVey ==== 
-\\ 
-haRVey is a SMT (Satisfiability Modulo Theories) prover. There are presently two branches of haRVey: haRVey-SAT and haRVey-FOL.\\ 
- 
-  * haRVey-FOL integrates a [[first_-_order|First-Order]] Logic theorem prover (hence its name), i.e. the E-prover. It uses the superposition calculus as implemented by the E-prover, to determine the satisfiability of Boolean combinations of atoms with functions interpreted in a first-order theory with equality.\\ 
- 
-  * haRVey-SAT is based on congruence closure, the [[nelson_-_oppen|Nelson-Oppen]] framework, and rudimentary instantiation techniques to decide the satisfiability of a set of atoms written with uninterpreted symbols, linear arithmetics, some lambda-expressions, and some quantifiers. The Boolean engine is a SAT solver (zChaff or [[mini_sat|MiniSAT]]), hence its name.\\ 
- 
-        * License:\\ 
-              * haRVey-FOL: GNU LGPL 2.1\\ 
-                    * haRVey-FOL relies on E-prover (http://eprover.org/): GNU GPL\\ 
-              * haRVey-SAT: BSD like\\ 
-                    * haRVey-SAT relies on [[mini_sat|MiniSat]] (http://minisat.se/): BSD like\\ 
-        * Web site: http://harvey.loria.fr/haRVey.php\\ 
- 
-\\ 
- 
-==== Brillant ==== 
-\\ 
-Set of free software tools aiming at implementing the B method, for both software and hardware.\\ 
- 
-    * License: GNU LGPL\\ 
-    * Web site: https://gna.org/projects/brillant\\ 
- 
-\\ 
-==== HOL ==== 
-\\ 
-HOL 4 is the latest version of the HOL automated proof system for higher order logic: a programming environment in which theorems can be proved and proof tools implemented. [[built_-in|Built-in]] decision procedures and theorem provers can automatically establish many simple theorems. An oracle mechanism gives access to external programs such as SAT and BDD engines. HOL 4 is particularly suitable as a platform for implementing combinations of deduction, execution and property checking.\\ 
- 
-    * License: BSD like\\ 
-    * Web site: http://hol.sourceforge.net/\\ 
- 
-\\ 
-==== Zenon ==== 
-\\ 
-Zenon is an automatic theorem that handles first-order logic with equality. Its most important feature is that it outputs the proofs of the theorems, in [[coq_-checkable|Coq-checkable]] form.\\ 
- 
-    * License: BSD like\\ 
-    * Web site: http://focal.inria.fr/zenon/\\ 
- 
-\\ 
-==== Maude ==== 
-\\ 
-Maude is a high-performance reflective language and system supporting both equational and rewriting logic specification and programming for a wide range of applications. Maude has been influenced in important ways by the OBJ3 language, which can be regarded as an equational logic sublanguage. Besides supporting equational specification and programming, Maude also supports rewriting logic computation.\\ 
- 
-Rewriting logic is a logic of concurrent change that can naturally deal with state and with concurrent computations. It has good properties as a general semantic framework for giving executable semantics to a wide range of languages and models of concurrency. In particular, it supports very well concurrent object-oriented computation. The same reasons making rewriting logic a good semantic framework make it also a good logical framework, that is, a metalogic in which many other logics can be naturally represented and executed.\\ 
- 
-    * License: GNU GPL\\ 
-    * Web site: http://maude.cs.uiuc.edu/\\ 
- 
-==== PVS ==== 
-\\ 
-PVS is a verification system: that is, a specification language integrated with support tools and a theorem prover. It is intended to capture the state-of-the-art in mechanized formal methods and to be sufficiently rugged that it can be used for significant applications. PVS is a research prototype: it evolves and improves as we develop or apply new capabilities, and as the stress of real use exposes new requirements.\\ 
- 
-    * License: GNU GPL\\ 
-    * Web site: http://pvs.csl.sri.com/\\ 
- 
-==== Sparkle ==== 
-\\ 
-Sparkle is a proof tool specially constructed for [[http://clean.cs.ru.nl/|Clean]] (a state-of-the-art pure and lazy functional programming language). The tool knows the Clean 2.0 syntax and semantics. It comes with a rich set of proof tactics and a powerful hint mechanism to aid the user in proving properties of Clean programs.\\ 
- 
-    * License: GNU LGPL (same as Clean language)\\ 
-    * Web site: http://clean.cs.ru.nl/\\ 
- 
-==== Isabelle ==== 
-\\ 
-Isabelle is a generic proof assistant. It allows mathematical formulas to be expressed in a formal language and provides tools for proving those formulas in a logical calculus. The main application is the formalization of mathematical proofs and in particular formal verification, which includes proving the correctness of computer hardware or software and proving properties of computer languages and protocols.\\ 
- 
-Compared with similar tools, Isabelle's distinguishing feature is its flexibility. Most proof assistants are built around a single formal calculus, typically higher-order logic. Isabelle has the capacity to accept a variety of formal calculi. The distributed version supports higher-order logic but also axiomatic set theory and several other formalisms. See logics for more details.\\ 
- 
-  * License: BSD like\\ 
-  * Web site: http://isabelle.in.tum.de/\\ 
- 
-==== [[proof_power|ProofPower]] ==== 
-\\ 
-[[proof_power|ProofPower]] is a suite of tools supporting specification and proof in Higher Order Logic (HOL) and in the Z notation. The suite comprises the following packages:\\ 
- 
-        * PPDev - The [[proof_power|ProofPower]] developer kit, mainly comprising SLRP, a parser generator for Standard ML.\\ 
-        * PPTex - The [[proof_power|ProofPower]] interface to TeX and [[la_tex|LaTeX]].\\ 
-        * PPXpp - The X Windows/Motif front-end for [[proof_power|ProofPower]].\\ 
-        * PPHol - The HOL specification and proof development system.\\ 
-        * PPZed - The Z specification and proof development system.\\ 
-        * PPDaz - The Compliance Tool for specifying and verifying Ada programs.\\ 
- 
-All the [[proof_power|ProofPower]] packages except PPDaz are free, open-source, software made available under the terms of the GNU General Public License.\\ 
- 
-[[proof_power|ProofPower]] has been under ongoing development since 1989. It was originally designed and implemented by International Computers Ltd. to support proofs of specification-to-model correspondence for high-assurance secure systems. It has since played an important role in approaches to specifying and verifying safety-critical systems in work by the Defence and Evaluation Research Agency, now QinetiQ, and others. Since 1997, on-going developments to the product have been undertaken by Lemma 1 Ltd. In Spring 2000, International Computers Ltd. transferred its rights in [[proof_power|ProofPower]] to Lemma 1 Ltd who now maintain this web site and support and distribute the software.\\ 
- 
-  * License: GPL (except PPDaz)\\ 
-  * Web site: http://www.lemma-one.com/ProofPower/index/index.html\\ 
- 
-==== CVC3 ==== 
-\\ 
-CVC3 is an automatic theorem prover for Satisfiability Modulo Theories (SMT) problems. It can be used to prove the validity (or, dually, the satisfiability) of first-order formulas in a large number of built-in logical theories and their combination.\\ 
- 
-CVC3 is the last offspring of a series of popular SMT provers, which originated at Stanford University with the SVC system. In particular, it builds on the code base of CVC Lite, its most recent predecessor. Its high level design follows that of the Sammy prover.\\ 
- 
-CVC3 works with a version of first-order logic with polymorphic types and has a wide variety of features including:\\ 
- 
-        * several built-in base theories: rational and integer linear arithmetic, arrays, tuples, records, inductive data types, bit vectors, and equality over uninterpreted function symbols;\\ 
-        * support for quantifiers;\\ 
-        * an interactive text-based interface;\\ 
-        * a rich C and C++ API for embedding in other systems;\\ 
-        * proof and model generation abilities;\\ 
-        * predicate subtyping;\\ 
-        * essentially no limit on its use for research or commercial purposes (see license).\\ 
- 
-\\ 
-  * License: BSD like\\ 
-  * Web site: http://www.cs.nyu.edu/acsys/cvc3/\\ 
- 
-\\ 
-===== Model checkers ===== 
-\\ 
-Model checkers are tool that verify all possible states of a formal model, i.e. a formal description of a system. Compared to proof assistant, they can be less powerful but easier to use.\\ 
- 
-\\ 
-==== [[nu_smv|NuSMV]] ==== 
-\\ 
-[[nu_smv|NuSMV]] is a reimplementation and extension of SMV, the first model checker based on BDDs. [[nu_smv|NuSMV]] has been designed to be an open architecture for model checking, which can be reliably used for the verification of industrial designs, as a core for custom verification tools, as a testbed for formal verification techniques, and applied to other research areas.\\ 
- 
-    * License: GNU LGPL 2.1\\ 
-    * Web site: http://nusmv.irst.itc.it/\\ 
- 
-\\ 
-==== Murphi ==== 
-\\ 
-Murphi also has a formal verifier based on explicit state enumeration. The verifier performs depth- or breadth-first search in the state graph defined by a Murphi description, storing all the states it encounters in a large hash table. When a state is generated that is already in the hash table, the search algorithm does not expand its successor states (they were expanded whenever the state was originally inserted in the table).\\ 
- 
-    * License: BSD like\\ 
-    * Web site: http://verify.stanford.edu/dill/murphi.html\\ 
- 
-\\ 
-==== Mec 5 ==== 
-\\ 
-Mec 5 is a model-checker for finite [[alta_rica|AltaRica]] models, using a very expressive specification language (systems of fixpoint equations over finite relations with first-order quantifiers and equality testing).\\ 
- 
-    * License: Public domain\\ 
-    * Web site: http://altarica.labri.fr/Tools/Mec5/\\ 
- 
-==== Maria ==== 
-\\ 
-Maria is a reachability analyzer for concurrent systems that uses Algebraic System Nets (a high-level variant of Petri nets) as its modelling formalism.\\ 
- 
-    * License: GNU LGPL\\ 
-    * Web site: http://www.tcs.hut.fi/Software/maria/\\ 
- 
-===== Tools to help verification of real programs ===== 
-\\ 
-I have put under this category software that can be applied to real world programs (in language like C for example) to prove properties on them.\\ 
- 
-==== Saturn ==== 
-\\ 
-The goal of the Saturn project is to statically and automatically verify properties of large (meaning multi-million line) software systems. The focus of much of our work is simultaneously achieving scalability, precision, and a straightforward way of expressing analyses that is easy to reason about. We plan to use these techniques to verify properties of a full operating system.\\ 
- 
-        * License: BSD like\\ 
-        * Web site: http://saturn.stanford.edu/\\ 
- 
-\\ 
-==== [[frama_-c|Frama-C]] ==== 
-\\ 
-[[frama_-c|Frama-C]] is a suite of tools dedicated to the analysis of the source code of software written in C.\\ 
- 
-If you have a C program and need to\\ 
- 
-        * validate it formally\\ 
-        * look for potential runtime errors\\ 
-        * audit or review it\\ 
-        * reverse engineer it to understand its structure\\ 
-        * generate formal documentation\\ 
- 
-One or more of the following [[frama_-c|Frama-C]] tools may be of assistance to you:\\ 
- 
-        * A parser, a type checker and source level linker for C code optionally annotated with ACSL formulas.\\ 
-        * A set of builtin static analysis plugins:\\ 
-                    * A runtime error detection plug-in based on abstract interpretation techniques\\ 
-                    * A dependencies computation plug-in\\ 
-                    * An interactive value analysis plug-in\\ 
-                    * A Use/Defs computation plug-in\\ 
-                    * A slicing plug-in\\ 
-                    * A weakest precondition calculus plug-in based on [[floyd_-_hoare|Floyd-Hoare]] logic\\ 
- 
-\\ 
-        * License: GNU LGPL v2\\ 
-        * Web site: http://frama-c.cea.fr/\\ 
- 
-==== Why ==== 
-\\ 
-Why is a verification conditions generator (VCG) back-end for other verification tools. It understands ML, C and Java languages (with the help of other programs).\\ 
- 
-    * License: GNU GPL\\ 
-    * Web site: http://why.lri.fr/\\ 
- 
-\\ 
-==== CIL ==== 
-\\ 
-CIL is a framework to analyse and manipulate C programs.\\ 
- 
-    * License: BSD like\\ 
-    * Web site: http://manju.cs.berkeley.edu/cil/\\ 
- 
-\\ 
-==== Splint ==== 
-\\ 
-Splint is a tool for statically checking C programs for security vulnerabilities and coding mistakes. With minimal effort, Splint can be used as a better lint. If additional effort is invested adding annotations to programs, Splint can perform stronger checking than can be done by any standard lint.\\ 
- 
-    * License: GNU GPL\\ 
-    * Web site: http://www.splint.org/\\ 
-    * Debian packages: splint splint-doc\\ 
- 
-\\ 
-==== Cqual ==== 
-\\ 
-Cqual is a type-based analysis tool that provides a lightweight, practical mechanism for specifying and checking properties of C programs. Cqual extends the type system of C with extra user-defined type qualifiers. The programmer adds type qualifier annotations to their program in a few key places, and Cqual performs qualifier inference to check whether the annotations are correct. The analysis results are presented with a user interface that lets the programmer browse the inferred qualifiers and their flow paths.\\ 
- 
-    * License: GNU GPL\\ 
-    * Web site: http://www.cs.umd.edu/~jfoster/cqual/\\ 
- 
-\\ 
-==== CCured ==== 
-\\ 
-CCured is a source-to-source translator for C. It analyzes the C program to determine the smallest number of run-time checks that must be inserted in the program to prevent all memory safety violations. The resulting program is memory safe, meaning that it will stop rather than overrun a buffer or scribble over memory that it shouldn't touch. Many programs can be made memory-safe this way while losing only 10$-160% run-time performance (the performance cost is smaller for cleaner programs, and can be improved further by holding CCured's hand on the parts of the program that it does not understand by itself). Using CCured we have found bugs that Purify misses with an order of magnitude smaller run-time cost.\\ 
- 
-    * License: BSD like\\ 
-    * Web site: http://manju.cs.berkeley.edu/ccured/\\ 
- 
-\\ 
-==== CHIC ==== 
-\\ 
-CHIC is a modular verifier for behavioral compatibility checking of software and hardware components. The goal of CHIC is to be able to check that the interfaces for software or hardware components provide guarantees that satisfy the assumptions they make about each other. CHIC supports a variety of interface property specification formalisms.\\ 
- 
-    * License: BSD like\\ 
-    * Web site: http://www-cad.eecs.berkeley.edu/~arindam/Chic/\\ 
- 
-\\ 
-==== Smatch!!! ==== 
-\\ 
-Smatch is C source checker but mainly focused checking the Linux kernel code. It is based on the papers about the Stanford Checker.\\ 
- 
-Basically, Smatch uses a modified gcc to generate .c.sm files. The .c.sm files are piped through individual Smatch scripts that print out error messages.\\ 
- 
-For example, someone might want to write a Smatch script that looked for code that called copy_to_user() while the kernel was locked. If the script saw a place that called lock_kernel() then it would record the state as locked. If the script saw a place that called unlock_kernel() it would set the state to unlocked. If the state was locked and the script saw a place that called copy_to_user() the script would print out an error message.\\ 
- 
-    * License: GNU GPL\\ 
-    * Web site: http://smatch.sourceforge.net/\\ 
- 
-\\ 
-==== Sparse ==== 
-\\ 
-Sparse, the semantic parser, provides a compiler frontend capable of parsing most of ANSI C as well as many GCC extensions, and a collection of sample compiler backends, including a static analyzer also called "sparse". Sparse provides a set of annotations designed to convey semantic information about types, such as what address space pointers point to, or what locks a function acquires or releases.\\ 
- 
-        * License: OSL v1.1 ("Open Software License")\\ 
-        * Web site: http://kernel.org/pub/linux/kernel/people/josh/sparse/\\ 
- 
-\\ 
-==== Focal ==== 
-\\ 
-Focal (formerly known as [[foc|FoC]]) is a language for software-proof codesign. In Focal, code, specifications, and proofs are developped together in the same source files, using a novel object-oriented module system. The compiler analyses the dependencies in order to ensure the consistency of the source, then translates the code to Objective Caml, and the proofs to Coq.\\ 
- 
-    * License: BSD like\\ 
-    * Web site: http://modulogic.inria.fr/focal/download/\\ 
- 
-\\ 
-===== Tools to make formal models ===== 
-\\ 
- 
-==== Alloy ==== 
-\\ 
-The Alloy Analyzer is a tool developed by the Software Design Group for analyzing models written in Alloy, a simple structural modeling language based on first-order logic. The tool can generate instances of invariants, simulate the execution of operations (even those defined implicitly), and check user-specified properties of a model. Alloy and its analyzer have been used primarily to explore abstract software designs. Its use in analyzing code for conformance to a specification and as an automatic test case generator are being investigated in ongoing research projects.\\ 
- 
-    * License: GNU GPL\\ 
-    * Web site: http://alloy.mit.edu/\\ 
- 
-\\ 
-===== Conclusion ===== 
-\\ 
-It remains to test all those programs. A hard task that is not yet done. 
 
free_software_for_formal_verification.1235747365.txt.gz · Dernière modification: Le 13/02/2012 à 21:07 (modification externe)     Haut de page
Recent changes RSS feed Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki Design by Chirripó