Structure nlistTheory


Source File Identifier index Theory binding index

signature nlistTheory =
sig
  type thm = Thm.thm
  
  (*  Definitions  *)
    val listOfN_def : thm
    val ncons_def : thm
    val nel_def : thm
    val nfront_def : thm
    val nhd_def : thm
    val nlast_def : thm
    val nlist_of_def : thm
    val ntl_def : thm
  
  (*  Theorems  *)
    val LENGTH_nfront : thm
    val MEM_listOfN_LESS : thm
    val listOfN_EQ_CONS : thm
    val listOfN_EQ_NIL : thm
    val listOfN_INJ : thm
    val listOfN_SURJ : thm
    val listOfN_ncons : thm
    val listOfN_nlist : thm
    val listOfN_zero : thm
    val lt_ncons1 : thm
    val lt_ncons2 : thm
    val napp_ndrop_l1_empty : thm
    val napp_nsnoc_lt : thm
    val napp_sing_eq : thm
    val ncons_11 : thm
    val ncons_nhd_ntl : thm
    val ncons_not_nnil : thm
    val ncons_x_0_LENGTH_1 : thm
    val ndrop_SUC : thm
    val ndrop_nsingl : thm
    val nel0_ncons : thm
    val nel_SUC_CONS : thm
    val nel_correct : thm
    val nel_eq_nlist : thm
    val nel_napp : thm
    val nel_napp2 : thm
    val nel_ncons_nonzero : thm
    val nel_nfront : thm
    val nel_nhd : thm
    val nel_nnil : thm
    val nfront_napp_sing : thm
    val nfront_nnil : thm
    val nfront_nsingl : thm
    val nfront_thm : thm
    val nhd0 : thm
    val nhd_napp : thm
    val nhd_nfront : thm
    val nhd_thm : thm
    val nlast_napp : thm
    val nlast_ncons : thm
    val nlast_nel : thm
    val nlast_nnil : thm
    val nlist_cases : thm
    val nlist_ind : thm
    val nlist_listOfN : thm
    val nlist_of_EQ0 : thm
    val nlist_of_INJ : thm
    val nlist_of_SURJ : thm
    val nlistrec_def : thm
    val nlistrec_ind : thm
    val nlistrec_thm : thm
    val nsnoc_cases : thm
    val ntl_DROP : thm
    val ntl_LE : thm
    val ntl_LT : thm
    val ntl_ndrop : thm
    val ntl_nonzero_LESS : thm
    val ntl_thm : thm
    val ntl_zero : thm
    val ntl_zero_empty_OR_ncons : thm
  
  val nlist_grammars : type_grammar.grammar * term_grammar.grammar
(*
   [rich_list] Parent theory of "nlist"
   
   [set_relation] Parent theory of "nlist"
   
   [listOfN_def]  Definition
      
      ⊢ listOfN = nlistrec [] (λh tn t. h::t)
   
   [ncons_def]  Definition
      
      ⊢ ∀h t. ncons h t = h ⊗ t + 1
   
   [nel_def]  Definition
      
      ⊢ ∀n nlist. nel n nlist = nhd (ndrop n nlist)
   
   [nfront_def]  Definition
      
      ⊢ nfront = nlistrec 0 (λh tn rn. if tn = 0 then 0 else ncons h rn)
   
   [nhd_def]  Definition
      
      ⊢ ∀nl. nhd nl = nfst (nl − 1)
   
   [nlast_def]  Definition
      
      ⊢ nlast = nlistrec 0 (λh tn rn. if tn = 0 then h else rn)
   
   [nlist_of_def]  Definition
      
      ⊢ nlist_of [] = 0 ∧ ∀h t. nlist_of (h::t) = ncons h (nlist_of t)
   
   [ntl_def]  Definition
      
      ⊢ ∀nlist. ntl nlist = nsnd (nlist − 1)
   
   [LENGTH_nfront]  Theorem
      
      ⊢ ∀t. t ≠ 0 ⇒ nlen (nfront t) = nlen t − 1
   
   [MEM_listOfN_LESS]  Theorem
      
      ⊢ ∀l e. MEM e (listOfN l) ⇒ e < l
   
   [listOfN_EQ_CONS]  Theorem
      
      ⊢ listOfN n = h::t ⇔ ∃tn. n = ncons h tn ∧ listOfN tn = t
   
   [listOfN_EQ_NIL]  Theorem
      
      ⊢ (listOfN l = [] ⇔ l = 0) ∧ ([] = listOfN l ⇔ l = 0)
   
   [listOfN_INJ]  Theorem
      
      ⊢ ∀l1 l2. listOfN l1 = listOfN l2 ⇔ l1 = l2
   
   [listOfN_SURJ]  Theorem
      
      ⊢ ∀l. ∃n. listOfN n = l
   
   [listOfN_ncons]  Theorem
      
      ⊢ listOfN (ncons h t) = h::listOfN t
   
   [listOfN_nlist]  Theorem
      
      ⊢ ∀l. listOfN (nlist_of l) = l
   
   [listOfN_zero]  Theorem
      
      ⊢ listOfN 0 = []
   
   [lt_ncons1]  Theorem
      
      ⊢ h < ncons h t
   
   [lt_ncons2]  Theorem
      
      ⊢ t < ncons h t
   
   [napp_ndrop_l1_empty]  Theorem
      
      ⊢ ∀l1 l2. ndrop (nlen l1) (napp l1 l2) = l2
   
   [napp_nsnoc_lt]  Theorem
      
      ⊢ ∀l. l < napp l (ncons x 0)
   
   [napp_sing_eq]  Theorem
      
      ⊢ napp l1 (ncons l 0) = ncons x 0 ⇔ l1 = 0 ∧ x = l
   
   [ncons_11]  Theorem
      
      ⊢ ncons x y = ncons h t ⇔ x = h ∧ y = t
   
   [ncons_nhd_ntl]  Theorem
      
      ⊢ ∀l. l ≠ 0 ⇒ ncons (nhd l) (ntl l) = l
   
   [ncons_not_nnil]  Theorem
      
      ⊢ ncons x y ≠ 0
   
   [ncons_x_0_LENGTH_1]  Theorem
      
      ⊢ nlen l = 1 ⇔ ∃n. l = ncons n 0
   
   [ndrop_SUC]  Theorem
      
      ⊢ ∀l n. ndrop (SUC n) l = ntl (ndrop n l)
   
   [ndrop_nsingl]  Theorem
      
      ⊢ m ≠ 0 ⇒ ndrop m (ncons x 0) = 0
   
   [nel0_ncons]  Theorem
      
      ⊢ nel 0 (ncons h t) = h
   
   [nel_SUC_CONS]  Theorem
      
      ⊢ ∀n h t. nel (SUC n) (ncons h t) = nel n t
   
   [nel_correct]  Theorem
      
      ⊢ ∀l i. i < nlen l ⇒ EL i (listOfN l) = nel i l
   
   [nel_eq_nlist]  Theorem
      
      ⊢ ∀l1 l2.
          l1 = l2 ⇔
          nlen l1 = nlen l2 ∧ ∀m. m < nlen l1 ⇒ nel m l1 = nel m l2
   
   [nel_napp]  Theorem
      
      ⊢ ∀l1 l2. n < nlen l1 ⇒ nel n (napp l1 l2) = nel n l1
   
   [nel_napp2]  Theorem
      
      ⊢ ∀y n x. nlen x ≤ n ⇒ nel n (napp x y) = nel (n − nlen x) y
   
   [nel_ncons_nonzero]  Theorem
      
      ⊢ 0 < n ⇒ nel n (ncons h t) = nel (n − 1) t
   
   [nel_nfront]  Theorem
      
      ⊢ ∀t. m < nlen (nfront t) ⇒ nel m (nfront t) = nel m t
   
   [nel_nhd]  Theorem
      
      ⊢ nel 0 l = nhd l
   
   [nel_nnil]  Theorem
      
      ⊢ nel x 0 = 0
   
   [nfront_napp_sing]  Theorem
      
      ⊢ ∀pfx. nfront (napp pfx (ncons e 0)) = pfx
   
   [nfront_nnil]  Theorem
      
      ⊢ nfront 0 = 0
   
   [nfront_nsingl]  Theorem
      
      ⊢ nfront (ncons x 0) = 0
   
   [nfront_thm]  Theorem
      
      ⊢ nfront 0 = 0 ∧
        nfront (ncons h t) = if t = 0 then 0 else ncons h (nfront t)
   
   [nhd0]  Theorem
      
      ⊢ nhd 0 = 0
   
   [nhd_napp]  Theorem
      
      ⊢ ∀l1 l2. l1 ≠ 0 ⇒ nhd (napp l1 l2) = nhd l1
   
   [nhd_nfront]  Theorem
      
      ⊢ ∀l. l ≠ 0 ∧ ntl l ≠ 0 ⇒ nhd (nfront l) = nhd l
   
   [nhd_thm]  Theorem
      
      ⊢ nhd (ncons h t) = h
   
   [nlast_napp]  Theorem
      
      ⊢ ∀l1 l2. l2 ≠ 0 ⇒ nlast (napp l1 l2) = nlast l2
   
   [nlast_ncons]  Theorem
      
      ⊢ nlast (ncons h tn) = if tn = 0 then h else nlast tn
   
   [nlast_nel]  Theorem
      
      ⊢ ∀l. nlast l = nel (nlen l − 1) l
   
   [nlast_nnil]  Theorem
      
      ⊢ nlast 0 = 0
   
   [nlist_cases]  Theorem
      
      ⊢ ∀n. n = 0 ∨ ∃h t. n = ncons h t
   
   [nlist_ind]  Theorem
      
      ⊢ ∀P. P 0 ∧ (∀h t. P t ⇒ P (ncons h t)) ⇒ ∀n. P n
   
   [nlist_listOfN]  Theorem
      
      ⊢ ∀l. nlist_of (listOfN l) = l
   
   [nlist_of_EQ0]  Theorem
      
      ⊢ (nlist_of l = 0 ⇔ l = []) ∧ (0 = nlist_of l ⇔ l = [])
   
   [nlist_of_INJ]  Theorem
      
      ⊢ ∀n1 n2. nlist_of n1 = nlist_of n2 ⇔ n1 = n2
   
   [nlist_of_SURJ]  Theorem
      
      ⊢ ∀l. ∃n. nlist_of n = l
   
   [nlistrec_def]  Theorem
      
      ⊢ ∀n l f.
          nlistrec n f l =
          if l = 0 then n
          else
            f (nfst (l − 1)) (nsnd (l − 1)) (nlistrec n f (nsnd (l − 1)))
   
   [nlistrec_ind]  Theorem
      
      ⊢ ∀P. (∀n f l. (l ≠ 0 ⇒ P n f (nsnd (l − 1))) ⇒ P n f l) ⇒
            ∀v v1 v2. P v v1 v2
   
   [nlistrec_thm]  Theorem
      
      ⊢ nlistrec n f 0 = n ∧
        nlistrec n f (ncons h t) = f h t (nlistrec n f t)
   
   [nsnoc_cases]  Theorem
      
      ⊢ ∀t. t = 0 ∨ ∃f l. t = napp f (ncons l 0)
   
   [ntl_DROP]  Theorem
      
      ⊢ ∀l m. ntl (nlist_of (DROP m l)) = ndrop m (ntl (nlist_of l))
   
   [ntl_LE]  Theorem
      
      ⊢ ∀n. ntl n ≤ n
   
   [ntl_LT]  Theorem
      
      ⊢ 0 < n ⇒ ntl n < n
   
   [ntl_ndrop]  Theorem
      
      ⊢ ∀l. ntl (ndrop n l) = ndrop n (ntl l)
   
   [ntl_nonzero_LESS]  Theorem
      
      ⊢ ∀n. n ≠ 0 ⇒ ntl n < n
   
   [ntl_thm]  Theorem
      
      ⊢ ntl (ncons h t) = t
   
   [ntl_zero]  Theorem
      
      ⊢ ntl 0 = 0
   
   [ntl_zero_empty_OR_ncons]  Theorem
      
      ⊢ ntl l = 0 ⇔ l = 0 ∨ ∃x. l = ncons x 0
   
   
*)
end


Source File Identifier index Theory binding index

HOL 4, Kananaskis-14