Theory "int_arith"

Parents     gcd integer

Signature

Constant Type
bmarker :bool -> bool

Definitions

bmarker_def
|- !b. bmarker b = b


Theorems

not_less
|- ~(x < y) = y < x + 1
elim_eq
|- (x = y) = x < y + 1 /\ y < x + 1
less_to_leq_samel
|- !x y. x < y = x <= y + ~1
less_to_leq_samer
|- !x y. x < y = x + 1 <= y
lt_move_all_right
|- !x y. x < y = 0 < y + ~x
lt_move_all_left
|- !x y. x < y = x + ~y < 0
lt_move_left_left
|- !x y z. x < y + z = x + ~y < z
lt_move_left_right
|- !x y z. x + y < z = y < z + ~x
le_move_right_left
|- !x y z. x <= y + z = x + ~z <= y
le_move_all_right
|- !x y. x <= y = 0 <= y + ~x
eq_move_all_right
|- !x y. (x = y) = (0 = y + ~x)
eq_move_all_left
|- !x y. (x = y) = (x + ~y = 0)
eq_move_left_left
|- !x y z. (x = y + z) = (x + ~y = z)
eq_move_left_right
|- !x y z. (x + y = z) = (y = z + ~x)
eq_move_right_left
|- !x y z. (x = y + z) = (x + ~z = y)
lcm_eliminate
|- !P c. (?x. P (c * x)) = ?x. P x /\ c int_divides x
lt_justify_multiplication
|- !n x y. 0 < n ==> (x < y = n * x < n * y)
eq_justify_multiplication
|- !n x y. 0 < n ==> ((x = y) = (n * x = n * y))
justify_divides
|- !n x y. 0 < n ==> (x int_divides y = n * x int_divides n * y)
justify_divides2
|- !n c x y.
     n * x int_divides n * y + c =
     n * x int_divides n * y + c /\ n int_divides c
justify_divides3
|- !n x c. n int_divides n * x + c = n int_divides c
INT_SUB_SUB3
|- !x y z. x - (y - z) = x + z - y
move_sub
|- !c b a. a - c + b = a + b - c
can_get_small
|- !x y d. 0 < d ==> ?c. 0 < c /\ y - c * d < x
can_get_big
|- !x y d. 0 < d ==> ?c. 0 < c /\ x < y + c * d
positive_product_implication
|- !c d. 0 < c /\ 0 < d ==> 0 < c * d
restricted_quantification_simp
|- !low high x.
     low < x /\ x <= high =
     low < high /\ ((x = high) \/ low < x /\ x <= high - 1)
top_and_lessers
|- !P d x0. (!x. P x ==> P (x - d)) /\ P x0 ==> !c. 0 < c ==> P (x0 - c * d)
bot_and_greaters
|- !P d x0. (!x. P x ==> P (x + d)) /\ P x0 ==> !c. 0 < c ==> P (x0 + c * d)
in_additive_range
|- !low d x. low < x /\ x <= low + d = ?j. (x = low + j) /\ 0 < j /\ j <= d
in_subtractive_range
|- !high d x.
     high - d <= x /\ x < high = ?j. (x = high - j) /\ 0 < j /\ j <= d
subtract_to_small
|- !x d. 0 < d ==> ?k. 0 < x - k * d /\ x - k * d <= d
add_to_great
|- !x d. 0 < d ==> ?k. 0 < x + k * d /\ x + k * d <= d
INT_LT_ADD_NUMERAL
|- !x y.
     x < x + $& (NUMERAL (NUMERAL_BIT1 y)) /\
     x < x + $& (NUMERAL (NUMERAL_BIT2 y)) /\ ~(x < x + ~$& (NUMERAL y))
INT_NUM_FORALL
|- (!n. P ($& n)) = !x. 0 <= x ==> P x
INT_NUM_EXISTS
|- (?n. P ($& n)) = ?x. 0 <= x /\ P x
INT_NUM_UEXISTS
|- (?!n. P ($& n)) = ?!x. 0 <= x /\ P x
INT_NUM_SUB
|- !n m. $& (n - m) = (if $& n < $& m then 0 else $& n - $& m)
INT_NUM_COND
|- !b n m. $& (if b then n else m) = (if b then $& n else $& m)
INT_NUM_ODD
|- !n. ODD n = ~(2 int_divides $& n)
INT_NUM_EVEN
|- !n. EVEN n = 2 int_divides $& n
HO_SUB_ELIM
|- !P a b.
     P ($& (a - b)) = $& b <= $& a /\ P ($& a + ~$& b) \/ $& a < $& b /\ P 0
