# Formal Methods

Welcome to the Formal Methods group at the University of Toronto.

## Formal Methods Overview

### What are Formal Methods?

"Formal methods" means the mathematics and modeling applicable to the specification, design, and verification of software. The emphasis is on the creation of theories and tools to aid these activities. The methods are "formal" in the sense that they are precise enough to be implemented on a computer. With these techniques, we can develop specifications and models which describe all or part of a system's behavior at various levels of abstraction, and use them as input to an automated theorem prover. For requirements engineering, the input may be a collection of partial specifications, and the output may be a report on where inconsistencies lie. For design, the input may be a specification and a design step, and the output is either "Yes, the design step is consistent with the specification.", or "No, and here's why not: ... ". For verification, the input may be a specification and a desired property of system behavior, and the output may be either "Yes, the property is a consequence of the specification.", or "No, and here's why not: ... ".

### Where are Formal Methods applied?

Although a complete formal verification of a large complex system is impractical at this time, formal methods are applied to various aspects, or properties, of large systems. More commonly, they are applied to the detailed specification, design, and verification of critical parts of large systems such as avionics and aerospace systems, and to small, safety-critical systems such as heart monitors.