Theory rat

Parents

Contents

Type operators

Constants

Definitions

RATND_THMabs_rat_defdiv_gcd_defrat_0_defrat_1_defrat_TY_DEFrat_add_defrat_ainv_defrat_bijectionsrat_cons_defrat_div_defrat_dnm_defrat_equiv_defrat_exp_defrat_expn_defrat_geq_defrat_gre_defrat_leq_defrat_les_defrat_max_defrat_min_defrat_minv_defrat_mul_defrat_nmr_defrat_of_int_defrat_of_num_def_primitiverat_sgn_defrat_sub_defrep_rat_def

Theorems

ABS_RATFRAC_DIVABS_RATFRAC_RATNDFRAC_ADD_EQUIV1FRAC_MINV_EQUIVFRAC_MUL_EQUIV1FRAC_MUL_EQUIV2INT_MOD_MULLDIV_MUL_OUTLT_MULNUM_NZERONUM_POSINT_EXISTS_SUCRATRATD_NEGRATD_NZERORATND_RAT_OF_NUMRATND_of_coprimesRATND_of_coprimes'RATND_suff_eqRATN_DIV_RATDRATN_EQ0RATN_LEASTRATN_NEGRATN_RATD_EQ_THMRATN_RATD_MULTRATN_RATD_RAT_OF_INTRATN_SIGNRAT_0RAT_0LEQ_NMRRAT_0LES_0LEQ_ADDRAT_0LES_0LES_ADDRAT_0LES_NMRRAT_1RAT_1_NOT_0RAT_ABS_EQUIVRAT_ADD_ASSOCRAT_ADD_CALCULATERAT_ADD_COMMRAT_ADD_CONGRAT_ADD_CONG1RAT_ADD_CONG2RAT_ADD_LIDRAT_ADD_LINVRAT_ADD_MONORAT_ADD_NUM_CALCULATERAT_ADD_ONE_ONERAT_ADD_RIDRAT_ADD_RINVRAT_AINV_0RAT_AINV_ADDRAT_AINV_AINVRAT_AINV_CALCULATERAT_AINV_CONGRAT_AINV_EQRAT_AINV_EQ_NUMRAT_AINV_LESRAT_AINV_LMULRAT_AINV_MINVRAT_AINV_MUL_AINVRAT_AINV_ONE_ONERAT_AINV_RMULRAT_AINV_SGNRAT_AINV_SUBRAT_CONS_TO_NUMRAT_DENSE_THMRAT_DIVDIV_ADDRAT_DIVDIV_MULRAT_DIVMUL_CANCELRAT_DIV_0RAT_DIV_1RAT_DIV_AINVRAT_DIV_CALCULATERAT_DIV_CONGRAT_DIV_CONG1RAT_DIV_CONG2RAT_DIV_EQ0RAT_DIV_INVRAT_DIV_MINVRAT_DIV_MULMINVRAT_DIV_NEG1RAT_EQRAT_EQ0_NMRRAT_EQUIVRAT_EQUIV_ALTRAT_EQUIV_NMR_GTZ_IFFRAT_EQUIV_NMR_LTZ_IFFRAT_EQUIV_NMR_Z_IFFRAT_EQUIV_REFRAT_EQUIV_SYMRAT_EQUIV_TRANSRAT_EQ_0SUBRAT_EQ_AINVRAT_EQ_ALTRAT_EQ_CALCULATERAT_EQ_LADDRAT_EQ_LMULRAT_EQ_NUM_CALCULATERAT_EQ_RADDRAT_EQ_RMULRAT_EQ_SUB0RAT_EXPN_0RAT_EXPN_1RAT_EXPN_ADDRAT_EXPN_CALCULATERAT_EXPN_DIVRAT_EXPN_EQ0RAT_EXPN_EQ_1RAT_EXPN_EQ_1_NEGRAT_EXPN_EQ_1_POSRAT_EXPN_INJRAT_EXPN_LTRAT_EXPN_MINUS1RAT_EXPN_MULRAT_EXPN_NEGRAT_EXPN_NEG_LT_ZERORAT_EXPN_PRODRAT_EXPN_RAT_MINVRAT_EXPN_R_NONZERORAT_EXPN_R_POSRAT_EXPN_SUBRAT_EXPN_TO_0RAT_EXPN_TO_1RAT_EXP_0RAT_EXP_1RAT_EXP_ADDRAT_EXP_CALCULATERAT_EXP_DIVRAT_EXP_INJRAT_EXP_LERAT_EXP_LTRAT_EXP_LT2RAT_EXP_MINUS1RAT_EXP_MULRAT_EXP_NEGRAT_EXP_NEG_INTRAT_EXP_NUMRAT_EXP_PRODRAT_EXP_RAT_MINVRAT_EXP_R_NONZERORAT_EXP_R_POSRAT_EXP_SUBRAT_EXP_TO_0RAT_EXP_TO_NEGRAT_LDISTRIBRAT_LDIV_EQRAT_LDIV_LEQ_NEGRAT_LDIV_LEQ_POSRAT_LDIV_LES_NEGRAT_LDIV_LES_POSRAT_LEQ0_NMRRAT_LEQ_ANTISYMRAT_LEQ_CALCULATERAT_LEQ_LADDRAT_LEQ_LESRAT_LEQ_LES_TRANSRAT_LEQ_MULRAT_LEQ_RADDRAT_LEQ_REFRAT_LEQ_TRANSRAT_LES0_LEQ0_ADDRAT_LES0_LES0_ADDRAT_LES0_NMRRAT_LES_01RAT_LES_0SUBRAT_LES_AINVRAT_LES_AINV2RAT_LES_ANTISYMRAT_LES_CALCULATERAT_LES_IMP_LEQRAT_LES_IMP_NEQRAT_LES_LADDRAT_LES_LEQRAT_LES_LEQ2RAT_LES_LEQ_TRANSRAT_LES_LMUL_NEGRAT_LES_LMUL_POSRAT_LES_MUL_GTR_1RAT_LES_RADDRAT_LES_REFRAT_LES_RMUL_NEGRAT_LES_RMUL_POSRAT_LES_SUB0RAT_LES_TOTALRAT_LES_TRANSRAT_LE_NUM_CALCULATERAT_LSUB_EQRAT_LSUB_LEQRAT_LSUB_LESRAT_LT_LE_NEQRAT_LT_MULRAT_LT_NUM_CALCULATERAT_MINV_1RAT_MINV_CALCULATERAT_MINV_CONGRAT_MINV_DIVRAT_MINV_EQ_0RAT_MINV_IDRAT_MINV_LESRAT_MINV_LT_1RAT_MINV_LT_MINUS1RAT_MINV_MULRAT_MINV_RATNDRAT_MINV_RAT_MINVRAT_MUL_ASSOCRAT_MUL_CALCULATERAT_MUL_COMMRAT_MUL_CONGRAT_MUL_CONG1RAT_MUL_CONG2RAT_MUL_LIDRAT_MUL_LINVRAT_MUL_LZERORAT_MUL_NEGRAT_MUL_NUM_CALCULATERAT_MUL_ONE_ONERAT_MUL_RIDRAT_MUL_RINVRAT_MUL_RZERORAT_MUL_SIGN_CASESRAT_NMRDNM_EQRAT_NMREQ0_CONGRAT_NMRGT0_CONGRAT_NMRLT0_CONGRAT_NMR_Z_IFF_EQUIVRAT_NO_IDDIVRAT_NO_ZERODIVRAT_NO_ZERODIV_NEGRAT_NO_ZERODIV_THMRAT_OF_INT_CALCULATERAT_OF_NUMRAT_OF_NUM_CALCULATERAT_OF_NUM_LEQRAT_OF_NUM_LESRAT_RDISTRIBRAT_RDIV_EQRAT_RDIV_LEQ_NEGRAT_RDIV_LEQ_POSRAT_RDIV_LES_NEGRAT_RDIV_LES_POSRAT_RSUB_EQRAT_RSUB_LEQRAT_RSUB_LESRAT_SAVERAT_SAVE_MINVRAT_SAVE_NUMRAT_SAVE_TO_CONSRAT_SGN_0RAT_SGN_AINVRAT_SGN_AINV'RAT_SGN_AINV_RWTRAT_SGN_ALTRAT_SGN_CALCULATERAT_SGN_CLAUSESRAT_SGN_COMPLEMENTRAT_SGN_CONGRAT_SGN_DIVRAT_SGN_EQ0RAT_SGN_MINVRAT_SGN_MULRAT_SGN_NEGRAT_SGN_NUM_BITsRAT_SGN_NUM_CONDRAT_SGN_POSRAT_SGN_TOTALRAT_SUB_ADDAINVRAT_SUB_CALCULATERAT_SUB_CONGRAT_SUB_CONG1RAT_SUB_CONG2RAT_SUB_IDRAT_SUB_LDISTRIBRAT_SUB_LIDRAT_SUB_RDISTRIBRAT_SUB_RIDRAT_TIMES2RDIV_MUL_OUTdiv_gcd_correctdiv_gcd_reducesfrac_dnm_EQ0gcd_RATNDrat_0rat_1rat_ABS_REP_CLASSrat_QUOTIENTrat_defrat_equiv_rep_absrat_equiv_repsrat_expn_computerat_of_int_11rat_of_int_ADDrat_of_int_EQNrat_of_int_LErat_of_int_LTrat_of_int_MULrat_of_int_ainvrat_of_int_nmrdnmrat_of_int_of_numrat_of_num_computerat_of_num_defrat_of_num_indrat_type_thmrep_rat_of_int

Definitions

RATND_THM
⊢ ∀r. r = rat_of_int (RATN r) / &RATD r ∧ 0 < RATD r ∧
      (RATN r = 0 ⇒ RATD r = 1) ∧
      ∀n' d'. r = rat_of_int n' / &d' ∧ 0 < d' ⇒ ABS (RATN r) ≤ ABS n'
abs_rat_def
⊢ ∀r. abs_rat r = abs_rat_CLASS (rat_equiv r)
⊢ ∀a b.
    div_gcd a b =
    (let
       d = gcd (Num a) b
     in
       if d = 0 ∨ d = 1 then (a,b) else (a / &d,b DIV d))
⊢ rat_0 = abs_rat frac_0
⊢ rat_1 = abs_rat frac_1
rat_TY_DEF
⊢ ∃rep. TYPE_DEFINITION (λc. ∃r. rat_equiv r r ∧ c = rat_equiv r) rep
⊢ ∀r1 r2. r1 + r2 = abs_rat (frac_add (rep_rat r1) (rep_rat r2))
⊢ ∀r1. -r1 = abs_rat (frac_ainv (rep_rat r1))
rat_bijections
⊢ (∀a. abs_rat_CLASS (rep_rat_CLASS a) = a) ∧
  ∀r. (λc. ∃r. rat_equiv r r ∧ c = rat_equiv r) r ⇔
      rep_rat_CLASS (abs_rat_CLASS r) = r
⊢ ∀nmr dnm.
    nmr // dnm = abs_rat (abs_frac (SGN nmr * SGN dnm * ABS nmr,ABS dnm))
⊢ ∀r1 r2. r1 / r2 = abs_rat (frac_div (rep_rat r1) (rep_rat r2))
⊢ ∀r. rat_dnm r = frac_dnm (rep_rat r)
⊢ ∀f1 f2.
    rat_equiv f1 f2 ⇔ frac_nmr f1 * frac_dnm f2 = frac_nmr f2 * frac_dnm f1
⊢ ∀r i.
    r ** i = if 0 ≤ i then expn r (Num i) else rat_minv (expn r (Num i))
