theory Maybe imports Spartan begin axiomatization Maybe :: \o \ o\ and none :: \o \ o\ and some :: \o \ o \ o\ and MaybeInd :: \o \ (o \ o) \ o \ (o \ o) \ o \ o\ where MaybeF: "A: U i \ Maybe A: U i" and Maybe_none: "A: U i \ none A: Maybe A" and Maybe_some: "a: A \ some A a: Maybe A" and MaybeE: "\ m: Maybe A; c\<^sub>0: C (none A); \a. a: A \ f a: C (some A a); \m. m: Maybe A \ C m: U i \ \ MaybeInd A (\m. C m) c\<^sub>0 (\a. f a) m: C m" and Maybe_comp_none: "\ c\<^sub>0: C (none A); \a. a: A \ f a: C (some A a); \m. m: Maybe A \ C m: U i \ \ MaybeInd A (\m. C m) c\<^sub>0 (\a. f a) (none A) \ c\<^sub>0" and Maybe_comp_some: "\ m: Maybe A; c\<^sub>0: C (none A); \a. a: A \ f a: C (some A a); \m. m: Maybe A \ C m: U i \ \ MaybeInd A (\m. C m) c\<^sub>0 (\a. f a) (some A a) \ f a" lemmas [intros] = MaybeF Maybe_none Maybe_some and [elims "?m"] = MaybeE and [comps] = Maybe_comp_none Maybe_comp_some abbreviation "MaybeRec A C \ MaybeInd A (K C)" definition none_i ("none") where [implicit]: "none \ Maybe.none ?" definition some_i ("some") where [implicit]: "some a \ Maybe.some ? a" translations "none" \ "CONST Maybe.none A" "some a" \ "CONST Maybe.some A a" end