This document discusses formal methods in software engineering. It defines formal methods as mathematically-based techniques for specifying, developing, and verifying computer systems in a systematic way. Formal methods use formal logic to model systems and prove that models satisfy requirements. The document provides an example of applying formal methods to specify a water tank system that refills when low. Key steps include: 1) defining types and functions, 2) stating properties as logical statements, and 3) constructing proofs to show properties hold for all cases.