Theory integer_word

Parents

Contents

Type operators

(none)

Constants

Definitions

INT_MAX_defINT_MIN_defUINT_MAX_deffromString_def_primitivei2w_defsaturate_i2sw_defsaturate_i2w_defsaturate_sw2sw_defsaturate_sw2w_defsaturate_w2sw_defsigned_saturate_add_defsigned_saturate_sub_deftoString_defw2i_defword_sdiv_defword_smod_def

Theorems

INT_BOUND_ORDERINT_MAXINT_MAX_MONOTONICINT_MININT_MIN_MONOTONICINT_ZERO_LE_INT_MAXINT_ZERO_LT_INT_MAXINT_ZERO_LT_INT_MININT_ZERO_LT_UINT_MAXMULT_MINUS_ONEONE_LE_TWOEXPUINT_MAXWORD_GEiWORD_GTiWORD_LEiWORD_LTidifferent_sign_then_no_overflowfromString_deffromString_indi2w_0i2w_DIVi2w_INT_MAXi2w_INT_MINi2w_UINT_MAXi2w_minus_1i2w_posi2w_w2ii2w_w2ni2w_w2n_w2wint_word_nchotomyoverflowoverflow_addoverflow_subranged_int_word_nchotomysaturate_i2swsaturate_i2sw_0saturate_i2w_0saturate_sw2swsaturate_sw2wsaturate_w2swsigned_saturate_addsigned_saturate_subsub_overflowsw2sw_i2ww2i_1w2i_11w2i_11_liftw2i_INT_MAXww2i_INT_MINww2i_UINT_MAXww2i_eq_0w2i_eq_w2nw2i_gew2i_i2ww2i_i2w_idw2i_i2w_negw2i_i2w_posw2i_lew2i_lt_0w2i_minus_1w2i_n2w_modw2i_n2w_negw2i_n2w_posw2i_negw2i_sw2sw_boundsw2i_w2n_posw2n_i2ww2w_i2wword_0_w2iword_abs_i2wword_abs_w2iword_add_i2wword_add_i2w_w2nword_i2w_addword_i2w_mulword_msb_i2wword_msb_i2w_lt_0word_mul_i2wword_mul_i2w_w2nword_quotword_remword_sub_i2wword_sub_i2w_w2n

Definitions

⊢ INT_MAX (:α) = &INT_MIN (:α) − 1
⊢ INT_MIN (:α) = -INT_MAX (:α) − 1
⊢ UINT_MAX (:α) = &dimword (:α) − 1
fromString_def_primitive
⊢ fromString =
  WFREC (@R. WF R)
    (λfromString a.
         case a of
           "" => I (&toNum "")
         | STRING #"~" t => I (-&toNum t)
         | STRING #"-" t => I (-&toNum t)
         | STRING v4 t => I (&toNum (STRING v4 t)))
⊢ ∀i. i2w i = if i < 0 then -n2w (Num (-i)) else n2w (Num i)
⊢ ∀i. saturate_i2sw i =
      if INT_MAX (:α) ≤ i then INT_MAXw
      else if i ≤ INT_MIN (:α) then INT_MINw
      else i2w i
⊢ ∀i. saturate_i2w i =
      if UINT_MAX (:α) ≤ i then UINT_MAXw
      else if i < 0 then 0w
      else n2w (Num i)
⊢ ∀w. saturate_sw2sw w = saturate_i2sw (w2i w)
⊢ ∀w. saturate_sw2w w = saturate_i2w (w2i w)
⊢ ∀w. saturate_w2sw w = saturate_i2sw (&w2n w)
⊢ ∀a b. signed_saturate_add a b = saturate_i2sw (w2i a + w2i b)
⊢ ∀a b. signed_saturate_sub a b = saturate_i2sw (w2i a − w2i b)
⊢ ∀i. toString i =
      if i < 0 then STRCAT "~" (toString (Num (-i))) else toString (Num i)
⊢ ∀w. w2i w = if word_msb w then -&w2n (-w) else &w2n w
⊢ ∀a b. word_sdiv a b = i2w (w2i a / w2i b)
⊢ ∀a b. word_smod a b = i2w (w2i a % w2i b)

Theorems

⊢ INT_MIN (:α) < INT_MAX (:α) ∧ INT_MAX (:α) < UINT_MAX (:α) ∧
  UINT_MAX (:α) < &dimword (:α)