⊢ (∀r. expn r 0 = 1) ∧ ∀r n. expn r (SUC n) = r * expn r n
⊢ ∀r1 r2. r1 ≥ r2 ⇔ r2 ≤ r1
⊢ ∀r1 r2. r1 > r2 ⇔ r2 < r1
⊢ ∀r1 r2. r1 ≤ r2 ⇔ r1 < r2 ∨ r1 = r2
⊢ ∀r1 r2. r1 < r2 ⇔ RAT_SGN (r2 − r1) = 1
⊢ ∀r1 r2. rat_max r1 r2 = if r1 > r2 then r1 else r2
⊢ ∀r1 r2. rat_min r1 r2 = if r1 < r2 then r1 else r2
⊢ ∀r1. rat_minv r1 = abs_rat (frac_minv (rep_rat r1))
⊢ ∀r1 r2. r1 * r2 = abs_rat (frac_mul (rep_rat r1) (rep_rat r2))
⊢ ∀r. rat_nmr r = frac_nmr (rep_rat r)
⊢ ∀i. rat_of_int i = if i < 0 then -&Num (-i) else &Num i
rat_of_num_def_primitive
⊢ $& =
  WFREC (@R. WF R ∧ ∀n. R (SUC n) (SUC (SUC n)))
    (λrat_of_num a.
         case a of
           0 => I rat_0
         | SUC 0 => I rat_1
         | SUC (SUC n) => I (rat_of_num (SUC n) + rat_1))
⊢ ∀r. RAT_SGN r = frac_sgn (rep_rat r)
⊢ ∀r1 r2. r1 − r2 = abs_rat (frac_sub (rep_rat r1) (rep_rat r2))
rep_rat_def
⊢ ∀a. rep_rat a = $@ (rep_rat_CLASS a)

Theorems

⊢ 0 < d ⇒ abs_rat (abs_frac (n,d)) = rat_of_int n / rat_of_int d
⊢ abs_rat (abs_frac (RATN q,&RATD q)) = q
⊢ rat_equiv x x' ⇒ rat_equiv (frac_add x y) (frac_add x' y)
⊢ frac_nmr y ≠ 0 ⇒ rat_equiv x y ⇒ rat_equiv (frac_minv x) (frac_minv y)
⊢ rat_equiv x x' ⇒ rat_equiv (frac_mul x y) (frac_mul x' y)
⊢ rat_equiv x x' ⇒ rat_equiv (frac_mul y x) (frac_mul y x')
⊢ m ≠ 0 ⇒ (a * b) % m = (a % m * b % m) % m
⊢ r1 / r2 * r3 = r1 * r3 / r2
⊢ a < b ∧ (c < d ∨ c ≤ d ∧ d ≠ 0) ⇒ a * c < b * d
⊢ i ≠ 0 ⇒ Num i ≠ 0 ∧ 0 < Num i
⊢ 0 < i ⇒ ∃n. i = &SUC n
⊢ ∀r. abs_rat (rep_rat r) = r
⊢ RATD (-r) = RATD r
⊢ 0 < RATD r ∧ RATD r ≠ 0
⊢ RATN (&n) = &n ∧ RATD (&n) = 1
⊢ ∀p q. coprime p q ∧ q ≠ 0 ⇒ RATN (&p / &q) = &p ∧ RATD (&p / &q) = q
⊢ ∀p q. coprime p q ∧ q ≠ 0 ⇒ RATN (-&p / &q) = -&p ∧ RATD (-&p / &q) = q
⊢ coprime (Num n) d ∧ d ≠ 0 ⇒
  RATN (rat_of_int n / &d) = n ∧ RATD (rat_of_int n / &d) = d
⊢ rat_of_int (RATN r) / &RATD r = r
⊢ (RATN r = 0 ⇔ r = 0) ∧ (0 = RATN r ⇔ r = 0)
⊢ ∀n' d'. r = rat_of_int n' / &d' ∧ 0 < d' ⇒ ABS (RATN r) ≤ ABS n'
⊢ RATN (-r) = -RATN r
⊢ r = rat_of_int (RATN r) / &RATD r
⊢ r * &RATD r = rat_of_int (RATN r)
⊢ RATN (rat_of_int i) = i ∧ RATD (rat_of_int i) = 1
⊢ (0 < RATN x ⇔ 0 < x) ∧ (0 ≤ RATN x ⇔ 0 ≤ x) ∧ (RATN x < 0 ⇔ x < 0) ∧
  (RATN x ≤ 0 ⇔ x ≤ 0)
⊢ rat_0 = 0
⊢ ∀r1. 0 ≤ r1 ⇔ 0 ≤ rat_nmr r1
⊢ ∀r1 r2. 0 < r1 ⇒ 0 ≤ r2 ⇒ 0 < r1 + r2
⊢ ∀r1 r2. 0 < r1 ⇒ 0 < r2 ⇒ 0 < r1 + r2
⊢ ∀r1. 0 < r1 ⇔ 0 < rat_nmr r1
⊢ rat_1 = 1
⊢ 1 ≠ 0
⊢ ∀f1 f2. abs_rat f1 = abs_rat f2 ⇔ rat_equiv f1 f2
⊢ ∀a b c. a + (b + c) = a + b + c
⊢ ∀f1 f2. abs_rat f1 + abs_rat f2 = abs_rat (frac_add f1 f2)
⊢ ∀a b. a + b = b + a
⊢ (∀x y.
     abs_rat (frac_add (rep_rat (abs_rat x)) y) = abs_rat (frac_add x y)) ∧
  ∀x y. abs_rat (frac_add x (rep_rat (abs_rat y))) = abs_rat (frac_add x y)
