src/HOL/GroupTheory/RingConstr.thy
author paulson
Mon, 23 Jul 2001 17:47:49 +0200
changeset 11448 aa519e0cc050
child 12459 6978ab7cac64
permissions -rw-r--r--
Final version of Florian Kammueller's examples
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
11448
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
     1
(*  Title:      HOL/GroupTheory/RingConstr
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
     2
    ID:         $Id$
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
     3
    Author:     Florian Kammueller, with new proofs by L C Paulson
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
     4
    Copyright   1998-2001  University of Cambridge
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
     5
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
     6
Construction of a ring from a semigroup and an Abelian group 
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
     7
*)
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
     8
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
     9
RingConstr = Homomorphism +
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    10
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    11
constdefs
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    12
  ring_of :: "['a grouptype, 'a semigrouptype] => 'a ringtype"
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    13
  "ring_of ==
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    14
     lam G: AbelianGroup. lam S: {M. M \\<in> Semigroup & (M.<cr>) = (G.<cr>)}.
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    15
                   (| carrier = (G.<cr>), bin_op = (G.<f>), 
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    16
                      inverse = (G.<inv>), unit = (G.<e>), Rmult = (S.<f>) |)"
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    17
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    18
  ring_constr :: "('a grouptype * 'a semigrouptype *'a ringtype) set"
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    19
  "ring_constr ==
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    20
    \\<Sigma>G \\<in> AbelianGroup. \\<Sigma>S \\<in> {M. M \\<in> Semigroup & (M.<cr>) = (G.<cr>)}.
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    21
	 {R. R = (| carrier = (G.<cr>), bin_op = (G.<f>), 
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    22
		     inverse = (G.<inv>), unit = (G.<e>),
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    23
		     Rmult = (S.<f>) |) &
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    24
	     (\\<forall>x \\<in> (R.<cr>). \\<forall>y \\<in> (R.<cr>). \\<forall>z \\<in> (R.<cr>). 
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    25
	     ((R.<m>) x ((R.<f>) y z) = (R.<f>) ((R.<m>) x y) ((R.<m>) x z))) &
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    26
(\\<forall>x \\<in> (R.<cr>). \\<forall>y \\<in> (R.<cr>). \\<forall>z \\<in> (R.<cr>). 
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    27
	     ((R.<m>) ((R.<f>) y z) x = (R.<f>) ((R.<m>) y x) ((R.<m>) z x)))}"
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    28
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    29
  ring_from :: "['a grouptype, 'a semigrouptype] => 'a ringtype"
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    30
  "ring_from == lam G: AbelianGroup. 
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    31
     lam S: {M. M \\<in> Semigroup & (M.<cr>) = (G.<cr>) &
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    32
                distr_l (G.<cr>) (M.<f>) (G.<f>) &
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    33
	        distr_r (G.<cr>) (M.<f>) (G.<f>)}.
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    34
            (| carrier = (G.<cr>), bin_op = (G.<f>), 
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    35
               inverse = (G.<inv>), unit = (G.<e>), Rmult = (S.<f>) |)"
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    36
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    37
end
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    38