equal
deleted
inserted
replaced
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> |