Theory "word32"

Parents     bits

Signature

Type Arity
word32 0
Constant Type
n2w :num -> word32
word_add :word32 -> word32 -> word32
ASR_ONE :num -> num
word_asr :word32 -> num -> word32
word_2comp :word32 -> word32
w2n :word32 -> num
== :num -> num -> bool
w_0 :word32
w_1 :word32
word_lsl :word32 -> num -> word32
word_lsr :word32 -> num -> word32
HB :num
word_mul :word32 -> word32 -> word32
w_T :word32
OR :num -> num -> num
bitwise_or :word32 -> word32 -> word32
WL :num
word_ror :word32 -> num -> word32
word_sub :word32 -> word32 -> word32
word_suc :word32 -> word32
dest_word32 :word32 -> num -> bool
MODw :num -> num
MSBn :num -> bool
SLICEw :num -> num -> word32 -> num
TWO_COMP :num -> num
word_asr1 :word32 -> word32
RRXn :bool -> num -> num
LSR_ONE :num -> num
BITSw :num -> num -> word32 -> num
AND :num -> num -> num
word_lsr1 :word32 -> word32
EOR :num -> num -> num
bitwise_and :word32 -> word32 -> word32
ONE_COMP :num -> num
INw :num -> bool
LSB :word32 -> bool
MSB :word32 -> bool
bitwise_eor :word32 -> word32 -> word32
ROR_ONE :num -> num
RRX :bool -> word32 -> word32
word_ror1 :word32 -> word32
mk_word32 :(num -> bool) -> word32
TOw :word32 -> word32
AONE :num
COMP0 :num
BITw :num -> word32 -> bool
word_1comp :word32 -> word32

Definitions

HB_def
|- HB = 31
WL_def
|- WL = SUC HB
MODw_def
|- !n. MODw n = n MOD 2 ** WL
INw_def
|- !n. INw n = n < 2 ** WL
EQUIV_def
|- !x y. == x y = (MODw x = MODw y)
AONE_def
|- AONE = 1
MSBn_def
|- MSBn = BIT HB
ONE_COMP_def
|- !x. ONE_COMP x = 2 ** WL - 1 - MODw x
TWO_COMP_def
|- !x. TWO_COMP x = 2 ** WL - MODw x
OR_def
|- OR = BITWISE WL $\/
AND_def
|- AND = BITWISE WL $/\
EOR_def
|- EOR = BITWISE WL (\x y. ~(x = y))
COMP0_def
|- COMP0 = ONE_COMP 0
LSR_ONE_def
|- !a. LSR_ONE a = MODw a DIV 2
ASR_ONE_def
|- !a. ASR_ONE a = LSR_ONE a + SBIT (MSBn a) HB
ROR_ONE_def
|- !a. ROR_ONE a = LSR_ONE a + SBIT (LSBn a) HB
RRXn_def
|- !c a. RRXn c a = LSR_ONE a + SBIT c HB
word32_TY_DEF
|- ?rep. TYPE_DEFINITION (\c. ?x. c = == x) rep
word32_tybij
|- (!a. mk_word32 (dest_word32 a) = a) /\
   !r. (\c. ?x. c = == x) r = (dest_word32 (mk_word32 r) = r)
w_0_def
|- w_0 = mk_word32 (== 0)
w_1_def
|- w_1 = mk_word32 (== AONE)
w_T_def
|- w_T = mk_word32 (== COMP0)
word_suc
|- !T1. word_suc T1 = mk_word32 (== (SUC ($@ (dest_word32 T1))))
word_add
|- !T1 T2.
     T1 + T2 = mk_word32 (== ($@ (dest_word32 T1) + $@ (dest_word32 T2)))
word_mul
|- !T1 T2.
     T1 * T2 = mk_word32 (== ($@ (dest_word32 T1) * $@ (dest_word32 T2)))
