src/HOL/GroupTheory/RingConstr.thy
changeset 11448 aa519e0cc050
child 12459 6978ab7cac64
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/GroupTheory/RingConstr.thy	Mon Jul 23 17:47:49 2001 +0200
@@ -0,0 +1,38 @@
+(*  Title:      HOL/GroupTheory/RingConstr
+    ID:         $Id$
+    Author:     Florian Kammueller, with new proofs by L C Paulson
+    Copyright   1998-2001  University of Cambridge
+
+Construction of a ring from a semigroup and an Abelian group 
+*)
+
+RingConstr = Homomorphism +
+
+constdefs
+  ring_of :: "['a grouptype, 'a semigrouptype] => 'a ringtype"
+  "ring_of ==
+     lam G: AbelianGroup. lam S: {M. M \\<in> Semigroup & (M.<cr>) = (G.<cr>)}.
+                   (| carrier = (G.<cr>), bin_op = (G.<f>), 
+                      inverse = (G.<inv>), unit = (G.<e>), Rmult = (S.<f>) |)"
+
+  ring_constr :: "('a grouptype * 'a semigrouptype *'a ringtype) set"
+  "ring_constr ==
+    \\<Sigma>G \\<in> AbelianGroup. \\<Sigma>S \\<in> {M. M \\<in> Semigroup & (M.<cr>) = (G.<cr>)}.
+	 {R. R = (| carrier = (G.<cr>), bin_op = (G.<f>), 
+		     inverse = (G.<inv>), unit = (G.<e>),
+		     Rmult = (S.<f>) |) &
+	     (\\<forall>x \\<in> (R.<cr>). \\<forall>y \\<in> (R.<cr>). \\<forall>z \\<in> (R.<cr>). 
+	     ((R.<m>) x ((R.<f>) y z) = (R.<f>) ((R.<m>) x y) ((R.<m>) x z))) &
+(\\<forall>x \\<in> (R.<cr>). \\<forall>y \\<in> (R.<cr>). \\<forall>z \\<in> (R.<cr>). 
+	     ((R.<m>) ((R.<f>) y z) x = (R.<f>) ((R.<m>) y x) ((R.<m>) z x)))}"
+
+  ring_from :: "['a grouptype, 'a semigrouptype] => 'a ringtype"
+  "ring_from == lam G: AbelianGroup. 
+     lam S: {M. M \\<in> Semigroup & (M.<cr>) = (G.<cr>) &
+                distr_l (G.<cr>) (M.<f>) (G.<f>) &
+	        distr_r (G.<cr>) (M.<f>) (G.<f>)}.
+            (| carrier = (G.<cr>), bin_op = (G.<f>), 
+               inverse = (G.<inv>), unit = (G.<e>), Rmult = (S.<f>) |)"
+
+end
+