src/HOL/OrderedGroup.thy
changeset 22390 378f34b1e380
parent 21382 d71aed9286d3
child 22422 ee19cdb07528
--- a/src/HOL/OrderedGroup.thy	Fri Mar 02 15:43:20 2007 +0100
+++ b/src/HOL/OrderedGroup.thy	Fri Mar 02 15:43:21 2007 +0100
@@ -25,73 +25,71 @@
 *}
 
 subsection {* Semigroups, Groups *}
- 
-axclass semigroup_add \<subseteq> plus
-  add_assoc: "(a + b) + c = a + (b + c)"
 
-axclass ab_semigroup_add \<subseteq> semigroup_add
-  add_commute: "a + b = b + a"
+class semigroup_add = plus +
+  assumes add_assoc: "(a \<^loc>+ b) \<^loc>+ c = a \<^loc>+ (b \<^loc>+ c)"
+
+class ab_semigroup_add = semigroup_add +
+  assumes add_commute: "a \<^loc>+ b = b \<^loc>+ a"
 
 lemma add_left_commute: "a + (b + c) = b + (a + (c::'a::ab_semigroup_add))"
   by (rule mk_left_commute [of "op +", OF add_assoc add_commute])
 
 theorems add_ac = add_assoc add_commute add_left_commute
 
-axclass semigroup_mult \<subseteq> times
-  mult_assoc: "(a * b) * c = a * (b * c)"
+class semigroup_mult = times +
+  assumes mult_assoc: "(a \<^loc>* b) \<^loc>* c = a \<^loc>* (b \<^loc>* c)"
 
-axclass ab_semigroup_mult \<subseteq> semigroup_mult
-  mult_commute: "a * b = b * a"
+class ab_semigroup_mult = semigroup_mult +
+  assumes mult_commute: "a \<^loc>* b = b \<^loc>* a"
 
 lemma mult_left_commute: "a * (b * c) = b * (a * (c::'a::ab_semigroup_mult))"
   by (rule mk_left_commute [of "op *", OF mult_assoc mult_commute])
 
 theorems mult_ac = mult_assoc mult_commute mult_left_commute
 
-axclass comm_monoid_add \<subseteq> zero, ab_semigroup_add
-  add_0[simp]: "0 + a = a"
+class comm_monoid_add = zero + ab_semigroup_add +
+  assumes add_0 [simp]: "\<^loc>0 \<^loc>+ a = a"
 
-axclass monoid_mult \<subseteq> one, semigroup_mult
-  mult_1_left[simp]: "1 * a  = a"
-  mult_1_right[simp]: "a * 1 = a"
+class monoid_mult = one + semigroup_mult +
+  assumes mult_1_left [simp]: "\<^loc>1 \<^loc>* a  = a"
+  assumes mult_1_right [simp]: "a \<^loc>* \<^loc>1 = a"
 
-axclass comm_monoid_mult \<subseteq> one, ab_semigroup_mult
-  mult_1: "1 * a = a"
+class comm_monoid_mult = one + ab_semigroup_mult +
+  assumes mult_1: "\<^loc>1 \<^loc>* a = a"
 
 instance comm_monoid_mult \<subseteq> monoid_mult
-by (intro_classes, insert mult_1, simp_all add: mult_commute, auto)
+  by intro_classes (insert mult_1, simp_all add: mult_commute, auto)
 
-axclass cancel_semigroup_add \<subseteq> semigroup_add
-  add_left_imp_eq: "a + b = a + c \<Longrightarrow> b = c"
-  add_right_imp_eq: "b + a = c + a \<Longrightarrow> b = c"
+class cancel_semigroup_add = semigroup_add +
+  assumes add_left_imp_eq: "a \<^loc>+ b = a \<^loc>+ c \<Longrightarrow> b = c"
+  assumes add_right_imp_eq: "b \<^loc>+ a = c \<^loc>+ a \<Longrightarrow> b = c"
 
-axclass cancel_ab_semigroup_add \<subseteq> ab_semigroup_add
-  add_imp_eq: "a + b = a + c \<Longrightarrow> b = c"
+class cancel_ab_semigroup_add = ab_semigroup_add +
+  assumes add_imp_eq: "a \<^loc>+ b = a \<^loc>+ c \<Longrightarrow> b = c"
 
 instance cancel_ab_semigroup_add \<subseteq> cancel_semigroup_add
-proof
-  {
-    fix a b c :: 'a
-    assume "a + b = a + c"
-    thus "b = c" by (rule add_imp_eq)
-  }
-  note f = this
+proof intro_classes
+  fix a b c :: 'a
+  assume "a + b = a + c" 
+  then show "b = c" by (rule add_imp_eq)
+next
   fix a b c :: 'a
   assume "b + a = c + a"
