# HG changeset patch # User haftmann # Date 1272023895 -7200 # Node ID 4e7f5b22dd7dcfae6daf3fe7d75828717473147a # Parent 72f4d079ebf82b1fa8555cd0370916af73eaef9d more localization; tuned proofs diff -r 72f4d079ebf8 -r 4e7f5b22dd7d src/HOL/Groups.thy --- a/src/HOL/Groups.thy Fri Apr 23 13:58:14 2010 +0200 +++ b/src/HOL/Groups.thy Fri Apr 23 13:58:15 2010 +0200 @@ -757,7 +757,7 @@ done lemma less_diff_eq[algebra_simps]: "a < c - b \ a + b < c" -apply (subst less_iff_diff_less_0 [of "plus a b"]) +apply (subst less_iff_diff_less_0 [of "a + b"]) apply (subst less_iff_diff_less_0 [of a]) apply (simp add: diff_minus add_ac) done @@ -966,27 +966,26 @@ end --- {* FIXME localize the following *} +context ordered_comm_monoid_add +begin lemma add_increasing: - fixes c :: "'a::{ordered_ab_semigroup_add_imp_le, comm_monoid_add}" - shows "[|0\a; b\c|] ==> b \ a + c" -by (insert add_mono [of 0 a b c], simp) + "0 \ a \ b \ c \ b \ a + c" + by (insert add_mono [of 0 a b c], simp) lemma add_increasing2: - fixes c :: "'a::{ordered_ab_semigroup_add_imp_le, comm_monoid_add}" - shows "[|0\c; b\a|] ==> b \ a + c" -by (simp add:add_increasing add_commute[of a]) + "0 \ c \ b \ a \ b \ a + c" + by (simp add: add_increasing add_commute [of a]) lemma add_strict_increasing: - fixes c :: "'a::{ordered_ab_semigroup_add_imp_le, comm_monoid_add}" - shows "[|0c|] ==> b < a + c" -by (insert add_less_le_mono [of 0 a b c], simp) + "0 < a \ b \ c \ b < a + c" + by (insert add_less_le_mono [of 0 a b c], simp) lemma add_strict_increasing2: - fixes c :: "'a::{ordered_ab_semigroup_add_imp_le, comm_monoid_add}" - shows "[|0\a; b b < a + c" -by (insert add_le_less_mono [of 0 a b c], simp) + "0 \ a \ b < c \ b < a + c" + by (insert add_le_less_mono [of 0 a b c], simp) + +end class abs = fixes abs :: "'a \ 'a" @@ -1036,7 +1035,7 @@ lemma abs_idempotent [simp]: "\\a\\ = \a\" by (rule antisym) - (auto intro!: abs_ge_self abs_leI order_trans [of "uminus (abs a)" zero "abs a"]) + (auto intro!: abs_ge_self abs_leI order_trans [of "- \a\" 0 "\a\"]) lemma abs_eq_0 [simp]: "\a\ = 0 \ a = 0" proof - @@ -1045,7 +1044,7 @@ assume zero: "\a\ = 0" with abs_ge_self show "a \ 0" by auto from zero have "\-a\ = 0" by simp - with abs_ge_self [of "uminus a"] have "- a \ 0" by auto + with abs_ge_self [of "- a"] have "- a \ 0" by auto with neg_le_0_iff_le show "0 \ a" by auto qed then show ?thesis by auto @@ -1114,32 +1113,31 @@ by (insert abs_ge_self, blast intro: order_trans) lemma abs_le_D2: "\a\ \ b \ - a \ b" -by (insert abs_le_D1 [of "uminus a"], simp) +by (insert abs_le_D1 [of "- a"], simp) lemma abs_le_iff: "\a\ \ b \ a \ b \ - a \ b" by (blast intro: abs_leI dest: abs_le_D1 abs_le_D2) lemma abs_triangle_ineq2: "\a\ - \b\ \ \a - b\" - apply (simp add: algebra_simps) - apply (subgoal_tac "abs a = abs (plus b (minus a b))") - apply (erule ssubst) - apply (rule abs_triangle_ineq) - apply (rule arg_cong[of _ _ abs]) - apply (simp add: algebra_simps) -done +proof - + have "\a\ = \b + (a - b)\" + by (simp add: algebra_simps add_diff_cancel) + then have "\a\ \ \b\ + \a - b\" + by (simp add: abs_triangle_ineq) + then show ?thesis + by (simp add: algebra_simps) +qed + +lemma abs_triangle_ineq2_sym: "\a\ - \b\ \ \b - a\" + by (simp only: abs_minus_commute [of b] abs_triangle_ineq2) lemma abs_triangle_ineq3: "\\a\ - \b\\ \ \a - b\" - apply (subst abs_le_iff) - apply auto - apply (rule abs_triangle_ineq2) - apply (subst abs_minus_commute) - apply (rule abs_triangle_ineq2) -done + by (simp add: abs_le_iff abs_triangle_ineq2 abs_triangle_ineq2_sym) lemma abs_triangle_ineq4: "\a - b\ \ \a\ + \b\" proof - - have "abs(a - b) = abs(a + - b)" by (subst diff_minus, rule refl) - also have "... <= abs a + abs (- b)" by (rule abs_triangle_ineq) + have "\a - b\ = \a + - b\" by (subst diff_minus, rule refl) + also have "... \ \a\ + \- b\" by (rule abs_triangle_ineq) finally show ?thesis by simp qed