diff --git a/lib/Monads/NonDetMonadVCG.thy b/lib/Monads/NonDetMonadVCG.thy index 517c3f0e54..189bdff69e 100644 --- a/lib/Monads/NonDetMonadVCG.thy +++ b/lib/Monads/NonDetMonadVCG.thy @@ -711,11 +711,6 @@ lemma hoare_vcg_if_split: "\ P \ \Q\ f \S\; \P \ \R\ g \S\ \ \ \\s. (P \ Q s) \ (\P \ R s)\ if P then f else g \S\" by simp -lemma hoare_vcg_if_split_strong: - "\ P \ \Q\ f \S\; \P \ \R\ g \S\ \ \ - \\s. if P then Q s else R s\ if P then f else g \S\" - by simp - lemma hoare_vcg_if_splitE: "\ P \ \Q\ f \S\,\E\; \P \ \R\ g \S\,\E\ \ \ \\s. (P \ Q s) \ (\P \ R s)\ if P then f else g \S\,\E\" diff --git a/lib/Monads/OptionMonadWP.thy b/lib/Monads/OptionMonadWP.thy index b535a14ff1..2d60bc52d2 100644 --- a/lib/Monads/OptionMonadWP.thy +++ b/lib/Monads/OptionMonadWP.thy @@ -22,13 +22,8 @@ begin (* Partial correctness. *) definition ovalid :: "('s \ bool) \ ('s \ 'a option) \ ('a \ 's \ bool) \ bool" - ("o\_\/ _ /\_\") where - "o\P\ f \Q\ \ \s r. P s \ f s = Some r \ Q r s" - -abbreviation (input) - oinvariant :: "('s,'a) lookup \ ('s \ bool) \ bool" ("_ o\_\" [59,0] 60) -where - "oinvariant f P \ o\P\ f \\_. P\" + ("\_\/ _ /\_\") where + "\P\ f \Q\ \ \s r. P s \ f s = Some r \ Q r s" (* Total correctness. *) definition ovalidNF :: "('s \ bool) \ ('s \ 'a option) \ ('a \ 's \ bool) \ bool" where @@ -64,6 +59,10 @@ lemmas owhile_add_inv = owhile_inv_def[symmetric] (* WP rules for ovalid. *) +lemma ovalid_inv[wp]: + "ovalid P f (\_. P)" + by (simp add: ovalid_def) + lemma obind_wp[wp]: "\ \r. ovalid (R r) (g r) Q; ovalid P f R \ \ ovalid P (obind f g) Q" by (simp add: ovalid_def obind_def split: option.splits, fast) diff --git a/lib/Monads/WhileLoopRules.thy b/lib/Monads/WhileLoopRules.thy index d9121226ef..a7c2c7f7e5 100644 --- a/lib/Monads/WhileLoopRules.thy +++ b/lib/Monads/WhileLoopRules.thy @@ -383,7 +383,7 @@ lemma whileLoop_wp: \ I r \ whileLoop C B r \ Q \" by (rule valid_whileLoop) -lemma whileLoop_wp': +lemma whileLoop_valid_inv: "(\r. \ \s. I r s \ C r s \ B r \ I \) \ \ I r \ whileLoop C B r \ I \" apply (fastforce intro: whileLoop_wp) done @@ -392,7 +392,7 @@ lemma valid_whileLoop_cond_fail: assumes pre_implies_post: "\s. P r s \ Q r s" and pre_implies_fail: "\s. P r s \ \ C r s" shows "\ P r \ whileLoop C B r \ Q \" - apply (insert assms) + using assms apply (clarsimp simp: valid_def) apply (subst (asm) whileLoop_cond_fail) apply blast