word_1comp
|- !T1. NOT T1 = mk_word32 (== (ONE_COMP ($@ (dest_word32 T1))))
word_2comp
|- !T1. ~T1 = mk_word32 (== (TWO_COMP ($@ (dest_word32 T1))))
word_lsr1
|- !T1. word_lsr1 T1 = mk_word32 (== (LSR_ONE ($@ (dest_word32 T1))))
word_asr1
|- !T1. word_asr1 T1 = mk_word32 (== (ASR_ONE ($@ (dest_word32 T1))))
word_ror1
|- !T1. word_ror1 T1 = mk_word32 (== (ROR_ONE ($@ (dest_word32 T1))))
RRX_def
|- !T1 T2. RRX T1 T2 = mk_word32 (== (RRXn T1 ($@ (dest_word32 T2))))
LSB_def
|- !T1. LSB T1 = LSBn ($@ (dest_word32 T1))
MSB_def
|- !T1. MSB T1 = MSBn ($@ (dest_word32 T1))
bitwise_or
|- !T1 T2.
     T1 | T2 = mk_word32 (== (OR ($@ (dest_word32 T1)) ($@ (dest_word32 T2))))
bitwise_eor
|- !T1 T2.
     T1 # T2 =
     mk_word32 (== (EOR ($@ (dest_word32 T1)) ($@ (dest_word32 T2))))
bitwise_and
|- !T1 T2.
     T1 & T2 =
     mk_word32 (== (AND ($@ (dest_word32 T1)) ($@ (dest_word32 T2))))
TOw_def
|- !T1. TOw T1 = mk_word32 (== (MODw ($@ (dest_word32 T1))))
n2w_def
|- !n. n2w n = mk_word32 (== n)
w2n_def
|- !w. w2n w = MODw ($@ (dest_word32 w))
word_sub
|- !a b. a - b = a + ~b
word_lsl
|- !a n. a << n = a * n2w (2 ** n)
word_lsr
|- !a n. a >>> n = FUNPOW word_lsr1 n a
word_asr
|- !a n. a >> n = FUNPOW word_asr1 n a
word_ror
|- !a n. a #>> n = FUNPOW word_ror1 n a
BITw_def
|- !b n. BITw b n = BIT b (w2n n)
BITSw_def
|- !h l n. BITSw h l n = BITS h l (w2n n)
SLICEw_def
|- !h l n. SLICEw h l n = SLICE h l (w2n n)


Theorems

EQUIV_QT
|- !x y. == x y = (== x = == y)
FUNPOW_THM
|- !f n x. FUNPOW f n (f x) = f (FUNPOW f n x)
FUNPOW_THM2
|- !f n x. FUNPOW f (SUC n) x = f (FUNPOW f n x)
FUNPOW_COMP
|- !f m n a. FUNPOW f m (FUNPOW f n a) = FUNPOW f (m + n) a
INw_MODw
|- !n. INw (MODw n)
TOw_IDEM
|- !a. INw a ==> (MODw a = a)
MODw_IDEM2
|- !a. MODw (MODw a) = MODw a
TOw_QT
|- !a. == (MODw a) a
MODw_THM
|- MODw = BITS HB 0
MOD_ADD
|- !a b. MODw (a + b) = MODw (MODw a + MODw b)
MODw_MULT
|- !a b. MODw (a * b) = MODw (MODw a * MODw b)
ADD_QT
|- (!n. == (0 + n) n) /\ !m n. == (SUC m + n) (SUC (m + n))
ADD_0_QT
|- !a. == (a + 0) a
ADD_COMM_QT
|- !a b. == (a + b) (b + a)
ADD_ASSOC_QT
|- !a b c. == (a + (b + c)) (a + b + c)
MULT_QT
|- (!n. == (0 * n) 0) /\ !m n. == (SUC m * n) (m * n + n)
ADD1_QT
|- !m. == (SUC m) (m + AONE)
ADD_CLAUSES_QT
|- (!m. == (0 + m) m) /\ (!m. == (m + 0) m) /\
   (!m n. == (SUC m + n) (SUC (m + n))) /\ !m n. == (m + SUC n) (SUC (m + n))
