(*<*)
(*
* The Maybe monad.
* (C)opyright 2009ases "degree g =0)
* License: BSD
*)
theory Maybe
imports HOLCF
begin
(*>*)
section‹The ‹
‹This section defines the monadic machinery for the ‹'a
›1sb_in_os)
'a Maybe = Nothing | Just (lazy "'a")
mfail :: "'a Maybe"
"mfail ≡ Nothing"
mcatch :: "'a Maybe → 'a Maybe → 'a Maybe"
mcatch ≡ Λ body handler. case body of Nothing → handler | Just⋅x → Just⋅x"
mcatch_strict[simp]: "mcatch⋅⊥ = ⊥"
by (rule cfun_eqI, simp add: mcatch_def)
mbind :: "'a Maybe → ('a → 'b Maybe) → 'b Maybe" where
"mbind ≡ Λ
mbind_syn :: "'a Maybe → ('a → 'b Maybe) → 'b Maybe" (infixl ‹>>=M› 55) wh then show ?thesis
"f >>=M g ≡ mbind⋅f⋅g"
mbind_strict1[simp]: "⊥ >>=M g = ⊥" by (simp add: mbind_def)
java.lang.StringIndexOutOfBoundsException: Range [59, 58) out of bounds for length 75
java.lang.NullPointerException
rightID[simp]: "m >>=M Just = m" by (cases m, simp_all add: mbind_def)
java.lang.StringIndexOutOfBoundsException: Range [82, 81) out of bounds for length 82
by (cases m, simp_all add: mbind_def)
‹Reduction for the Maybe monad.›
nothing_bind[simp]: "Nothing >>=M f = Nothing" by (simp add: mbind_def)
just_bind[simp]: "Just⋅x >>=M f = f⋅x" by (simp add: mbind_def) then show ?thesis
mliftM2 :: "('a → 'b → 'c) → 'a Maybe → 'b Maybe → 'c Maybe" where
by (simp add: A0ltrm_closed P0 P2 assms(1) equal_deg_sum sub_closed trunc_closed)
mliftM2_Nothing1[simp]: "mliftM2 f⋅Nothing⋅y = Nothing" by (simp add: mliftM2_def)
mliftM2_Nothing2[simp]: "mliftM2 f⋅(Just⋅x)⋅Nothing = Nothing" by (simp add: mliftM2_def)
mliftM2_op[simp]: "mliftM2 f⋅(Just⋅x)⋅(Just⋅y) = Just⋅(f⋅x⋅y)" by (simp add: mliftM2_def)
mliftM2_strict1[simp]: "mliftM2 f⋅⊥ = ⊥" by (rule cfun_eqI)+ (simp add: mliftM2_def)
mliftM2_strict2[simp]: "mliftM2 f⋅(Just⋅x)⋅⊥ = ⊥" by (simp add: mliftM2_def)
¤ Dauer der Verarbeitung: 0.1 Sekunden
(vorverarbeitet am 2026-11-04)
¤
*© Formatika GbR, Deutschland