- Formal verification
In the context of hardware and software systems,

**formal verification**is the act of proving or disproving thecorrectness of intendedalgorithms underlying a system with respect to a certain formal specification or property, usingformal methods ofmathematics .**Usage**Formal verification can be used for example for systems such as

cryptographic protocol s, combinational circuits,digital circuit s with internal memory, and software expressed as source code.The verification of these systems is done by providing a formal proof on an abstract mathematical model of the system, the correspondence between the mathematical model and the nature of the system being otherwise known by construction. Examples of mathematical objects often used to model systems are:

finite state machine s,labelled transition system s,Petri net s,timed automata ,hybrid automata ,process algebra , formal semantics of programming languages such asoperational semantics ,denotational semantics ,axiomatic semantics andHoare logic .**Approaches to formal verification**There are roughly two approaches to formal verification.

The first approach is

model checking , which consists of a systematically exhaustive exploration of the mathematical model (this is possible for finite models, but also for some infinite models where infinite sets of states can be effectively represented). Usually this consists of exploring all states and transitions in the model, by using smart and domain-specific abstraction techniques to consider whole groups of states in a single operation and reduce computing time. Implementation techniques includestate space enumeration , symbolic state space enumeration,abstract interpretation ,symbolic simulation ,abstraction refinement .The second approach is logical inference. It consists of using a formal version of mathematical reasoning about the system, usually using theorem proving software such as a

HOL theorem prover , theACL2 theorem prover or theIsabelle theorem prover . This is usually only partially automated and is driven by the user's understanding of the system to validate.The properties to be verified are often described in

temporal logic s, such aslinear temporal logic (LTL) orcomputational tree logic (CTL).**Validation and Verification**Verification is one aspect of testing a product's fitness for purpose.Validation is the complementary aspect. Often one refers to the overall checking process as V & V.*

**Validation**: "Are we trying to make the right thing?", i.e., does the product do what the user really requires?

***Verification**: "Have we made what we were trying to make?", i.e., does the product conform to the specifications?The verification process consists of static and dynamic parts. E.g., for a software product one can inspect the source code (static) and run against specific test cases (dynamic). Validation usually can only be done dynamically, i.e., the product is tested by putting it through typical usages and atypical usages ("Can we break it?"). See also

Verification and Validation **ee also***

Automated theorem proving

*Formal equivalence checking

*LURCH

*Model checking

*Proof checker

*Property Specification Language

*Selected formal verification bibliography

*Static code analysis

*Temporal logic in finite-state verification

*Post silicon validation **External links*** [

*http://www.fmnet.info/gc6/ GC6 - The Verification Grand Challenge for Computing*]

*Wikimedia Foundation.
2010.*