Formal methods for computer systems

Formal methods used in developing and verifying software and hardware systems are mathematically based techniques for describing and reasoning about system properties. Such formal methods provide frameworks within which people specify, develop, and verify systems in a systematic, rather than ad hoc, manner. Formal methods include the more specific activities of program specification, program verification, and hardware verification.