Theory: word_base

Parents


Type constants


Term constants


Axioms


Definitions

word_TY_DEF
|- ?rep. TYPE_DEFINITION (TRP (\v tl. (?l. v = l) /\ (LENGTH tl = 0))) rep
word_ISO_DEF
|- (!a. ABS_word (REP_word a) = a) /\
   (!r.
     TRP (\v tl. (?l. v = l) /\ (LENGTH tl = 0)) r =
     REP_word (ABS_word r) =
     r)
WORD_DEF
|- !l. WORD l = ABS_word (Node l [])
WORDLEN_DEF
|- !l. WORDLEN (WORD l) = LENGTH l
PWORDLEN_DEF
|- !n l. PWORDLEN n (WORD l) = n = LENGTH l
WSEG_DEF
|- !m k l. WSEG m k (WORD l) = WORD (LASTN m (BUTLASTN k l))
BIT_DEF
|- !k l. BIT k (WORD l) = ELL k l
MSB_DEF
|- !l. MSB (WORD l) = HD l
LSB_DEF
|- !l. LSB (WORD l) = LAST l
WSPLIT_DEF
|- !m l. WSPLIT m (WORD l) = (WORD (BUTLASTN m l),WORD (LASTN m l))
WCAT_DEF
|- !l1 l2. WCAT (WORD l1,WORD l2) = WORD (APPEND l1 l2)

Theorems

word_Ax
|- !f. ?!fn. !l. fn (WORD l) = f l
WORD_11
|- !l l'. (WORD l = WORD l') = l = l'
word_induct
|- !P. (!l. P (WORD l)) ==> (!w. P w)
word_cases
|- !w. ?l. w = WORD l
PWORDLEN
|- !n w. PWORDLEN n w = WORDLEN w = n
PWORDLEN0
|- !w. PWORDLEN 0 w ==> (w = WORD [])
PWORDLEN1
|- !x. PWORDLEN 1 (WORD [x])
WSEG0
|- !k w. WSEG 0 k w = WORD []
WSEG_PWORDLEN
|- !n. !w ::(PWORDLEN n). !m k. m + k <= n ==> PWORDLEN m (WSEG m k w)
WSEG_WORDLEN
|- !n. !w ::(PWORDLEN n). !m k. m + k <= n ==> (WORDLEN (WSEG m k w) = m)
WSEG_WORD_LENGTH
|- !n. !w ::(PWORDLEN n). WSEG n 0 w = w
BIT0
|- !b. BIT 0 (WORD [b]) = b
WSEG_BIT
|- !n. !w ::(PWORDLEN n). !k. k < n ==> (WSEG 1 k w = WORD [BIT k w])
BIT_WSEG
|- !n.
     !w ::(PWORDLEN n).
       !m k j. m + k <= n ==> j < m ==> (BIT j (WSEG m k w) = BIT (j + k) w)
MSB
|- !n. !w ::(PWORDLEN n). 0 < n ==> (MSB w = BIT (PRE n) w)
LSB
|- !n. !w ::(PWORDLEN n). 0 < n ==> (LSB w = BIT 0 w)
WORD_PARTITION
|- (!n. !w ::(PWORDLEN n). !m. m <= n ==> (WCAT (WSPLIT m w) = w)) /\
   (!n m.
     !w1 ::(PWORDLEN n).
       !w2 ::(PWORDLEN m). WSPLIT m (WCAT (w1,w2)) = (w1,w2))
WCAT_ASSOC
|- !w1 w2 w3. WCAT (w1,WCAT (w2,w3)) = WCAT (WCAT (w1,w2),w3)
WCAT0
|- !w. (WCAT (WORD [],w) = w) /\ (WCAT (w,WORD []) = w)
WCAT_11
|- !m n.
     !wm1 wm2 ::(PWORDLEN m).
       !wn1 wn2 ::(PWORDLEN n).
         (WCAT (wm1,wn1) = WCAT (wm2,wn2)) = (wm1 = wm2) /\ (wn1 = wn2)
WSPLIT_PWORDLEN
|- !n.
     !w ::(PWORDLEN n).
       !m.
         m <= n ==>
         PWORDLEN (n - m) (FST (WSPLIT m w)) /\ PWORDLEN m (SND (WSPLIT m w))
WCAT_PWORDLEN
|- !n1.
     !w1 ::(PWORDLEN n1).
       !n2. !w2 ::(PWORDLEN n2). PWORDLEN (n1 + n2) (WCAT (w1,w2))
WORDLEN_SUC_WCAT
|- !n w.
     PWORDLEN (SUC n) w ==>
     (?b ::(PWORDLEN 1). ?w' ::(PWORDLEN n). w = WCAT (b,w'))