⊢ ∀x y. abs_rat (frac_add (rep_rat (abs_rat x)) y) = abs_rat (frac_add x y)
⊢ ∀x y. abs_rat (frac_add x (rep_rat (abs_rat y))) = abs_rat (frac_add x y)
⊢ ∀a. 0 + a = a
⊢ ∀a. -a + a = 0
⊢ ∀a b c d. a ≤ b ∧ c ≤ d ⇒ a + c ≤ b + d
⊢ (∀n m. &n + &m = &(n + m)) ∧
  (∀n m. -&n + &m = if n ≤ m then &(m − n) else -&(n − m)) ∧
  (∀n m. &n + -&m = if m ≤ n then &(n − m) else -&(m − n)) ∧
  ∀n m. -&n + -&m = -&(n + m)
⊢ ∀r1. ONE_ONE ($+ r1)
⊢ ∀a. a + 0 = a
⊢ ∀a. a + -a = 0
⊢ -0 = 0
⊢ ∀r1 r2. -(r1 + r2) = -r1 + -r2
⊢ ∀r1. --r1 = r1
⊢ ∀f1. -abs_rat f1 = abs_rat (frac_ainv f1)
⊢ ∀x. abs_rat (frac_ainv (rep_rat (abs_rat x))) = abs_rat (frac_ainv x)
⊢ ∀r1 r2. -r1 = r2 ⇔ r1 = -r2
⊢ -x = &n ⇔ x = rat_of_int (-&n)
⊢ ∀r1 r2. -r1 < r2 ⇔ -r2 < r1
⊢ ∀r1 r2. -(r1 * r2) = -r1 * r2
⊢ ∀r1. r1 ≠ 0 ⇒ -rat_minv r1 = rat_minv (-r1)
⊢ -1 * r = -r
⊢ ONE_ONE numeric_negate
⊢ ∀r1 r2. -(r1 * r2) = r1 * -r2
⊢ (0 < -r ⇔ r < 0) ∧ (-r < 0 ⇔ 0 < r)
⊢ ∀r1 r2. -(r1 − r2) = r2 − r1
⊢ ∀n. &n // 1 = &n ∧ -&n // 1 = -&n
⊢ ∀r1 r3. r1 < r3 ⇒ ∃r2. r1 < r2 ∧ r2 < r3
⊢ y ≠ 0 ∧ b ≠ 0 ⇒ x / y + a / b = (x * b + a * y) / (y * b)
⊢ b ≠ 0 ∧ d ≠ 0 ⇒ a / b * (c / d) = a * c / (b * d)
⊢ d ≠ 0 ⇒ n / d * d = n
⊢ 0 / x = 0
⊢ r / 1 = r
⊢ -(x / y) = -x / y
⊢ ∀f1 f2.
    frac_nmr f2 ≠ 0 ⇒ abs_rat f1 / abs_rat f2 = abs_rat (frac_div f1 f2)
⊢ (∀x y.
     frac_nmr y ≠ 0 ⇒
     abs_rat (frac_div (rep_rat (abs_rat x)) y) = abs_rat (frac_div x y)) ∧
  ∀x y.
    frac_nmr y ≠ 0 ⇒
    abs_rat (frac_div x (rep_rat (abs_rat y))) = abs_rat (frac_div x y)
⊢ ∀x y.
    frac_nmr y ≠ 0 ⇒
    abs_rat (frac_div (rep_rat (abs_rat x)) y) = abs_rat (frac_div x y)
⊢ ∀x y.
    frac_nmr y ≠ 0 ⇒
    abs_rat (frac_div x (rep_rat (abs_rat y))) = abs_rat (frac_div x y)
⊢ d ≠ 0 ⇒ (n / d = 0 ⇔ n = 0) ∧ (0 = n / d ⇔ n = 0)
⊢ r ≠ 0 ⇒ r / r = 1
⊢ x ≠ 0 ∧ y ≠ 0 ⇒ rat_minv (x / y) = y / x
⊢ ∀r1 r2. r1 / r2 = r1 * rat_minv r2
⊢ r / -1 = -r
⊢ ∀f1 f2.
    abs_rat f1 = abs_rat f2 ⇔
    frac_nmr f1 * frac_dnm f2 = frac_nmr f2 * frac_dnm f1
⊢ ∀r1. r1 = 0 ⇔ rat_nmr r1 = 0
⊢ ∀f1 f2. rat_equiv f1 f2 ⇔ rat_equiv f1 = rat_equiv f2
⊢ ∀a. rat_equiv a =
      (λx.
           ∃b c.
             0 < b ∧ 0 < c ∧
             frac_mul a (abs_frac (b,b)) = frac_mul x (abs_frac (c,c)))
⊢ ∀a b. rat_equiv a b ⇒ (frac_nmr a > 0 ⇔ frac_nmr b > 0)
⊢ ∀a b. rat_equiv a b ⇒ (frac_nmr a < 0 ⇔ frac_nmr b < 0)
⊢ ∀a b. rat_equiv a b ⇒ (frac_nmr a = 0 ⇔ frac_nmr b = 0)
⊢ ∀a. rat_equiv a a
⊢ ∀a b. rat_equiv a b ⇔ rat_equiv b a
⊢ ∀a b c. rat_equiv a b ∧ rat_equiv b c ⇒ rat_equiv a c
⊢ ∀r1 r2. 0 = r1 − r2 ⇔ r1 = r2
⊢ ∀r1 r2. -r1 = -r2 ⇔ r1 = r2
⊢ ∀r1 r2. r1 = r2 ⇔ rat_nmr r1 * rat_dnm r2 = rat_nmr r2 * rat_dnm r1
⊢ ∀f1 f2.
    abs_rat f1 = abs_rat f2 ⇔
    frac_nmr f1 * frac_dnm f2 = frac_nmr f2 * frac_dnm f1
⊢ ∀r1 r2 r3. r3 + r1 = r3 + r2 ⇔ r1 = r2
⊢ ∀r1 r2 r3. r3 ≠ 0 ⇒ (r3 * r1 = r3 * r2 ⇔ r1 = r2)
⊢ (∀n m. &n = &m ⇔ n = m) ∧ (∀n m. &n = -&m ⇔ n = 0 ∧ m = 0) ∧
  (∀n m. -&n = &m ⇔ n = 0 ∧ m = 0) ∧ ∀n m. -&n = -&m ⇔ n = m
