From Fedora Project Wiki

Revision as of 15:26, 20 January 2010 by Dwheeler (talk | contribs) (Explain SMT)

Formal methods tool suite

Here are major categories of formal methods tools, along with the specific programs and packages that implement those categories in Fedora. See the Fedora Formal Methods Special Interest Group (SIG) for more information.

Theorem Provers

Theorem provers can prove whether or not a goal can be proved given a set of assumptions.

First-Order Logic (FOL) Theorem Provers

First-order Logic (FOL) is a widely-used mathematical language for stating assumptions and goals. FOL is not as expressive as some other languages, but it is sufficient for many purposes, and FOL provers tend to be able to prove much more in an automated way than those with more powerful languages (e.g., higher-order logics).

  • E
  • prover9 (prover9-apps, prover9-devel, prover9-doc)

Satisfiability Modulo Theories (SMT) Solvers

Satisfiability Modulo Theories (SMT) Solvers can take a formula in first-order logic (FOL) and determine if the formula is satisfiable (e.g., if it is possible to assign variables and undefined functions/predicates so that the formulas will be true). In addition, SMT Solvers support one or more "theories", i.e., a set of predefined functions/predicates (such as those for number, lists, and so on). Many of these tools support the SMT-LIB input format. SAT solvers are often used as a building block to develop other tools.

  • cvc3
  • alt-ergo


SAT Solvers

A SAT (satisfiability) solver can determine if boolean variables (variables which can be true or false) can have values that would make a set of formulas true. If it's possible, then the formulas are satisfiable. In the worst case this problem is extremely hard (i.e., they are NP-complete), but modern algorithms can usually solve typical SAT problems very quickly. SAT solvers are often used as a building block to develop other tools.

Packages:

  • minisat2
  • picosat

Other

The tools packaged so far, and not listed above, are: coq (coq-coqide, coq-doc, coq-emacs), emacs-proofgeneral (emacs-common-proofgeneral, emacs-proofgeneral-el.noarch), xemacs-proofgeneral (xemacs-proofgeneral-el), frama-c {TODO}, ppl (ppl-*), pvs-sbcl, sat4j, splint, stp (stp-devel), tex-zfuzz, why (why-coq, why-gwhy), zenon, csisat.