WSEG_WSEG
|- !n.
     !w ::(PWORDLEN n).
       !m1 k1 m2 k2.
         m1 + k1 <= n /\ m2 + k2 <= m1 ==>
         (WSEG m2 k2 (WSEG m1 k1 w) = WSEG m2 (k1 + k2) w)
WSPLIT_WSEG
|- !n.
     !w ::(PWORDLEN n).
       !k. k <= n ==> (WSPLIT k w = (WSEG (n - k) k w,WSEG k 0 w))
WSPLIT_WSEG1
|- !n. !w ::(PWORDLEN n). !k. k <= n ==> (FST (WSPLIT k w) = WSEG (n - k) k w)
WSPLIT_WSEG2
|- !n. !w ::(PWORDLEN n). !k. k <= n ==> (SND (WSPLIT k w) = WSEG k 0 w)
WCAT_WSEG_WSEG
|- !n.
     !w ::(PWORDLEN n).
       !m1 m2 k.
         m1 + m2 + k <= n ==>
         (WCAT (WSEG m2 (m1 + k) w,WSEG m1 k w) = WSEG (m1 + m2) k w)
WORD_SPLIT
|- !n1 n2. !w ::(PWORDLEN (n1 + n2)). w = WCAT (WSEG n1 n2 w,WSEG n2 0 w)
WORDLEN_SUC_WCAT_WSEG_WSEG
|- !w ::(PWORDLEN (SUC n)). w = WCAT (WSEG 1 n w,WSEG n 0 w)
WORDLEN_SUC_WCAT_WSEG_WSEG_RIGHT
|- !w ::(PWORDLEN (SUC n)). w = WCAT (WSEG n 1 w,WSEG 1 0 w)
WORDLEN_SUC_WCAT_BIT_WSEG
|- !n. !w ::(PWORDLEN (SUC n)). w = WCAT (WORD [BIT n w],WSEG n 0 w)
WORDLEN_SUC_WCAT_BIT_WSEG_RIGHT
|- !n. !w ::(PWORDLEN (SUC n)). w = WCAT (WSEG n 1 w,WORD [BIT 0 w])
WSEG_WCAT1
|- !n1 n2.
     !w1 ::(PWORDLEN n1). !w2 ::(PWORDLEN n2). WSEG n1 n2 (WCAT (w1,w2)) = w1
WSEG_WCAT2
|- !n1 n2.
     !w1 ::(PWORDLEN n1). !w2 ::(PWORDLEN n2). WSEG n2 0 (WCAT (w1,w2)) = w2
WORD_CONS_WCAT
|- !x l. WORD (CONS x l) = WCAT (WORD [x],WORD l)
WORD_SNOC_WCAT
|- !l x. WORD (SNOC x l) = WCAT (WORD l,WORD [x])
BIT_WCAT_FST
|- !n1 n2.
     !w1 ::(PWORDLEN n1).
       !w2 ::(PWORDLEN n2).
         !k.
           n2 <= k /\ k < n1 + n2 ==> (BIT k (WCAT (w1,w2)) = BIT (k - n2) w1)
BIT_WCAT_SND
|- !n1 n2.
     !w1 ::(PWORDLEN n1).
       !w2 ::(PWORDLEN n2). !k. k < n2 ==> (BIT k (WCAT (w1,w2)) = BIT k w2)
BIT_WCAT1
|- !n. !w ::(PWORDLEN n). !b. BIT n (WCAT (WORD [b],w)) = b
WSEG_WCAT_WSEG1
|- !n1 n2.
     !w1 ::(PWORDLEN n1).
       !w2 ::(PWORDLEN n2).
         !m k.
           m <= n1 /\ n2 <= k ==>
           (WSEG m k (WCAT (w1,w2)) = WSEG m (k - n2) w1)
WSEG_WCAT_WSEG2
|- !n1 n2.
     !w1 ::(PWORDLEN n1).
       !w2 ::(PWORDLEN n2).
         !m k. m + k <= n2 ==> (WSEG m k (WCAT (w1,w2)) = WSEG m k w2)
WSEG_WCAT_WSEG
|- !n1 n2.
     !w1 ::(PWORDLEN n1).
       !w2 ::(PWORDLEN n2).
         !m k.
           m + k <= n1 + n2 /\ k < n2 /\ n2 <= m + k ==>
           (WSEG m k (WCAT (w1,w2)) =
            WCAT (WSEG ((m + k) - n2) 0 w1,WSEG (n2 - k) k w2))
BIT_EQ_IMP_WORD_EQ
|- !n.
     !w1 w2 ::(PWORDLEN n).
       (!k. k < n ==> (BIT k w1 = BIT k w2)) ==> (w1 = w2)