# HG changeset patch # User paulson # Date 1071756384 -3600 # Node ID 48dc606749bd6f32c367074c8ac6fb3204300ac3 # Parent bf8b8c9425c3e5591c5913b9d08fa124bc9b1aba tidied diff -r bf8b8c9425c3 -r 48dc606749bd src/HOL/Hyperreal/HyperDef.thy --- a/src/HOL/Hyperreal/HyperDef.thy Thu Dec 18 08:20:36 2003 +0100 +++ b/src/HOL/Hyperreal/HyperDef.thy Thu Dec 18 15:06:24 2003 +0100 @@ -91,21 +91,18 @@ (*** based on James' proof that the set of naturals is not finite ***) lemma finite_exhausts [rule_format (no_asm)]: "finite (A::nat set) --> (\n. \m. Suc (n + m) \ A)" apply (rule impI) -apply (erule_tac F = "A" in finite_induct) -apply (blast , erule exE) +apply (erule_tac F = A in finite_induct) +apply (blast, erule exE) apply (rule_tac x = "n + x" in exI) -apply (rule allI , erule_tac x = "x + m" in allE) +apply (rule allI, erule_tac x = "x + m" in allE) apply (auto simp add: add_ac) done lemma finite_not_covers [rule_format (no_asm)]: "finite (A :: nat set) --> (\n. n \A)" -apply (rule impI , drule finite_exhausts) -apply blast -done +by (rule impI, drule finite_exhausts, blast) lemma not_finite_nat: "~ finite(UNIV:: nat set)" -apply (fast dest!: finite_exhausts) -done +by (fast dest!: finite_exhausts) (*------------------------------------------------------------------------ Existence of free ultrafilter over the naturals and proof of various @@ -113,36 +110,32 @@ ------------------------------------------------------------------------*) lemma FreeUltrafilterNat_Ex: "\U. U: FreeUltrafilter (UNIV::nat set)" -apply (rule not_finite_nat [THEN FreeUltrafilter_Ex]) -done +by (rule not_finite_nat [THEN FreeUltrafilter_Ex]) -lemma FreeUltrafilterNat_mem: +lemma FreeUltrafilterNat_mem [simp]: "FreeUltrafilterNat: FreeUltrafilter(UNIV:: nat set)" apply (unfold FreeUltrafilterNat_def) apply (rule FreeUltrafilterNat_Ex [THEN exE]) -apply (rule someI2) -apply assumption+ +apply (rule someI2, assumption+) done -declare FreeUltrafilterNat_mem [simp] lemma FreeUltrafilterNat_finite: "finite x ==> x \ FreeUltrafilterNat" apply (unfold FreeUltrafilterNat_def) apply (rule FreeUltrafilterNat_Ex [THEN exE]) -apply (rule someI2 , assumption) +apply (rule someI2, assumption) apply (blast dest: mem_FreeUltrafiltersetD1) done lemma FreeUltrafilterNat_not_finite: "x: FreeUltrafilterNat ==> ~ finite x" -apply (blast dest: FreeUltrafilterNat_finite) -done +by (blast dest: FreeUltrafilterNat_finite) -lemma FreeUltrafilterNat_empty: "{} \ FreeUltrafilterNat" +lemma FreeUltrafilterNat_empty [simp]: "{} \ FreeUltrafilterNat" apply (unfold FreeUltrafilterNat_def) apply (rule FreeUltrafilterNat_Ex [THEN exE]) -apply (rule someI2 , assumption) -apply (blast dest: FreeUltrafilter_Ultrafilter Ultrafilter_Filter Filter_empty_not_mem) +apply (rule someI2, assumption) +apply (blast dest: FreeUltrafilter_Ultrafilter Ultrafilter_Filter + Filter_empty_not_mem) done -declare FreeUltrafilterNat_empty [simp] lemma FreeUltrafilterNat_Int: "[| X: FreeUltrafilterNat; Y: FreeUltrafilterNat |] ==> X Int Y \ FreeUltrafilterNat" @@ -157,53 +150,39 @@ done lemma FreeUltrafilterNat_Compl: "X: FreeUltrafilterNat ==> -X \ FreeUltrafilterNat" -apply (safe) -apply (drule FreeUltrafilterNat_Int , assumption) -apply auto +apply safe +apply (drule FreeUltrafilterNat_Int, assumption, auto) done lemma FreeUltrafilterNat_Compl_mem: "X\ FreeUltrafilterNat ==> -X \ FreeUltrafilterNat" apply (cut_tac FreeUltrafilterNat_mem [THEN FreeUltrafilter_iff [THEN iffD1]]) -apply (safe , drule_tac x = "X" in bspec) +apply (safe, drule_tac x = X in bspec) apply (auto simp add: UNIV_diff_Compl) done lemma FreeUltrafilterNat_Compl_iff1: "(X \ FreeUltrafilterNat) = (-X: FreeUltrafilterNat)" -apply (blast dest: FreeUltrafilterNat_Compl FreeUltrafilterNat_Compl_mem) -done +by (blast dest: FreeUltrafilterNat_Compl FreeUltrafilterNat_Compl_mem) lemma FreeUltrafilterNat_Compl_iff2: "(X: FreeUltrafilterNat) = (-X \ FreeUltrafilterNat)" -apply (auto simp add: FreeUltrafilterNat_Compl_iff1 [symmetric]) -done +by (auto simp add: FreeUltrafilterNat_Compl_iff1 [symmetric]) -lemma FreeUltrafilterNat_UNIV: "(UNIV::nat set) \ FreeUltrafilterNat" -apply (rule FreeUltrafilterNat_mem [THEN FreeUltrafilter_Ultrafilter, THEN Ultrafilter_Filter, THEN mem_FiltersetD4]) -done -declare FreeUltrafilterNat_UNIV [simp] +lemma FreeUltrafilterNat_UNIV [simp]: "(UNIV::nat set) \ FreeUltrafilterNat" +by (rule FreeUltrafilterNat_mem [THEN FreeUltrafilter_Ultrafilter, THEN Ultrafilter_Filter, THEN mem_FiltersetD4]) -lemma FreeUltrafilterNat_Nat_set: "UNIV \ FreeUltrafilterNat" -apply auto -done -declare FreeUltrafilterNat_Nat_set [simp] +lemma FreeUltrafilterNat_Nat_set [simp]: "UNIV \ FreeUltrafilterNat" +by auto -lemma FreeUltrafilterNat_Nat_set_refl: "{n. P(n) = P(n)} \ FreeUltrafilterNat" -apply (simp (no_asm)) -done -declare FreeUltrafilterNat_Nat_set_refl [intro] +lemma FreeUltrafilterNat_Nat_set_refl [intro]: "{n. P(n) = P(n)} \ FreeUltrafilterNat" +by simp lemma FreeUltrafilterNat_P: "{n::nat. P} \ FreeUltrafilterNat ==> P" -apply (rule ccontr) -apply simp -done +by (rule ccontr, simp) lemma FreeUltrafilterNat_Ex_P: "{n. P(n)} \ FreeUltrafilterNat ==> \n. P(n)" -apply (rule ccontr) -apply simp -done +by (rule ccontr, simp) lemma FreeUltrafilterNat_all: "\n. P(n) ==> {n. P(n)} \ FreeUltrafilterNat" -apply (auto intro: FreeUltrafilterNat_Nat_set) -done +by (auto intro: FreeUltrafilterNat_Nat_set) (*------------------------------------------------------- Define and use Ultrafilter tactics @@ -231,7 +210,7 @@ lemma FreeUltrafilterNat_Un: "X Un Y: FreeUltrafilterNat ==> X: FreeUltrafilterNat | Y: FreeUltrafilterNat" apply auto -apply (ultra) +apply ultra done (*------------------------------------------------------- @@ -242,9 +221,7 @@ (** Natural deduction for hyprel **) lemma hyprel_iff: "((X,Y): hyprel) = ({n. X n = Y n}: FreeUltrafilterNat)" -apply (unfold hyprel_def) -apply fast -done +by (unfold hyprel_def, fast) lemma hyprel_refl: "(x,x): hyprel" apply (unfold hyprel_def) @@ -252,14 +229,11 @@ done lemma hyprel_sym [rule_format (no_asm)]: "(x,y): hyprel --> (y,x):hyprel" -apply (simp add: hyprel_def eq_commute) -done +by (simp add: hyprel_def eq_commute) lemma hyprel_trans: "[|(x,y): hyprel; (y,z):hyprel|] ==> (x,z):hyprel" -apply (unfold hyprel_def) -apply auto -apply (ultra) +apply (unfold hyprel_def, auto, ultra) done lemma equiv_hyprel: "equiv UNIV hyprel" @@ -271,10 +245,8 @@ lemmas equiv_hyprel_iff = eq_equiv_class_iff [OF equiv_hyprel UNIV_I UNIV_I, simp] -lemma hyprel_in_hypreal: "hyprel``{x}:hypreal" -apply (unfold hypreal_def hyprel_def quotient_def) -apply blast -done +lemma hyprel_in_hypreal [simp]: "hyprel``{x}:hypreal" +by (unfold hypreal_def hyprel_def quotient_def, blast) lemma inj_on_Abs_hypreal: "inj_on Abs_hypreal hypreal" apply (rule inj_on_inverseI) @@ -282,7 +254,7 @@ done declare inj_on_Abs_hypreal [THEN inj_on_iff, simp] - hyprel_in_hypreal [simp] Abs_hypreal_inverse [simp] + Abs_hypreal_inverse [simp] declare equiv_hyprel [THEN eq_equiv_class_iff, simp] @@ -295,27 +267,19 @@ apply (rule Rep_hypreal_inverse) done -lemma lemma_hyprel_refl: "x \ hyprel `` {x}" -apply (unfold hyprel_def) -apply (safe) +lemma lemma_hyprel_refl [simp]: "x \ hyprel `` {x}" +apply (unfold hyprel_def, safe) apply (auto intro!: FreeUltrafilterNat_Nat_set) done -declare lemma_hyprel_refl [simp] - -lemma hypreal_empty_not_mem: "{} \ hypreal" +lemma hypreal_empty_not_mem [simp]: "{} \ hypreal" apply (unfold hypreal_def) apply (auto elim!: quotientE equalityCE) done -declare hypreal_empty_not_mem [simp] +lemma Rep_hypreal_nonempty [simp]: "Rep_hypreal x \ {}" +by (cut_tac x = x in Rep_hypreal, auto) -lemma Rep_hypreal_nonempty: "Rep_hypreal x \ {}" -apply (cut_tac x = "x" in Rep_hypreal) -apply auto -done - -declare Rep_hypreal_nonempty [simp] (*------------------------------------------------------------------------ hypreal_of_real: the injection from real to hypreal @@ -334,7 +298,7 @@ lemma eq_Abs_hypreal: "(!!x y. z = Abs_hypreal(hyprel``{x}) ==> P) ==> P" apply (rule_tac x1=z in Rep_hypreal [unfolded hypreal_def, THEN quotientE]) -apply (drule_tac f = "Abs_hypreal" in arg_cong) +apply (drule_tac f = Abs_hypreal in arg_cong) apply (force simp add: Rep_hypreal_inverse) done @@ -347,44 +311,38 @@ lemma hypreal_minus: "- (Abs_hypreal(hyprel``{%n. X n})) = Abs_hypreal(hyprel `` {%n. -(X n)})" apply (unfold hypreal_minus_def) -apply (rule_tac f = "Abs_hypreal" in arg_cong) -apply (simp (no_asm) add: hyprel_in_hypreal [THEN Abs_hypreal_inverse] +apply (rule_tac f = Abs_hypreal in arg_cong) +apply (simp add: hyprel_in_hypreal [THEN Abs_hypreal_inverse] UN_equiv_class [OF equiv_hyprel hypreal_minus_congruent]) done -lemma hypreal_minus_minus: "- (- z) = (z::hypreal)" -apply (rule_tac z = "z" in eq_Abs_hypreal) -apply (simp (no_asm_simp) add: hypreal_minus) +lemma hypreal_minus_minus [simp]: "- (- z) = (z::hypreal)" +apply (rule_tac z = z in eq_Abs_hypreal) +apply (simp add: hypreal_minus) done -declare hypreal_minus_minus [simp] - lemma inj_hypreal_minus: "inj(%r::hypreal. -r)" apply (rule inj_onI) -apply (drule_tac f = "uminus" in arg_cong) +apply (drule_tac f = uminus in arg_cong) apply (simp add: hypreal_minus_minus) done -lemma hypreal_minus_zero: "- 0 = (0::hypreal)" +lemma hypreal_minus_zero [simp]: "- 0 = (0::hypreal)" apply (unfold hypreal_zero_def) -apply (simp (no_asm) add: hypreal_minus) +apply (simp add: hypreal_minus) done -declare hypreal_minus_zero [simp] -lemma hypreal_minus_zero_iff: "(-x = 0) = (x = (0::hypreal))" -apply (rule_tac z = "x" in eq_Abs_hypreal) +lemma hypreal_minus_zero_iff [simp]: "(-x = 0) = (x = (0::hypreal))" +apply (rule_tac z = x in eq_Abs_hypreal) apply (auto simp add: hypreal_zero_def hypreal_minus) done -declare hypreal_minus_zero_iff [simp] (**** hyperreal addition: hypreal_add ****) lemma hypreal_add_congruent2: "congruent2 hyprel (%X Y. hyprel``{%n. X n + Y n})" -apply (unfold congruent2_def) -apply (auto ); -apply ultra +apply (unfold congruent2_def, auto, ultra) done lemma hypreal_add: @@ -396,20 +354,20 @@ lemma hypreal_diff: "Abs_hypreal(hyprel``{%n. X n}) - Abs_hypreal(hyprel``{%n. Y n}) = Abs_hypreal(hyprel``{%n. X n - Y n})" -apply (simp (no_asm) add: hypreal_diff_def hypreal_minus hypreal_add) +apply (simp add: hypreal_diff_def hypreal_minus hypreal_add) done lemma hypreal_add_commute: "(z::hypreal) + w = w + z" -apply (rule_tac z = "z" in eq_Abs_hypreal) -apply (rule_tac z = "w" in eq_Abs_hypreal) -apply (simp (no_asm_simp) add: real_add_ac hypreal_add) +apply (rule_tac z = z in eq_Abs_hypreal) +apply (rule_tac z = w in eq_Abs_hypreal) +apply (simp add: real_add_ac hypreal_add) done lemma hypreal_add_assoc: "((z1::hypreal) + z2) + z3 = z1 + (z2 + z3)" -apply (rule_tac z = "z1" in eq_Abs_hypreal) -apply (rule_tac z = "z2" in eq_Abs_hypreal) -apply (rule_tac z = "z3" in eq_Abs_hypreal) -apply (simp (no_asm_simp) add: hypreal_add real_add_assoc) +apply (rule_tac z = z1 in eq_Abs_hypreal) +apply (rule_tac z = z2 in eq_Abs_hypreal) +apply (rule_tac z = z3 in eq_Abs_hypreal) +apply (simp add: hypreal_add real_add_assoc) done (*For AC rewriting*) @@ -423,32 +381,26 @@ lemmas hypreal_add_ac = hypreal_add_assoc hypreal_add_commute hypreal_add_left_commute -lemma hypreal_add_zero_left: "(0::hypreal) + z = z" +lemma hypreal_add_zero_left [simp]: "(0::hypreal) + z = z" apply (unfold hypreal_zero_def) -apply (rule_tac z = "z" in eq_Abs_hypreal) +apply (rule_tac z = z in eq_Abs_hypreal) apply (simp add: hypreal_add) done -lemma hypreal_add_zero_right: "z + (0::hypreal) = z" -apply (simp (no_asm) add: hypreal_add_zero_left hypreal_add_commute) -done +lemma hypreal_add_zero_right [simp]: "z + (0::hypreal) = z" +by (simp add: hypreal_add_zero_left hypreal_add_commute) -lemma hypreal_add_minus: "z + -z = (0::hypreal)" +lemma hypreal_add_minus [simp]: "z + -z = (0::hypreal)" apply (unfold hypreal_zero_def) -apply (rule_tac z = "z" in eq_Abs_hypreal) +apply (rule_tac z = z in eq_Abs_hypreal) apply (simp add: hypreal_minus hypreal_add) done -lemma hypreal_add_minus_left: "-z + z = (0::hypreal)" -apply (simp (no_asm) add: hypreal_add_commute hypreal_add_minus) -done - -declare hypreal_add_minus [simp] hypreal_add_minus_left [simp] - hypreal_add_zero_left [simp] hypreal_add_zero_right [simp] +lemma hypreal_add_minus_left [simp]: "-z + z = (0::hypreal)" +by (simp add: hypreal_add_commute hypreal_add_minus) lemma hypreal_minus_ex: "\y. (x::hypreal) + y = 0" -apply (fast intro: hypreal_add_minus) -done +by (fast intro: hypreal_add_minus) lemma hypreal_minus_ex1: "EX! y. (x::hypreal) + y = 0" apply (auto intro: hypreal_add_minus) @@ -465,55 +417,44 @@ done lemma hypreal_add_minus_eq_minus: "x + y = (0::hypreal) ==> x = -y" -apply (cut_tac z = "y" in hypreal_add_minus_left) -apply (rule_tac x1 = "y" in hypreal_minus_left_ex1 [THEN ex1E]) -apply blast +apply (cut_tac z = y in hypreal_add_minus_left) +apply (rule_tac x1 = y in hypreal_minus_left_ex1 [THEN ex1E], blast) done lemma hypreal_as_add_inverse_ex: "\y::hypreal. x = -y" -apply (cut_tac x = "x" in hypreal_minus_ex) -apply (erule exE , drule hypreal_add_minus_eq_minus) -apply fast +apply (cut_tac x = x in hypreal_minus_ex) +apply (erule exE, drule hypreal_add_minus_eq_minus, fast) done -lemma hypreal_minus_add_distrib: "-(x + (y::hypreal)) = -x + -y" -apply (rule_tac z = "x" in eq_Abs_hypreal) -apply (rule_tac z = "y" in eq_Abs_hypreal) +lemma hypreal_minus_add_distrib [simp]: "-(x + (y::hypreal)) = -x + -y" +apply (rule_tac z = x in eq_Abs_hypreal) +apply (rule_tac z = y in eq_Abs_hypreal) apply (auto simp add: hypreal_minus hypreal_add real_minus_add_distrib) done -declare hypreal_minus_add_distrib [simp] lemma hypreal_minus_distrib1: "-(y + -(x::hypreal)) = x + -y" -apply (simp (no_asm) add: hypreal_add_commute) -done +by (simp add: hypreal_add_commute) lemma hypreal_add_left_cancel: "((x::hypreal) + y = x + z) = (y = z)" -apply (safe) +apply safe apply (drule_tac f = "%t.-x + t" in arg_cong) apply (simp add: hypreal_add_assoc [symmetric]) done lemma hypreal_add_right_cancel: "(y + (x::hypreal)= z + x) = (y = z)" -apply (simp (no_asm) add: hypreal_add_commute hypreal_add_left_cancel) -done +by (simp add: hypreal_add_commute hypreal_add_left_cancel) -lemma hypreal_add_minus_cancelA: "z + ((- z) + w) = (w::hypreal)" -apply (simp (no_asm) add: hypreal_add_assoc [symmetric]) -done +lemma hypreal_add_minus_cancelA [simp]: "z + ((- z) + w) = (w::hypreal)" +by (simp add: hypreal_add_assoc [symmetric]) -lemma hypreal_minus_add_cancelA: "(-z) + (z + w) = (w::hypreal)" -apply (simp (no_asm) add: hypreal_add_assoc [symmetric]) -done - -declare hypreal_add_minus_cancelA [simp] hypreal_minus_add_cancelA [simp] +lemma hypreal_minus_add_cancelA [simp]: "(-z) + (z + w) = (w::hypreal)" +by (simp add: hypreal_add_assoc [symmetric]) (**** hyperreal multiplication: hypreal_mult ****) lemma hypreal_mult_congruent2: "congruent2 hyprel (%X Y. hyprel``{%n. X n * Y n})" -apply (unfold congruent2_def) -apply auto -apply (ultra) +apply (unfold congruent2_def, auto, ultra) done lemma hypreal_mult: @@ -524,16 +465,16 @@ done lemma hypreal_mult_commute: "(z::hypreal) * w = w * z" -apply (rule_tac z = "z" in eq_Abs_hypreal) -apply (rule_tac z = "w" in eq_Abs_hypreal) -apply (simp (no_asm_simp) add: hypreal_mult real_mult_ac) +apply (rule_tac z = z in eq_Abs_hypreal) +apply (rule_tac z = w in eq_Abs_hypreal) +apply (simp add: hypreal_mult real_mult_ac) done lemma hypreal_mult_assoc: "((z1::hypreal) * z2) * z3 = z1 * (z2 * z3)" -apply (rule_tac z = "z1" in eq_Abs_hypreal) -apply (rule_tac z = "z2" in eq_Abs_hypreal) -apply (rule_tac z = "z3" in eq_Abs_hypreal) -apply (simp (no_asm_simp) add: hypreal_mult real_mult_assoc) +apply (rule_tac z = z1 in eq_Abs_hypreal) +apply (rule_tac z = z2 in eq_Abs_hypreal) +apply (rule_tac z = z3 in eq_Abs_hypreal) +apply (simp add: hypreal_mult real_mult_assoc) done lemma hypreal_mult_left_commute: "(z1::hypreal) * (z2 * z3) = z2 * (z1 * z3)" @@ -546,88 +487,74 @@ lemmas hypreal_mult_ac = hypreal_mult_assoc hypreal_mult_commute hypreal_mult_left_commute -lemma hypreal_mult_1: "(1::hypreal) * z = z" +lemma hypreal_mult_1 [simp]: "(1::hypreal) * z = z" apply (unfold hypreal_one_def) -apply (rule_tac z = "z" in eq_Abs_hypreal) +apply (rule_tac z = z in eq_Abs_hypreal) apply (simp add: hypreal_mult) done -declare hypreal_mult_1 [simp] + +lemma hypreal_mult_1_right [simp]: "z * (1::hypreal) = z" +by (simp add: hypreal_mult_commute hypreal_mult_1) -lemma hypreal_mult_1_right: "z * (1::hypreal) = z" -apply (simp (no_asm) add: hypreal_mult_commute hypreal_mult_1) -done -declare hypreal_mult_1_right [simp] - -lemma hypreal_mult_0: "0 * z = (0::hypreal)" +lemma hypreal_mult_0 [simp]: "0 * z = (0::hypreal)" apply (unfold hypreal_zero_def) -apply (rule_tac z = "z" in eq_Abs_hypreal) +apply (rule_tac z = z in eq_Abs_hypreal) apply (simp add: hypreal_mult) done -declare hypreal_mult_0 [simp] -lemma hypreal_mult_0_right: "z * 0 = (0::hypreal)" -apply (simp (no_asm) add: hypreal_mult_commute) -done -declare hypreal_mult_0_right [simp] +lemma hypreal_mult_0_right [simp]: "z * 0 = (0::hypreal)" +by (simp add: hypreal_mult_commute) lemma hypreal_minus_mult_eq1: "-(x * y) = -x * (y::hypreal)" -apply (rule_tac z = "x" in eq_Abs_hypreal) -apply (rule_tac z = "y" in eq_Abs_hypreal) +apply (rule_tac z = x in eq_Abs_hypreal) +apply (rule_tac z = y in eq_Abs_hypreal) apply (auto simp add: hypreal_minus hypreal_mult real_mult_ac real_add_ac) done lemma hypreal_minus_mult_eq2: "-(x * y) = (x::hypreal) * -y" -apply (rule_tac z = "x" in eq_Abs_hypreal) -apply (rule_tac z = "y" in eq_Abs_hypreal) +apply (rule_tac z = x in eq_Abs_hypreal) +apply (rule_tac z = y in eq_Abs_hypreal) apply (auto simp add: hypreal_minus hypreal_mult real_mult_ac real_add_ac) done (*Pull negations out*) -declare hypreal_minus_mult_eq2 [symmetric, simp] hypreal_minus_mult_eq1 [symmetric, simp] +declare hypreal_minus_mult_eq2 [symmetric, simp] + hypreal_minus_mult_eq1 [symmetric, simp] -lemma hypreal_mult_minus_1: "(- (1::hypreal)) * z = -z" -apply (simp (no_asm)) -done -declare hypreal_mult_minus_1 [simp] +lemma hypreal_mult_minus_1 [simp]: "(- (1::hypreal)) * z = -z" +by simp -lemma hypreal_mult_minus_1_right: "z * (- (1::hypreal)) = -z" -apply (subst hypreal_mult_commute) -apply (simp (no_asm)) -done -declare hypreal_mult_minus_1_right [simp] +lemma hypreal_mult_minus_1_right [simp]: "z * (- (1::hypreal)) = -z" +by (subst hypreal_mult_commute, simp) lemma hypreal_minus_mult_commute: "(-x) * y = (x::hypreal) * -y" -apply auto -done +by auto (*----------------------------------------------------------------------------- A few more theorems ----------------------------------------------------------------------------*) lemma hypreal_add_assoc_cong: "(z::hypreal) + v = z' + v' ==> z + (v + w) = z' + (v' + w)" -apply (simp (no_asm_simp) add: hypreal_add_assoc [symmetric]) -done +by (simp add: hypreal_add_assoc [symmetric]) lemma hypreal_add_mult_distrib: "((z1::hypreal) + z2) * w = (z1 * w) + (z2 * w)" -apply (rule_tac z = "z1" in eq_Abs_hypreal) -apply (rule_tac z = "z2" in eq_Abs_hypreal) -apply (rule_tac z = "w" in eq_Abs_hypreal) -apply (simp (no_asm_simp) add: hypreal_mult hypreal_add real_add_mult_distrib) +apply (rule_tac z = z1 in eq_Abs_hypreal) +apply (rule_tac z = z2 in eq_Abs_hypreal) +apply (rule_tac z = w in eq_Abs_hypreal) +apply (simp add: hypreal_mult hypreal_add real_add_mult_distrib) done lemma hypreal_add_mult_distrib2: "(w::hypreal) * (z1 + z2) = (w * z1) + (w * z2)" -apply (simp add: hypreal_mult_commute [of w] hypreal_add_mult_distrib) -done +by (simp add: hypreal_mult_commute [of w] hypreal_add_mult_distrib) lemma hypreal_diff_mult_distrib: "((z1::hypreal) - z2) * w = (z1 * w) - (z2 * w)" apply (unfold hypreal_diff_def) -apply (simp (no_asm) add: hypreal_add_mult_distrib) +apply (simp add: hypreal_add_mult_distrib) done lemma hypreal_diff_mult_distrib2: "(w::hypreal) * (z1 - z2) = (w * z1) - (w * z2)" -apply (simp add: hypreal_mult_commute [of w] hypreal_diff_mult_distrib) -done +by (simp add: hypreal_mult_commute [of w] hypreal_diff_mult_distrib) (*** one and zero are distinct ***) lemma hypreal_zero_not_eq_one: "0 \ (1::hypreal)" @@ -641,55 +568,49 @@ lemma hypreal_inverse_congruent: "congruent hyprel (%X. hyprel``{%n. if X n = 0 then 0 else inverse(X n)})" apply (unfold congruent_def) -apply (auto , ultra) +apply (auto, ultra) done lemma hypreal_inverse: "inverse (Abs_hypreal(hyprel``{%n. X n})) = Abs_hypreal(hyprel `` {%n. if X n = 0 then 0 else inverse(X n)})" apply (unfold hypreal_inverse_def) -apply (rule_tac f = "Abs_hypreal" in arg_cong) -apply (simp (no_asm) add: hyprel_in_hypreal [THEN Abs_hypreal_inverse] +apply (rule_tac f = Abs_hypreal in arg_cong) +apply (simp add: hyprel_in_hypreal [THEN Abs_hypreal_inverse] UN_equiv_class [OF equiv_hyprel hypreal_inverse_congruent]) done lemma HYPREAL_INVERSE_ZERO: "inverse 0 = (0::hypreal)" -apply (simp (no_asm) add: hypreal_inverse hypreal_zero_def) -done +by (simp add: hypreal_inverse hypreal_zero_def) lemma HYPREAL_DIVISION_BY_ZERO: "a / (0::hypreal) = 0" -apply (simp (no_asm) add: hypreal_divide_def HYPREAL_INVERSE_ZERO) +by (simp add: hypreal_divide_def HYPREAL_INVERSE_ZERO) + +lemma hypreal_inverse_inverse [simp]: "inverse (inverse (z::hypreal)) = z" +apply (case_tac "z=0", simp add: HYPREAL_INVERSE_ZERO) +apply (rule_tac z = z in eq_Abs_hypreal) +apply (simp add: hypreal_inverse hypreal_zero_def) done -lemma hypreal_inverse_inverse: "inverse (inverse (z::hypreal)) = z" -apply (case_tac "z=0", simp add: HYPREAL_INVERSE_ZERO) -apply (rule_tac z = "z" in eq_Abs_hypreal) -apply (simp add: hypreal_inverse hypreal_zero_def) +lemma hypreal_inverse_1 [simp]: "inverse((1::hypreal)) = (1::hypreal)" +apply (unfold hypreal_one_def) +apply (simp add: hypreal_inverse real_zero_not_eq_one [THEN not_sym]) done -declare hypreal_inverse_inverse [simp] - -lemma hypreal_inverse_1: "inverse((1::hypreal)) = (1::hypreal)" -apply (unfold hypreal_one_def) -apply (simp (no_asm_use) add: hypreal_inverse real_zero_not_eq_one [THEN not_sym]) -done -declare hypreal_inverse_1 [simp] (*** existence of inverse ***) -lemma hypreal_mult_inverse: +lemma hypreal_mult_inverse [simp]: "x \ 0 ==> x*inverse(x) = (1::hypreal)" - apply (unfold hypreal_one_def hypreal_zero_def) -apply (rule_tac z = "x" in eq_Abs_hypreal) +apply (rule_tac z = x in eq_Abs_hypreal) apply (simp add: hypreal_inverse hypreal_mult) apply (drule FreeUltrafilterNat_Compl_mem) apply (blast intro!: real_mult_inv_right FreeUltrafilterNat_subset) done -lemma hypreal_mult_inverse_left: "x \ 0 ==> inverse(x)*x = (1::hypreal)" -apply (simp (no_asm_simp) add: hypreal_mult_inverse hypreal_mult_commute) -done +lemma hypreal_mult_inverse_left [simp]: "x \ 0 ==> inverse(x)*x = (1::hypreal)" +by (simp add: hypreal_mult_inverse hypreal_mult_commute) lemma hypreal_mult_left_cancel: "(c::hypreal) \ 0 ==> (c*a=c*b) = (a=b)" apply auto @@ -698,46 +619,42 @@ done lemma hypreal_mult_right_cancel: "(c::hypreal) \ 0 ==> (a*c=b*c) = (a=b)" -apply (safe) +apply safe apply (drule_tac f = "%x. x*inverse c" in arg_cong) apply (simp add: hypreal_mult_inverse hypreal_mult_ac) done lemma hypreal_inverse_not_zero: "x \ 0 ==> inverse (x::hypreal) \ 0" apply (unfold hypreal_zero_def) -apply (rule_tac z = "x" in eq_Abs_hypreal) +apply (rule_tac z = x in eq_Abs_hypreal) apply (simp add: hypreal_inverse hypreal_mult) done -declare hypreal_mult_inverse [simp] hypreal_mult_inverse_left [simp] lemma hypreal_mult_not_0: "[| x \ 0; y \ 0 |] ==> x * y \ (0::hypreal)" -apply (safe) +apply safe apply (drule_tac f = "%z. inverse x*z" in arg_cong) apply (simp add: hypreal_mult_assoc [symmetric]) done lemma hypreal_mult_zero_disj: "x*y = (0::hypreal) ==> x = 0 | y = 0" -apply (auto intro: ccontr dest: hypreal_mult_not_0) -done +by (auto intro: ccontr dest: hypreal_mult_not_0) lemma hypreal_minus_inverse: "inverse(-x) = -inverse(x::hypreal)" apply (case_tac "x=0", simp add: HYPREAL_INVERSE_ZERO) -apply (rule hypreal_mult_right_cancel [of "-x", THEN iffD1]) -apply (simp add: ); -apply (subst hypreal_mult_inverse_left) -apply auto +apply (rule hypreal_mult_right_cancel [of "-x", THEN iffD1], simp) +apply (subst hypreal_mult_inverse_left, auto) done lemma hypreal_inverse_distrib: "inverse(x*y) = inverse(x)*inverse(y::hypreal)" apply (case_tac "x=0", simp add: HYPREAL_INVERSE_ZERO) apply (case_tac "y=0", simp add: HYPREAL_INVERSE_ZERO) -apply (frule_tac y = "y" in hypreal_mult_not_0 , assumption) -apply (rule_tac c1 = "x" in hypreal_mult_left_cancel [THEN iffD1]) +apply (frule_tac y = y in hypreal_mult_not_0, assumption) +apply (rule_tac c1 = x in hypreal_mult_left_cancel [THEN iffD1]) apply (auto simp add: hypreal_mult_assoc [symmetric]) -apply (rule_tac c1 = "y" in hypreal_mult_left_cancel [THEN iffD1]) +apply (rule_tac c1 = y in hypreal_mult_left_cancel [THEN iffD1]) apply (auto simp add: hypreal_mult_left_commute) -apply (simp (no_asm_simp) add: hypreal_mult_assoc [symmetric]) +apply (simp add: hypreal_mult_assoc [symmetric]) done (*------------------------------------------------------------------ @@ -751,16 +668,14 @@ Y \ Rep_hypreal(Q) & {n. X n < Y n} \ FreeUltrafilterNat)" -apply (unfold hypreal_less_def) -apply fast +apply (unfold hypreal_less_def, fast) done lemma hypreal_lessI: "[| {n. X n < Y n} \ FreeUltrafilterNat; X \ Rep_hypreal(P); Y \ Rep_hypreal(Q) |] ==> P < (Q::hypreal)" -apply (unfold hypreal_less_def) -apply fast +apply (unfold hypreal_less_def, fast) done @@ -771,22 +686,19 @@ !!Y. Y \ Rep_hypreal(R2) ==> P |] ==> P" -apply (unfold hypreal_less_def) -apply auto +apply (unfold hypreal_less_def, auto) done lemma hypreal_lessD: "R1 < (R2::hypreal) ==> (\X Y. {n. X n < Y n} \ FreeUltrafilterNat & X \ Rep_hypreal(R1) & Y \ Rep_hypreal(R2))" -apply (unfold hypreal_less_def) -apply fast +apply (unfold hypreal_less_def, fast) done lemma hypreal_less_not_refl: "~ (R::hypreal) < R" -apply (rule_tac z = "R" in eq_Abs_hypreal) -apply (auto simp add: hypreal_less_def) -apply (ultra) +apply (rule_tac z = R in eq_Abs_hypreal) +apply (auto simp add: hypreal_less_def, ultra) done (*** y < y ==> P ***) @@ -794,19 +706,17 @@ declare hypreal_less_irrefl [elim!] lemma hypreal_not_refl2: "!!(x::hypreal). x < y ==> x \ y" -apply (auto simp add: hypreal_less_not_refl) -done +by (auto simp add: hypreal_less_not_refl) lemma hypreal_less_trans: "!!(R1::hypreal). [| R1 < R2; R2 < R3 |] ==> R1 < R3" -apply (rule_tac z = "R1" in eq_Abs_hypreal) -apply (rule_tac z = "R2" in eq_Abs_hypreal) -apply (rule_tac z = "R3" in eq_Abs_hypreal) -apply (auto intro!: exI simp add: hypreal_less_def) -apply ultra +apply (rule_tac z = R1 in eq_Abs_hypreal) +apply (rule_tac z = R2 in eq_Abs_hypreal) +apply (rule_tac z = R3 in eq_Abs_hypreal) +apply (auto intro!: exI simp add: hypreal_less_def, ultra) done lemma hypreal_less_asym: "!! (R1::hypreal). [| R1 < R2; R2 < R1 |] ==> P" -apply (drule hypreal_less_trans , assumption) +apply (drule hypreal_less_trans, assumption) apply (simp add: hypreal_less_not_refl) done @@ -820,8 +730,7 @@ Abs_hypreal(hyprel``{%n. Y n})) = ({n. X n < Y n} \ FreeUltrafilterNat)" apply (unfold hypreal_less_def) -apply (auto intro!: lemma_hyprel_refl) -apply (ultra) +apply (auto intro!: lemma_hyprel_refl, ultra) done (*---------------------------------------------------------------------------- @@ -831,32 +740,27 @@ lemma lemma_hyprel_0_mem: "\x. x: hyprel `` {%n. 0}" apply (unfold hyprel_def) -apply (rule_tac x = "%n. 0" in exI) -apply (safe) +apply (rule_tac x = "%n. 0" in exI, safe) apply (auto intro!: FreeUltrafilterNat_Nat_set) done lemma hypreal_trichotomy: "0 < x | x = 0 | x < (0::hypreal)" apply (unfold hypreal_zero_def) -apply (rule_tac z = "x" in eq_Abs_hypreal) +apply (rule_tac z = x in eq_Abs_hypreal) apply (auto simp add: hypreal_less_def) -apply (cut_tac lemma_hyprel_0_mem , erule exE) -apply (drule_tac x = "xa" in spec) -apply (drule_tac x = "x" in spec) -apply (cut_tac x = "x" in lemma_hyprel_refl) -apply auto -apply (drule_tac x = "x" in spec) -apply (drule_tac x = "xa" in spec) -apply auto -apply (ultra) +apply (cut_tac lemma_hyprel_0_mem, erule exE) +apply (drule_tac x = xa in spec) +apply (drule_tac x = x in spec) +apply (cut_tac x = x in lemma_hyprel_refl, auto) +apply (drule_tac x = x in spec) +apply (drule_tac x = xa in spec, auto, ultra) done lemma hypreal_trichotomyE: "[| (0::hypreal) < x ==> P; x = 0 ==> P; x < 0 ==> P |] ==> P" -apply (insert hypreal_trichotomy [of x]) -apply (blast intro: elim:); +apply (insert hypreal_trichotomy [of x], blast) done (*---------------------------------------------------------------------------- @@ -864,72 +768,59 @@ ----------------------------------------------------------------------------*) lemma hypreal_less_minus_iff: "((x::hypreal) < y) = (0 < y + -x)" -apply (rule_tac z = "x" in eq_Abs_hypreal) -apply (rule_tac z = "y" in eq_Abs_hypreal) +apply (rule_tac z = x in eq_Abs_hypreal) +apply (rule_tac z = y in eq_Abs_hypreal) apply (auto simp add: hypreal_add hypreal_zero_def hypreal_minus hypreal_less) done lemma hypreal_less_minus_iff2: "((x::hypreal) < y) = (x + -y < 0)" -apply (rule_tac z = "x" in eq_Abs_hypreal) -apply (rule_tac z = "y" in eq_Abs_hypreal) +apply (rule_tac z = x in eq_Abs_hypreal) +apply (rule_tac z = y in eq_Abs_hypreal) apply (auto simp add: hypreal_add hypreal_zero_def hypreal_minus hypreal_less) done lemma hypreal_eq_minus_iff: "((x::hypreal) = y) = (x + - y = 0)" apply auto -apply (rule_tac x1 = "-y" in hypreal_add_right_cancel [THEN iffD1]) -apply auto +apply (rule_tac x1 = "-y" in hypreal_add_right_cancel [THEN iffD1], auto) done lemma hypreal_eq_minus_iff2: "((x::hypreal) = y) = (0 = y + - x)" apply auto -apply (rule_tac x1 = "-x" in hypreal_add_right_cancel [THEN iffD1]) -apply auto +apply (rule_tac x1 = "-x" in hypreal_add_right_cancel [THEN iffD1], auto) done (* 07/00 *) -lemma hypreal_diff_zero: "(0::hypreal) - x = -x" -apply (simp (no_asm) add: hypreal_diff_def) -done +lemma hypreal_diff_zero [simp]: "(0::hypreal) - x = -x" +by (simp add: hypreal_diff_def) -lemma hypreal_diff_zero_right: "x - (0::hypreal) = x" -apply (simp (no_asm) add: hypreal_diff_def) -done +lemma hypreal_diff_zero_right [simp]: "x - (0::hypreal) = x" +by (simp add: hypreal_diff_def) -lemma hypreal_diff_self: "x - x = (0::hypreal)" -apply (simp (no_asm) add: hypreal_diff_def) -done - -declare hypreal_diff_zero [simp] hypreal_diff_zero_right [simp] hypreal_diff_self [simp] +lemma hypreal_diff_self [simp]: "x - x = (0::hypreal)" +by (simp add: hypreal_diff_def) lemma hypreal_eq_minus_iff3: "(x = y + z) = (x + -z = (y::hypreal))" -apply (auto simp add: hypreal_add_assoc) -done +by (auto simp add: hypreal_add_assoc) lemma hypreal_not_eq_minus_iff: "(x \ a) = (x + -a \ (0::hypreal))" -apply (auto dest: hypreal_eq_minus_iff [THEN iffD2]) -done +by (auto dest: hypreal_eq_minus_iff [THEN iffD2]) (*** linearity ***) lemma hypreal_linear: "(x::hypreal) < y | x = y | y < x" apply (subst hypreal_eq_minus_iff2) -apply (rule_tac x1 = "x" in hypreal_less_minus_iff [THEN ssubst]) -apply (rule_tac x1 = "y" in hypreal_less_minus_iff2 [THEN ssubst]) -apply (rule hypreal_trichotomyE) -apply auto +apply (rule_tac x1 = x in hypreal_less_minus_iff [THEN ssubst]) +apply (rule_tac x1 = y in hypreal_less_minus_iff2 [THEN ssubst]) +apply (rule hypreal_trichotomyE, auto) done lemma hypreal_neq_iff: "((w::hypreal) \ z) = (w P; x = y ==> P; y < x ==> P |] ==> P" -apply (cut_tac x = "x" and y = "y" in hypreal_linear) -apply auto +apply (cut_tac x = x and y = y in hypreal_linear, auto) done (*------------------------------------------------------------------------------ @@ -950,24 +841,19 @@ (*---------------------------------------------------------*) lemma hypreal_leI: "~(w < z) ==> z <= (w::hypreal)" -apply (unfold hypreal_le_def) -apply assumption +apply (unfold hypreal_le_def, assumption) done lemma hypreal_leD: "z<=w ==> ~(w<(z::hypreal))" -apply (unfold hypreal_le_def) -apply assumption +apply (unfold hypreal_le_def, assumption) done lemma hypreal_less_le_iff: "(~(w < z)) = (z <= (w::hypreal))" -apply (fast intro!: hypreal_leI hypreal_leD) -done +by (fast intro!: hypreal_leI hypreal_leD) lemma not_hypreal_leE: "~ z <= w ==> w<(z::hypreal)" -apply (unfold hypreal_le_def) -apply fast -done +by (unfold hypreal_le_def, fast) lemma hypreal_le_imp_less_or_eq: "!!(x::hypreal). x <= y ==> x < y | x = y" apply (unfold hypreal_le_def) @@ -987,14 +873,12 @@ lemmas hypreal_le_less = hypreal_le_eq_less_or_eq lemma hypreal_le_refl: "w <= (w::hypreal)" -apply (simp (no_asm) add: hypreal_le_eq_less_or_eq) -done +by (simp add: hypreal_le_eq_less_or_eq) (* Axiom 'linorder_linear' of class 'linorder': *) lemma hypreal_le_linear: "(z::hypreal) <= w | w <= z" -apply (simp (no_asm) add: hypreal_le_less) -apply (cut_tac hypreal_linear) -apply blast +apply (simp add: hypreal_le_less) +apply (cut_tac hypreal_linear, blast) done lemma hypreal_le_trans: "[| i <= j; j <= k |] ==> i <= (k::hypreal)" @@ -1017,158 +901,119 @@ (* Axiom 'order_less_le' of class 'order': *) lemma hypreal_less_le: "((w::hypreal) < z) = (w <= z & w \ z)" -apply (simp (no_asm) add: hypreal_le_def hypreal_neq_iff) +apply (simp add: hypreal_le_def hypreal_neq_iff) apply (blast intro: hypreal_less_asym) done -lemma hypreal_minus_zero_less_iff: "(0 < -R) = (R < (0::hypreal))" -apply (rule_tac z = "R" in eq_Abs_hypreal) +lemma hypreal_minus_zero_less_iff [simp]: "(0 < -R) = (R < (0::hypreal))" +apply (rule_tac z = R in eq_Abs_hypreal) apply (auto simp add: hypreal_zero_def hypreal_less hypreal_minus) done -declare hypreal_minus_zero_less_iff [simp] -lemma hypreal_minus_zero_less_iff2: "(-R < 0) = ((0::hypreal) < R)" -apply (rule_tac z = "R" in eq_Abs_hypreal) +lemma hypreal_minus_zero_less_iff2 [simp]: "(-R < 0) = ((0::hypreal) < R)" +apply (rule_tac z = R in eq_Abs_hypreal) apply (auto simp add: hypreal_zero_def hypreal_less hypreal_minus) done -declare hypreal_minus_zero_less_iff2 [simp] -lemma hypreal_minus_zero_le_iff: "((0::hypreal) <= -r) = (r <= 0)" +lemma hypreal_minus_zero_le_iff [simp]: "((0::hypreal) <= -r) = (r <= 0)" apply (unfold hypreal_le_def) -apply (simp (no_asm) add: hypreal_minus_zero_less_iff2) +apply (simp add: hypreal_minus_zero_less_iff2) done -declare hypreal_minus_zero_le_iff [simp] -lemma hypreal_minus_zero_le_iff2: "(-r <= (0::hypreal)) = (0 <= r)" +lemma hypreal_minus_zero_le_iff2 [simp]: "(-r <= (0::hypreal)) = (0 <= r)" apply (unfold hypreal_le_def) -apply (simp (no_asm) add: hypreal_minus_zero_less_iff2) +apply (simp add: hypreal_minus_zero_less_iff2) done -declare hypreal_minus_zero_le_iff2 [simp] (*---------------------------------------------------------- hypreal_of_real preserves field and order properties -----------------------------------------------------------*) -lemma hypreal_of_real_add: +lemma hypreal_of_real_add [simp]: "hypreal_of_real (z1 + z2) = hypreal_of_real z1 + hypreal_of_real z2" apply (unfold hypreal_of_real_def) -apply (simp (no_asm) add: hypreal_add hypreal_add_mult_distrib) +apply (simp add: hypreal_add hypreal_add_mult_distrib) done -declare hypreal_of_real_add [simp] -lemma hypreal_of_real_mult: +lemma hypreal_of_real_mult [simp]: "hypreal_of_real (z1 * z2) = hypreal_of_real z1 * hypreal_of_real z2" apply (unfold hypreal_of_real_def) -apply (simp (no_asm) add: hypreal_mult hypreal_add_mult_distrib2) +apply (simp add: hypreal_mult hypreal_add_mult_distrib2) done -declare hypreal_of_real_mult [simp] -lemma hypreal_of_real_less_iff: +lemma hypreal_of_real_less_iff [simp]: "(hypreal_of_real z1 < hypreal_of_real z2) = (z1 < z2)" -apply (unfold hypreal_less_def hypreal_of_real_def) -apply auto -apply (rule_tac [2] x = "%n. z1" in exI) -apply (safe) -apply (rule_tac [3] x = "%n. z2" in exI) -apply auto -apply (rule FreeUltrafilterNat_P) -apply (ultra) +apply (unfold hypreal_less_def hypreal_of_real_def, auto) +apply (rule_tac [2] x = "%n. z1" in exI, safe) +apply (rule_tac [3] x = "%n. z2" in exI, auto) +apply (rule FreeUltrafilterNat_P, ultra) done -declare hypreal_of_real_less_iff [simp] -lemma hypreal_of_real_le_iff: +lemma hypreal_of_real_le_iff [simp]: "(hypreal_of_real z1 <= hypreal_of_real z2) = (z1 <= z2)" -apply (unfold hypreal_le_def real_le_def) -apply auto +apply (unfold hypreal_le_def real_le_def, auto) done -declare hypreal_of_real_le_iff [simp] -lemma hypreal_of_real_eq_iff: "(hypreal_of_real z1 = hypreal_of_real z2) = (z1 = z2)" -apply (force intro: order_antisym hypreal_of_real_le_iff [THEN iffD1]) -done -declare hypreal_of_real_eq_iff [simp] +lemma hypreal_of_real_eq_iff [simp]: "(hypreal_of_real z1 = hypreal_of_real z2) = (z1 = z2)" +by (force intro: order_antisym hypreal_of_real_le_iff [THEN iffD1]) -lemma hypreal_of_real_minus: "hypreal_of_real (-r) = - hypreal_of_real r" +lemma hypreal_of_real_minus [simp]: "hypreal_of_real (-r) = - hypreal_of_real r" apply (unfold hypreal_of_real_def) apply (auto simp add: hypreal_minus) done -declare hypreal_of_real_minus [simp] -lemma hypreal_of_real_one: "hypreal_of_real 1 = (1::hypreal)" -apply (unfold hypreal_of_real_def hypreal_one_def) -apply (simp (no_asm)) -done -declare hypreal_of_real_one [simp] +lemma hypreal_of_real_one [simp]: "hypreal_of_real 1 = (1::hypreal)" +by (unfold hypreal_of_real_def hypreal_one_def, simp) -lemma hypreal_of_real_zero: "hypreal_of_real 0 = 0" -apply (unfold hypreal_of_real_def hypreal_zero_def) -apply (simp (no_asm)) -done -declare hypreal_of_real_zero [simp] +lemma hypreal_of_real_zero [simp]: "hypreal_of_real 0 = 0" +by (unfold hypreal_of_real_def hypreal_zero_def, simp) lemma hypreal_of_real_zero_iff: "(hypreal_of_real r = 0) = (r = 0)" -apply (auto intro: FreeUltrafilterNat_P simp add: hypreal_of_real_def hypreal_zero_def FreeUltrafilterNat_Nat_set) -done +by (auto intro: FreeUltrafilterNat_P simp add: hypreal_of_real_def hypreal_zero_def FreeUltrafilterNat_Nat_set) -lemma hypreal_of_real_inverse: "hypreal_of_real (inverse r) = inverse (hypreal_of_real r)" +lemma hypreal_of_real_inverse [simp]: "hypreal_of_real (inverse r) = inverse (hypreal_of_real r)" apply (case_tac "r=0") -apply (simp (no_asm_simp) add: DIVISION_BY_ZERO INVERSE_ZERO HYPREAL_INVERSE_ZERO) +apply (simp add: DIVISION_BY_ZERO INVERSE_ZERO HYPREAL_INVERSE_ZERO) apply (rule_tac c1 = "hypreal_of_real r" in hypreal_mult_left_cancel [THEN iffD1]) apply (auto simp add: hypreal_of_real_zero_iff hypreal_of_real_mult [symmetric]) done -declare hypreal_of_real_inverse [simp] -lemma hypreal_of_real_divide: "hypreal_of_real (z1 / z2) = hypreal_of_real z1 / hypreal_of_real z2" -apply (simp (no_asm) add: hypreal_divide_def real_divide_def) -done -declare hypreal_of_real_divide [simp] +lemma hypreal_of_real_divide [simp]: "hypreal_of_real (z1 / z2) = hypreal_of_real z1 / hypreal_of_real z2" +by (simp add: hypreal_divide_def real_divide_def) (*** Division lemmas ***) lemma hypreal_zero_divide: "(0::hypreal)/x = 0" -apply (simp (no_asm) add: hypreal_divide_def) -done +by (simp add: hypreal_divide_def) lemma hypreal_divide_one: "x/(1::hypreal) = x" -apply (simp (no_asm) add: hypreal_divide_def) -done +by (simp add: hypreal_divide_def) declare hypreal_zero_divide [simp] hypreal_divide_one [simp] -lemma hypreal_times_divide1_eq: "(x::hypreal) * (y/z) = (x*y)/z" -apply (simp (no_asm) add: hypreal_divide_def hypreal_mult_assoc) -done +lemma hypreal_times_divide1_eq [simp]: "(x::hypreal) * (y/z) = (x*y)/z" +by (simp add: hypreal_divide_def hypreal_mult_assoc) -lemma hypreal_times_divide2_eq: "(y/z) * (x::hypreal) = (y*x)/z" -apply (simp (no_asm) add: hypreal_divide_def hypreal_mult_ac) -done +lemma hypreal_times_divide2_eq [simp]: "(y/z) * (x::hypreal) = (y*x)/z" +by (simp add: hypreal_divide_def hypreal_mult_ac) -declare hypreal_times_divide1_eq [simp] hypreal_times_divide2_eq [simp] -lemma hypreal_divide_divide1_eq: "(x::hypreal) / (y/z) = (x*z)/y" -apply (simp (no_asm) add: hypreal_divide_def hypreal_inverse_distrib hypreal_mult_ac) -done +lemma hypreal_divide_divide1_eq [simp]: "(x::hypreal) / (y/z) = (x*z)/y" +by (simp add: hypreal_divide_def hypreal_inverse_distrib hypreal_mult_ac) -lemma hypreal_divide_divide2_eq: "((x::hypreal) / y) / z = x/(y*z)" -apply (simp (no_asm) add: hypreal_divide_def hypreal_inverse_distrib hypreal_mult_assoc) -done +lemma hypreal_divide_divide2_eq [simp]: "((x::hypreal) / y) / z = x/(y*z)" +by (simp add: hypreal_divide_def hypreal_inverse_distrib hypreal_mult_assoc) -declare hypreal_divide_divide1_eq [simp] hypreal_divide_divide2_eq [simp] (** As with multiplication, pull minus signs OUT of the / operator **) -lemma hypreal_minus_divide_eq: "(-x) / (y::hypreal) = - (x/y)" -apply (simp (no_asm) add: hypreal_divide_def) -done -declare hypreal_minus_divide_eq [simp] +lemma hypreal_minus_divide_eq [simp]: "(-x) / (y::hypreal) = - (x/y)" +by (simp add: hypreal_divide_def) -lemma hypreal_divide_minus_eq: "(x / -(y::hypreal)) = - (x/y)" -apply (simp (no_asm) add: hypreal_divide_def hypreal_minus_inverse) -done -declare hypreal_divide_minus_eq [simp] +lemma hypreal_divide_minus_eq [simp]: "(x / -(y::hypreal)) = - (x/y)" +by (simp add: hypreal_divide_def hypreal_minus_inverse) lemma hypreal_add_divide_distrib: "(x+y)/(z::hypreal) = x/z + y/z" -apply (simp (no_asm) add: hypreal_divide_def hypreal_add_mult_distrib) -done +by (simp add: hypreal_divide_def hypreal_add_mult_distrib) lemma hypreal_inverse_add: "[|(x::hypreal) \ 0; y \ 0 |] ==> inverse(x) + inverse(y) = (x + y)*inverse(x*y)" @@ -1179,37 +1024,29 @@ done lemma hypreal_self_eq_minus_self_zero: "x = -x ==> x = (0::hypreal)" -apply (rule_tac z = "x" in eq_Abs_hypreal) -apply (auto simp add: hypreal_minus hypreal_zero_def) -apply (ultra) +apply (rule_tac z = x in eq_Abs_hypreal) +apply (auto simp add: hypreal_minus hypreal_zero_def, ultra) done -lemma hypreal_add_self_zero_cancel: "(x + x = 0) = (x = (0::hypreal))" -apply (rule_tac z = "x" in eq_Abs_hypreal) +lemma hypreal_add_self_zero_cancel [simp]: "(x + x = 0) = (x = (0::hypreal))" +apply (rule_tac z = x in eq_Abs_hypreal) apply (auto simp add: hypreal_add hypreal_zero_def) done -declare hypreal_add_self_zero_cancel [simp] -lemma hypreal_add_self_zero_cancel2: "(x + x + y = y) = (x = (0::hypreal))" +lemma hypreal_add_self_zero_cancel2 [simp]: "(x + x + y = y) = (x = (0::hypreal))" apply auto apply (drule hypreal_eq_minus_iff [THEN iffD1]) apply (auto simp add: hypreal_add_assoc hypreal_self_eq_minus_self_zero) done -declare hypreal_add_self_zero_cancel2 [simp] -lemma hypreal_add_self_zero_cancel2a: "(x + (x + y) = y) = (x = (0::hypreal))" -apply (simp (no_asm) add: hypreal_add_assoc [symmetric]) -done -declare hypreal_add_self_zero_cancel2a [simp] +lemma hypreal_add_self_zero_cancel2a [simp]: "(x + (x + y) = y) = (x = (0::hypreal))" +by (simp add: hypreal_add_assoc [symmetric]) lemma hypreal_minus_eq_swap: "(b = -a) = (-b = (a::hypreal))" -apply auto -done +by auto -lemma hypreal_minus_eq_cancel: "(-b = -a) = (b = (a::hypreal))" -apply (simp add: hypreal_minus_eq_swap) -done -declare hypreal_minus_eq_cancel [simp] +lemma hypreal_minus_eq_cancel [simp]: "(-b = -a) = (b = (a::hypreal))" +by (simp add: hypreal_minus_eq_swap) lemma hypreal_less_eq_diff: "(x (x (y<=x) = (y'<=x')" apply (drule hypreal_less_eqI) -apply (simp (no_asm_simp) add: hypreal_le_def) +apply (simp add: hypreal_le_def) done lemma hypreal_eq_eqI: "(x::hypreal) - y = x' - y' ==> (x=y) = (x'=y')" @@ -1287,18 +1119,15 @@ done lemma hypreal_zero_num: "0 = Abs_hypreal (hyprel `` {%n. 0})" -apply (simp (no_asm) add: hypreal_zero_def [THEN meta_eq_to_obj_eq, symmetric]) -done +by (simp add: hypreal_zero_def [THEN meta_eq_to_obj_eq, symmetric]) lemma hypreal_one_num: "1 = Abs_hypreal (hyprel `` {%n. 1})" -apply (simp (no_asm) add: hypreal_one_def [THEN meta_eq_to_obj_eq, symmetric]) -done +by (simp add: hypreal_one_def [THEN meta_eq_to_obj_eq, symmetric]) -lemma hypreal_omega_gt_zero: "0 < omega" +lemma hypreal_omega_gt_zero [simp]: "0 < omega" apply (unfold omega_def) apply (auto simp add: hypreal_less hypreal_zero_num) done -declare hypreal_omega_gt_zero [simp] ML {*