SUC_EQUIV_COMP
|- !a b. == (SUC a) b ==> == a (b + (2 ** WL - 1))
INV_SUC_EQ_QT
|- !m n. == (SUC m) (SUC n) = == m n
ADD_INV_0_QT
|- !m n. == (m + n) m ==> == n 0
ADD_INV_0_EQ_QT
|- !m n. == (m + n) m = == n 0
EQ_ADD_LCANCEL_QT
|- !m n p. == (m + n) (m + p) = == n p
EQ_ADD_RCANCEL_QT
|- !m n p. == (m + p) (n + p) = == m n
LEFT_ADD_DISTRIB_QT
|- !m n p. == (p * (m + n)) (p * m + p * n)
MULT_ASSOC_QT
|- !m n p. == (m * (n * p)) (m * n * p)
MULT_COMM_QT
|- !m n. == (m * n) (n * m)
MULT_CLAUSES_QT
|- !m n.
     == (0 * m) 0 /\ == (m * 0) 0 /\ == (AONE * m) m /\ == (m * AONE) m /\
     == (SUC m * n) (m * n + n) /\ == (m * SUC n) (m + m * n)
ADD_TWO_COMP_QT
|- !a. == (MODw a + TWO_COMP a) 0
TWO_COMP_ONE_COMP_QT
|- !a. == (TWO_COMP a) (ONE_COMP a + AONE)
BIT_EQUIV_THM
|- !a b. (!x. x < WL ==> (BIT x a = BIT x b)) = == a b
BITS_SUC2
|- !n a. BITS (SUC n) 0 a = SLICE (SUC n) (SUC n) a + BITS n 0 a
BITWISE_ONE_COMP_THM
|- !a b. BITWISE WL (\x y. ~x) a b = ONE_COMP a
ONE_COMP_THM
|- !a x. x < WL ==> (BIT x (ONE_COMP a) = ~BIT x a)
BITWISE_THM2
|- !y op a b.
     (!x. x < WL ==> (op (BIT x a) (BIT x b) = BIT x y)) =
     == (BITWISE WL op a b) y
OR_ASSOC_QT
|- !a b c. == (OR a (OR b c)) (OR (OR a b) c)
OR_COMM_QT
|- !a b. == (OR a b) (OR b a)
OR_ABSORB_QT
|- !a b. == (AND a (OR a b)) a
OR_IDEM_QT
|- !a. == (OR a a) a
AND_ASSOC_QT
|- !a b c. == (AND a (AND b c)) (AND (AND a b) c)
AND_COMM_QT
|- !a b. == (AND a b) (AND b a)
AND_ABSORB_QT
|- !a b. == (OR a (AND a b)) a
AND_IDEM_QT
|- !a. == (AND a a) a
OR_COMP_QT
|- !a. == (OR a (ONE_COMP a)) COMP0
AND_COMP_QT
|- !a. == (AND a (ONE_COMP a)) 0
ONE_COMP_QT
|- !a. == (ONE_COMP (ONE_COMP a)) a
RIGHT_AND_OVER_OR_QT
|- !a b c. == (AND (OR a b) c) (OR (AND a c) (AND b c))
RIGHT_OR_OVER_AND_QT
|- !a b c. == (OR (AND a b) c) (AND (OR a c) (OR b c))
DE_MORGAN_THM_QT
|- !a b.
     == (ONE_COMP (AND a b)) (OR (ONE_COMP a) (ONE_COMP b)) /\
     == (ONE_COMP (OR a b)) (AND (ONE_COMP a) (ONE_COMP b))
BIT_EQUIV
|- !n a b. n < WL ==> == a b ==> (BIT n a = BIT n b)
LSB_WELLDEF
|- !a b. == a b ==> (LSBn a = LSBn b)
MSB_WELLDEF
|- !a b. == a b ==> (MSBn a = MSBn b)
BITWISE_ISTEP
|- !n op a b.
     0 < n ==>
     (BITWISE n op (a DIV 2) (b DIV 2) =
      BITWISE n op a b DIV 2 + SBIT (op (BIT n a) (BIT n b)) (n - 1))
BITWISE_EVAL
|- !n op a b.
     BITWISE (SUC n) op a b =
     2 * BITWISE n op (a DIV 2) (b DIV 2) + SBIT (op (LSBn a) (LSBn b)) 0
