Structure errorMonadTheory


Source File Identifier index Theory binding index

signature errorMonadTheory =
sig
  type thm = Thm.thm
  
  (*  Definitions  *)
    val bind_def : thm
    val choice_def : thm
    val error_TY_DEF : thm
    val error_case_def : thm
    val error_size_def : thm
    val guard_def : thm
    val try_def : thm
  
  (*  Theorems  *)
    val EXISTS_ERROR : thm
    val FORALL_ERROR : thm
    val bind_EQ_error : thm
    val bind_EQ_return : thm
    val bind_return : thm
    val datatype_error : thm
    val error_11 : thm
    val error_Axiom : thm
    val error_case_cong : thm
    val error_case_eq : thm
    val error_distinct : thm
    val error_induction : thm
    val error_nchotomy : thm
(*
   [hol] Parent theory of "errorMonad"
   
   [bind_def]  Definition
      
      ⊢ (∀v f. bind (return v) f = f v) ∧ ∀e f. bind (error e) f = error e
   
   [choice_def]  Definition
      
      ⊢ (∀v m. choice (return v) m = return v) ∧
        ∀e m. choice (error e) m = m
   
   [error_TY_DEF]  Definition
      
      ⊢ ∃rep.
          TYPE_DEFINITION
            (λa0.
                 ∀ $var$('error').
                   (∀a0.
                      (∃a. a0 =
                           (λa.
                                ind_type$CONSTR 0 (a,ARB)
                                  (λn. ind_type$BOTTOM)) a) ∨
                      (∃a. a0 =
                           (λa.
                                ind_type$CONSTR (SUC 0) (ARB,a)
                                  (λn. ind_type$BOTTOM)) a) ⇒
                      $var$('error') a0) ⇒
                   $var$('error') a0) rep
   
   [error_case_def]  Definition
      
      ⊢ (∀a f f1. error_CASE (return a) f f1 = f a) ∧
        ∀a f f1. error_CASE (error a) f f1 = f1 a
   
   [error_size_def]  Definition
      
      ⊢ (∀f f1 a. error_size f f1 (return a) = 1 + f a) ∧
        ∀f f1 a. error_size f f1 (error a) = 1 + f1 a
   
   [guard_def]  Definition
      
      ⊢ ∀e b. guard e b = if b then return () else error e
   
   [try_def]  Definition
      
      ⊢ (∀v f. try (return v) f = return v) ∧ ∀e f. try (error e) f = f e
   
   [EXISTS_ERROR]  Theorem
      
      ⊢ (∃e. P e) ⇔ (∃a. P (return a)) ∨ ∃e. P (error e)
   
   [FORALL_ERROR]  Theorem
      
      ⊢ (∀e. P e) ⇔ (∀a. P (return a)) ∧ ∀e. P (error e)
   
   [bind_EQ_error]  Theorem
      
      ⊢ bind m f = error e ⇔ m = error e ∨ ∃u. m = return u ∧ f u = error e
   
   [bind_EQ_return]  Theorem
      
      ⊢ bind m f = return v ⇔ ∃u. m = return u ∧ f u = return v
   
   [bind_return]  Theorem
      
      ⊢ bind m return = m
   
   [datatype_error]  Theorem
      
      ⊢ DATATYPE (error return error)
   
   [error_11]  Theorem
      
      ⊢ (∀a a'. return a = return a' ⇔ a = a') ∧
        ∀a a'. error a = error a' ⇔ a = a'
   
   [error_Axiom]  Theorem
      
      ⊢ ∀f0 f1. ∃fn. (∀a. fn (return a) = f0 a) ∧ ∀a. fn (error a) = f1 a
   
   [error_case_cong]  Theorem
      
      ⊢ ∀M M' f f1.
          M = M' ∧ (∀a. M' = return a ⇒ f a = f' a) ∧
          (∀a. M' = error a ⇒ f1 a = f1' a) ⇒
          error_CASE M f f1 = error_CASE M' f' f1'
   
   [error_case_eq]  Theorem
      
      ⊢ error_CASE x f f1 = v ⇔
        (∃a. x = return a ∧ f a = v) ∨ ∃e. x = error e ∧ f1 e = v
   
   [error_distinct]  Theorem
      
      ⊢ ∀a' a. return a ≠ error a'
   
   [error_induction]  Theorem
      
      ⊢ ∀P. (∀a. P (return a)) ∧ (∀e. P (error e)) ⇒ ∀e. P e
   
   [error_nchotomy]  Theorem
      
      ⊢ ∀ee. (∃a. ee = return a) ∨ ∃e. ee = error e
   
   
*)
end


Source File Identifier index Theory binding index

HOL 4, Trindemossen-2