Package word16-bytes-thm: word16-bytes-thm

Information

nameword16-bytes-thm
version1.2
descriptionword16-bytes-thm
authorJoe Hurd <joe@gilith.com>
licenseMIT
provenanceHOL Light theory extracted on 2011-03-18
showData.Bool

Files

Theorems

b.
    Data.Word16.fromNatural (Data.Byte.toNatural b) =
    Data.Word16.Bits.toWord (Data.Byte.Bits.fromWord b)

w.
    Data.Byte.fromNatural (Data.Word16.toNatural w) =
    Data.Byte.Bits.toWord (Data.Word16.Bits.fromWord w)

w. b0 b1. w = Data.Word16.fromBytes b0 b1

b0 b1.
    Data.Word16.Bits.toWord
      (Data.List.@ (Data.Byte.Bits.fromWord b1)
         (Data.Byte.Bits.fromWord b0)) = Data.Word16.fromBytes b0 b1

w.
    b0 b1.
      w = Data.Word16.fromBytes b0 b1
      Data.Word16.toBytes w = Data.Pair., b0 b1

w.
    Data.Pair.,
      (Data.Byte.Bits.toWord
         (Data.List.drop
            (Number.Numeral.bit0
               (Number.Numeral.bit0
                  (Number.Numeral.bit0
                     (Number.Numeral.bit1 Number.Numeral.zero))))
            (Data.Word16.Bits.fromWord w)))
      (Data.Byte.Bits.toWord
         (Data.List.take
            (Number.Numeral.bit0
               (Number.Numeral.bit0
                  (Number.Numeral.bit0
                     (Number.Numeral.bit1 Number.Numeral.zero))))
            (Data.Word16.Bits.fromWord w))) = Data.Word16.toBytes w

Input Type Operators

Input Constants

Assumptions

T

x. x = x

n. Number.Natural.≤ Number.Numeral.zero n

n. Number.Natural.≤ n n

F p. p

x. Function.id x = x

t. t ¬t

(¬) = λp. p F

() = λP. P ((select) P)

a. x. x = a

t. (x. t) t

t. (x. t) t

t. (λx. t x) = t

() = λP. P = λx. T

x. x = x T

w. Data.Byte.Bits.toWord (Data.Byte.Bits.fromWord w) = w

w. Data.List.length (Data.Byte.Bits.fromWord w) = Data.Byte.width

w. Data.Word16.Bits.toWord (Data.Word16.Bits.fromWord w) = w

w. Data.List.length (Data.Word16.Bits.fromWord w) = Data.Word16.width

n. ¬(Number.Natural.suc n = Number.Numeral.zero)

n. Number.Natural.- n n = Number.Numeral.zero

Data.Byte.modulus =
  Number.Natural.exp
    (Number.Numeral.bit0 (Number.Numeral.bit1 Number.Numeral.zero))
    Data.Byte.width

Data.Byte.width =
  Number.Numeral.bit0
    (Number.Numeral.bit0
       (Number.Numeral.bit0 (Number.Numeral.bit1 Number.Numeral.zero)))

Data.Word16.modulus =
  Number.Natural.exp
    (Number.Numeral.bit0 (Number.Numeral.bit1 Number.Numeral.zero))
    Data.Word16.width

n. Number.Numeral.bit0 n = Number.Natural.+ n n

n.
    Number.Natural.mod n (Number.Numeral.bit1 Number.Numeral.zero) =
    Number.Numeral.zero

x. (select y. y = x) = x

m n. Number.Natural.≤ m (Number.Natural.+ m n)

m n. Number.Natural.≤ n (Number.Natural.+ m n)

Data.Word16.width =
  Number.Numeral.bit0
    (Number.Numeral.bit0
       (Number.Numeral.bit0
          (Number.Numeral.bit0 (Number.Numeral.bit1 Number.Numeral.zero))))

() = λp q. p q p

t. (t T) (t F)

m.
    Number.Natural.suc m =
    Number.Natural.+ m (Number.Numeral.bit1 Number.Numeral.zero)

