src/HOL/GroupTheory/Ring.thy
author wenzelm
Mon, 10 Dec 2001 20:59:43 +0100
changeset 12459 6978ab7cac64
parent 11451 8abfb4f7bd02
child 13583 5fcc8bf538ee
permissions -rw-r--r--
bounded abstraction now uses syntax "%" / "\<lambda>" instead of "lam";
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
11451
8abfb4f7bd02 partial restructuring to reduce dependence on Axiom of Choice
paulson
parents: 11448
diff changeset
     1
(*  Title:      HOL/GroupTheory/Ring
11448
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
Ring theory. Sigma version
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
Ring = Coset +
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
record 'a ringtype = 'a grouptype +
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    12
  Rmult    :: "['a, 'a] => 'a"
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    13
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    14
syntax 
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    15
  "@Rmult"     :: "('a ringtype) => (['a, 'a] => 'a)"  ("_ .<m>"     [10] 10)
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    16
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    17
translations 
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    18
  "R.<m>"  == "Rmult R"
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    19
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    20
constdefs
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    21
  distr_l :: "['a set, ['a, 'a] => 'a, ['a, 'a] => 'a] => bool"
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    22
    "distr_l S f1 f2 == (\\<forall>x \\<in> S. \\<forall>y \\<in> S. \\<forall>z \\<in> S. 
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    23
                    (f1 x (f2 y z) = f2 (f1 x y) (f1 x z)))"
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    24
  distr_r       :: "['a set, ['a, 'a] => 'a, ['a, 'a] => 'a] => bool"
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    25
    "distr_r S f1 f2 == (\\<forall>x \\<in> S. \\<forall>y \\<in> S. \\<forall>z \\<in> S. 
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    26
                    (f1 (f2 y z) x = f2 (f1 y x) (f1 z x)))"
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    27
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    28
consts
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    29
  Ring :: "('a ringtype) set"
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    30
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    31
defs 
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    32
  Ring_def
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    33
    "Ring == 
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    34
       {R. (| carrier = (R.<cr>), bin_op = (R.<f>),
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    35
	      inverse = (R.<inv>), unit = (R.<e>) |) \\<in> AbelianGroup &
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    36
           (R.<m>) \\<in> (R.<cr>) \\<rightarrow> (R.<cr>) \\<rightarrow> (R.<cr>) & 
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    37
           (\\<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
    38
                        ((R.<m>) x ((R.<m>) y z) = (R.<m>) ((R.<m>) x y) z)) &
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    39
           distr_l (R.<cr>)(R.<m>)(R.<f>) &
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    40
	   distr_r (R.<cr>)(R.<m>)(R.<f>) }"
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    41
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    42
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    43
constdefs
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    44
  group_of :: "'a ringtype => 'a grouptype"
12459
6978ab7cac64 bounded abstraction now uses syntax "%" / "\<lambda>" instead of "lam";
wenzelm
parents: 11451
diff changeset
    45
   "group_of == %R: Ring. (| carrier = (R.<cr>), bin_op = (R.<f>),
11448
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    46
			        inverse = (R.<inv>), unit = (R.<e>) |)"
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    47
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    48
locale ring = group +
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    49
  fixes
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    50
    R     :: "'a ringtype"
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    51
    rmult :: "['a, 'a] => 'a" (infixr "**" 80)
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    52
  assumes
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    53
    Ring_R "R \\<in> Ring"
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    54
  defines
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    55
    rmult_def "op ** == (R.<m>)"
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    56
    R_id_G    "G == group_of R"
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    57
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    58
end
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    59
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    60