author | paulson |
Tue, 23 Dec 2003 14:46:08 +0100 | |
changeset 14321 | 55c688d2eefa |
parent 14308 | c0489217deb2 |
child 14329 | ff3210fe968f |
permissions | -rw-r--r-- |
10722 | 1 |
theory RealArith = RealArith0 |
14275
031a5a051bb4
Converting more of the "real" development to Isar scripts
paulson
parents:
14270
diff
changeset
|
2 |
files ("real_arith.ML"): |
031a5a051bb4
Converting more of the "real" development to Isar scripts
paulson
parents:
14270
diff
changeset
|
3 |
|
031a5a051bb4
Converting more of the "real" development to Isar scripts
paulson
parents:
14270
diff
changeset
|
4 |
use "real_arith.ML" |
9436
62bb04ab4b01
rearranged setup of arithmetic procedures, avoiding global reference values;
wenzelm
parents:
diff
changeset
|
5 |
|
62bb04ab4b01
rearranged setup of arithmetic procedures, avoiding global reference values;
wenzelm
parents:
diff
changeset
|
6 |
setup real_arith_setup |
62bb04ab4b01
rearranged setup of arithmetic procedures, avoiding global reference values;
wenzelm
parents:
diff
changeset
|
7 |
|
14288 | 8 |
subsection{* Simprules combining x+y and 0: ARE THEY NEEDED?*} |
9 |
||
10 |
text{*Needed in this non-standard form by Hyperreal/Transcendental*} |
|
11 |
lemma real_0_le_divide_iff: |
|
14294
f4d806fd72ce
absolute value theorems moved to HOL/Ring_and_Field
paulson
parents:
14293
diff
changeset
|
12 |
"((0::real) \<le> x/y) = ((x \<le> 0 | 0 \<le> y) & (0 \<le> x | y \<le> 0))" |
14288 | 13 |
by (simp add: real_divide_def zero_le_mult_iff, auto) |
14 |
||
15 |
lemma real_add_minus_iff [simp]: "(x + - a = (0::real)) = (x=a)" |
|
16 |
by arith |
|
17 |
||
18 |
lemma real_add_eq_0_iff [iff]: "(x+y = (0::real)) = (y = -x)" |
|
19 |
by auto |
|
20 |
||
21 |
lemma real_add_less_0_iff [iff]: "(x+y < (0::real)) = (y < -x)" |
|
22 |
by auto |
|
23 |
||
24 |
lemma real_0_less_add_iff [iff]: "((0::real) < x+y) = (-x < y)" |
|
25 |
by auto |
|
26 |
||
27 |
lemma real_add_le_0_iff [iff]: "(x+y \<le> (0::real)) = (y \<le> -x)" |
|
28 |
by auto |
|
29 |
||
30 |
lemma real_0_le_add_iff [iff]: "((0::real) \<le> x+y) = (-x \<le> y)" |
|
31 |
by auto |
|
32 |
||
33 |
||
34 |
(** Simprules combining x-y and 0; see also real_less_iff_diff_less_0, etc., |
|
35 |
in RealBin |
|
36 |
**) |
|
37 |
||
38 |
lemma real_0_less_diff_iff [iff]: "((0::real) < x-y) = (y < x)" |
|
39 |
by auto |
|
40 |
||
41 |
lemma real_0_le_diff_iff [iff]: "((0::real) \<le> x-y) = (y \<le> x)" |
|
42 |
by auto |
|
43 |
||
44 |
(* |
|
45 |
FIXME: we should have this, as for type int, but many proofs would break. |
|
46 |
It replaces x+-y by x-y. |
|
47 |
Addsimps [symmetric real_diff_def] |
|
48 |
*) |
|
49 |
||
14321 | 50 |
subsubsection{*Division By @{term "-1"}*} |
14288 | 51 |
|
52 |
lemma real_divide_minus1 [simp]: "x/-1 = -(x::real)" |
|
53 |
by simp |
|
54 |
||
55 |
lemma real_minus1_divide [simp]: "-1/(x::real) = - (1/x)" |
|
56 |
by (simp add: real_divide_def real_minus_inverse) |
|
57 |
||
58 |
lemma real_lbound_gt_zero: |
|
59 |
"[| (0::real) < d1; 0 < d2 |] ==> \<exists>e. 0 < e & e < d1 & e < d2" |
|
60 |
apply (rule_tac x = " (min d1 d2) /2" in exI) |
|
61 |
apply (simp add: min_def) |
|
62 |
done |
|
63 |
||
64 |
(*** Density of the Reals ***) |
|
65 |
||
14293 | 66 |
text{*Similar results are proved in @{text Ring_and_Field}*} |
14288 | 67 |
lemma real_less_half_sum: "x < y ==> x < (x+y) / (2::real)" |
14293 | 68 |
by auto |
14288 | 69 |
|
70 |
lemma real_gt_half_sum: "x < y ==> (x+y)/(2::real) < y" |
|
14293 | 71 |
by auto |
14288 | 72 |
|
73 |
lemma real_dense: "x < y ==> \<exists>r::real. x < r & r < y" |
|
14293 | 74 |
by (rule Ring_and_Field.dense) |
75 |
||
14288 | 76 |
|
14269 | 77 |
subsection{*Absolute Value Function for the Reals*} |
78 |
||
14295 | 79 |
lemma abs_nat_number_of [simp]: |
14269 | 80 |
"abs (number_of v :: real) = |
81 |
(if neg (number_of v) then number_of (bin_minus v) |
|
82 |
else number_of v)" |
|
14295 | 83 |
by (simp add: real_abs_def bin_arith_simps minus_real_number_of |
84 |
le_real_number_of_eq_not_less less_real_number_of real_of_int_le_iff) |
|
14269 | 85 |
|
86 |
||
87 |
(*---------------------------------------------------------------------------- |
|
88 |
Properties of the absolute value function over the reals |
|
89 |
(adapted version of previously proved theorems about abs) |
|
90 |
----------------------------------------------------------------------------*) |
|
91 |
||
14294
f4d806fd72ce
absolute value theorems moved to HOL/Ring_and_Field
paulson
parents:
14293
diff
changeset
|
92 |
text{*FIXME: these should go!*} |
f4d806fd72ce
absolute value theorems moved to HOL/Ring_and_Field
paulson
parents:
14293
diff
changeset
|
93 |
lemma abs_eqI1: "(0::real)\<le>x ==> abs x = x" |
14269 | 94 |
by (unfold real_abs_def, simp) |
95 |
||
96 |
lemma abs_eqI2: "(0::real) < x ==> abs x = x" |
|
97 |
by (unfold real_abs_def, simp) |
|
98 |
||
99 |
lemma abs_minus_eqI2: "x < (0::real) ==> abs x = -x" |
|
100 |
by (unfold real_abs_def real_le_def, simp) |
|
101 |
||
102 |
lemma abs_minus_add_cancel: "abs(x + (-y)) = abs (y + (-(x::real)))" |
|
103 |
by (unfold real_abs_def, simp) |
|
104 |
||
14294
f4d806fd72ce
absolute value theorems moved to HOL/Ring_and_Field
paulson
parents:
14293
diff
changeset
|
105 |
lemma abs_minus_one [simp]: "abs (-1) = (1::real)" |
14269 | 106 |
by (unfold real_abs_def, simp) |
107 |
||
108 |
lemma abs_interval_iff: "(abs x < r) = (-r < x & x < (r::real))" |
|
14295 | 109 |
by (force simp add: Ring_and_Field.abs_less_iff) |
14269 | 110 |
|
14294
f4d806fd72ce
absolute value theorems moved to HOL/Ring_and_Field
paulson
parents:
14293
diff
changeset
|
111 |
lemma abs_le_interval_iff: "(abs x \<le> r) = (-r\<le>x & x\<le>(r::real))" |
14295 | 112 |
by (force simp add: Ring_and_Field.abs_le_iff) |
14269 | 113 |
|
14295 | 114 |
lemma abs_add_one_gt_zero [simp]: "(0::real) < 1 + abs(x)" |
14269 | 115 |
by (unfold real_abs_def, auto) |
116 |
||
14295 | 117 |
lemma abs_real_of_nat_cancel [simp]: "abs (real x) = real (x::nat)" |
118 |
by (auto intro: abs_eqI1 simp add: real_of_nat_ge_zero) |
|
14269 | 119 |
|
14295 | 120 |
lemma abs_add_one_not_less_self [simp]: "~ abs(x) + (1::real) < x" |
14269 | 121 |
apply (rule real_leD) |
122 |
apply (auto intro: abs_ge_self [THEN order_trans]) |
|
123 |
done |
|
124 |
||
14295 | 125 |
text{*Used only in Hyperreal/Lim.ML*} |
14294
f4d806fd72ce
absolute value theorems moved to HOL/Ring_and_Field
paulson
parents:
14293
diff
changeset
|
126 |
lemma abs_sum_triangle_ineq: "abs ((x::real) + y + (-l + -m)) \<le> abs(x + -l) + abs(y + -m)" |
14269 | 127 |
apply (simp add: real_add_assoc) |
128 |
apply (rule_tac x1 = y in real_add_left_commute [THEN ssubst]) |
|
129 |
apply (rule real_add_assoc [THEN subst]) |
|
130 |
apply (rule abs_triangle_ineq) |
|
131 |
done |
|
132 |
||
14288 | 133 |
|
14290 | 134 |
|
14269 | 135 |
ML |
136 |
{* |
|
14288 | 137 |
val real_0_le_divide_iff = thm"real_0_le_divide_iff"; |
138 |
val real_add_minus_iff = thm"real_add_minus_iff"; |
|
139 |
val real_add_eq_0_iff = thm"real_add_eq_0_iff"; |
|
140 |
val real_add_less_0_iff = thm"real_add_less_0_iff"; |
|
141 |
val real_0_less_add_iff = thm"real_0_less_add_iff"; |
|
142 |
val real_add_le_0_iff = thm"real_add_le_0_iff"; |
|
143 |
val real_0_le_add_iff = thm"real_0_le_add_iff"; |
|
144 |
val real_0_less_diff_iff = thm"real_0_less_diff_iff"; |
|
145 |
val real_0_le_diff_iff = thm"real_0_le_diff_iff"; |
|
146 |
val real_divide_minus1 = thm"real_divide_minus1"; |
|
147 |
val real_minus1_divide = thm"real_minus1_divide"; |
|
148 |
val real_lbound_gt_zero = thm"real_lbound_gt_zero"; |
|
149 |
val real_less_half_sum = thm"real_less_half_sum"; |
|
150 |
val real_gt_half_sum = thm"real_gt_half_sum"; |
|
151 |
val real_dense = thm"real_dense"; |
|
152 |
||
14269 | 153 |
val abs_nat_number_of = thm"abs_nat_number_of"; |
154 |
val abs_split = thm"abs_split"; |
|
155 |
val abs_zero = thm"abs_zero"; |
|
156 |
val abs_eqI1 = thm"abs_eqI1"; |
|
157 |
val abs_eqI2 = thm"abs_eqI2"; |
|
158 |
val abs_minus_eqI2 = thm"abs_minus_eqI2"; |
|
159 |
val abs_ge_zero = thm"abs_ge_zero"; |
|
160 |
val abs_idempotent = thm"abs_idempotent"; |
|
161 |
val abs_zero_iff = thm"abs_zero_iff"; |
|
162 |
val abs_ge_self = thm"abs_ge_self"; |
|
163 |
val abs_ge_minus_self = thm"abs_ge_minus_self"; |
|
164 |
val abs_mult = thm"abs_mult"; |
|
165 |
val abs_inverse = thm"abs_inverse"; |
|
166 |
val abs_triangle_ineq = thm"abs_triangle_ineq"; |
|
167 |
val abs_minus_cancel = thm"abs_minus_cancel"; |
|
168 |
val abs_minus_add_cancel = thm"abs_minus_add_cancel"; |
|
169 |
val abs_minus_one = thm"abs_minus_one"; |
|
170 |
val abs_interval_iff = thm"abs_interval_iff"; |
|
171 |
val abs_le_interval_iff = thm"abs_le_interval_iff"; |
|
172 |
val abs_add_one_gt_zero = thm"abs_add_one_gt_zero"; |
|
173 |
val abs_le_zero_iff = thm"abs_le_zero_iff"; |
|
174 |
val abs_real_of_nat_cancel = thm"abs_real_of_nat_cancel"; |
|
175 |
val abs_add_one_not_less_self = thm"abs_add_one_not_less_self"; |
|
176 |
val abs_sum_triangle_ineq = thm"abs_sum_triangle_ineq"; |
|
14294
f4d806fd72ce
absolute value theorems moved to HOL/Ring_and_Field
paulson
parents:
14293
diff
changeset
|
177 |
|
f4d806fd72ce
absolute value theorems moved to HOL/Ring_and_Field
paulson
parents:
14293
diff
changeset
|
178 |
val abs_mult_less = thm"abs_mult_less"; |
14269 | 179 |
*} |
180 |
||
9436
62bb04ab4b01
rearranged setup of arithmetic procedures, avoiding global reference values;
wenzelm
parents:
diff
changeset
|
181 |
end |