src/HOL/Decision_Procs/Approximation.thy
changeset 59741 5b762cd73a8e
parent 59730 b7c394c7a619
child 59751 916c0f6c83e3
equal deleted inserted replaced
59734:f41a2f77ab1b 59741:5b762cd73a8e
  1716         finally show ?thesis using False
  1716         finally show ?thesis using False
  1717           unfolding lb_exp.simps if_not_P[OF `\<not> 0 < x`] if_P[OF `x < - 1`] int_floor_fl_def Let_def if_not_P[OF False]
  1717           unfolding lb_exp.simps if_not_P[OF `\<not> 0 < x`] if_P[OF `x < - 1`] int_floor_fl_def Let_def if_not_P[OF False]
  1718           by (auto simp: real_power_down_fl intro!: power_down_le)
  1718           by (auto simp: real_power_down_fl intro!: power_down_le)
  1719       next
  1719       next
  1720         case True
  1720         case True
  1721         have "power_down_fl prec (Float 1 (- 2))  ?num \<le> real (Float 1 (- 2)) ^ ?num"
  1721         have "power_down_fl prec (Float 1 (- 2))  ?num \<le> (Float 1 (- 2)) ^ ?num"
  1722           by (auto simp: real_power_down_fl power_down)
  1722           by (metis Float_le_zero_iff less_imp_le linorder_not_less not_numeral_le_zero numeral_One power_down_fl)
       
  1723         then have "power_down_fl prec (Float 1 (- 2))  ?num \<le> real (Float 1 (- 2)) ^ ?num"
       
  1724           by simp
  1723         also
  1725         also
  1724         have "real (floor_fl x) \<noteq> 0" and "real (floor_fl x) \<le> 0" using `real (floor_fl x) < 0` by auto
  1726         have "real (floor_fl x) \<noteq> 0" and "real (floor_fl x) \<le> 0" using `real (floor_fl x) < 0` by auto
  1725         from divide_right_mono_neg[OF floor_fl[of x] `real (floor_fl x) \<le> 0`, unfolded divide_self[OF `real (floor_fl x) \<noteq> 0`]]
  1727         from divide_right_mono_neg[OF floor_fl[of x] `real (floor_fl x) \<le> 0`, unfolded divide_self[OF `real (floor_fl x) \<noteq> 0`]]
  1726         have "- 1 \<le> x / (- floor_fl x)" unfolding minus_float.rep_eq by auto
  1728         have "- 1 \<le> x / (- floor_fl x)" unfolding minus_float.rep_eq by auto
  1727         from order_trans[OF exp_m1_ge_quarter this[unfolded exp_le_cancel_iff[where x="- 1", symmetric]]]
  1729         from order_trans[OF exp_m1_ge_quarter this[unfolded exp_le_cancel_iff[where x="- 1", symmetric]]]
  1728         have "Float 1 (- 2) \<le> exp (x / (- floor_fl x))" unfolding Float_num .
  1730         have "Float 1 (- 2) \<le> exp (x / (- floor_fl x))" unfolding Float_num .
  1729         hence "real (Float 1 (- 2)) ^ ?num \<le> exp (x / (- floor_fl x)) ^ ?num"
  1731         hence "real (Float 1 (- 2)) ^ ?num \<le> exp (x / (- floor_fl x)) ^ ?num"
  1730           by (auto intro!: power_mono)
  1732           by (metis Float_num(5) power_mono zero_le_divide_1_iff zero_le_numeral)
  1731         also have "\<dots> = exp x" unfolding num_eq fl_eq exp_real_of_nat_mult[symmetric] using `real (floor_fl x) \<noteq> 0` by auto
  1733         also have "\<dots> = exp x" unfolding num_eq fl_eq exp_real_of_nat_mult[symmetric] using `real (floor_fl x) \<noteq> 0` by auto
  1732         finally show ?thesis
  1734         finally show ?thesis
  1733           unfolding lb_exp.simps if_not_P[OF `\<not> 0 < x`] if_P[OF `x < - 1`] int_floor_fl_def Let_def if_P[OF True] real_of_float_power
  1735           unfolding lb_exp.simps if_not_P[OF `\<not> 0 < x`] if_P[OF `x < - 1`] int_floor_fl_def Let_def if_P[OF True] real_of_float_power
  1734           .
  1736           .
  1735       qed
  1737       qed