11448
|
1 |
(* Title: HOL/GroupTheory/RingConstr
|
|
2 |
ID: $Id$
|
|
3 |
Author: Florian Kammueller, with new proofs by L C Paulson
|
|
4 |
Copyright 1998-2001 University of Cambridge
|
|
5 |
|
|
6 |
Construction of a ring from a semigroup and an Abelian group
|
|
7 |
*)
|
|
8 |
|
|
9 |
Goal "[| G \\<in> AbelianGroup; S \\<in> Semigroup; (S.<cr>) = (G.<cr>); \
|
|
10 |
\ R \\<in> ring_constr `` {G} `` {S} |] \
|
|
11 |
\ ==> R \\<in> Ring";
|
|
12 |
by (force_tac (claset(),
|
|
13 |
simpset() addsimps [Ring_def, ring_constr_def, Abel_Abel,
|
|
14 |
Semigroup_def]@[distr_l_def, distr_r_def]) 1);
|
|
15 |
qed "RingC_Ring";
|
|
16 |
|
|
17 |
Goal "R = (| carrier = R .<cr>, bin_op = R .<f>, inverse = R .<inv>,\
|
|
18 |
\ unit = R .<e>, Rmult = R .<m> |)";
|
|
19 |
by Auto_tac;
|
|
20 |
qed "surjective_Ring";
|
|
21 |
|
|
22 |
Goal "R \\<in> Ring \
|
|
23 |
\ ==> \\<exists>G \\<in> AbelianGroup. \\<exists>S \\<in> Semigroup. R \\<in> ring_constr `` {G} `` {S}";
|
|
24 |
by (res_inst_tac [("x","group_of R")] bexI 1);
|
|
25 |
by (afs [Ring_def, group_of_def] 2);
|
|
26 |
by (res_inst_tac [("x","(| carrier = (R.<cr>), bin_op = (R.<m>) |)")] bexI 1);
|
|
27 |
by (afs [Ring_def, AbelianGroup_def, Semigroup_def] 2);
|
|
28 |
(* Now the main conjecture:
|
|
29 |
R\\<in>Ring
|
|
30 |
==> R\\<in>ring_constr `` {group_of R} ``
|
|
31 |
{(| carrier = R .<cr>, bin_op = R .<m> |)} *)
|
|
32 |
by (afs [ring_constr_def, Ring_def, group_of_def, AbelianGroup_def,
|
|
33 |
Semigroup_def,distr_l_def,distr_r_def] 1);
|
|
34 |
qed "Ring_RingC";
|
|
35 |
|
|
36 |
|
|
37 |
Goal "[| G \\<in> AbelianGroup; S \\<in> Semigroup; (S.<cr>) = (G.<cr>); \
|
|
38 |
\ distr_l (G .<cr>) (S .<f>) (G .<f>); \
|
|
39 |
\ distr_r (G .<cr>) (S .<f>) (G .<f>) |] \
|
|
40 |
\ ==> ring_from G S \\<in> Ring";
|
|
41 |
by (rtac RingI 1);
|
|
42 |
by (ALLGOALS
|
|
43 |
(asm_full_simp_tac (simpset() addsimps [ring_from_def, Abel_Abel,
|
|
44 |
Semigroup_def])));
|
|
45 |
qed "RingFrom_is_Ring";
|
|
46 |
|
|
47 |
|
|
48 |
Goal "ring_from \\<in> (PI G : AbelianGroup. {M. M \\<in> Semigroup & (M.<cr>) = (G.<cr>) \
|
|
49 |
\ & distr_l (G.<cr>) (M.<f>) (G.<f>) & distr_r (G.<cr>) (M.<f>) (G.<f>)} \\<rightarrow> Ring)";
|
|
50 |
by (rtac Pi_I 1);
|
|
51 |
by (afs [ring_from_def] 2);
|
|
52 |
by (rtac funcsetI 1);
|
|
53 |
by (asm_full_simp_tac (simpset() addsimps [ring_from_def]) 2);
|
|
54 |
by (Force_tac 2);
|
|
55 |
by (afs [RingFrom_is_Ring] 1);
|
|
56 |
qed "RingFrom_arity";
|
|
57 |
|
|
58 |
(* group_of, i.e. the group in a ring *)
|
|
59 |
|
|
60 |
Goal "R \\<in> Ring ==> group_of R \\<in> AbelianGroup";
|
|
61 |
by (afs [group_of_def] 1);
|
|
62 |
by (etac (export R_Abel) 1);
|
|
63 |
qed "group_of_in_AbelianGroup";
|
|
64 |
|
|
65 |
val R_Group = group_of_in_AbelianGroup RS Abel_imp_Group;
|
|
66 |
|
|
67 |
|