Theory WP
theory WP
imports Main
begin
definition
triple_judgement :: "('a ⇒ bool) ⇒ 'b ⇒ ('a ⇒ 'b ⇒ bool) ⇒ bool"
where
"triple_judgement pre body property = (∀s. pre s ⟶ property s body)"
definition
postcondition :: "('r ⇒ 's ⇒ bool) ⇒ ('a ⇒ 'b ⇒ ('r × 's) set)
⇒ 'a ⇒ 'b ⇒ bool"
where
"postcondition P f = (λa b. ∀(rv, s) ∈ f a b. P rv s)"
definition
postconditions :: "('a ⇒ 'b ⇒ bool) ⇒ ('a ⇒ 'b ⇒ bool) ⇒ ('a ⇒ 'b ⇒ bool)"
where
"postconditions P Q = (λa b. P a b ∧ Q a b)"
ML_file ‹WP-method.ML›
declare [[wp_warn_unused = false]]
setup WeakestPre.setup
method_setup wp = ‹WeakestPre.apply_rules_args false›
"applies weakest precondition rules"
method_setup wp_once = ‹WeakestPre.apply_once_args false›
"applies one weakest precondition rule"
method_setup wp_trace = ‹WeakestPre.apply_rules_args true›
"applies weakest precondition rules with tracing"
method_setup wp_once_trace = ‹WeakestPre.apply_once_args true›
"applies one weakest precondition rule with tracing"
end