n. Number.Numeral.bit1 n = Number.Natural.suc (Number.Natural.+ n n)

x.
    Data.Byte.toNatural (Data.Byte.fromNatural x) =
    Number.Natural.mod x Data.Byte.modulus

x.
    Data.Word16.toNatural (Data.Word16.fromNatural x) =
    Number.Natural.mod x Data.Word16.modulus

x. Data.Pair., (Data.Pair.fst x) (Data.Pair.snd x) = x

x y. Data.Pair.fst (Data.Pair., x y) = x

x y. Data.Pair.snd (Data.Pair., x y) = y

(¬T F) (¬F T)

x y. x = y y = x

t1 t2. t1 t2 t2 t1

m n. m = n Number.Natural.≤ m n

m n. Number.Natural.< m n Number.Natural.≤ m n

m n. Number.Natural.< m n Number.Natural.≤ n m

m n. Number.Natural.≤ m n Number.Natural.≤ n m

m n. Number.Natural.- m (Number.Natural.+ m n) = Number.Numeral.zero

m n. Number.Natural.- (Number.Natural.+ m n) m = n

m n. Number.Natural.- (Number.Natural.+ m n) n = m

n.
    Number.Natural.*
      (Number.Numeral.bit0 (Number.Numeral.bit1 Number.Numeral.zero)) n =
    Number.Natural.+ n n

m n. ¬(Number.Natural.< m n Number.Natural.≤ n m)

m n. ¬(Number.Natural.≤ m n Number.Natural.< n m)

m n. ¬Number.Natural.< m n Number.Natural.≤ n m

m n. ¬Number.Natural.≤ m n Number.Natural.< n m

m n. Number.Natural.< m (Number.Natural.suc n) Number.Natural.≤ m n

m n. Number.Natural.≤ (Number.Natural.suc m) n Number.Natural.< m n

m. m = Number.Numeral.zero n. m = Number.Natural.suc n

() = λp q. (λf. f p q) = λf. f T T

P. ¬(x. P x) x. ¬P x

P. ¬(x. P x) x. ¬P x

() = λP. q. (x. P x q) q

w1 w2. Data.Byte.Bits.fromWord w1 = Data.Byte.Bits.fromWord w2 w1 = w2

w1 w2.
    Data.Word16.Bits.fromWord w1 = Data.Word16.Bits.fromWord w2 w1 = w2

m n. Number.Natural.< m n Number.Natural.div m n = Number.Numeral.zero

m n. Number.Natural.suc m = Number.Natural.suc n m = n

m n. Number.Natural.+ m n = m n = Number.Numeral.zero

m n. Number.Natural.- m n = Number.Numeral.zero Number.Natural.≤ m n

n.
    Number.Natural.odd n
    Number.Natural.mod n
      (Number.Numeral.bit0 (Number.Numeral.bit1 Number.Numeral.zero)) =
    Number.Numeral.bit1 Number.Numeral.zero

m n.
    Number.Natural.even (Number.Natural.* m n)
    Number.Natural.even m Number.Natural.even n

m n.
    Number.Natural.even (Number.Natural.+ m n) Number.Natural.even m
    Number.Natural.even n

m n.
    ¬(n = Number.Numeral.zero)
    Number.Natural.< (Number.Natural.mod m n) n

P. (p. P p) p1 p2. P (Data.Pair., p1 p2)

m n. Number.Natural.≤ m n d. n = Number.Natural.+ m d

f g. f = g x. f x = g x

() = λp q. r. (p r) (q r) r

(Number.Natural.even Number.Numeral.zero T)
  n. Number.Natural.even (Number.Natural.suc n) ¬Number.Natural.even n

(Number.Natural.odd Number.Numeral.zero F)
  n. Number.Natural.odd (Number.Natural.suc n) ¬Number.Natural.odd n

w1 w2.
    Data.Word16.and w1 w2 =
    Data.Word16.Bits.toWord
      (Data.List.zipWith () (Data.Word16.Bits.fromWord w1)
         (Data.Word16.Bits.fromWord w2))

