src/HOL/Real.thy
changeset 54258 adfc759263ab
parent 54230 b1d955791529
child 54262 326fd7103cb4
--- a/src/HOL/Real.thy	Tue Nov 05 09:44:57 2013 +0100
+++ b/src/HOL/Real.thy	Tue Nov 05 09:44:58 2013 +0100
@@ -919,6 +919,12 @@
     using 1 2 3 by (rule_tac x="Real B" in exI, simp)
 qed
 
+(* TODO: generalize to ordered group *)
+lemma bdd_above_uminus[simp]: "bdd_above (uminus ` X) \<longleftrightarrow> bdd_below (X::real set)"
+  by (auto simp: bdd_above_def bdd_below_def intro: le_imp_neg_le) (metis le_imp_neg_le minus_minus)
+
+lemma bdd_below_uminus[simp]: "bdd_below (uminus ` X) \<longleftrightarrow> bdd_above (X::real set)"
+  by (auto simp: bdd_above_def bdd_below_def intro: le_imp_neg_le) (metis le_imp_neg_le minus_minus)
 
 instantiation real :: linear_continuum
 begin
@@ -933,10 +939,10 @@
 
 instance
 proof
-  { fix z x :: real and X :: "real set"
-    assume x: "x \<in> X" and z: "\<And>x. x \<in> X \<Longrightarrow> x \<le> z"
+  { fix x :: real and X :: "real set"
+    assume x: "x \<in> X" "bdd_above X"
     then obtain s where s: "\<forall>y\<in>X. y \<le> s" "\<And>z. \<forall>y\<in>X. y \<le> z \<Longrightarrow> s \<le> z"
-      using complete_real[of X] by blast
+      using complete_real[of X] unfolding bdd_above_def by blast
     then show "x \<le> Sup X"
       unfolding Sup_real_def by (rule LeastI2_order) (auto simp: x) }
   note Sup_upper = this
@@ -953,9 +959,9 @@
   note Sup_least = this
 
   { fix x z :: real and X :: "real set"
-    assume x: "x \<in> X" and z: "\<And>x. x \<in> X \<Longrightarrow> z \<le> x"
+    assume x: "x \<in> X" and [simp]: "bdd_below X"
     have "-x \<le> Sup (uminus ` X)"
-      by (rule Sup_upper[of _ _ "- z"]) (auto simp add: image_iff x z)
+      by (rule Sup_upper) (auto simp add: image_iff x)
     then show "Inf X \<le> x" 
       by (auto simp add: Inf_real_def) }
 
@@ -976,7 +982,7 @@
 *}
 
 lemma reals_complete: "\<exists>X. X \<in> S \<Longrightarrow> \<exists>Y. isUb (UNIV::real set) S Y \<Longrightarrow> \<exists>t. isLub (UNIV :: real set) S t"
-  by (intro exI[of _ "Sup S"] isLub_cSup) (auto simp: setle_def isUb_def intro: cSup_upper)
+  by (intro exI[of _ "Sup S"] isLub_cSup) (auto simp: setle_def isUb_def intro!: cSup_upper)
 
 
 subsection {* Hiding implementation details *}