⊢ ∀r1 r2 r3. r1 + r3 = r2 + r3 ⇔ r1 = r2
⊢ ∀r1 r2 r3. r3 ≠ 0 ⇒ (r1 * r3 = r2 * r3 ⇔ r1 = r2)
⊢ ∀r1 r2. r1 − r2 = 0 ⇔ r1 = r2
⊢ ∀n. (0 < n ⇒ expn 0 n = 0) ∧ expn 0 (SUC n) = 0
⊢ expn 1 n = 1
⊢ expn r (a + b) = expn r a * expn r b
⊢ (expn r n = 0 ⇔ r = 0 ∧ n ≠ 0) ∧ expn 1 n = 1 ∧ expn r 0 = 1 ∧
  expn r 1 = r
⊢ b ≠ 0 ⇒ expn (a / b) n = expn a n / expn b n
⊢ expn r n = 0 ⇔ r = 0 ∧ n ≠ 0
⊢ expn r n = 1 ⇔ r = 1 ∨ r = -1 ∧ EVEN n ∨ n = 0
⊢ r < 0 ⇒ (expn r n = 1 ⇔ r = -1 ∧ EVEN n ∨ n = 0)
⊢ 0 < r ⇒ (expn r n = 1 ⇔ r = 1 ∨ n = 0)
⊢ r ≠ 0 ∧ r ≠ 1 ∧ r ≠ -1 ⇒ (expn r i = expn r j ⇔ i = j)
⊢ 0 < p ∧ 0 < q ∧ 0 < n ⇒ (expn p n < expn q n ⇔ p < q)
⊢ expn (-1) n = if EVEN n then 1 else -1
⊢ expn r (a * b) = expn (expn r a) b
⊢ expn (-r) n = if EVEN n then expn r n else -expn r n
⊢ r < 0 ⇒ (0 < expn r n ⇔ EVEN n) ∧ (expn r n < 0 ⇔ ODD n)
⊢ expn (a * b) n = expn a n * expn b n
⊢ r ≠ 0 ⇒ expn (rat_minv r) n = rat_minv (expn r n)
⊢ r ≠ 0 ⇒ expn r n ≠ 0
⊢ 0 < r ⇒ 0 < expn r n
⊢ r ≠ 0 ∧ b ≤ a ⇒ expn r (a − b) = expn r a / expn r b
⊢ expn r 0 = 1
⊢ expn r 1 = r
⊢ 0 < i ⇒ 0 ** i = 0
⊢ 1 ** i = 1
⊢ r ≠ 0 ∨ 0 ≤ a ∧ 0 ≤ b ⇒ r ** (a + b) = r ** a * r ** b
⊢ r ** 0 = 1 ∧ r ** 1 = r ∧ 1 ** i = 1 ∧ r ** &n = expn r n ∧
  r ** -&n = rat_minv (expn r n)
⊢ b ≠ 0 ∧ (a ≠ 0 ∨ 0 ≤ i) ⇒ (a / b) ** i = a ** i / b ** i
⊢ ∀r i j. r ≠ 0 ∧ r ≠ 1 ∧ r ≠ -1 ⇒ (r ** i = r ** j ⇔ i = j)
⊢ ∀r i j. 1 < r ⇒ (r ** i ≤ r ** j ⇔ i ≤ j)
⊢ 0 < r ∧ 0 < q ∧ 0 < i ⇒ (r ** i < q ** i ⇔ r < q)
⊢ ∀r i j. 1 < r ⇒ (r ** i < r ** j ⇔ i < j)
⊢ -1 ** i = if i % 2 = 0 then 1 else -1
⊢ r ≠ 0 ∨ 0 ≤ a ∧ 0 ≤ b ⇒ r ** (a * b) = (r ** a) ** b
⊢ r ≠ 0 ∨ 0 < i ⇒ -r ** i = if i % 2 = 0 then r ** i else -(r ** i)
⊢ r ** -&n = rat_minv (expn r n)
⊢ r ** &n = expn r n
⊢ a ≠ 0 ∧ b ≠ 0 ∨ 0 ≤ i ⇒ (a * b) ** i = a ** i * b ** i
⊢ r ≠ 0 ⇒ rat_minv r ** i = rat_minv (r ** i)
⊢ r ≠ 0 ⇒ r ** i ≠ 0
⊢ 0 < r ⇒ 0 < r ** i
⊢ ∀r i j. r ≠ 0 ⇒ r ** (i − j) = r ** i / r ** j
⊢ r ** 0 = 1
⊢ r ≠ 0 ⇒ r ** -i = rat_minv (r ** i)
⊢ ∀a b c. c * (a + b) = c * a + c * b
⊢ ∀r1 r2 r3. r2 ≠ 0 ⇒ (r1 / r2 = r3 ⇔ r1 = r2 * r3)
⊢ ∀r1 r2 r3. r2 < 0 ⇒ (r1 / r2 ≤ r3 ⇔ r2 * r3 ≤ r1)
⊢ ∀r1 r2 r3. 0 < r2 ⇒ (r1 / r2 ≤ r3 ⇔ r1 ≤ r2 * r3)
⊢ ∀r1 r2 r3. r2 < 0 ⇒ (r1 / r2 < r3 ⇔ r2 * r3 < r1)
⊢ ∀r1 r2 r3. 0 < r2 ⇒ (r1 / r2 < r3 ⇔ r1 < r2 * r3)
⊢ ∀r1. r1 ≤ 0 ⇔ rat_nmr r1 ≤ 0
⊢ ∀r1 r2. r1 ≤ r2 ∧ r2 ≤ r1 ⇒ r1 = r2
⊢ ∀f1 f2.
    abs_rat f1 ≤ abs_rat f2 ⇔
    frac_nmr f1 * frac_dnm f2 ≤ frac_nmr f2 * frac_dnm f1