w1 w2.
    Data.Word16.or w1 w2 =
    Data.Word16.Bits.toWord
      (Data.List.zipWith () (Data.Word16.Bits.fromWord w1)
         (Data.Word16.Bits.fromWord w2))

m n. Number.Natural.≤ m n Number.Natural.< m n m = n

m n.
    Number.Natural.odd (Number.Natural.+ m n)
    ¬(Number.Natural.odd m Number.Natural.odd n)

m n. Number.Natural.≤ m n Number.Natural.≤ n m m = n

l n.
    Data.Word16.shiftLeft (Data.Word16.Bits.toWord l) n =
    Data.Word16.Bits.toWord (Data.List.@ (Data.List.replicate n F) l)

m n.
    Number.Natural.< m n
    d. n = Number.Natural.+ m (Number.Natural.suc d)

P Q. P (x. Q x) x. P Q x

P Q. P (x. Q x) x. P Q x

P Q. (x. P x Q) (x. P x) Q

P Q. (x. P x) Q x. P x Q

P Q. (x. P x) Q x. P x Q

P Q. (x. P x) Q x. P x Q

x y z. x = y y = z x = z

t1 t2 t3. t1 t2 t3 (t1 t2) t3

t1 t2 t3. t1 t2 t3 (t1 t2) t3

p q r. p q r p q r

m n p.
    Number.Natural.* m (Number.Natural.* n p) =
    Number.Natural.* (Number.Natural.* m n) p

m n p.
    Number.Natural.+ m (Number.Natural.+ n p) =
    Number.Natural.+ (Number.Natural.+ m n) p

m n p. Number.Natural.+ m n = Number.Natural.+ m p n = p

m n p.
    Number.Natural.≤ (Number.Natural.+ m n) (Number.Natural.+ m p)
    Number.Natural.≤ n p

m n p.
    Number.Natural.≤ (Number.Natural.+ m p) (Number.Natural.+ n p)
    Number.Natural.≤ m n

m n p.
    Number.Natural.- (Number.Natural.+ m n) (Number.Natural.+ m p) =
    Number.Natural.- n p

m n p.
    Number.Natural.< m n Number.Natural.≤ n p Number.Natural.< m p

m n p.
    Number.Natural.≤ m n Number.Natural.≤ n p Number.Natural.≤ m p

n.
    Data.Word16.Bits.toWord
      (Data.List.:: (Number.Natural.odd n)
         (Data.Word16.Bits.fromWord
            (Data.Word16.fromNatural
               (Number.Natural.div n
                  (Number.Numeral.bit0
                     (Number.Numeral.bit1 Number.Numeral.zero)))))) =
    Data.Word16.fromNatural n

P. (x. y. P x y) y. x. P x (y x)

t1 t2. (if T then t1 else t2) = t1 (if F then t1 else t2) = t2

w n.
    Data.Byte.bit w n
    Number.Natural.odd
      (Number.Natural.div (Data.Byte.toNatural w)
         (Number.Natural.exp
            (Number.Numeral.bit0 (Number.Numeral.bit1 Number.Numeral.zero))
            n))

w n.
    Data.Word16.bit w n
    Number.Natural.odd
      (Number.Natural.div (Data.Word16.toNatural w)
         (Number.Natural.exp
            (Number.Numeral.bit0 (Number.Numeral.bit1 Number.Numeral.zero))
            n))

m n.
    Number.Natural.* m n = Number.Numeral.zero
    m = Number.Numeral.zero n = Number.Numeral.zero

m n.
    Number.Natural.+ m n = Number.Numeral.zero
    m = Number.Numeral.zero n = Number.Numeral.zero

Data.List.length Data.List.[] = Number.Numeral.zero
  h t.
    Data.List.length (Data.List.:: h t) =
    Number.Natural.suc (Data.List.length t)

P.
    P Number.Numeral.zero (n. P n P (Number.Natural.suc n)) n. P n

(t. ¬¬t t) (¬T F) (¬F T)

m n.
    Number.Natural.exp m n = Number.Numeral.zero
    m = Number.Numeral.zero ¬(n = Number.Numeral.zero)

