Theory "option"

Parents     sum one

Signature

Type Arity
option 1
Constant Type
option_case :'b -> ('a -> 'b) -> 'a option -> 'b
NONE :'a option
SOME :'a -> 'a option
IS_NONE :'a option -> bool
option_ABS :'a + one -> 'a option
IS_SOME :'a option -> bool
option_REP :'a option -> 'a + one
THE :'a option -> 'a
OPTION_JOIN :'a option option -> 'a option
OPTION_MAP :('a -> 'b) -> 'a option -> 'b option

Definitions

option_TY_DEF
|- ?rep. TYPE_DEFINITION (\x. T) rep
option_REP_ABS_DEF
|- (!a. option_ABS (option_REP a) = a) /\
   !r. (\x. T) r = (option_REP (option_ABS r) = r)
SOME_DEF
|- !x. SOME x = option_ABS (INL x)
NONE_DEF
|- NONE = option_ABS (INR ())
option_case_def
|- (!u f. case u f NONE = u) /\ !u f x. case u f (SOME x) = f x
OPTION_MAP_DEF
|- (!f x. OPTION_MAP f (SOME x) = SOME (f x)) /\ !f. OPTION_MAP f NONE = NONE
IS_SOME_DEF
|- (!x. IS_SOME (SOME x) = T) /\ (IS_SOME NONE = F)
IS_NONE_DEF
|- (!x. IS_NONE (SOME x) = F) /\ (IS_NONE NONE = T)
THE_DEF
|- !x. THE (SOME x) = x
OPTION_JOIN_DEF
|- (OPTION_JOIN NONE = NONE) /\ !x. OPTION_JOIN (SOME x) = x


Theorems

option_Axiom
|- !e f. ?fn. (!x. fn (SOME x) = f x) /\ (fn NONE = e)
option_induction
|- !P. P NONE /\ (!a. P (SOME a)) ==> !x. P x
SOME_11
|- !x y. (SOME x = SOME y) = (x = y)
NOT_NONE_SOME
|- !x. ~(NONE = SOME x)
NOT_SOME_NONE
|- !x. ~(SOME x = NONE)
option_nchotomy
|- !opt. (opt = NONE) \/ ?x. opt = SOME x
option_CLAUSES
|- (!x y. (SOME x = SOME y) = (x = y)) /\ (!x. THE (SOME x) = x) /\
   (!x. ~(NONE = SOME x)) /\ (!x. ~(SOME x = NONE)) /\
   (!x. IS_SOME (SOME x) = T) /\ (IS_SOME NONE = F) /\
   (!x. IS_NONE x = (x = NONE)) /\ (!x. ~IS_SOME x = (x = NONE)) /\
   (!x. IS_SOME x ==> (SOME (THE x) = x)) /\ (!x. case NONE SOME x = x) /\
   (!x. case x SOME x = x) /\ (!x. IS_NONE x ==> (case e f x = e)) /\
   (!x. IS_SOME x ==> (case e f x = f (THE x))) /\
   (!x. IS_SOME x ==> (case e SOME x = x)) /\ (!u f. case u f NONE = u) /\
   (!u f x. case u f (SOME x) = f x) /\
   (!f x. OPTION_MAP f (SOME x) = SOME (f x)) /\
   (!f. OPTION_MAP f NONE = NONE) /\ (OPTION_JOIN NONE = NONE) /\
   !x. OPTION_JOIN (SOME x) = x
option_case_compute
|- case e f x = (if IS_SOME x then f (THE x) else e)
OPTION_MAP_EQ_SOME
|- !f x y. (OPTION_MAP f x = SOME y) = ?z. (x = SOME z) /\ (y = f z)
OPTION_MAP_EQ_NONE
|- !f x. (OPTION_MAP f x = NONE) = (x = NONE)
OPTION_JOIN_EQ_SOME
|- !x y. (OPTION_JOIN x = SOME y) = (x = SOME (SOME y))
option_case_cong
|- !M M' u f.
     (M = M') /\ ((M' = NONE) ==> (u = u')) /\
     (!x. (M' = SOME x) ==> (f x = f' x)) ==>
     (case u f M = case u' f' M')