276 |
276 |
277 lemma hpowr_Suc [simp]: "r ^ (Suc n) = r * (r ^ n)" |
277 lemma hpowr_Suc [simp]: "r ^ (Suc n) = r * (r ^ n)" |
278 for r :: hypreal |
278 for r :: hypreal |
279 by (rule power_Suc) |
279 by (rule power_Suc) |
280 |
280 |
281 lemma hrealpow_two: "r ^ Suc (Suc 0) = r * r" |
|
282 for r :: hypreal |
|
283 by simp |
|
284 |
|
285 lemma hrealpow_two_le [simp]: "0 \<le> r ^ Suc (Suc 0)" |
|
286 for r :: hypreal |
|
287 by (auto simp add: zero_le_mult_iff) |
|
288 |
|
289 lemma hrealpow_two_le_add_order [simp]: "0 \<le> u ^ Suc (Suc 0) + v ^ Suc (Suc 0)" |
|
290 for u v :: hypreal |
|
291 by (simp only: hrealpow_two_le add_nonneg_nonneg) |
|
292 |
|
293 lemma hrealpow_two_le_add_order2 [simp]: "0 \<le> u ^ Suc (Suc 0) + v ^ Suc (Suc 0) + w ^ Suc (Suc 0)" |
|
294 for u v w :: hypreal |
|
295 by (simp only: hrealpow_two_le add_nonneg_nonneg) |
|
296 |
|
297 lemma hypreal_add_nonneg_eq_0_iff: "0 \<le> x \<Longrightarrow> 0 \<le> y \<Longrightarrow> x + y = 0 \<longleftrightarrow> x = 0 \<and> y = 0" |
|
298 for x y :: hypreal |
|
299 by arith |
|
300 |
|
301 |
|
302 (* FIXME: DELETE THESE *) |
|
303 lemma hypreal_three_squares_add_zero_iff: "x * x + y * y + z * z = 0 \<longleftrightarrow> x = 0 \<and> y = 0 \<and> z = 0" |
|
304 for x y z :: hypreal |
|
305 by (simp only: zero_le_square add_nonneg_nonneg hypreal_add_nonneg_eq_0_iff) auto |
|
306 |
|
307 lemma hrealpow_three_squares_add_zero_iff [simp]: |
|
308 "x ^ Suc (Suc 0) + y ^ Suc (Suc 0) + z ^ Suc (Suc 0) = 0 \<longleftrightarrow> x = 0 \<and> y = 0 \<and> z = 0" |
|
309 for x y z :: hypreal |
|
310 by (simp only: hypreal_three_squares_add_zero_iff hrealpow_two) |
|
311 |
|
312 (*FIXME: This and RealPow.abs_realpow_two should be replaced by an abstract |
|
313 result proved in Rings or Fields*) |
|
314 lemma hrabs_hrealpow_two [simp]: "\<bar>x ^ Suc (Suc 0)\<bar> = x ^ Suc (Suc 0)" |
|
315 for x :: hypreal |
|
316 by (simp add: abs_mult) |
|
317 |
|
318 lemma two_hrealpow_ge_one [simp]: "(1::hypreal) \<le> 2 ^ n" |
|
319 using power_increasing [of 0 n "2::hypreal"] by simp |
|
320 |
|
321 lemma hrealpow: "star_n X ^ m = star_n (\<lambda>n. (X n::real) ^ m)" |
281 lemma hrealpow: "star_n X ^ m = star_n (\<lambda>n. (X n::real) ^ m)" |
322 by (induct m) (auto simp: star_n_one_num star_n_mult) |
282 by (induct m) (auto simp: star_n_one_num star_n_mult) |
323 |
283 |
324 lemma hrealpow_sum_square_expand: |
284 lemma hrealpow_sum_square_expand: |
325 "(x + y) ^ Suc (Suc 0) = |
285 "(x + y) ^ Suc (Suc 0) = |
334 |
294 |
335 lemma power_hypreal_of_real_neg_numeral: |
295 lemma power_hypreal_of_real_neg_numeral: |
336 "(- numeral v :: hypreal) ^ n = hypreal_of_real ((- numeral v) ^ n)" |
296 "(- numeral v :: hypreal) ^ n = hypreal_of_real ((- numeral v) ^ n)" |
337 by simp |
297 by simp |
338 declare power_hypreal_of_real_neg_numeral [of _ "numeral w", simp] for w |
298 declare power_hypreal_of_real_neg_numeral [of _ "numeral w", simp] for w |
339 (* |
|
340 lemma hrealpow_HFinite: |
|
341 fixes x :: "'a::{real_normed_algebra,power} star" |
|
342 shows "x \<in> HFinite ==> x ^ n \<in> HFinite" |
|
343 apply (induct_tac "n") |
|
344 apply (auto simp add: power_Suc intro: HFinite_mult) |
|
345 done |
|
346 *) |
|
347 |
299 |
348 |
300 |
349 subsection \<open>Powers with Hypernatural Exponents\<close> |
301 subsection \<open>Powers with Hypernatural Exponents\<close> |
350 |
302 |
351 text \<open>Hypernatural powers of hyperreals.\<close> |
303 text \<open>Hypernatural powers of hyperreals.\<close> |