author | wenzelm |
Fri, 09 Nov 2001 00:09:47 +0100 | |
changeset 12114 | a8e860c86252 |
parent 11394 | e88c2c89f98e |
child 12459 | 6978ab7cac64 |
permissions | -rw-r--r-- |
11370
680946254afe
new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff
changeset
|
1 |
(* Title: HOL/GroupTheory/Group |
680946254afe
new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff
changeset
|
2 |
ID: $Id$ |
680946254afe
new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff
changeset
|
3 |
Author: Florian Kammueller, with new proofs by L C Paulson |
11394 | 4 |
Copyright 1998-2001 University of Cambridge |
5 |
||
6 |
Group theory using locales |
|
11370
680946254afe
new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff
changeset
|
7 |
*) |
680946254afe
new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff
changeset
|
8 |
|
11394 | 9 |
Group = Main + |
10 |
||
11 |
(*Giving funcset the nice arrow syntax \\<rightarrow> *) |
|
12114
a8e860c86252
eliminated old "symbols" syntax, use "xsymbols" instead;
wenzelm
parents:
11394
diff
changeset
|
12 |
syntax (xsymbols) |
11394 | 13 |
"op funcset" :: "['a set, 'b set] => ('a => 'b) set" (infixr "\\<rightarrow>" 60) |
14 |
||
15 |
||
16 |
record 'a semigrouptype = |
|
17 |
carrier :: "'a set" |
|
18 |
bin_op :: "['a, 'a] => 'a" |
|
19 |
||
11370
680946254afe
new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff
changeset
|
20 |
|
11394 | 21 |
record 'a grouptype = 'a semigrouptype + |
22 |
inverse :: "'a => 'a" |
|
23 |
unit :: "'a" |
|
12114
a8e860c86252
eliminated old "symbols" syntax, use "xsymbols" instead;
wenzelm
parents:
11394
diff
changeset
|
24 |
|
11394 | 25 |
syntax |
26 |
"@carrier" :: "'a semigrouptype => 'a set" ("_ .<cr>" [10] 10) |
|
27 |
"@bin_op" :: "'a semigrouptype => (['a, 'a] => 'a)" ("_ .<f>" [10] 10) |
|
28 |
"@inverse" :: "'a grouptype => ('a => 'a)" ("_ .<inv>" [10] 10) |
|
29 |
"@unit" :: "'a grouptype => 'a" ("_ .<e>" [10] 10) |
|
11370
680946254afe
new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff
changeset
|
30 |
|
11394 | 31 |
translations |
32 |
"G.<cr>" => "carrier G" |
|
33 |
"G.<f>" => "bin_op G" |
|
34 |
"G.<inv>" => "inverse G" |
|
35 |
"G.<e>" => "unit G" |
|
36 |
||
37 |
constdefs |
|
38 |
Semigroup :: "('a semigrouptype)set" |
|
39 |
"Semigroup == {G. (bin_op G): carrier G \\<rightarrow> carrier G \\<rightarrow> carrier G & |
|
40 |
(! x: carrier G. ! y: carrier G. !z: carrier G. |
|
41 |
(bin_op G (bin_op G x y) z = bin_op G (x) (bin_op G y z)))}" |
|
11370
680946254afe
new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff
changeset
|
42 |
|
680946254afe
new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff
changeset
|
43 |
|
680946254afe
new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff
changeset
|
44 |
constdefs |
11394 | 45 |
Group :: "('a grouptype)set" |
46 |
"Group == {G. (bin_op G): carrier G \\<rightarrow> carrier G \\<rightarrow> carrier G & inverse G : carrier G \\<rightarrow> carrier G |
|
47 |
& unit G : carrier G & |
|
48 |
(! x: carrier G. ! y: carrier G. !z: carrier G. |
|
49 |
(bin_op G (inverse G x) x = unit G) |
|
50 |
& (bin_op G (unit G) x = x) |
|
51 |
& (bin_op G (bin_op G x y) z = bin_op G (x) (bin_op G y z)))}" |
|
11370
680946254afe
new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff
changeset
|
52 |
|
11394 | 53 |
order :: "'a grouptype => nat" "order(G) == card(carrier G)" |
11370
680946254afe
new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff
changeset
|
54 |
|
11394 | 55 |
AbelianGroup :: "('a grouptype) set" |
56 |
"AbelianGroup == {G. G : Group & |
|
57 |
(! x:(G.<cr>). ! y:(G.<cr>). ((G.<f>) x y = (G.<f>) y x))}" |
|
58 |
consts |
|
59 |
subgroup :: "('a grouptype * 'a set)set" |
|
11370
680946254afe
new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff
changeset
|
60 |
|
11394 | 61 |
defs |
62 |
subgroup_def "subgroup == SIGMA G: Group. {H. H <= carrier G & |
|
63 |
((| carrier = H, bin_op = lam x: H. lam y: H. (bin_op G) x y, |
|
64 |
inverse = lam x: H. (inverse G) x, unit = unit G |) : Group)}" |
|
11370
680946254afe
new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff
changeset
|
65 |
|
11394 | 66 |
syntax |
67 |
"@SG" :: "['a set, 'a grouptype] => bool" ("_ <<= _" [51,50]50) |
|
11370
680946254afe
new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff
changeset
|
68 |
|
11394 | 69 |
translations |
70 |
"H <<= G" == "(G,H) : subgroup" |
|
11370
680946254afe
new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff
changeset
|
71 |
|
11394 | 72 |
locale group = |
73 |
fixes |
|
74 |
G ::"'a grouptype" |
|
75 |
e :: "'a" |
|
76 |
binop :: "'a => 'a => 'a" (infixr "##" 80) |
|
77 |
INV :: "'a => 'a" ("i (_)" [90]91) |
|
78 |
assumes |
|
79 |
Group_G "G: Group" |
|
80 |
defines |
|
81 |
e_def "e == unit G" |
|
82 |
binop_def "op ## == bin_op G" |
|
83 |
inv_def "INV == inverse G" |
|
11370
680946254afe
new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff
changeset
|
84 |
end |
680946254afe
new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff
changeset
|
85 |