diff -r 150f37dad503 -r f0285e69d704 src/HOL/Import/HOLLightReal.thy --- a/src/HOL/Import/HOLLightReal.thy Sat Mar 03 21:42:41 2012 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,329 +0,0 @@ -(* Title: HOL/Import/HOLLightReal.thy - Author: Cezary Kaliszyk -*) - -header {* Compatibility theorems for HOL Light reals *} - -theory HOLLightReal imports Real begin - -lemma REAL_OF_NUM_MAX: - "max (real (m :: nat)) (real n) = real (max m n)" - by simp - -lemma REAL_OF_NUM_MIN: - "min (real (m :: nat)) (real n) = real (min m n)" - by simp - -lemma REAL_POLY_NEG_CLAUSES: - "(\(x :: real). - x = - 1 * x) \ (\(x :: real) y. x - y = x + - 1 * y)" - by simp - -lemma REAL_MUL_AC: - "(m :: real) * n = n * m \ m * n * p = m * (n * p) \ m * (n * p) = n * (m * p)" - by simp - -lemma REAL_EQ_ADD_LCANCEL_0: - "((x :: real) + y = x) = (y = 0)" - by simp - -lemma REAL_EQ_ADD_RCANCEL_0: - "((x :: real) + y = y) = (x = 0)" - by simp - -lemma REAL_LT_ANTISYM: - "\ ((x :: real) < y \ y < x)" - by simp - -lemma REAL_LET_ANTISYM: - "\ ((x :: real) \ y \ y < x)" - by simp - -lemma REAL_LT_NEGTOTAL: - "(x :: real) = 0 \ 0 < x \ 0 < - x" - by auto - -lemma REAL_LT_ADDNEG: - "((y :: real) < x + - z) = (y + z < x)" - by auto - -lemma REAL_LT_ADDNEG2: - "((x :: real) + - y < z) = (x < z + y)" - by auto - -lemma REAL_LT_ADD1: - "(x :: real) \ y \ x < y + 1" - by simp - -lemma REAL_SUB_ADD2: - "(y :: real) + (x - y) = x" - by simp - -lemma REAL_ADD_SUB: - "(x :: real) + y - x = y" - by simp - -lemma REAL_NEG_EQ: - "(- (x :: real) = y) = (x = - y)" - by auto - -lemma REAL_LE_ADDR: - "((x :: real) \ x + y) = (0 \ y)" - by simp - -lemma REAL_LE_ADDL: - "((y :: real) \ x + y) = (0 \ x)" - by simp - -lemma REAL_LT_ADDR: - "((x :: real) < x + y) = (0 < y)" - by simp - -lemma REAL_LT_ADDL: - "((y :: real) < x + y) = (0 < x)" - by simp - -lemma REAL_SUB_SUB: - "(x :: real) - y - x = - y" - by simp - -lemma REAL_SUB_LNEG: - "- (x :: real) - y = - (x + y)" - by simp - -lemma REAL_SUB_NEG2: - "- (x :: real) - - y = y - x" - by simp - -lemma REAL_SUB_TRIANGLE: - "(a :: real) - b + (b - c) = a - c" - by simp - -lemma REAL_SUB_SUB2: - "(x :: real) - (x - y) = y" - by simp - -lemma REAL_ADD_SUB2: - "(x :: real) - (x + y) = - y" - by simp - -lemma REAL_POS_NZ: - "0 < (x :: real) \ x \ 0" - by simp - -lemma REAL_DIFFSQ: - "((x :: real) + y) * (x - y) = x * x - y * y" - by (simp add: comm_semiring_1_class.normalizing_semiring_rules(7) right_distrib mult_diff_mult) - -lemma REAL_ABS_TRIANGLE_LE: - "abs (x :: real) + abs (y - x) \ z \ abs y \ z" - by auto - -lemma REAL_ABS_TRIANGLE_LT: - "abs (x :: real) + abs (y - x) < z \ abs y < z" - by auto - -lemma REAL_ABS_REFL: - "(abs (x :: real) = x) = (0 \ x)" - by auto - -lemma REAL_ABS_BETWEEN: - "(0 < (d :: real) \ x - d < y \ y < x + d) = (abs (y - x) < d)" - by auto - -lemma REAL_ABS_BOUND: - "abs ((x :: real) - y) < d \ y < x + d" - by auto - -lemma REAL_ABS_STILLNZ: - "abs ((x :: real) - y) < abs y \ x \ 0" - by auto - -lemma REAL_ABS_CASES: - "(x :: real) = 0 \ 0 < abs x" - by simp - -lemma REAL_ABS_BETWEEN1: - "(x :: real) < z \ abs (y - x) < z - x \ y < z" - by auto - -lemma REAL_ABS_SIGN: - "abs ((x :: real) - y) < y \ 0 < x" - by auto - -lemma REAL_ABS_SIGN2: - "abs ((x :: real) - y) < - y \ x < 0" - by auto - -lemma REAL_ABS_CIRCLE: - "abs (h :: real) < abs y - abs x \ abs (x + h) < abs y" - by auto - -lemma REAL_BOUNDS_LT: - "(- (k :: real) < x \ x < k) = (abs x < k)" - by auto - -lemma REAL_MIN_MAX: - "min (x :: real) y = - max (- x) (- y)" - by auto - -lemma REAL_MAX_MIN: - "max (x :: real) y = - min (- x) (- y)" - by auto - -lemma REAL_MAX_MAX: - "(x :: real) \ max x y \ y \ max x y" - by simp - -lemma REAL_MIN_MIN: - "min (x :: real) y \ x \ min x y \ y" - by simp - -lemma REAL_MAX_ACI: - "max (x :: real) y = max y x \ - max (max x y) z = max x (max y z) \ - max x (max y z) = max y (max x z) \ max x x = x \ max x (max x y) = max x y" - by auto - - -lemma REAL_MIN_ACI: - "min (x :: real) y = min y x \ - min (min x y) z = min x (min y z) \ - min x (min y z) = min y (min x z) \ min x x = x \ min x (min x y) = min x y" - by auto - -lemma REAL_EQ_MUL_RCANCEL: - "((x :: real) * z = y * z) = (x = y \ z = 0)" - by auto - -lemma REAL_MUL_LINV_UNIQ: - "(x :: real) * y = 1 \ inverse y = x" - by (metis inverse_inverse_eq inverse_unique) - -lemma REAL_DIV_RMUL: - "(y :: real) \ 0 \ x / y * y = x" - by simp - -lemma REAL_DIV_LMUL: - "(y :: real) \ 0 \ y * (x / y) = x" - by simp - -lemma REAL_LT_IMP_NZ: - "0 < (x :: real) \ x \ 0" - by simp - -lemma REAL_LT_LCANCEL_IMP: - "0 < (x :: real) \ x * y < x * z \ y < z" - by (auto simp add: mult_less_cancel_left_disj not_less_iff_gr_or_eq) - -lemma REAL_LT_RCANCEL_IMP: - "0 < (z :: real) \ x * z < y * z \ x < y" - by (auto simp add: mult_less_cancel_left_disj not_less_iff_gr_or_eq) - -lemma REAL_MUL_POS_LE: - "(0 \ (x :: real) * y) = (x = 0 \ y = 0 \ 0 < x \ 0 < y \ x < 0 \ y < 0)" - by (metis less_eq_real_def mult_eq_0_iff zero_le_mult_iff) - -lemma REAL_EQ_RDIV_EQ: - "0 < (z :: real) \ (x = y / z) = (x * z = y)" - by auto - -lemma REAL_EQ_LDIV_EQ: - "0 < (z :: real) \ (x / z = y) = (x = y * z)" - by auto - -lemma REAL_SUB_INV: - "(x :: real) \ 0 \ y \ 0 \ inverse x - inverse y = (y - x) / (x * y)" - by (simp add: division_ring_inverse_diff divide_real_def) - -lemma REAL_DOWN: - "0 < (d :: real) \ (\e>0. e < d)" - by (intro impI exI[of _ "d / 2"]) simp - -lemma REAL_POW_MONO_LT: - "1 < (x :: real) \ m < n \ x ^ m < x ^ n" - by simp - -lemma REAL_POW_MONO: - "1 \ (x :: real) \ m \ n \ x ^ m \ x ^ n" - by (cases "m < n", cases "x = 1") auto - -lemma REAL_EQ_LCANCEL_IMP: - "(z :: real) \ 0 \ z * x = z * y \ x = y" - by auto - -lemma REAL_LE_DIV: - "0 \ (x :: real) \ 0 \ y \ 0 \ x / y" - by (simp add: zero_le_divide_iff) - -lemma REAL_10: "(1::real) \ 0" - by simp - -lemma REAL_ADD_ASSOC: "(x::real) + (y + z) = x + y + z" - by simp - -lemma REAL_MUL_ASSOC: "(x::real) * (y * z) = x * y * z" - by simp - -lemma REAL_ADD_LINV: "-x + x = (0::real)" - by simp - -lemma REAL_MUL_LINV: "x \ (0::real) \ inverse x * x = 1" - by simp - -lemma REAL_LT_TOTAL: "((x::real) = y) \ x < y \ y < x" - by auto - -lemma real_lte: "((x::real) \ y) = (\(y < x))" - by auto - -lemma real_of_num: "((0::real) = 0) \ (!n. real (Suc n) = real n + 1)" - by (simp add: real_of_nat_Suc) - -lemma abs: "abs (x::real) = (if 0 \ x then x else -x)" - by (simp add: abs_if) - -lemma pow: "(!x::real. x ^ 0 = 1) \ (!x::real. \n. x ^ (Suc n) = x * x ^ n)" - by simp - -lemma REAL_POLY_CLAUSES: - "(\(x :: real) y z. x + (y + z) = x + y + z) \ - (\(x :: real) y. x + y = y + x) \ - (\(x :: real). 0 + x = x) \ - (\(x :: real) y z. x * (y * z) = x * y * z) \ - (\(x :: real) y. x * y = y * x) \ - (\(x :: real). 1 * x = x) \ - (\(x :: real). 0 * x = 0) \ - (\(x :: real) y z. x * (y + z) = x * y + x * z) \ - (\(x :: real). x ^ 0 = 1) \ (\(x :: real) n. x ^ Suc n = x * x ^ n)" - by (auto simp add: right_distrib) - -lemma REAL_COMPLETE: - "(\(x :: real). P x) \ (\(M :: real). \x. P x \ x \ M) \ - (\M. (\x. P x \ x \ M) \ - (\M'. (\x. P x \ x \ M') \ M \ M'))" - using complete_real[unfolded Ball_def, of "Collect P"] by auto - -lemma REAL_COMPLETE_SOMEPOS: - "(\(x :: real). P x \ 0 \ x) \ (\M. \x. P x \ x \ M) \ - (\M. (\x. P x \ x \ M) \ - (\M'. (\x. P x \ x \ M') \ M \ M'))" - using REAL_COMPLETE by auto - -lemma REAL_ADD_AC: - "(m :: real) + n = n + m \ m + n + p = m + (n + p) \ m + (n + p) = n + (m + p)" - by simp - -lemma REAL_LE_RNEG: - "((x :: real) \ - y) = (x + y \ 0)" - by auto - -lemma REAL_LE_NEGTOTAL: - "0 \ (x :: real) \ 0 \ - x" - by auto - -lemma DEF_real_sgn: - "sgn = (\u. if (0 :: real) < u then 1 else if u < 0 then - 1 else 0)" - by (simp add: ext) - -end -