# HG changeset patch # User hoelzl # Date 1283778097 -7200 # Node ID 75849a560c098237fe73711443d6ab50622b8076 # Parent 14b16b380ca18c5535eb9cd811e2635d65a0b885 When comparing Floats use integers instead of reals (represented as rationals), generates less code when Floats are used. diff -r 14b16b380ca1 -r 75849a560c09 src/HOL/Library/Float.thy --- a/src/HOL/Library/Float.thy Mon Sep 06 12:38:45 2010 +0200 +++ b/src/HOL/Library/Float.thy Mon Sep 06 15:01:37 2010 +0200 @@ -397,6 +397,22 @@ apply auto done +lemma zero_less_float: + "(0 < real (Float a b)) = (0 < a)" + apply auto + apply (auto simp add: zero_less_mult_iff) + apply (insert zero_less_pow2[of b]) + apply (simp_all) + done + +lemma float_less_zero: + "(real (Float a b) < 0) = (a < 0)" + apply auto + apply (auto simp add: mult_less_0_iff) + apply (insert zero_less_pow2[of b]) + apply (simp_all) + done + declare real_of_float_simp[simp del] lemma real_of_float_pprt[simp]: "real (float_pprt a) = pprt (real a)" @@ -1398,7 +1414,7 @@ finally show ?thesis unfolding ub_mod_def real_of_float_sub real_of_float_mult by auto qed -lemma le_float_def': "f \ g = (case f - g of Float a b \ a \ 0)" +lemma le_float_def'[code]: "f \ g = (case f - g of Float a b \ a \ 0)" proof - have le_transfer: "(f \ g) = (real (f - g) \ 0)" by (auto simp add: le_float_def) from float_split[of "f - g"] obtain a b where f_diff_g: "f - g = Float a b" by auto @@ -1406,12 +1422,7 @@ show ?thesis by (simp add: le_transfer' f_diff_g float_le_zero) qed -lemma float_less_zero: - "(real (Float a b) < 0) = (a < 0)" - apply (auto simp add: mult_less_0_iff real_of_float_simp) - done - -lemma less_float_def': "f < g = (case f - g of Float a b \ a < 0)" +lemma less_float_def'[code]: "f < g = (case f - g of Float a b \ a < 0)" proof - have less_transfer: "(f < g) = (real (f - g) < 0)" by (auto simp add: less_float_def) from float_split[of "f - g"] obtain a b where f_diff_g: "f - g = Float a b" by auto