Theory "bits"

Parents     list option

Signature

Constant Type
DIVMOD_2EXP :num -> num -> num # num
LSBn :num -> bool
MOD_2EXP :num -> num -> num
TIMES_2EXP :num -> num -> num
SBIT :bool -> num -> num
DIV_2EXP :num -> num -> num
BIT :num -> num -> bool
SLICE :num -> num -> num -> num
BITS :num -> num -> num -> num
BITWISE :num -> (bool -> bool -> bool) -> num -> num -> num
DIV2 :num -> num

Definitions

DIV2_def
|- !n. DIV2 n = n DIV 2
TIMES_2EXP_def
|- !x n. TIMES_2EXP x n = n * 2 ** x
DIV_2EXP_def
|- !x n. DIV_2EXP x n = n DIV 2 ** x
MOD_2EXP_def
|- !x n. MOD_2EXP x n = n MOD 2 ** x
DIVMOD_2EXP_def
|- !x n. DIVMOD_2EXP x n = (n DIV 2 ** x,n MOD 2 ** x)
SBIT_def
|- !b n. SBIT b n = (if b then 2 ** n else 0)
BITS_def
|- !h l n. BITS h l n = MOD_2EXP (SUC h - l) (DIV_2EXP l n)
BIT_def
|- !b n. BIT b n = (BITS b b n = 1)
SLICE_def
|- !h l n. SLICE h l n = MOD_2EXP (SUC h) n - MOD_2EXP l n
LSBn_def
|- LSBn = BIT 0
BITWISE_def
|- (!op x y. BITWISE 0 op x y = 0) /\
   !n op x y.
     BITWISE (SUC n) op x y =
     BITWISE n op x y + SBIT (op (BIT n x) (BIT n y)) n


Theorems

DIV1
|- !q. q DIV 1 = q
SUC_SUB
|- SUC a - a = 1
DIV_MULT_1
|- !r n. r < n ==> ((n + r) DIV n = 1)
NOT_ZERO_ADD1
|- !m. ~(m = 0) ==> ?p. m = SUC p
ZERO_LT_TWOEXP
|- !n. 0 < 2 ** n
MOD_2EXP_LT
|- !n k. k MOD 2 ** n < 2 ** n
TWOEXP_DIVISION
|- !n k. k = k DIV 2 ** n * 2 ** n + k MOD 2 ** n
TWOEXP_MONO
|- !a b. a < b ==> 2 ** a < 2 ** b
TWOEXP_MONO2
|- !a b. a <= b ==> 2 ** a <= 2 ** b
EXP_SUB_LESS_EQ
|- !a b. 2 ** (a - b) <= 2 ** a
BITS_THM
|- !h l n. BITS h l n = (n DIV 2 ** l) MOD 2 ** (SUC h - l)
BITSLT_THM
|- !h l n. BITS h l n < 2 ** (SUC h - l)
DIV_MULT_LEM
|- !m n. 0 < n ==> m DIV n * n <= m
MOD_2EXP_LEM
|- !n x. n MOD 2 ** x = n - n DIV 2 ** x * 2 ** x
BITS2_THM
|- !h l n. BITS h l n = n MOD 2 ** SUC h DIV 2 ** l
BITS_COMP_THM
|- !h1 l1 h2 l2 n.
     h2 + l1 <= h1 ==>
     (BITS h2 l2 (BITS h1 l1 n) = BITS (h2 + l1) (l2 + l1) n)
BITS_DIV_THM
|- !h l x n. BITS h l x DIV 2 ** n = BITS h (l + n) x
BITS_LT_HIGH
|- !h l n. n < 2 ** SUC h ==> (BITS h l n = n DIV 2 ** l)
BITS_ZERO
|- !h l n. h < l ==> (BITS h l n = 0)
BITS_ZERO2
|- !h l. BITS h l 0 = 0
BITS_ZERO3
|- !h n. BITS h 0 n = n MOD 2 ** SUC h
BITS_COMP_THM2
|- !h1 l1 h2 l2 n.
     BITS h2 l2 (BITS h1 l1 n) = BITS (MIN h1 (h2 + l1)) (l2 + l1) n
NOT_MOD2_LEM
|- !n. ~(n MOD 2 = 0) = (n MOD 2 = 1)
NOT_MOD2_LEM2
|- !n a. ~(n MOD 2 = 1) = (n MOD 2 = 0)
EVEN_MOD2_LEM
|- !n. EVEN n = (n MOD 2 = 0)
ODD_MOD2_LEM
|- !n. ODD n = (n MOD 2 = 1)
LSB_ODD
|- LSBn = ODD
DIV_MULT_THM
|- !x n. n DIV 2 ** x * 2 ** x = n - n MOD 2 ** x
DIV_MULT_THM2
|- !n. 2 * (n DIV 2) = n - n MOD 2
LESS_EQ_EXP_MULT
|- !a b. a <= b ==> ?p. 2 ** b = p * 2 ** a
SLICE_LEM1
|- !a x y.
     a DIV 2 ** (x + y) * 2 ** (x + y) =
     a DIV 2 ** x * 2 ** x - (a DIV 2 ** x) MOD 2 ** y * 2 ** x
SLICE_LEM2
|- !a x y.
     n MOD 2 ** (x + y) = n MOD 2 ** x + (n DIV 2 ** x) MOD 2 ** y * 2 ** x
SLICE_LEM3
|- !n h l. l < h ==> n MOD 2 ** SUC l <= n MOD 2 ** h
SLICE_THM
|- !n h l. SLICE h l n = BITS h l n * 2 ** l
SLICELT_THM
|- !h l n. SLICE h l n < 2 ** SUC h
BITS_SLICE_THM
|- !h l n. BITS h l (SLICE h l n) = BITS h l n
BITS_SLICE_THM2
|- !h l n. h <= h2 ==> (BITS h2 l (SLICE h l n) = BITS h l n)
MOD_2EXP_MONO
|- !n h l. l <= h ==> n MOD 2 ** l <= n MOD 2 ** SUC h
SLICE_COMP_THM
|- !h m l n.
     SUC m <= h /\ l <= m ==> (SLICE h (SUC m) n + SLICE m l n = SLICE h l n)
SLICE_ZERO
|- !h l n. h < l ==> (SLICE h l n = 0)
BIT_COMP_THM3
|- !h m l n.
     SUC m <= h /\ l <= m ==>
     (BITS h (SUC m) n * 2 ** (SUC m - l) + BITS m l n = BITS h l n)
NOT_BIT
|- !n a. ~BIT n a = (BITS n n a = 0)
NOT_BITS
|- !n a. ~(BITS n n a = 0) = (BITS n n a = 1)
NOT_BITS2
|- !n a. ~(BITS n n a = 1) = (BITS n n a = 0)
BIT_SLICE
|- !n a b. (BIT n a = BIT n b) = (SLICE n n a = SLICE n n b)
BIT_SLICE_LEM
|- !y x n. SBIT (BIT x n) (x + y) = SLICE x x n * 2 ** y
BIT_SLICE_THM
|- !x n. SBIT (BIT x n) x = SLICE x x n
SBIT_DIV
|- !b m n. n < m ==> (SBIT b (m - n) = SBIT b m DIV 2 ** n)
BITS_SUC
|- !h l n.
     l <= SUC h ==>
     (SBIT (BIT (SUC h) n) (SUC h - l) + BITS h l n = BITS (SUC h) l n)
BITS_SUC_THM
|- !h l n.
     BITS (SUC h) l n =
     (if SUC h < l then 0 else SBIT (BIT (SUC h) n) (SUC h - l) + BITS h l n)
BIT_BITS_THM
|- !h l a b.
     (!x. l <= x /\ x <= h ==> (BIT x a = BIT x b)) =
     (BITS h l a = BITS h l b)
BITWISE_LT_2EXP
|- !n op a b. BITWISE n op a b < 2 ** n
LESS_EXP_MULT2
|- !a b. a < b ==> ?p. 2 ** b = 2 ** (p + 1) * 2 ** a
BITWISE_THM
|- !x n op a b. x < n ==> (BIT x (BITWISE n op a b) = op (BIT x a) (BIT x b))
BITWISE_COR
|- !x n op a b.
     x < n ==>
     op (BIT x a) (BIT x b) ==>
     ((BITWISE n op a b DIV 2 ** x) MOD 2 = 1)
BITWISE_NOT_COR
|- !x n op a b.
     x < n ==>
     ~op (BIT x a) (BIT x b) ==>
     ((BITWISE n op a b DIV 2 ** x) MOD 2 = 0)
MOD_PLUS_RIGHT
|- !n. 0 < n ==> !j k. (j + k MOD n) MOD n = (j + k) MOD n
MOD_PLUS_1
|- !n. 0 < n ==> !x. ((x + 1) MOD n = 0) = (x MOD n + 1 = n)
MOD_ADD_1
|- !n. 0 < n ==> !x. ~((x + 1) MOD n = 0) ==> ((x + 1) MOD n = x MOD n + 1)