This lecture introduces formal verification as a method to rigorously prove that computer systems satisfy a specification by defining mathematically rigorous notions and using automated tools. A comparison to testing is made, highlighting the advantages of formal verification over traditional testing methods. The feasibility of automated theorem proving is discussed, showcasing how modern software verifiers can efficiently handle complex mathematical theorems. The process of compiling program correctness statements into verification conditions is explained, emphasizing the importance of transforming properties into valid formulas.