m n p.
    Number.Natural.* m (Number.Natural.+ n p) =
    Number.Natural.+ (Number.Natural.* m n) (Number.Natural.* m p)

m n p.
    Number.Natural.* m (Number.Natural.- n p) =
    Number.Natural.- (Number.Natural.* m n) (Number.Natural.* m p)

m n p.
    Number.Natural.exp m (Number.Natural.+ n p) =
    Number.Natural.* (Number.Natural.exp m n) (Number.Natural.exp m p)

m n p.
    Number.Natural.* (Number.Natural.+ m n) p =
    Number.Natural.+ (Number.Natural.* m p) (Number.Natural.* n p)

m n p.
    Number.Natural.* (Number.Natural.- m n) p =
    Number.Natural.- (Number.Natural.* m p) (Number.Natural.* n p)

P Q. (x. P x Q x) (x. P x) x. Q x

P Q. (x. P x Q x) (x. P x) x. Q x

P Q. (x. P x) (x. Q x) x. P x Q x

P Q. (x. P x) (x. Q x) x. P x Q x

e f.
    fn.
      fn Number.Numeral.zero = e
      n. fn (Number.Natural.suc n) = f (fn n) n

m n.
    ¬(n = Number.Numeral.zero)
    Number.Natural.+ (Number.Natural.* (Number.Natural.div m n) n)
      (Number.Natural.mod m n) = m

w1 w2.
    (i.
       Number.Natural.< i Data.Byte.width
       (Data.Byte.bit w1 i Data.Byte.bit w2 i)) w1 = w2

w1 w2.
    (i.
       Number.Natural.< i Data.Word16.width
       (Data.Word16.bit w1 i Data.Word16.bit w2 i)) w1 = w2

m n p.
    Number.Natural.* m n = Number.Natural.* m p
    m = Number.Numeral.zero n = p

m n p.
    Number.Natural.≤ (Number.Natural.* m n) (Number.Natural.* m p)
    m = Number.Numeral.zero Number.Natural.≤ n p

b1 b2.
    Data.Word16.fromBytes b1 b2 =
    Data.Word16.or
      (Data.Word16.shiftLeft
         (Data.Word16.fromNatural (Data.Byte.toNatural b1))
         (Number.Numeral.bit0
            (Number.Numeral.bit0
               (Number.Numeral.bit0
                  (Number.Numeral.bit1 Number.Numeral.zero)))))
      (Data.Word16.fromNatural (Data.Byte.toNatural b2))

l n.
    Data.Byte.bit (Data.Byte.Bits.toWord l) n
    Number.Natural.< n Data.Byte.width
    Number.Natural.< n (Data.List.length l) Data.List.nth n l

l n.
    Data.Word16.bit (Data.Word16.Bits.toWord l) n
    Number.Natural.< n Data.Word16.width
    Number.Natural.< n (Data.List.length l) Data.List.nth n l

m n p.
    Number.Natural.< (Number.Natural.* m n) (Number.Natural.* m p)
    ¬(m = Number.Numeral.zero) Number.Natural.< n p

(x. Data.List.replicate Number.Numeral.zero x = Data.List.[])
  n x.
    Data.List.replicate (Number.Natural.suc n) x =
    Data.List.:: x (Data.List.replicate n x)

h1 h2 t1 t2. Data.List.:: h1 t1 = Data.List.:: h2 t2 h1 = h2 t1 = t2

x y a b. Data.Pair., x y = Data.Pair., a b x = a y = b

m n p q.
    Number.Natural.< m p Number.Natural.< n q
    Number.Natural.< (Number.Natural.+ m n) (Number.Natural.+ p q)

m n p q.
    Number.Natural.≤ m p Number.Natural.≤ n q
    Number.Natural.≤ (Number.Natural.+ m n) (Number.Natural.+ p q)

l.
    Data.Byte.Bits.fromWord (Data.Byte.Bits.toWord l) =
    if Number.Natural.≤ (Data.List.length l) Data.Byte.width then
      Data.List.@ l
        (Data.List.replicate
           (Number.Natural.- Data.Byte.width (Data.List.length l)) F)
    else Data.List.take Data.Byte.width l

