Why is operational semantics considered a prerequisite for formal program verification rather than an alternative to it?
Think about your answer, then reveal below.
Model answer: Hoare logic, weakest preconditions, abstract interpretation, and type systems all reason about program behavior. But what does a program 'do'? Operational semantics provides the mathematical definition: the transition relation IS the program's meaning. Hoare logic's soundness theorem says that if {P} C {Q} is derivable, then for every state satisfying P, the operational execution of C from that state (if it terminates) yields a state satisfying Q. Without operational semantics, soundness is circular -- you would be verifying programs against an informal notion of what they compute. The semantics is the ground truth against which all verification techniques are proven correct.
This foundational role is why operational semantics appears in any rigorous treatment of programming languages and formal methods. The standard proof technique for type soundness, for instance, is 'progress and preservation': progress says well-typed programs can always take a step (using the small-step transition relation), and preservation says each step preserves typedness. Both are stated and proved with respect to the operational semantics.