-  hence "a + b = a + c" by (simp only: add_commute)
-  thus "b = c" by (rule f)
+  then have "a + b = a + c" by (simp only: add_commute)
+  then show "b = c" by (rule add_imp_eq)
 qed
 
-axclass ab_group_add \<subseteq> minus, comm_monoid_add
-  left_minus[simp]: " - a + a = 0"
-  diff_minus: "a - b = a + (-b)"
+class ab_group_add = minus + comm_monoid_add +
+  assumes left_minus [simp]: "uminus a \<^loc>+ a = \<^loc>0"
+  assumes diff_minus: "a \<^loc>- b = a \<^loc>+ (uminus b)"
 
 instance ab_group_add \<subseteq> cancel_ab_semigroup_add
-proof 
+proof intro_classes
   fix a b c :: 'a
   assume "a + b = a + c"
-  hence "-a + a + b = -a + a + c" by (simp only: add_assoc)
-  thus "b = c" by simp 
+  then have "uminus a + a + b = uminus a + a + c" unfolding add_assoc by simp
+  then show "b = c" by simp 
 qed
 
 lemma add_0_right [simp]: "a + 0 = (a::'a::comm_monoid_add)"
@@ -105,11 +103,11 @@
   and add_zero_right = add_0_right
 
 lemma add_left_cancel [simp]:
-     "(a + b = a + c) = (b = (c::'a::cancel_semigroup_add))"
-by (blast dest: add_left_imp_eq) 
+  "a + b = a + c \<longleftrightarrow> b = (c \<Colon> 'a\<Colon>cancel_semigroup_add)"
+  by (blast dest: add_left_imp_eq) 
 
 lemma add_right_cancel [simp]:
-     "(b + a = c + a) = (b = (c::'a::cancel_semigroup_add))"
+  "b + a = c + a \<longleftrightarrow> b = (c \<Colon> 'a\<Colon>cancel_semigroup_add)"
   by (blast dest: add_right_imp_eq)
 
 lemma right_minus [simp]: "a + -(a::'a::ab_group_add) = 0"
@@ -196,17 +194,18 @@
 
 subsection {* (Partially) Ordered Groups *} 
 
-axclass pordered_ab_semigroup_add \<subseteq> order, ab_semigroup_add
-  add_left_mono: "a \<le> b \<Longrightarrow> c + a \<le> c + b"
+class pordered_ab_semigroup_add = order + ab_semigroup_add +
+  assumes add_left_mono: "a \<sqsubseteq> b \<Longrightarrow> c \<^loc>+ a \<sqsubseteq> c \<^loc>+ b"
 
-axclass pordered_cancel_ab_semigroup_add \<subseteq> pordered_ab_semigroup_add, cancel_ab_semigroup_add
+class pordered_cancel_ab_semigroup_add =
+  pordered_ab_semigroup_add + cancel_ab_semigroup_add
 
 instance pordered_cancel_ab_semigroup_add \<subseteq> pordered_ab_semigroup_add ..
 
-axclass pordered_ab_semigroup_add_imp_le \<subseteq> pordered_cancel_ab_semigroup_add
-  add_le_imp_le_left: "c + a \<le> c + b \<Longrightarrow> a \<le> b"
+class pordered_ab_semigroup_add_imp_le = pordered_cancel_ab_semigroup_add +
+  assumes add_le_imp_le_left: "c \<^loc>+ a \<sqsubseteq> c + b \<Longrightarrow> a \<sqsubseteq> b"
 
-axclass pordered_ab_group_add \<subseteq> ab_group_add, pordered_ab_semigroup_add
+class pordered_ab_group_add = ab_group_add + pordered_ab_semigroup_add
 
 instance pordered_ab_group_add \<subseteq> pordered_ab_semigroup_add_imp_le
 proof
@@ -217,7 +216,7 @@
   thus "a \<le> b" by simp
 qed
 
-axclass ordered_cancel_ab_semigroup_add \<subseteq> pordered_cancel_ab_semigroup_add, linorder
+class ordered_cancel_ab_semigroup_add = pordered_cancel_ab_semigroup_add + linorder
 
 instance ordered_cancel_ab_semigroup_add \<subseteq> pordered_ab_semigroup_add_imp_le
 proof
@@ -239,7 +238,7 @@
 qed
 
 lemma add_right_mono: "a \<le> (b::'a::pordered_ab_semigroup_add) ==> a + c \<le> b + c"
-by (simp add: add_commute[of _ c] add_left_mono)
+  by (simp add: add_commute [of _ c] add_left_mono)
 
 text {* non-strict, in both arguments *}
 lemma add_mono: