Program verification is the process of proving or disproving the correctness of a program with respect to its formal specification using mathematical methods. It ensures that software behaves as expected, addressing aspects like correctness, termination, and absence of errors[2][4][5].

Techniques include static verification (e.g., formal proofs, theorem proving) and dynamic verification (e.g., testing)[2]. Tools like SMT solvers, intermediate verification languages, and frameworks such as Viper are often used for automation[1][4]. Applications span deterministic, concurrent, and distributed programs, ensuring properties like interference and deadlock freedom[5].

Citations: [1] Program Verification – Programming Methodology Group | ETH Zurich https://www.pm.inf.ethz.ch/education/courses/program-verification.html [2] Software verification - Wikipedia https://en.wikipedia.org/wiki/Software_verification [3] [PDF] Program Verification: Lecture 1 https://courses.grainger.illinois.edu/CS476/fa2022/lectures/pv1-slides.pdf [4] Formal verification https://en.wikipedia.org/wiki/Formal_verification [5] [PDF] Introduction to Program Verification - CORE https://core.ac.uk/download/pdf/301633328.pdf [6] [PDF] Program Verification - cs.Princeton https://www.cs.princeton.edu/courses/archive/spr16/cos217/lectures/24_ProgramVerif.pdf