11 Goal "real_of_int (number_of w) = number_of w"; |
11 Goal "real_of_int (number_of w) = number_of w"; |
12 by (simp_tac (simpset() addsimps [real_number_of_def]) 1); |
12 by (simp_tac (simpset() addsimps [real_number_of_def]) 1); |
13 qed "real_number_of"; |
13 qed "real_number_of"; |
14 Addsimps [real_number_of]; |
14 Addsimps [real_number_of]; |
15 |
15 |
16 Goalw [real_number_of_def] "0r = #0"; |
16 Goalw [real_number_of_def] "(0::real) = #0"; |
17 by (simp_tac (simpset() addsimps [real_of_int_zero RS sym]) 1); |
17 by (simp_tac (simpset() addsimps [real_of_int_zero RS sym]) 1); |
18 qed "zero_eq_numeral_0"; |
18 qed "zero_eq_numeral_0"; |
19 |
19 |
20 Goalw [real_number_of_def] "1r = #1"; |
20 Goalw [real_number_of_def] "1r = #1"; |
21 by (simp_tac (simpset() addsimps [real_of_int_one RS sym]) 1); |
21 by (simp_tac (simpset() addsimps [real_of_int_one RS sym]) 1); |
107 by (rtac (linorder_not_less RS sym) 1); |
107 by (rtac (linorder_not_less RS sym) 1); |
108 qed "le_real_number_of_eq_not_less"; |
108 qed "le_real_number_of_eq_not_less"; |
109 |
109 |
110 Addsimps [le_real_number_of_eq_not_less]; |
110 Addsimps [le_real_number_of_eq_not_less]; |
111 |
111 |
112 (*** New versions of existing theorems involving 0r, 1r ***) |
112 (*** New versions of existing theorems involving 0, 1r ***) |
113 |
113 |
114 Goal "- #1 = (#-1::real)"; |
114 Goal "- #1 = (#-1::real)"; |
115 by (Simp_tac 1); |
115 by (Simp_tac 1); |
116 qed "minus_numeral_one"; |
116 qed "minus_numeral_one"; |
117 |
117 |
118 |
118 |
119 (*Maps 0r to #0 and 1r to #1 and -1r to #-1*) |
119 (*Maps 0 to #0 and 1r to #1 and -1r to #-1*) |
120 val real_numeral_ss = |
120 val real_numeral_ss = |
121 HOL_ss addsimps [zero_eq_numeral_0, one_eq_numeral_1, |
121 HOL_ss addsimps [zero_eq_numeral_0, one_eq_numeral_1, |
122 minus_numeral_one]; |
122 minus_numeral_one]; |
123 |
123 |
124 fun rename_numerals thy th = simplify real_numeral_ss (change_theory thy th); |
124 fun rename_numerals thy th = simplify real_numeral_ss (change_theory thy th); |
125 |
125 |
126 |
126 |
127 (*Now insert some identities previously stated for 0r and 1r*) |
127 (*Now insert some identities previously stated for 0 and 1r*) |
128 |
128 |
129 (** RealDef & Real **) |
129 (** RealDef & Real **) |
130 |
130 |
131 Addsimps (map (rename_numerals thy) |
131 Addsimps (map (rename_numerals thy) |
132 [real_minus_zero, real_minus_zero_iff, |
132 [real_minus_zero, real_minus_zero_iff, |
133 real_add_zero_left, real_add_zero_right, |
133 real_add_zero_left, real_add_zero_right, |
134 real_diff_0, real_diff_0_right, |
134 real_diff_0, real_diff_0_right, |
135 real_mult_0_right, real_mult_0, real_mult_1_right, real_mult_1, |
135 real_mult_0_right, real_mult_0, real_mult_1_right, real_mult_1, |
136 real_mult_minus_1_right, real_mult_minus_1, real_rinv_1, |
136 real_mult_minus_1_right, real_mult_minus_1, real_rinv_1, |
137 real_minus_zero_less_iff]); |
137 real_minus_zero_less_iff]); |
|
138 |
|
139 AddIffs (map (rename_numerals thy) [real_mult_is_0, real_0_is_mult]); |
|
140 |
|
141 bind_thm ("real_0_less_times_iff", |
|
142 rename_numerals thy real_zero_less_times_iff); |
|
143 bind_thm ("real_0_le_times_iff", |
|
144 rename_numerals thy real_zero_le_times_iff); |
|
145 bind_thm ("real_times_less_0_iff", |
|
146 rename_numerals thy real_times_less_zero_iff); |
|
147 bind_thm ("real_times_le_0_iff", |
|
148 rename_numerals thy real_times_le_zero_iff); |
138 |
149 |
139 |
150 |
140 (*Perhaps add some theorems that aren't in the default simpset, as |
151 (*Perhaps add some theorems that aren't in the default simpset, as |
141 done in Integ/NatBin.ML*) |
152 done in Integ/NatBin.ML*) |
142 |
153 |
199 (* added by jdf *) |
210 (* added by jdf *) |
200 fun full_rename_numerals thy th = |
211 fun full_rename_numerals thy th = |
201 asm_full_simplify real_numeral_ss (change_theory thy th); |
212 asm_full_simplify real_numeral_ss (change_theory thy th); |
202 |
213 |
203 |
214 |
|
215 (** Simplification of arithmetic when nested to the right **) |
|
216 |
|
217 Goal "number_of v + (number_of w + z) = (number_of(bin_add v w) + z::real)"; |
|
218 by Auto_tac; |
|
219 qed "real_add_number_of_left"; |
|
220 |
|
221 Goal "number_of v * (number_of w * z) = (number_of(bin_mult v w) * z::real)"; |
|
222 by (simp_tac (simpset() addsimps [real_mult_assoc RS sym]) 1); |
|
223 qed "real_mult_number_of_left"; |
|
224 |
|
225 Goalw [real_diff_def] |
|
226 "number_of v + (number_of w - c) = number_of(bin_add v w) - (c::real)"; |
|
227 by (rtac real_add_number_of_left 1); |
|
228 qed "real_add_number_of_diff1"; |
|
229 |
|
230 Goal "number_of v + (c - number_of w) = \ |
|
231 \ number_of (bin_add v (bin_minus w)) + (c::real)"; |
|
232 by (stac (diff_real_number_of RS sym) 1); |
|
233 by Auto_tac; |
|
234 qed "real_add_number_of_diff2"; |
|
235 |
|
236 Addsimps [real_add_number_of_left, real_mult_number_of_left, |
|
237 real_add_number_of_diff1, real_add_number_of_diff2]; |
|
238 |