⊢ ∀r1 r2 r3. r3 + r1 ≤ r3 + r2 ⇔ r1 ≤ r2
⊢ ∀r1 r2. ¬(r2 < r1) ⇔ r1 ≤ r2
⊢ ∀a b c. a ≤ b ∧ b < c ⇒ a < c
⊢ 0 ≤ a ∧ a ≤ b ∧ 0 ≤ c ∧ c ≤ d ⇒ a * c ≤ b * d
⊢ ∀r1 r2 r3. r1 + r3 ≤ r2 + r3 ⇔ r1 ≤ r2
⊢ ∀r1. r1 ≤ r1
⊢ ∀r1 r2 r3. r1 ≤ r2 ∧ r2 ≤ r3 ⇒ r1 ≤ r3
⊢ ∀r1 r2. r1 < 0 ⇒ r2 ≤ 0 ⇒ r1 + r2 < 0
⊢ ∀r1 r2. r1 < 0 ⇒ r2 < 0 ⇒ r1 + r2 < 0
⊢ ∀r1. r1 < 0 ⇔ rat_nmr r1 < 0
⊢ 0 < 1
⊢ ∀r1 r2. 0 < r1 − r2 ⇔ r2 < r1
⊢ ∀r1 r2. -r1 < -r2 ⇔ r2 < r1
⊢ ∀r1 r2. r1 < -r2 ⇔ r2 < -r1
⊢ ∀r1 r2. r1 < r2 ⇒ ¬(r2 < r1)
⊢ ∀f1 f2.
    abs_rat f1 < abs_rat f2 ⇔
    frac_nmr f1 * frac_dnm f2 < frac_nmr f2 * frac_dnm f1
⊢ ∀r1 r2. r1 < r2 ⇒ r1 ≤ r2
⊢ ∀r1 r2. r1 < r2 ⇒ r1 ≠ r2
⊢ ∀r1 r2 r3. r3 + r1 < r3 + r2 ⇔ r1 < r2
⊢ ∀r1 r2. ¬(r2 ≤ r1) ⇔ r1 < r2
⊢ ∀r1 r2. r1 < r2 ⇔ r1 ≤ r2 ∧ ¬(r2 ≤ r1)
⊢ ∀a b c. a < b ∧ b ≤ c ⇒ a < c
⊢ ∀r1 r2 r3. r3 < 0 ⇒ (r3 * r2 < r3 * r1 ⇔ r1 < r2)
⊢ ∀r1 r2 r3. 0 < r3 ⇒ (r3 * r1 < r3 * r2 ⇔ r1 < r2)
⊢ 0 < r ∧ 1 < q ⇒ r < r * q
⊢ ∀r1 r2 r3. r1 + r3 < r2 + r3 ⇔ r1 < r2
⊢ ∀r1. ¬(r1 < r1)
⊢ ∀r1 r2 r3. r3 < 0 ⇒ (r2 * r3 < r1 * r3 ⇔ r1 < r2)
⊢ ∀r1 r2 r3. 0 < r3 ⇒ (r1 * r3 < r2 * r3 ⇔ r1 < r2)
⊢ ∀r1 r2. r1 − r2 < 0 ⇔ r1 < r2
⊢ ∀r1 r2. r1 < r2 ∨ r1 = r2 ∨ r2 < r1
⊢ ∀r1 r2 r3. r1 < r2 ∧ r2 < r3 ⇒ r1 < r3
⊢ (&a ≤ &b ⇔ a ≤ b) ∧ (-&m ≤ &n ⇔ T) ∧ (&m ≤ -&n ⇔ m = 0 ∧ n = 0) ∧
  (-&m ≤ -&n ⇔ n ≤ m)
⊢ ∀r1 r2 r3. r1 − r2 = r3 ⇔ r1 = r2 + r3
⊢ ∀r1 r2 r3. r1 − r2 ≤ r3 ⇔ r1 ≤ r2 + r3
⊢ ∀r1 r2 r3. r1 − r2 < r3 ⇔ r1 < r2 + r3
⊢ a < b ⇔ a ≤ b ∧ a ≠ b
⊢ 0 < a ∧ a < c ∧ 0 < b ∧ b < d ⇒ a * b < c * d
⊢ (&a < &b ⇔ a < b) ∧ (-&m < &n ⇔ 0 < m ∨ 0 < n) ∧ (&m < -&n ⇔ F) ∧
  (-&m < -&n ⇔ n < m)
⊢ rat_minv 1 = 1
⊢ ∀f1. 0 ≠ frac_nmr f1 ⇒ rat_minv (abs_rat f1) = abs_rat (frac_minv f1)
⊢ ∀x. frac_nmr x ≠ 0 ⇒
      abs_rat (frac_minv (rep_rat (abs_rat x))) = abs_rat (frac_minv x)
⊢ a ≠ 0 ∧ b ≠ 0 ⇒ rat_minv (a / b) = rat_minv a / rat_minv b
⊢ r ≠ 0 ⇒ rat_minv r ≠ 0
⊢ r ≠ 0 ⇒ (rat_minv r = r ⇔ r = 1 ∨ r = -1 ∨ r = 0)
⊢ ∀r1. r1 ≠ 0 ⇒ (rat_minv r1 < 0 ⇔ r1 < 0) ∧ (0 < rat_minv r1 ⇔ 0 < r1)
⊢ ∀r. 0 < r ⇒ (1 < rat_minv r ⇔ r < 1) ∧ (rat_minv r < 1 ⇔ 1 < r)
⊢ ∀r. r < 0 ⇒ (-1 < rat_minv r ⇔ r < -1) ∧ (rat_minv r < -1 ⇔ -1 < r)
⊢ a ≠ 0 ∧ b ≠ 0 ⇒ rat_minv (a * b) = rat_minv a * rat_minv b
⊢ r ≠ 0 ⇒
  rat_minv r = rat_of_int (RAT_SGN r) * &RATD r / rat_of_int (ABS (RATN r))
