(* Title: MiniML/Maybe.thy
Author: Wolfgang Naraschewski and Tobias Nipkow
Copyright 1996 TU Muenchen
*)
section "Universal error monad"
theory Maybe
imports Main
begin
definition
option_bind :: "['a option, 'a => 'b option] => 'b option" where
"option_bind m f = (case m of None => None | Some r => f r)"
syntax "_option_bind" :: "[pttrns,'a option,'b] => 'c" (‹(_ := _;//_)› 0)
syntax_consts "_option_bind" == option_bind
translations "P := E; F" == "CONST option_bind E (λP. F)"
― ‹constructor laws for @{text option_bind}›
lemma option_bind_Some: "option_bind (Some s) f = (f s)"
by (simp add: option_bind_def)
lemma option_bind_None: "option_bind None f = None"
by (simp add: option_bind_def)
declare option_bind_Some [simp] option_bind_None [simp]
― ‹expansion of @{text option_bind}›
lemma split_option_bind: "P(option_bind res f) =
((res = None ⟶ P None) ∧ (∀s. res = Some s ⟶ P(f s)))"
unfolding option_bind_def
by (rule option.split)
lemma split_option_bind_asm: "P(option_bind res f) =
(~ ((res = None ∧ ¬ P None) ∨ (∃s. res = Some s ∧ ¬ P(f s))))"
unfolding option_bind_def
by (rule option.split_asm)
lemma option_bind_eq_None [simp]:
"((option_bind m f) = None) = ((m=None) | (∃p. m = Some p ∧ f p = None))"
by (simp split: split_option_bind)
end
¤ Dauer der Verarbeitung: 0.0 Sekunden
(vorverarbeitet am 2026-11-04)
¤
*© Formatika GbR, Deutschland