This document discusses formal methods in software engineering. It begins by defining formal methods as mathematically-based techniques for specifying, developing, and verifying systems properties in a systematic way. The document then provides an example of using formal methods to specify the behavior of a cooling water tank system. Key steps include: 1) defining types and functions mathematically, 2) stating properties to check, 3) attempting to verify properties through proof, 4) finding a counter-example, and 5) correcting flaws in the specification.