BITWISE_WELLDEF
|- !n op a b c d.
     == a b /\ == c d ==> == (BITWISE n op a c) (BITWISE n op b d)
BITWISEw_WELLDEF
|- !op a b c d.
     == a b /\ == c d ==> == (BITWISE WL op a c) (BITWISE WL op b d)
SUC_WELLDEF
|- !a b. == a b ==> == (SUC a) (SUC b)
ADD_WELLDEF
|- !a b c d. == a b /\ == c d ==> == (a + c) (b + d)
MUL_WELLDEF
|- !a b c d. == a b /\ == c d ==> == (a * c) (b * d)
ONE_COMP_WELLDEF
|- !a b. == a b ==> == (ONE_COMP a) (ONE_COMP b)
TWO_COMP_WELLDEF
|- !a b. == a b ==> == (TWO_COMP a) (TWO_COMP b)
TOw_WELLDEF
|- !a b. == a b ==> == (MODw a) (MODw b)
LSR_ONE_WELLDEF
|- !a b. == a b ==> == (LSR_ONE a) (LSR_ONE b)
ASR_ONE_WELLDEF
|- !a b. == a b ==> == (ASR_ONE a) (ASR_ONE b)
ROR_ONE_WELLDEF
|- !a b. == a b ==> == (ROR_ONE a) (ROR_ONE b)
RRX_WELLDEF
|- !a b c. == a b ==> == (RRXn c a) (RRXn c b)
LSR_ONE
|- LSR_ONE = BITS HB 1
ADDw
|- (!n. w_0 + n = n) /\ !m n. word_suc m + n = word_suc (m + n)
ADD_0w
|- !a. a + w_0 = a
ADD1w
|- !m. word_suc m = m + w_1
ADD_ASSOCw
|- !a b c. a + (b + c) = a + b + c
ADD_CLAUSESw
|- (!m. w_0 + m = m) /\ (!m. m + w_0 = m) /\
   (!m n. word_suc m + n = word_suc (m + n)) /\
   !m n. m + word_suc n = word_suc (m + n)
ADD_COMMw
|- !a b. a + b = b + a
ADD_INV_0_EQw
|- !m n. (m + n = m) = (n = w_0)
EQ_ADD_LCANCELw
|- !m n p. (m + n = m + p) = (n = p)
EQ_ADD_RCANCELw
|- !m n p. (m + p = n + p) = (m = n)
LEFT_ADD_DISTRIBw
|- !m n p. p * (m + n) = p * m + p * n
MULT_ASSOCw
|- !m n p. m * (n * p) = m * n * p
MULT_COMMw
|- !m n. m * n = n * m
MULT_CLAUSESw
|- !m n.
     (w_0 * m = w_0) /\ (m * w_0 = w_0) /\ (w_1 * m = m) /\ (m * w_1 = m) /\
     (word_suc m * n = m * n + n) /\ (m * word_suc n = m + m * n)