CONJ_EQ_ELIM
|- !P v e. (v = e) /\ P v = (v = e) /\ P e
elim_neg_ones
|- !x. x + ~1 + 1 = x
elim_minus_ones
|- !x. x + 1 - 1 = x
INT_NUM_DIVIDES
|- !n m. $& n int_divides $& m = divides n m
INT_LINEAR_GCD
|- !n m. ?p q. p * $& n + q * $& m = $& (gcd n m)
INT_DIVIDES_LRMUL
|- !p q r. ~(q = 0) ==> (p * q int_divides r * q = p int_divides r)
INT_DIVIDES_RELPRIME_MUL
|- !p q r. (gcd p q = 1) ==> ($& p int_divides $& q * r = $& p int_divides r)
gcdthm2
|- !m a x b d p q.
     (d = gcd a m) /\ ($& d = p * $& a + q * $& m) /\ ~(d = 0) /\ ~(m = 0) /\
     ~(a = 0) ==>
     ($& m int_divides $& a * x + b =
      $& d int_divides b /\ ?t. x = ~p * (b / $& d) + t * ($& m / $& d))
gcd1thm
|- !m n p q. (p * $& m + q * $& n = 1) ==> (gcd m n = 1)
gcd21_thm
|- !m a x b p q.
     (p * $& a + q * $& m = 1) /\ ~(m = 0) /\ ~(a = 0) ==>
     ($& m int_divides $& a * x + b = ?t. x = ~p * b + t * $& m)
elim_lt_coeffs1
|- !n m x. ~(m = 0) ==> ($& n < $& m * x = $& n / $& m < x)
elim_lt_coeffs2
|- !n m x.
     ~(m = 0) ==>
     ($& m * x < $& n =
      x < (if $& m int_divides $& n then $& n / $& m else $& n / $& m + 1))
elim_le_coeffs
|- !m n x. 0 < m ==> (0 <= m * x + n = 0 <= x + n / m)
elim_eq_coeffs
|- !m x y.
     ~(m = 0) ==> (($& m * x = y) = $& m int_divides y /\ (x = y / $& m))
cooper_lemma_1
|- !m n a b u v p q x d.
     (d = gcd (u * m) (a * n)) /\
     ($& d = p * $& u * $& m + q * $& a * $& n) /\ ~(m = 0) /\ ~(n = 0) /\
     ~(a = 0) /\ ~(u = 0) ==>
     ($& m int_divides $& a * x + b /\ $& n int_divides $& u * x + v =
      $& m * $& n int_divides $& d * x + v * $& m * p + b * $& n * q /\
      $& d int_divides $& a * v - $& u * b)
bmarker_rewrites
|- !p q r.
     (q /\ bmarker p = bmarker p /\ q) /\
     (q /\ bmarker p /\ r = bmarker p /\ q /\ r) /\
     ((bmarker p /\ q) /\ r = bmarker p /\ q /\ r)
NOT_INT_DIVIDES
|- !c d.
     ~(c = 0) ==>
     (~(c int_divides d) =
      ?i. 1 <= i /\ i <= ABS c - 1 /\ c int_divides d + i)
NOT_INT_DIVIDES_POS
|- !n d.
     ~(n = 0) ==>
     (~($& n int_divides d) =
      ?i. (1 <= i /\ i <= $& n - 1) /\ $& n int_divides d + i)
le_context_rwt1
|- 0 <= c + x ==> x <= y ==> (0 <= c + y = T)
le_context_rwt2
|- 0 <= c + x ==> y < ~x ==> (0 <= ~c + y = F)
le_context_rwt3
|- 0 <= c + x ==> x < y ==> ((0 = c + y) = F)
le_context_rwt4
|- 0 <= c + x ==> x < ~y ==> ((0 = ~c + y) = F)
le_context_rwt5
|- 0 <= c + x ==> (0 <= ~c + ~x = (0 = c + x))
eq_context_rwt1
|- (0 = c + x) ==> (0 <= c + y = x <= y)
eq_context_rwt2
|- (0 = c + x) ==> (0 <= ~c + y = ~x <= y)