lib: OptionMonad: add more obind decomposition, oassert simps
This commit is contained in:
parent
014f351265
commit
66d87cd550
|
@ -188,6 +188,14 @@ lemma in_oassert_eq [simp]:
|
|||
"(oassert P s = Some v) = P"
|
||||
by (simp add: oassert_def)
|
||||
|
||||
lemma oassert_True [simp]:
|
||||
"oassert True = oreturn ()"
|
||||
by (simp add: oassert_def)
|
||||
|
||||
lemma oassert_False [simp]:
|
||||
"oassert False = ofail"
|
||||
by (simp add: oassert_def)
|
||||
|
||||
lemma oassertE:
|
||||
"\<lbrakk> oassert P s = Some v; P \<Longrightarrow> Q \<rbrakk> \<Longrightarrow> Q"
|
||||
by simp
|
||||
|
@ -196,6 +204,10 @@ lemma in_obind_eq:
|
|||
"((f |>> g) s = Some v) = (\<exists>v'. f s = Some v' \<and> g v' s = Some v)"
|
||||
by (simp add: obind_def split: option.splits)
|
||||
|
||||
lemma obind_eqI:
|
||||
"\<lbrakk> f s = f s' ; \<And>x. f s = Some x \<Longrightarrow> g x s = g' x s' \<rbrakk> \<Longrightarrow> obind f g s = obind f g' s'"
|
||||
by (simp add: obind_def split: option.splits)
|
||||
|
||||
lemma obindE:
|
||||
"\<lbrakk> (f |>> g) s = Some v;
|
||||
\<And>v'. \<lbrakk>f s = Some v'; g v' s = Some v\<rbrakk> \<Longrightarrow> P\<rbrakk> \<Longrightarrow> P"
|
||||
|
|
Loading…
Reference in New Issue