TWO_COMP_ONE_COMP
|- !a. ~a = NOT a + w_1
OR_ASSOCw
|- !a b c. a | (b | c) = a | b | c
OR_COMMw
|- !a b. a | b = b | a
OR_IDEMw
|- !a. a | a = a
OR_ABSORBw
|- !a b. a & (a | b) = a
AND_ASSOCw
|- !a b c. a & (b & c) = a & b & c
AND_COMMw
|- !a b. a & b = b & a
AND_IDEMw
|- !a. a & a = a
AND_ABSORBw
|- !a b. a | a & b = a
ONE_COMPw
|- !a. NOT (NOT a) = a
RIGHT_AND_OVER_ORw
|- !a b c. (a | b) & c = a & c | b & c
RIGHT_OR_OVER_ANDw
|- !a b c. a & b | c = (a | c) & (b | c)
DE_MORGAN_THMw
|- !a b. (NOT (a & b) = NOT a | NOT b) /\ (NOT (a | b) = NOT a & NOT b)
w_0
|- w_0 = n2w 0
w_1
|- w_1 = n2w 1
w_T
|- w_T = n2w 4294967295
ADD_TWO_COMP
|- !a. a + ~a = w_0
ADD_TWO_COMP2
|- !a. ~a + a = w_0
TWO_COMP_ADD
|- !a b. ~(a + b) = ~a + ~b
TWO_COMP_ELIM
|- !a. ~~a = a
ADD_SUB_ASSOC
|- !a b c. a + b - c = a + (b - c)
ADD_SUB_SYM
|- !a b c. a + b - c = a - c + b
SUB_EQUALw
|- !a. a - a = w_0
ADD_SUBw
|- !a b. a + b - b = a
SUB_SUBw
|- !a b c. a - (b - c) = a + c - b
ONE_COMP_TWO_COMP
|- !a. NOT a = ~a - w_1
SUBw
|- !m n. word_suc m - n = word_suc (m - n)
ADD_EQ_SUBw
|- !m n p. (m + n = p) = (m = p - n)
CANCEL_SUBw
|- !m n p. (n - p = m - p) = (n = m)
SUB_PLUSw
|- !a b c. a - (b + c) = a - b - c
word_nchotomy
|- !w. ?n. w = n2w n
dest_word_mk_word_eq3
|- !a. dest_word32 (mk_word32 (== a)) = == a
MODw_ELIM
|- !n. n2w (MODw n) = n2w n
w2n_EVAL
|- !n. w2n (n2w n) = MODw n
w2n_ELIM
|- !a. n2w (w2n a) = a
n2w_11
|- !a b. (n2w a = n2w b) = (MODw a = MODw b)
ADD_EVAL
|- n2w a + n2w b = n2w (a + b)
MUL_EVAL
|- n2w a * n2w b = n2w (a * b)
ONE_COMP_EVAL
|- NOT (n2w a) = n2w (ONE_COMP a)
TWO_COMP_EVAL
|- ~n2w a = n2w (TWO_COMP a)
LSR_ONE_EVAL
|- word_lsr1 (n2w a) = n2w (LSR_ONE a)
ASR_ONE_EVAL
|- word_asr1 (n2w a) = n2w (ASR_ONE a)
ROR_ONE_EVAL
|- word_ror1 (n2w a) = n2w (ROR_ONE a)
RRX_EVAL
|- RRX c (n2w a) = n2w (RRXn c a)
LSB_EVAL
|- LSB (n2w a) = LSBn a
MSB_EVAL
|- MSB (n2w a) = MSBn a
OR_EVAL
|- n2w a | n2w b = n2w (OR a b)
EOR_EVAL
|- n2w a # n2w b = n2w (EOR a b)
AND_EVAL
|- n2w a & n2w b = n2w (AND a b)
BITS_EVAL
|- !h l a. BITSw h l (n2w a) = BITS h l (MODw a)
BIT_EVAL
|- !b a. BITw b (n2w a) = BIT b (MODw a)
SLICE_EVAL
|- !h l a. SLICEw h l (n2w a) = SLICE h l (MODw a)
LSL_ADD
|- !a m n. a << m << n = a << (m + n)
LSR_ADD
|- !a m n. a >>> m >>> n = a >>> (m + n)
ASR_ADD
|- !a m n. a >> m >> n = a >> (m + n)
ROR_ADD
|- !a m n. a #>> m #>> n = a #>> (m + n)
LSL_LIMIT
|- !w n. HB < n ==> (w << n = w_0)
MOD_MOD_DIV
|- !a b. INw (MODw a DIV 2 ** b)
MOD_MOD_DIV_2EXP
|- !a n. MODw (MODw a DIV 2 ** n) DIV 2 = MODw a DIV 2 ** SUC n
LSR_EVAL
|- !n. n2w a >>> n = n2w (MODw a DIV 2 ** n)
LSR_THM
|- !x n. n2w n >>> x = n2w (BITS HB (MIN WL x) n)
LSR_LIMIT
|- !x w. HB < x ==> (w >>> x = w_0)
LEFT_SHIFT_LESS
|- !n m a. a < 2 ** m ==> 2 ** n + a * 2 ** n <= 2 ** (m + n)
ROR_THM
|- !x n.
     n2w n #>> x =
     (let x' = x MOD WL in
        n2w (BITS HB x' n + BITS (x' - 1) 0 n * 2 ** (WL - x')))
ROR_CYCLE
|- !x w. w #>> (x * WL) = w
ASR_THM
|- !x n.
     n2w n >> x =
     (let x' = MIN HB x in
        let s = BITS HB x' n in
          n2w (if MSBn n then 2 ** WL - 2 ** (WL - x') + s else s))
ASR_LIMIT
|- !x w. HB <= x ==> (w >> x = (if MSB w then w_T else w_0))
ZERO_SHIFT
|- (!n. w_0 << n = w_0) /\ (!n. w_0 >> n = w_0) /\ (!n. w_0 >>> n = w_0) /\
   !n. w_0 #>> n = w_0
ZERO_SHIFT2
|- (!a. a << 0 = a) /\ (!a. a >> 0 = a) /\ (!a. a >>> 0 = a) /\
   !a. a #>> 0 = a
ASR_w_T
|- !n. w_T >> n = w_T
ROR_w_T
|- !n. w_T #>> n = w_T
MODw_EVAL
|- !n. MODw n = n MOD 4294967296
ADD_EVAL2
|- !b a. n2w a + n2w b = n2w (MODw (a + b))
MUL_EVAL2
|- !b a. n2w a * n2w b = n2w (MODw (a * b))
ONE_COMP_EVAL2
|- !a. NOT (n2w a) = n2w (2 ** 32 - 1 - MODw a)
TWO_COMP_EVAL2
|- !a. ~n2w a = n2w (MODw (2 ** 32 - MODw a))
LSR_ONE_EVAL2
|- !a. word_lsr1 (n2w a) = n2w (MODw a DIV 2)
ASR_ONE_EVAL2
|- !a. word_asr1 (n2w a) = n2w (MODw a DIV 2 + SBIT (MSBn a) 31)
ROR_ONE_EVAL2
|- !a. word_ror1 (n2w a) = n2w (MODw a DIV 2 + SBIT (LSBn a) 31)
RRX_EVAL2
|- !c a. RRX c (n2w a) = n2w (MODw a DIV 2 + SBIT c 31)
LSB_EVAL2
|- !a. LSB (n2w a) = ODD a
MSB_EVAL2
|- !a. MSB (n2w a) = BIT 31 a
OR_EVAL2
|- !b a. n2w a | n2w b = n2w (BITWISE 32 $\/ a b)
AND_EVAL2
|- !b a. n2w a & n2w b = n2w (BITWISE 32 $/\ a b)
EOR_EVAL2
|- !b a. n2w a # n2w b = n2w (BITWISE 32 (\x y. ~(x = y)) a b)
BITWISE_EVAL2
|- !n op x y.
     BITWISE n op x y =
     (if n = 0 then
        0
      else
        2 * BITWISE (n - 1) op (x DIV 2) (y DIV 2) +
        (if op (ODD x) (ODD y) then 1 else 0))
BITSwLT_THM
|- !h l n. BITSw h l n < 2 ** (SUC h - l)
BITSw_COMP_THM
|- !h1 l1 h2 l2 n.
     h2 + l1 <= h1 ==>
     (BITS h2 l2 (BITSw h1 l1 n) = BITSw (h2 + l1) (l2 + l1) n)
BITSw_DIV_THM
|- !h l n x. BITSw h l x DIV 2 ** n = BITSw h (l + n) x
BITw_THM
|- !b n. BITw b n = (BITSw b b n = 1)
SLICEw_THM
|- !n h l. SLICEw h l n = BITSw h l n * 2 ** l
BITS_SLICEw_THM
|- !h l n. BITS h l (SLICEw h l n) = BITSw h l n
SLICEw_ZERO_THM
|- !n h. SLICEw h 0 n = BITSw h 0 n
SLICEw_COMP_THM
|- !h m l a.
     SUC m <= h /\ l <= m ==>
     (SLICEw h (SUC m) a + SLICEw m l a = SLICEw h l a)
BITSw_ZERO
|- !h l n. h < l ==> (BITSw h l n = 0)
SLICEw_ZERO
|- !h l n. h < l ==> (SLICEw h l n = 0)