The Central Problem of Formal Methods: Model Validation; Program Derivation; Program Verification. Introduction to Hoare Logic. Program Annotation and Automated Static Checking. The ESC/Java2 tool.
Limitations of ESC/Java2: Examples where correctness or completeness fails.
The Caduceus tool for program verification: usage with Coq and Simplify. The Caduceus workflow. Simple examples proved with automatic tactics. More complex examples. Case reasoning; frame conditions; modular reasoning.
Introduction to the mathematics of program construction. Correct by verification versus correct by construction. Description versus calculation. Historical perspective on the PF-transform. Point-free notation and reasoning. Rules of the PF-transform.
PF-transform: when everything becomes a relation. Introduction to the binary relation calculus. Taxonomy of binary relations. Functions. Conditions and coreflexives. PF-transform of n-ary relations. Products and Sums. Universal constructions and properties. Galois connections.
No lecture (Lecturer away in an international advisory board meeting)
Constructive proofs. A PF-approach to polymorphic type checking. Reynolds' relation on functions. The free-theorem of polymorphism in one equation. Extended static checking (ESC) in the PF-style. Induction-free calculation of preconditions and invariants. Three case studies.
First part (two hours): Assessment0708 (paper presentations). Second part (one hour): Discussion. Open issues and hot topics in the mathematics of program construction. Research directions in correct by construction.