Compositional proof rules for stateful clients #
These semantic Hoare rules generate demonic admissibility and postcondition obligations for pure results, calls, sequential composition and consequence. They apply before choosing a backend; implementation transports their results to native execution. Resource obligations are separate.
Main definitions #
StateTransitionSpec.Hoare: demonic Hoare triple assertingD.DemonicValid s pandpost v s'for every validD.ClientRun s p v s' tr.
Main results #
StateTransitionSpec.Hoare.pure,StateTransitionSpec.Hoare.call,StateTransitionSpec.Hoare.call_ofFn,StateTransitionSpec.Hoare.bind,StateTransitionSpec.Hoare.consequence: compositional verification rules.StateTransitionSpec.hoare_iff_ofFn: equivalence with the functionalrunClientformulation on deterministic specifications ([D.HasStepFn f]).StateTransitionSpec.Hoare.realize: a semantic client proof transports through any implementation.StateTransitionSpec.Hoare.link: transport a semantic client contract across an interface implementation.
References #
Demonic Hoare triple: from any state satisfying pre s, the client p is demonically
admissible (D.DemonicValid s p) and every valid ClientRun establishes post v s'.
Instances For
On a deterministic specification ([D.HasStepFn f]), D.Hoare is equivalent to
D.ValidHistory s (D.clientHistory s p) ∧ post (D.clientResult s p) (D.clientState s p).
Returning a value leaves the represented state unchanged.
Calling an operation requires D.valid s o and establishes post a s' for every permitted
outcome D.step s o s' a.
On a deterministic specification ([D.HasStepFn f]), calling an operation requires its
precondition and exposes (D.stepFn s o).
Sequencing exposes only the intermediate abstract postcondition to its continuation.
Strengthen preconditions and weaken postconditions without reopening a client proof.
Every native execution of a verified client satisfies its abstract postcondition.
Linking preserves a client contract while existentially hiding the module representation.