l.
    Data.Word16.Bits.fromWord (Data.Word16.Bits.toWord l) =
    if Number.Natural.≤ (Data.List.length l) Data.Word16.width then
      Data.List.@ l
        (Data.List.replicate
           (Number.Natural.- Data.Word16.width (Data.List.length l)) F)
    else Data.List.take Data.Word16.width l

(m.
     Number.Natural.exp m Number.Numeral.zero =
     Number.Numeral.bit1 Number.Numeral.zero)
  m n.
    Number.Natural.exp m (Number.Natural.suc n) =
    Number.Natural.* m (Number.Natural.exp m n)

(l. Data.List.drop Number.Numeral.zero l = l)
  n h t.
    Data.List.drop (Number.Natural.suc n) (Data.List.:: h t) =
    Data.List.drop n t

m n p.
    ¬(Number.Natural.* n p = Number.Numeral.zero)
    Number.Natural.mod (Number.Natural.mod m (Number.Natural.* n p)) n =
    Number.Natural.mod m n

(l. Data.List.@ Data.List.[] l = l)
  h t l.
    Data.List.@ (Data.List.:: h t) l = Data.List.:: h (Data.List.@ t l)

t1 t2. (¬(t1 t2) ¬t1 ¬t2) (¬(t1 t2) ¬t1 ¬t2)

(l. Data.List.take Number.Numeral.zero l = Data.List.[])
  n h t.
    Data.List.take (Number.Natural.suc n) (Data.List.:: h t) =
    Data.List.:: h (Data.List.take n t)

m n p.
    ¬(Number.Natural.* n p = Number.Numeral.zero)
    Number.Natural.mod (Number.Natural.div m n) p =
    Number.Natural.div (Number.Natural.mod m (Number.Natural.* n p)) n

(m. Number.Natural.≤ m Number.Numeral.zero m = Number.Numeral.zero)
  m n.
    Number.Natural.≤ m (Number.Natural.suc n)
    m = Number.Natural.suc n Number.Natural.≤ m n

t. ((T t) t) ((t T) t) ((F t) ¬t) ((t F) ¬t)

w.
    Data.Word16.toBytes w =
    Data.Pair.,
      (Data.Byte.fromNatural
         (Data.Word16.toNatural
            (Data.Word16.shiftRight w
               (Number.Numeral.bit0
                  (Number.Numeral.bit0
                     (Number.Numeral.bit0
                        (Number.Numeral.bit1 Number.Numeral.zero)))))))
      (Data.Byte.fromNatural
         (Data.Word16.toNatural
            (Data.Word16.and w
               (Data.Word16.fromNatural
                  (Number.Numeral.bit1
                     (Number.Numeral.bit1
                        (Number.Numeral.bit1
                           (Number.Numeral.bit1
                              (Number.Numeral.bit1
                                 (Number.Numeral.bit1
                                    (Number.Numeral.bit1
                                       (Number.Numeral.bit1
                                          Number.Numeral.zero))))))))))))

m n q r.
    m = Number.Natural.+ (Number.Natural.* q n) r Number.Natural.< r n
    Number.Natural.div m n = q Number.Natural.mod m n = r

Data.Word16.Bits.toWord Data.List.[] =
  Data.Word16.fromNatural Number.Numeral.zero
  h t.
    Data.Word16.Bits.toWord (Data.List.:: h t) =
    if h then
      Data.Word16.+
        (Data.Word16.shiftLeft (Data.Word16.Bits.toWord t)
           (Number.Numeral.bit1 Number.Numeral.zero))
        (Data.Word16.fromNatural (Number.Numeral.bit1 Number.Numeral.zero))
    else
      Data.Word16.shiftLeft (Data.Word16.Bits.toWord t)
        (Number.Numeral.bit1 Number.Numeral.zero)

t. (T t t) (t T t) (F t F) (t F F) (t t t)

t. (T t T) (t T T) (F t t) (t F t) (t t t)

t. (T t t) (t T T) (F t T) (t t T) (t F ¬t)

