458 lemma arctan_0_1_bounds: assumes "0 \<le> real x" "real x \<le> 1" |
458 lemma arctan_0_1_bounds: assumes "0 \<le> real x" "real x \<le> 1" |
459 shows "arctan (real x) \<in> {real (x * lb_arctan_horner prec (get_even n) 1 (x * x)) .. real (x * ub_arctan_horner prec (get_odd n) 1 (x * x))}" |
459 shows "arctan (real x) \<in> {real (x * lb_arctan_horner prec (get_even n) 1 (x * x)) .. real (x * ub_arctan_horner prec (get_odd n) 1 (x * x))}" |
460 proof (cases "even n") |
460 proof (cases "even n") |
461 case True |
461 case True |
462 obtain n' where "Suc n' = get_odd n" and "odd (Suc n')" using get_odd_ex by auto |
462 obtain n' where "Suc n' = get_odd n" and "odd (Suc n')" using get_odd_ex by auto |
463 hence "even n'" unfolding even_nat_Suc by auto |
463 hence "even n'" unfolding even_Suc by auto |
464 have "arctan (real x) \<le> real (x * ub_arctan_horner prec (get_odd n) 1 (x * x))" |
464 have "arctan (real x) \<le> real (x * ub_arctan_horner prec (get_odd n) 1 (x * x))" |
465 unfolding `Suc n' = get_odd n`[symmetric] using arctan_0_1_bounds'[OF `0 \<le> real x` `real x \<le> 1` `even n'`] by auto |
465 unfolding `Suc n' = get_odd n`[symmetric] using arctan_0_1_bounds'[OF `0 \<le> real x` `real x \<le> 1` `even n'`] by auto |
466 moreover |
466 moreover |
467 have "real (x * lb_arctan_horner prec (get_even n) 1 (x * x)) \<le> arctan (real x)" |
467 have "real (x * lb_arctan_horner prec (get_even n) 1 (x * x)) \<le> arctan (real x)" |
468 unfolding get_even_def if_P[OF True] using arctan_0_1_bounds'[OF `0 \<le> real x` `real x \<le> 1` `even n`] by auto |
468 unfolding get_even_def if_P[OF True] using arctan_0_1_bounds'[OF `0 \<le> real x` `real x \<le> 1` `even n`] by auto |
469 ultimately show ?thesis by auto |
469 ultimately show ?thesis by auto |
470 next |
470 next |
471 case False hence "0 < n" by (rule odd_pos) |
471 case False hence "0 < n" by (rule odd_pos) |
472 from gr0_implies_Suc[OF this] obtain n' where "n = Suc n'" .. |
472 from gr0_implies_Suc[OF this] obtain n' where "n = Suc n'" .. |
473 from False[unfolded this even_nat_Suc] |
473 from False[unfolded this even_Suc] |
474 have "even n'" and "even (Suc (Suc n'))" by auto |
474 have "even n'" and "even (Suc (Suc n'))" by auto |
475 have "get_odd n = Suc n'" unfolding get_odd_def if_P[OF False] using `n = Suc n'` . |
475 have "get_odd n = Suc n'" unfolding get_odd_def if_P[OF False] using `n = Suc n'` . |
476 |
476 |
477 have "arctan (real x) \<le> real (x * ub_arctan_horner prec (get_odd n) 1 (x * x))" |
477 have "arctan (real x) \<le> real (x * ub_arctan_horner prec (get_odd n) 1 (x * x))" |
478 unfolding `get_odd n = Suc n'` using arctan_0_1_bounds'[OF `0 \<le> real x` `real x \<le> 1` `even n'`] by auto |
478 unfolding `get_odd n = Suc n'` using arctan_0_1_bounds'[OF `0 \<le> real x` `real x \<le> 1` `even n'`] by auto |