- 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)
- 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)