⊢ INT_MAX (:α) = &INT_MAX (:α)
⊢ dimindex (:α) ≤ dimindex (:β) ⇒ INT_MAX (:α) ≤ INT_MAX (:β)
⊢ INT_MIN (:α) = -&INT_MIN (:α)
⊢ dimindex (:α) ≤ dimindex (:β) ⇒ INT_MIN (:β) ≤ INT_MIN (:α)
⊢ 0 ≤ INT_MAX (:α)
⊢ 1 < dimindex (:α) ⇒ 0 < INT_MAX (:α)
⊢ INT_MIN (:α) < 0
⊢ 0 < UINT_MAX (:α)
⊢ ∀i. -1w * i2w i = i2w (-i)
⊢ ∀n. 1 ≤ 2 ** n
⊢ UINT_MAX (:α) = &UINT_MAX (:α)
⊢ ∀a b. a ≥ b ⇔ w2i a ≥ w2i b
⊢ ∀a b. a > b ⇔ w2i a > w2i b
⊢ ∀a b. a ≤ b ⇔ w2i a ≤ w2i b
⊢ ∀a b. a < b ⇔ w2i a < w2i b
⊢ ∀x y. (word_msb x ⇎ word_msb y) ⇒ (w2i (x + y) = w2i x + w2i y)
⊢ (fromString (STRING #"~" t) = -&toNum t) ∧
  (fromString (STRING #"-" t) = -&toNum t) ∧ (fromString "" = &toNum "") ∧
  (fromString (STRING v4 v1) =
   if v4 = #"~" then -&toNum v1
   else if v4 = #"-" then -&toNum v1
   else &toNum (STRING v4 v1))
⊢ ∀P. (∀t. P (STRING #"~" t)) ∧ (∀t. P (STRING #"-" t)) ∧ P "" ∧
      (∀v4 v1. P (STRING v4 v1)) ⇒
      ∀v. P v
⊢ i2w 0 = 0w
⊢ ∀n i.
    n < dimindex (:α) ∧ INT_MIN (:α) ≤ i ∧ i ≤ INT_MAX (:α) ⇒
    (i2w (i / 2 ** n) = i2w i ≫ n)
⊢ i2w (INT_MAX (:α)) = INT_MAXw
⊢ i2w (INT_MIN (:α)) = INT_MINw
⊢ i2w (UINT_MAX (:α)) = UINT_MAXw
⊢ i2w (-1) = -1w
⊢ ∀n. i2w (&n) = n2w n
⊢ ∀w. i2w (w2i w) = w
⊢ i2w (&w2n w) = w
⊢ ∀w. i2w (&w2n w) = w2w w
⊢ ∀w. ∃i. w = i2w i
⊢ ∀x y.
    w2i (x + y) ≠ w2i x + w2i y ⇔
    (word_msb x ⇔ word_msb y) ∧ (word_msb x ⇎ word_msb (x + y))
⊢ ∀x y. w2i (x + y) ≠ w2i x + w2i y ⇔ OVERFLOW x y F
⊢ ∀x y. w2i (x − y) ≠ w2i x − w2i y ⇔ OVERFLOW x (¬y) T
⊢ ∀w. ∃i. (w = i2w i) ∧ INT_MIN (:α) ≤ i ∧ i ≤ INT_MAX (:α)
⊢ ∀i. saturate_i2w i = if i < 0 then 0w else saturate_n2w (Num i)
⊢ saturate_i2sw 0 = 0w
⊢ saturate_i2w 0 = 0w
⊢ ∀w. saturate_sw2sw w =
      if dimindex (:α) ≤ dimindex (:β) then sw2sw w
      else if sw2sw INT_MAXw ≤ w then INT_MAXw
      else if w ≤ sw2sw INT_MINw then INT_MINw
      else w2w w
⊢ ∀w. saturate_sw2w w = if w < 0w then 0w else saturate_w2w w
⊢ ∀w. saturate_w2sw w =
      if dimindex (:β) ≤ dimindex (:α) ∧ w2w INT_MAXw ≤₊ w then INT_MAXw
      else w2w w
⊢ ∀a b.
    signed_saturate_add a b =
    (let
       sum = a + b and msba = word_msb a
     in
       if (msba ⇔ word_msb b) ∧ (msba ⇎ word_msb sum) then
         if msba then INT_MINw else INT_MAXw
       else sum)
⊢ ∀a b.
    signed_saturate_sub a b =
    if b = INT_MINw then if 0w ≤ a then INT_MAXw else a + INT_MINw
    else if dimindex (:α) = 1 then a && ¬b
    else signed_saturate_add a (-b)
⊢ ∀x y.
    w2i (x − y) ≠ w2i x − w2i y ⇔
    (word_msb x ⇎ word_msb y) ∧ (word_msb x ⇎ word_msb (x − y))
⊢ ∀j. INT_MIN (:β) ≤ j ∧ j ≤ INT_MAX (:β) ∧ dimindex (:β) ≤ dimindex (:α) ⇒
      (sw2sw (i2w j) = i2w j)
⊢ w2i 1w = if dimindex (:α) = 1 then -1 else 1
⊢ ∀v w. (w2i v = w2i w) ⇔ (v = w)
⊢ ∀a b.
    dimindex (:α) ≤ dimindex (:γ) ∧ dimindex (:β) ≤ dimindex (:γ) ⇒
    ((w2i a = w2i b) ⇔ (sw2sw a = sw2sw b))
⊢ w2i INT_MAXw = INT_MAX (:α)
⊢ w2i INT_MINw = INT_MIN (:α)
⊢ w2i UINT_MAXw = -1
⊢ ∀w. (w2i w = 0) ⇔ (w = 0w)
⊢ w2i w = if w2n w < INT_MIN (:α) then &w2n w else &w2n w − &dimword (:α)
⊢ ∀w. INT_MIN (:α) ≤ w2i w
⊢ ∀i. INT_MIN (:α) ≤ i ∧ i ≤ INT_MAX (:α) ⇒ (w2i (i2w i) = i)
⊢ ∀i. INT_MIN (:α) ≤ i ∧ i ≤ INT_MAX (:α) ∧ dimindex (:β) ≤ dimindex (:α) ⇒
      ((i = w2i (i2w i)) ⇔ (i2w i = sw2sw (i2w i)))
⊢ ∀n. n ≤ INT_MIN (:α) ⇒ (w2i (i2w (-&n)) = -&n)
⊢ ∀n. n ≤ INT_MAX (:α) ⇒ (w2i (i2w (&n)) = &n)
⊢ ∀w. w2i w ≤ INT_MAX (:α)
⊢ ∀w. w2i w < 0 ⇔ w < 0w
⊢ w2i (-1w) = -1
⊢ ∀n m.
    n < dimword (:α) ∧ m ≤ dimindex (:α) ⇒
    (Num (w2i (n2w n) % 2 ** m) = n MOD 2 ** m)
⊢ ∀n. INT_MIN (:α) ≤ n ∧ n < dimword (:α) ⇒
      (w2i (n2w n) = -&(dimword (:α) − n))
⊢ ∀n. n < INT_MIN (:α) ⇒ (w2i (n2w n) = &n)
⊢ ∀w. w ≠ INT_MINw ⇒ (w2i (-w) = -w2i w)
⊢ ∀w. INT_MIN (:α) ≤ w2i (sw2sw w) ∧ w2i (sw2sw w) ≤ INT_MAX (:α)
⊢ ∀w n. ¬word_msb w ∧ w2i w < &n ⇒ w2n w < n
⊢ &w2n (i2w n) = n % &dimword (:α)
⊢ ∀i. dimindex (:α) ≤ dimindex (:β) ⇒ (w2w (i2w i) = i2w i)
⊢ w2i 0w = 0
⊢ ∀i. INT_MIN (:α) ≤ i ∧ i ≤ INT_MAX (:α) ⇒
      (word_abs (i2w i) = n2w (Num (ABS i)))
⊢ ∀w. word_abs w = n2w (Num (ABS (w2i w)))
⊢ ∀a b. i2w (w2i a + w2i b) = a + b
⊢ ∀a b. i2w (&w2n a + &w2n b) = a + b
⊢ ∀a b. i2w a + i2w b = i2w (a + b)
⊢ ∀a b. i2w a * i2w b = i2w (a * b)
⊢ ∀i. word_msb (i2w i) ⇔ &INT_MIN (:α) ≤ i % &dimword (:α)
⊢ ∀i. INT_MIN (:α) ≤ i ∧ i ≤ INT_MAX (:α) ⇒ (word_msb (i2w i) ⇔ i < 0)
⊢ ∀a b. i2w (w2i a * w2i b) = a * b
⊢ ∀a b. i2w (&w2n a * &w2n b) = a * b
⊢ ∀a b. b ≠ 0w ⇒ (a / b = i2w (w2i a quot w2i b))
⊢ ∀a b. b ≠ 0w ⇒ (word_rem a b = i2w (w2i a rem w2i b))
⊢ ∀a b. i2w (w2i a − w2i b) = a − b
⊢ ∀a b. i2w (&w2n a − &w2n b) = a − b