x m n.
    Number.Natural.≤ (Number.Natural.exp x m) (Number.Natural.exp x n)
    if x = Number.Numeral.zero then
      m = Number.Numeral.zero n = Number.Numeral.zero
    else x = Number.Numeral.bit1 Number.Numeral.zero Number.Natural.≤ m n

(f. Data.List.zipWith f Data.List.[] Data.List.[] = Data.List.[])
  f h1 h2 t1 t2.
    Data.List.zipWith f (Data.List.:: h1 t1) (Data.List.:: h2 t2) =
    Data.List.:: (f h1 h2) (Data.List.zipWith f t1 t2)

b.
    x0 x1 x2 x3 x4 x5 x6 x7.
      b =
      Data.Byte.Bits.toWord
        (Data.List.:: x0
           (Data.List.:: x1
              (Data.List.:: x2
                 (Data.List.:: x3
                    (Data.List.:: x4
                       (Data.List.:: x5
                          (Data.List.:: x6
                             (Data.List.:: x7 Data.List.[]))))))))

m n p.
    Number.Natural.* m n = Number.Natural.* n m
    Number.Natural.* (Number.Natural.* m n) p =
    Number.Natural.* m (Number.Natural.* n p)
    Number.Natural.* m (Number.Natural.* n p) =
    Number.Natural.* n (Number.Natural.* m p)

m n p.
    Number.Natural.+ m n = Number.Natural.+ n m
    Number.Natural.+ (Number.Natural.+ m n) p =
    Number.Natural.+ m (Number.Natural.+ n p)
    Number.Natural.+ m (Number.Natural.+ n p) =
    Number.Natural.+ n (Number.Natural.+ m p)

l n.
    Data.Word16.shiftRight (Data.Word16.Bits.toWord l) n =
    if Number.Natural.≤ (Data.List.length l) Data.Word16.width then
      if Number.Natural.≤ (Data.List.length l) n then
        Data.Word16.Bits.toWord Data.List.[]
      else Data.Word16.Bits.toWord (Data.List.drop n l)
    else if Number.Natural.≤ Data.Word16.width n then
      Data.Word16.Bits.toWord Data.List.[]
    else
      Data.Word16.Bits.toWord
        (Data.List.drop n (Data.List.take Data.Word16.width l))

(n. Number.Natural.+ Number.Numeral.zero n = n)
  (m. Number.Natural.+ m Number.Numeral.zero = m)
  (m n.
     Number.Natural.+ (Number.Natural.suc m) n =
     Number.Natural.suc (Number.Natural.+ m n))
  m n.
    Number.Natural.+ m (Number.Natural.suc n) =
    Number.Natural.suc (Number.Natural.+ m n)

p q r.
    (p q q p) ((p q) r p q r) (p q r q p r)
    (p p p) (p p q p q)

(n. Number.Natural.* Number.Numeral.zero n = Number.Numeral.zero)
  (m. Number.Natural.* m Number.Numeral.zero = Number.Numeral.zero)
  (n. Number.Natural.* (Number.Numeral.bit1 Number.Numeral.zero) n = n)
  (m. Number.Natural.* m (Number.Numeral.bit1 Number.Numeral.zero) = m)
  (m n.
     Number.Natural.* (Number.Natural.suc m) n =
     Number.Natural.+ (Number.Natural.* m n) n)
  m n.
    Number.Natural.* m (Number.Natural.suc n) =
    Number.Natural.+ m (Number.Natural.* m n)

w.
    x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15.
      w =
      Data.Word16.Bits.toWord
        (Data.List.:: x0
           (Data.List.:: x1
              (Data.List.:: x2
                 (Data.List.:: x3
                    (Data.List.:: x4
                       (Data.List.:: x5
                          (Data.List.:: x6
                             (Data.List.:: x7
                                (Data.List.:: x8
                                   (Data.List.:: x9
                                      (Data.List.:: x10
                                         (Data.List.:: x11
                                            (Data.List.:: x12
                                               (Data.List.:: x13
                                                  (Data.List.:: x14
                                                     (Data.List.:: x15
                                                        Data.List.[]))))))))))))))))