⊢ r ≠ 0 ⇒ rat_minv (rat_minv r) = r
⊢ ∀a b c. a * (b * c) = a * b * c
⊢ ∀f1 f2. abs_rat f1 * abs_rat f2 = abs_rat (frac_mul f1 f2)
⊢ ∀a b. a * b = b * a
⊢ (∀x y.
     abs_rat (frac_mul (rep_rat (abs_rat x)) y) = abs_rat (frac_mul x y)) ∧
  ∀x y. abs_rat (frac_mul x (rep_rat (abs_rat y))) = abs_rat (frac_mul x y)
⊢ ∀x y. abs_rat (frac_mul (rep_rat (abs_rat x)) y) = abs_rat (frac_mul x y)
⊢ ∀x y. abs_rat (frac_mul x (rep_rat (abs_rat y))) = abs_rat (frac_mul x y)
⊢ ∀a. 1 * a = a
⊢ ∀a. a ≠ 0 ⇒ rat_minv a * a = 1
⊢ ∀r1. 0 * r1 = 0
⊢ -a * -b = a * b
⊢ (∀n m. &n * &m = &(n * m)) ∧ (∀n m. -&n * &m = -&(n * m)) ∧
  (∀n m. &n * -&m = -&(n * m)) ∧ ∀n m. -&n * -&m = &(n * m)
⊢ ∀r1. r1 ≠ 0 ⇔ ONE_ONE ($* r1)
⊢ ∀a. a * 1 = a
⊢ ∀a. a ≠ 0 ⇒ a * rat_minv a = 1
⊢ ∀r1. r1 * 0 = 0
⊢ ∀p q.
    (0 < p * q ⇔ 0 < p ∧ 0 < q ∨ p < 0 ∧ q < 0) ∧
    (p * q < 0 ⇔ 0 < p ∧ q < 0 ∨ p < 0 ∧ 0 < q)
⊢ abs_rat (abs_frac (frac_nmr f1,frac_dnm f1)) = 1 ⇔
  frac_nmr f1 = frac_dnm f1
⊢ ∀f1. frac_nmr (rep_rat (abs_rat f1)) = 0 ⇔ frac_nmr f1 = 0
⊢ ∀f1. 0 < frac_nmr (rep_rat (abs_rat f1)) ⇔ 0 < frac_nmr f1
⊢ ∀f1. frac_nmr (rep_rat (abs_rat f1)) < 0 ⇔ frac_nmr f1 < 0
⊢ ∀a b. frac_nmr a = 0 ⇒ (rat_equiv a b ⇔ frac_nmr b = 0)
⊢ ∀r1 r2. r1 * r2 = r2 ⇔ r1 = 1 ∨ r2 = 0
⊢ ∀r1 r2. r1 = 0 ∨ r2 = 0 ⇔ r1 * r2 = 0
⊢ ∀r1 r2. r1 * r2 ≠ 0 ⇔ r1 ≠ 0 ∧ r2 ≠ 0
⊢ ∀r1 r2. r1 * r2 = 0 ⇔ r1 = 0 ∨ r2 = 0
⊢ ∀i. rat_of_int i = abs_rat (abs_frac (i,1))
⊢ ∀n. 0 = rat_0 ∧ ∀n. &SUC n = &n + rat_1
⊢ ∀n1. &n1 = abs_rat (abs_frac (&n1,1))
⊢ &a ≤ &b ⇔ a ≤ b
⊢ &a < &b ⇔ a < b
⊢ ∀a b c. (a + b) * c = a * c + b * c
⊢ ∀r1 r2 r3. r3 ≠ 0 ⇒ (r1 = r2 / r3 ⇔ r1 * r3 = r2)
⊢ ∀r1 r2 r3. r3 < 0 ⇒ (r1 ≤ r2 / r3 ⇔ r2 ≤ r1 * r3)
⊢ ∀r1 r2 r3. 0 < r3 ⇒ (r1 ≤ r2 / r3 ⇔ r1 * r3 ≤ r2)
⊢ ∀r1 r2 r3. r3 < 0 ⇒ (r1 < r2 / r3 ⇔ r2 < r1 * r3)
⊢ ∀r1 r2 r3. 0 < r3 ⇒ (r1 < r2 / r3 ⇔ r1 * r3 < r2)
⊢ ∀r1 r2 r3. r1 = r2 − r3 ⇔ r1 + r3 = r2
⊢ ∀r1 r2 r3. r1 ≤ r2 − r3 ⇔ r1 + r3 ≤ r2
⊢ ∀r1 r2 r3. r1 < r2 − r3 ⇔ r1 + r3 < r2
⊢ ∀r1. ∃a1 b1. r1 = abs_rat (frac_save a1 b1)
⊢ ∀a1 b1.
    abs_rat (frac_save a1 b1) ≠ 0 ⇒
    rat_minv (abs_rat (frac_save a1 b1)) =
    abs_rat (frac_save (SGN a1 * (&b1 + 1)) (Num (ABS a1 − 1)))
⊢ ∀n. &n = abs_rat (frac_save (&n) 0)
⊢ ∀a1 b1. abs_rat (frac_save a1 b1) = a1 // (&b1 + 1)
⊢ RAT_SGN 0 = 0
⊢ ∀r1. -RAT_SGN (-r1) = RAT_SGN r1
⊢ RAT_SGN (-r) = -RAT_SGN r
⊢ RAT_SGN (-r) = -RAT_SGN r
⊢ RAT_SGN r = SGN (RATN r)
⊢ RAT_SGN (abs_rat f1) = frac_sgn f1
⊢ ∀r1.
    (RAT_SGN r1 = -1 ⇔ r1 < 0) ∧ (RAT_SGN r1 = 0 ⇔ r1 = 0) ∧
    (RAT_SGN r1 = 1 ⇔ r1 > 0)
