src/HOL/Library/Float.thy
changeset 62348 9a5f43dac883
parent 61945 1135b8de26c3
child 62390 842917225d56
equal deleted inserted replaced
62347:2230b7047376 62348:9a5f43dac883
  1259   show ?thesis
  1259   show ?thesis
  1260   proof (cases "0 \<le> l")
  1260   proof (cases "0 \<le> l")
  1261     case True
  1261     case True
  1262     def x' \<equiv> "x * 2 ^ nat l"
  1262     def x' \<equiv> "x * 2 ^ nat l"
  1263     have "int x * 2 ^ nat l = x'"
  1263     have "int x * 2 ^ nat l = x'"
  1264       by (simp add: x'_def int_mult of_nat_power)
  1264       by (simp add: x'_def of_nat_mult of_nat_power)
  1265     moreover have "real x * 2 powr l = real x'"
  1265     moreover have "real x * 2 powr l = real x'"
  1266       by (simp add: powr_realpow[symmetric] \<open>0 \<le> l\<close> x'_def)
  1266       by (simp add: powr_realpow[symmetric] \<open>0 \<le> l\<close> x'_def)
  1267     ultimately show ?thesis
  1267     ultimately show ?thesis
  1268       using ceil_divide_floor_conv[of y x'] powr_realpow[of 2 "nat l"] \<open>0 \<le> l\<close> \<open>y \<noteq> 0\<close>
  1268       using ceil_divide_floor_conv[of y x'] powr_realpow[of 2 "nat l"] \<open>0 \<le> l\<close> \<open>y \<noteq> 0\<close>
  1269         l_def[symmetric, THEN meta_eq_to_obj_eq]
  1269         l_def[symmetric, THEN meta_eq_to_obj_eq]
  1272       by (metis floor_divide_of_int_eq of_int_of_nat_eq)
  1272       by (metis floor_divide_of_int_eq of_int_of_nat_eq)
  1273    next
  1273    next
  1274     case False
  1274     case False
  1275     def y' \<equiv> "y * 2 ^ nat (- l)"
  1275     def y' \<equiv> "y * 2 ^ nat (- l)"
  1276     from \<open>y \<noteq> 0\<close> have "y' \<noteq> 0" by (simp add: y'_def)
  1276     from \<open>y \<noteq> 0\<close> have "y' \<noteq> 0" by (simp add: y'_def)
  1277     have "int y * 2 ^ nat (- l) = y'" by (simp add: y'_def int_mult of_nat_power)
  1277     have "int y * 2 ^ nat (- l) = y'" by (simp add: y'_def of_nat_mult of_nat_power)
  1278     moreover have "real x * real_of_int (2::int) powr real_of_int l / real y = x / real y'"
  1278     moreover have "real x * real_of_int (2::int) powr real_of_int l / real y = x / real y'"
  1279       using \<open>\<not> 0 \<le> l\<close>
  1279       using \<open>\<not> 0 \<le> l\<close>
  1280       by (simp add: powr_realpow[symmetric] powr_minus y'_def field_simps)
  1280       by (simp add: powr_realpow[symmetric] powr_minus y'_def field_simps)
  1281     ultimately show ?thesis
  1281     ultimately show ?thesis
  1282       using ceil_divide_floor_conv[of y' x] \<open>\<not> 0 \<le> l\<close> \<open>y' \<noteq> 0\<close> \<open>y \<noteq> 0\<close>
  1282       using ceil_divide_floor_conv[of y' x] \<open>\<not> 0 \<le> l\<close> \<open>y' \<noteq> 0\<close> \<open>y \<noteq> 0\<close>