Partial Incorrectness Logic
Lena Verscht, Ānrán Wáng, Benjamin Lucien Kaminski
TL;DR
This work develops partial incorrectness logic as a dual to partial/total correctness within Hoare-style reasoning, using Dijkstra-style predicate transformers to relate preconditions and postconditions. It introduces strongest liberal post and weakest liberal pre operators, and shows how partial correctness and partial incorrectness can be established through fixed-point reasoning, aided by Park induction and variant-based termination techniques. The paper further develops reachability analysis via liberal and non-liberal transformers, provides backward-variant rules for proving reachability, and demonstrates applications such as under-approximation triples and backtracking responsibilities to isolate relevant variables and origins. Although focused on deterministic and reversible programs, the framework extends to nondeterministic and irreversible computations and to quantitative expectations, offering a unified, dual perspective on correctness and reachability with practical proof techniques.
Abstract
Reasoning about program correctness has been a central topic in static analysis for many years, with Hoare logic (HL) playing an important role. The key notions in HL are partial and total correctness. Both require that program executions starting in a specified set of initial states (the precondition) reach a designated set of final states (the postcondition). Partial correctness is more lenient in that it does not require termination, effectively deeming divergence acceptable. We explore partial incorrectness logic, which stands in relation to O'Hearn's "total" incorrectness logic as partial correctness does to total correctness: Partial correctness allows divergence, partial incorrectness allows unreachability. While the duality between divergence and unreachability may not be immediately apparent, we explore this relationship further. Our chosen formalism is predicate transformers à la Dijkstra. We focus here on deterministic and reversible programs, though the discussion extends to nondeterministic and irreversible computations, both of which introduce additional nondeterminism that must be addressed.