⊢ ∀r1.
    (RAT_SGN r1 ≠ -1 ⇔ RAT_SGN r1 = 0 ∨ RAT_SGN r1 = 1) ∧
    (RAT_SGN r1 ≠ 0 ⇔ RAT_SGN r1 = -1 ∨ RAT_SGN r1 = 1) ∧
    (RAT_SGN r1 ≠ 1 ⇔ RAT_SGN r1 = -1 ∨ RAT_SGN r1 = 0)
⊢ ∀f1. frac_sgn (rep_rat (abs_rat f1)) = frac_sgn f1
⊢ d ≠ 0 ⇒ RAT_SGN (n / d) = RAT_SGN n * RAT_SGN d
⊢ (RAT_SGN r = 0 ⇔ r = 0) ∧ (0 = RAT_SGN r ⇔ r = 0)
⊢ ∀r1. r1 ≠ 0 ⇒ RAT_SGN (rat_minv r1) = RAT_SGN r1
⊢ ∀r1 r2. RAT_SGN (r1 * r2) = RAT_SGN r1 * RAT_SGN r2
⊢ RAT_SGN r = -1 ⇔ r < 0
⊢ RAT_SGN (&NUMERAL (BIT1 n)) = 1 ∧ RAT_SGN (&NUMERAL (BIT2 n)) = 1
⊢ RAT_SGN (&n) = if n = 0 then 0 else 1
⊢ RAT_SGN r = 1 ⇔ 0 < r
⊢ ∀r1. RAT_SGN r1 = -1 ∨ RAT_SGN r1 = 0 ∨ RAT_SGN r1 = 1
⊢ ∀r1 r2. r1 − r2 = r1 + -r2
⊢ ∀f1 f2. abs_rat f1 − abs_rat f2 = abs_rat (frac_sub f1 f2)
⊢ (∀x y.
     abs_rat (frac_sub (rep_rat (abs_rat x)) y) = abs_rat (frac_sub x y)) ∧
  ∀x y. abs_rat (frac_sub x (rep_rat (abs_rat y))) = abs_rat (frac_sub x y)
⊢ ∀x y. abs_rat (frac_sub (rep_rat (abs_rat x)) y) = abs_rat (frac_sub x y)
⊢ ∀x y. abs_rat (frac_sub x (rep_rat (abs_rat y))) = abs_rat (frac_sub x y)
⊢ ∀r. r − r = 0
⊢ ∀a b c. c * (a − b) = c * a − c * b
⊢ ∀r1. 0 − r1 = -r1
⊢ ∀a b c. (a − b) * c = a * c − b * c
⊢ ∀r1. r1 − 0 = r1
⊢ 2 * x = x + x
⊢ r1 * (r2 / r3) = r1 * r2 / r3
⊢ div_gcd a b = (n,d) ∧ b ≠ 0 ⇒
  rat_of_int a / &b = rat_of_int n / &d ∧ RATN (rat_of_int a / &b) = n ∧
  RATD (rat_of_int a / &b) = d
⊢ div_gcd a b = (n,d) ∧ b ≠ 0 ⇒ d ≠ 0 ∧ coprime (Num n) d ∧ a * &d = n * &b
⊢ frac_dnm f ≠ 0
⊢ coprime (Num (RATN r)) (RATD r)
⊢ 0 = abs_rat frac_0
⊢ 1 = abs_rat frac_1
rat_ABS_REP_CLASS
⊢ (∀a. abs_rat_CLASS (rep_rat_CLASS a) = a) ∧
  ∀c. (∃r. rat_equiv r r ∧ c = rat_equiv r) ⇔
      rep_rat_CLASS (abs_rat_CLASS c) = c
rat_QUOTIENT
⊢ QUOTIENT rat_equiv abs_rat rep_rat
⊢ QUOTIENT rat_equiv abs_rat rep_rat
⊢ rat_equiv (rep_rat (abs_rat f)) f
⊢ rat_equiv (rep_rat r1) (rep_rat r2) ⇔ r1 = r2
rat_expn_compute
⊢ (∀r. expn r 0 = 1) ∧
  (∀r n. expn r (NUMERAL (BIT1 n)) = r * expn r (NUMERAL (BIT1 n) − 1)) ∧
  ∀r n. expn r (NUMERAL (BIT2 n)) = r * expn r (NUMERAL (BIT1 n))
⊢ rat_of_int i1 = rat_of_int i2 ⇔ i1 = i2
⊢ rat_of_int x + rat_of_int y = rat_of_int (x + y)
⊢ (rat_of_int i = &n ⇔ i = &n) ∧ (&n = rat_of_int i ⇔ i = &n)
⊢ rat_of_int i ≤ rat_of_int j ⇔ i ≤ j
⊢ rat_of_int i < rat_of_int j ⇔ i < j
⊢ rat_of_int x * rat_of_int y = rat_of_int (x * y)
⊢ rat_of_int (-i) = -rat_of_int i
⊢ rat_of_int (frac_nmr (rep_rat q)) / rat_of_int (frac_dnm (rep_rat q)) = q
⊢ rat_of_int (&x) = &x
rat_of_num_compute
⊢ 0 = rat_0 ∧ &SUC 0 = rat_1 ∧
  (∀n. &SUC (NUMERAL (BIT1 n)) = &NUMERAL (BIT1 n) + rat_1) ∧
  ∀n. &SUC (NUMERAL (BIT2 n)) = &NUMERAL (BIT2 n) + rat_1
⊢ 0 = rat_0 ∧ &SUC 0 = rat_1 ∧ ∀n. &SUC (SUC n) = &SUC n + rat_1
⊢ ∀P. P 0 ∧ P (SUC 0) ∧ (∀n. P (SUC n) ⇒ P (SUC (SUC n))) ⇒ ∀v. P v
⊢ (∀a. abs_rat (rep_rat a) = a) ∧
  ∀r s. rat_equiv r s ⇔ abs_rat r = abs_rat s
⊢ ∀i. ∃j. 0 < j ∧ rep_rat (rat_of_int i) = abs_frac (j * i,j)