Structure inftreeTheory


Source File Identifier index Theory binding index

signature inftreeTheory =
sig
  type thm = Thm.thm
  
  (*  Definitions  *)
    val iLf_def : thm
    val iNd_def : thm
    val inftree_TY_DEF : thm
    val inftree_bijections : thm
    val inftree_case_def : thm
    val inftree_rec_def : thm
    val is_tree_def : thm
    val relrec_def : thm
  
  (*  Theorems  *)
    val iNd_is_tree : thm
    val inftree_11 : thm
    val inftree_Axiom : thm
    val inftree_distinct : thm
    val inftree_ind : thm
    val inftree_nchotomy : thm
    val is_tree_cases : thm
    val is_tree_ind : thm
    val is_tree_rules : thm
    val is_tree_strongind : thm
    val relrec_cases : thm
    val relrec_ind : thm
    val relrec_rules : thm
    val relrec_strongind : thm
  
  val inftree_grammars : type_grammar.grammar * term_grammar.grammar
(*
   [indexedLists] Parent theory of "inftree"
   
   [patternMatches] Parent theory of "inftree"
   
   [iLf_def]  Definition
      
      ⊢ ∀a. iLf a = to_inftree (λp. INL a)
   
   [iNd_def]  Definition
      
      ⊢ ∀b f.
          iNd b f =
          to_inftree
            (λp. if p = [] then INR b else from_inftree (f (HD p)) (TL p))
   
   [inftree_TY_DEF]  Definition
      
      ⊢ ∃rep. TYPE_DEFINITION is_tree rep
   
   [inftree_bijections]  Definition
      
      ⊢ (∀a. to_inftree (from_inftree a) = a) ∧
        ∀r. is_tree r ⇔ from_inftree (to_inftree r) = r
   
   [inftree_case_def]  Definition
      
      ⊢ (∀a f f1. inftree_CASE (iLf a) f f1 = f a) ∧
        ∀b d f f1. inftree_CASE (iNd b d) f f1 = f1 b d
   
   [inftree_rec_def]  Definition
      
      ⊢ ∀lf nd t. inftree_rec lf nd t = @r. relrec lf nd t r
   
   [is_tree_def]  Definition
      
      ⊢ is_tree =
        (λa0.
             ∀is_tree'.
               (∀a0.
                  (∃a. a0 = (λp. INL a)) ∨
                  (∃f b.
                     a0 = (λp. if p = [] then INR b else f (HD p) (TL p)) ∧
                     ∀d. is_tree' (f d)) ⇒
                  is_tree' a0) ⇒
               is_tree' a0)
   
   [relrec_def]  Definition
      
      ⊢ relrec =
        (λa0 a1 a2 a3.
             ∀relrec'.
               (∀a0 a1 a2 a3.
                  (∃a. a2 = iLf a ∧ a3 = a0 a) ∨
                  (∃b df g.
                     a2 = iNd b df ∧ a3 = a1 b g ∧
                     ∀d. relrec' a0 a1 (df d) (g d)) ⇒
                  relrec' a0 a1 a2 a3) ⇒
               relrec' a0 a1 a2 a3)
   
   [iNd_is_tree]  Theorem
      
      ⊢ ∀b f.
          is_tree
            (λp. if p = [] then INR b else from_inftree (f (HD p)) (TL p))
   
   [inftree_11]  Theorem
      
      ⊢ (iLf a1 = iLf a2 ⇔ a1 = a2) ∧
        (iNd b1 f1 = iNd b2 f2 ⇔ b1 = b2 ∧ f1 = f2)
   
   [inftree_Axiom]  Theorem
      
      ⊢ ∀lf nd. ∃f.
          (∀a. f (iLf a) = lf a) ∧ ∀b d. f (iNd b d) = nd b d (f ∘ d)
   
   [inftree_distinct]  Theorem
      
      ⊢ iLf a ≠ iNd b f
   
   [inftree_ind]  Theorem
      
      ⊢ ∀P. (∀a. P (iLf a)) ∧ (∀b f. (∀d. P (f d)) ⇒ P (iNd b f)) ⇒ ∀t. P t
   
   [inftree_nchotomy]  Theorem
      
      ⊢ ∀t. (∃a. t = iLf a) ∨ ∃b d. t = iNd b d
   
   [is_tree_cases]  Theorem
      
      ⊢ ∀a0.
          is_tree a0 ⇔
          (∃a. a0 = (λp. INL a)) ∨
          ∃f b.
            a0 = (λp. if p = [] then INR b else f (HD p) (TL p)) ∧
            ∀d. is_tree (f d)
   
   [is_tree_ind]  Theorem
      
      ⊢ ∀is_tree'.
          (∀a. is_tree' (λp. INL a)) ∧
          (∀f b.
             (∀d. is_tree' (f d)) ⇒
             is_tree' (λp. if p = [] then INR b else f (HD p) (TL p))) ⇒
          ∀a0. is_tree a0 ⇒ is_tree' a0
   
   [is_tree_rules]  Theorem
      
      ⊢ (∀a. is_tree (λp. INL a)) ∧
        ∀f b.
          (∀d. is_tree (f d)) ⇒
          is_tree (λp. if p = [] then INR b else f (HD p) (TL p))
   
   [is_tree_strongind]  Theorem
      
      ⊢ ∀is_tree'.
          (∀a. is_tree' (λp. INL a)) ∧
          (∀f b.
             (∀d. is_tree (f d) ∧ is_tree' (f d)) ⇒
             is_tree' (λp. if p = [] then INR b else f (HD p) (TL p))) ⇒
          ∀a0. is_tree a0 ⇒ is_tree' a0
   
   [relrec_cases]  Theorem
      
      ⊢ ∀a0 a1 a2 a3.
          relrec a0 a1 a2 a3 ⇔
          (∃a. a2 = iLf a ∧ a3 = a0 a) ∨
          ∃b df g.
            a2 = iNd b df ∧ a3 = a1 b g ∧ ∀d. relrec a0 a1 (df d) (g d)
   
   [relrec_ind]  Theorem
      
      ⊢ ∀relrec'.
          (∀lf nd a. relrec' lf nd (iLf a) (lf a)) ∧
          (∀lf nd b df g.
             (∀d. relrec' lf nd (df d) (g d)) ⇒
             relrec' lf nd (iNd b df) (nd b g)) ⇒
          ∀a0 a1 a2 a3. relrec a0 a1 a2 a3 ⇒ relrec' a0 a1 a2 a3
   
   [relrec_rules]  Theorem
      
      ⊢ (∀lf nd a. relrec lf nd (iLf a) (lf a)) ∧
        ∀lf nd b df g.
          (∀d. relrec lf nd (df d) (g d)) ⇒
          relrec lf nd (iNd b df) (nd b g)
   
   [relrec_strongind]  Theorem
      
      ⊢ ∀relrec'.
          (∀lf nd a. relrec' lf nd (iLf a) (lf a)) ∧
          (∀lf nd b df g.
             (∀d. relrec lf nd (df d) (g d) ∧ relrec' lf nd (df d) (g d)) ⇒
             relrec' lf nd (iNd b df) (nd b g)) ⇒
          ∀a0 a1 a2 a3. relrec a0 a1 a2 a3 ⇒ relrec' a0 a1 a2 a3
   
   
*)
end


Source File Identifier index Theory binding index

HOL 4, Kananaskis-14