src/HOL/GroupTheory/Coset.ML
author nipkow
Mon, 13 May 2002 15:27:28 +0200
changeset 13145 59bc43b51aa2
parent 11443 77ed7e2b56c8
permissions -rw-r--r--
*** empty log message ***
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
11394
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
     1
(*  Title:      HOL/GroupTheory/Coset
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
     2
    ID:         $Id$
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
     3
    Author:     Florian Kammueller, with new proofs by L C Paulson
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
     4
    Copyright   1998-2001  University of Cambridge
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
     5
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
     6
Theory of cosets, using locales
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
     7
*)
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
     8
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
     9
(** these versions are useful for Sylow's Theorem **)
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    10
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    11
Goal "[|finite A; finite B; \\<exists>f \\<in> A\\<rightarrow>B. inj_on f A|] ==> card(A) <= card(B)";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    12
by (Clarify_tac 1); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    13
by (rtac card_inj_on_le 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    14
by (auto_tac (claset(), simpset() addsimps [Pi_def])); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    15
qed "card_inj";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    16
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    17
Goal "[| finite A;  finite B;  \\<exists>f \\<in> A\\<rightarrow>B. inj_on f A;  \
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    18
\        \\<exists>g \\<in> B\\<rightarrow>A. inj_on g B |] ==> card(A) = card(B)";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    19
by (Clarify_tac 1); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    20
by (rtac card_bij_eq 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    21
by (auto_tac (claset(), simpset() addsimps [Pi_def])); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    22
qed "card_bij";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    23
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    24
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    25
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    26
Open_locale "coset";
11443
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents: 11394
diff changeset
    27
Addsimps [Group_G, simp_G];
11394
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    28
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    29
val rcos_def = thm "rcos_def";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    30
val lcos_def = thm "lcos_def";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    31
val setprod_def = thm "setprod_def";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    32
val setinv_def = thm "setinv_def";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    33
val setrcos_def = thm "setrcos_def";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    34
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    35
val group_defs = [thm "binop_def", thm "inv_def", thm "e_def"];
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    36
val coset_defs = [thm "rcos_def", thm "lcos_def", thm "setprod_def"];
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    37
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    38
(** Alternative definitions, reducing to locale constants **)
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    39
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    40
Goal "H #> a = {b . \\<exists>h\\<in>H. h ## a = b}";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    41
by (auto_tac (claset(),
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    42
              simpset() addsimps [rcos_def, r_coset_def, binop_def])); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    43
qed "r_coset_eq";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    44
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    45
Goal "a <# H = {b . \\<exists>h\\<in>H. a ## h = b}";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    46
by (auto_tac (claset(),
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    47
              simpset() addsimps [lcos_def, l_coset_def, binop_def])); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    48
qed "l_coset_eq";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    49
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    50
Goal "{*H*} = {C . \\<exists>a\\<in>carrier G. C = H #> a}";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    51
by (auto_tac (claset(),
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    52
     simpset() addsimps [set_r_cos_def, setrcos_def, rcos_def, binop_def])); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    53
qed "setrcos_eq";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    54
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    55
Goal "H <#> K = {c . \\<exists>h\\<in>H. \\<exists>k\\<in>K. c = h ## k}";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    56
by (simp_tac
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    57
    (simpset() addsimps [setprod_def, set_prod_def, binop_def, image_def]) 1); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    58
qed "set_prod_eq";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    59
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    60
Goal "[| M <= carrier G; g\\<in>carrier G; h\\<in>carrier G |] \
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    61
\     ==> (M #> g) #> h = M #> (g ## h)";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    62
by (force_tac (claset(), simpset() addsimps [r_coset_eq, binop_assoc]) 1); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    63
qed "coset_mul_assoc";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    64
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    65
Goal "[| M <= carrier G |] ==> M #> e = M";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    66
by (force_tac (claset(), simpset() addsimps [r_coset_eq]) 1); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    67
qed "coset_mul_e";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    68
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    69
Goal "[| M #> (x ## (i y)) = M;  x \\<in> carrier G ; y \\<in> carrier G;\
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    70
\        M <= carrier G |] ==> M #> x = M #> y";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    71
by (eres_inst_tac [("P","%z. M #> x = z #> y")] subst 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    72
by (asm_simp_tac (simpset() addsimps [coset_mul_assoc, binop_assoc]) 1); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    73
qed "coset_mul_inv1";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    74
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    75
Goal "[| M #> x = M #> y;  x \\<in> carrier G;  y \\<in> carrier G;  M <= carrier G |] \
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    76
\     ==> M #> (x ## (i y)) = M ";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    77
by (afs [coset_mul_assoc RS sym] 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    78
by (afs [coset_mul_assoc, coset_mul_e] 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    79
qed "coset_mul_invers2";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    80
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    81
Goal "[| H #> x = H;  x \\<in> carrier G;  H <<= G |] ==> x\\<in>H";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    82
by (etac subst 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    83
by (simp_tac (simpset() addsimps [r_coset_eq]) 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    84
by (blast_tac (claset() addIs [e_ax1, subgroup_e_closed]) 1); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    85
qed "coset_join1";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    86
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    87
Goal "[| x\\<in>carrier G;  H <<= G;  x\\<in>H |] ==> H #> x = H";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    88
by (auto_tac (claset(), simpset() addsimps [r_coset_eq])); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    89
by (res_inst_tac [("x","xa ## (i x)")] bexI 2);
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    90
by (auto_tac (claset(), 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    91
     simpset() addsimps [subgroup_f_closed, subgroup_inv_closed,
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    92
                         binop_assoc, subgroup_imp_subset RS subsetD]));
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    93
qed "coset_join2";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    94
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    95
Goal "[| H <= carrier G; x\\<in>carrier G |] ==> H #> x <= carrier G";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    96
by (auto_tac (claset(), simpset() addsimps [r_coset_eq])); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    97
qed "r_coset_subset_G";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    98
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    99
Goal "[| h \\<in> H; H <= carrier G; x \\<in> carrier G|] ==> h ## x \\<in> H #> x";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   100
by (auto_tac (claset(), simpset() addsimps [r_coset_eq])); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   101
qed "rcosI";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   102
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   103
Goal "[| H <= carrier G; x \\<in> carrier G |] ==> H #> x \\<in> {*H*}";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   104
by (auto_tac (claset(), simpset() addsimps [setrcos_eq])); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   105
qed "setrcosI";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   106
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   107
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   108
Goal "[| x ## y = z;  x \\<in> carrier G;  y \\<in> carrier G;  z\\<in>carrier G |] \
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   109
\     ==> (i x) ## z = y";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   110
by (Clarify_tac 1); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   111
by (asm_simp_tac (simpset() addsimps [binop_assoc RS sym]) 1); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   112
qed "transpose_inv";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   113
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   114
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   115
Goal "[| y \\<in> H #> x;  x \\<in> carrier G; H <<= G |] ==> H #> x = H #> y";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   116
by (auto_tac (claset(), 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   117
	    simpset() addsimps [r_coset_eq, binop_assoc RS sym,
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   118
				right_cancellation_iff, subgroup_imp_subset RS subsetD,
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   119
				subgroup_f_closed])); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   120
by (res_inst_tac [("x","ha ## i h")] bexI 1);  
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   121
by (auto_tac (claset(), 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   122
         simpset() addsimps [binop_assoc, subgroup_imp_subset RS subsetD, 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   123
                             subgroup_inv_closed, subgroup_f_closed])); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   124
qed "repr_independence";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   125
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   126
Goal "[| x \\<in> carrier G; H <<= G |] ==> x \\<in> H #> x";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   127
by (simp_tac (simpset() addsimps [r_coset_eq]) 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   128
by (blast_tac (claset() addIs [e_ax1, subgroup_imp_subset RS subsetD, 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   129
                               subgroup_e_closed]) 1);  
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   130
qed "rcos_self";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   131
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   132
Goal "setinv H = INV`H";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   133
by (simp_tac
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   134
    (simpset() addsimps [image_def, setinv_def, set_inv_def, inv_def]) 1); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   135
qed "setinv_eq_image_inv";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   136
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   137
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   138
(*** normal subgroups ***)
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   139
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   140
Goal "(H <| G) = (H <<= G & (\\<forall>x \\<in> carrier G. H #> x = x <# H))";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   141
by (afs [thm "lcos_def", thm "rcos_def", normal_def] 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   142
qed "normal_iff";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   143
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   144
Goal "H <| G ==> H <<= G";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   145
by (afs [normal_def] 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   146
qed "normal_imp_subgroup";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   147
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   148
Goal "[| H <| G; x \\<in> carrier G |] ==> H #> x = x <# H";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   149
by (afs [thm "lcos_def", thm "rcos_def", normal_def] 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   150
qed "normal_imp_rcos_eq_lcos";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   151
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   152
Goal "\\<lbrakk>H \\<lhd> G; x \\<in> (G .<cr>); h \\<in> H\\<rbrakk> \\<Longrightarrow> i x ## h ## x \\<in> H";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   153
by (auto_tac (claset(), 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   154
              simpset() addsimps [l_coset_eq, r_coset_eq, normal_iff]));
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   155
by (ball_tac 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   156
by (dtac (equalityD1 RS subsetD) 1); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   157
by (Blast_tac 1); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   158
by (Clarify_tac 1); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   159
by (etac subst 1); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   160
by (asm_simp_tac
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   161
    (simpset() addsimps [binop_assoc RS sym, subgroup_imp_subset RS subsetD]) 1); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   162
qed "normal_inv_op_closed1";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   163
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   164
Goal "\\<lbrakk>H \\<lhd> G; x \\<in> (G .<cr>); h \\<in> H\\<rbrakk> \\<Longrightarrow> x ## h ## i x \\<in> H";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   165
by (dres_inst_tac [("x","i x")] normal_inv_op_closed1 1); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   166
by Auto_tac; 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   167
qed "normal_inv_op_closed2";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   168
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   169
Goal "[| M <= carrier G; g\\<in>carrier G; h\\<in>carrier G |] \
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   170
\                 ==> g <# (h <# M) = (g ## h) <# M";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   171
by (force_tac (claset(), simpset() addsimps [l_coset_eq, binop_assoc]) 1); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   172
qed "lcos_mul_assoc";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   173
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   174
Goal "M <= carrier G ==> e <# M = M";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   175
by (force_tac (claset(), simpset() addsimps [l_coset_eq]) 1); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   176
qed "lcos_mul_e";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   177
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   178
Goal "[| H <= carrier G; x\\<in>carrier G |]\
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   179
\           ==> x <# H <= carrier G";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   180
by (auto_tac (claset(), simpset() addsimps [l_coset_eq, subsetD])); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   181
qed "lcosetGaH_subset_G";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   182
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   183
Goal "[| y \\<in> x <# H;  x \\<in> carrier G;  H <<= G |] ==> x <# H = y <# H";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   184
by (auto_tac (claset(), 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   185
              simpset() addsimps [l_coset_eq, binop_assoc,
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   186
                                  left_cancellation_iff, subgroup_imp_subset RS subsetD,
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   187
                                  subgroup_f_closed])); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   188
by (res_inst_tac [("x","i h ## ha")] bexI 1);  
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   189
by (auto_tac (claset(), 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   190
         simpset() addsimps [binop_assoc RS sym, subgroup_imp_subset RS subsetD, 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   191
                             subgroup_inv_closed, subgroup_f_closed])); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   192
qed "l_repr_independence";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   193
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   194
Goal "[| H1 <= carrier G; H2 <= carrier G |] ==> H1 <#> H2 <= carrier G";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   195
by (auto_tac (claset(), simpset() addsimps [set_prod_eq, subsetD])); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   196
qed "setprod_subset_G";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   197
val set_prod_subset_G = export setprod_subset_G;
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   198
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   199
Goal "H <<= G ==> H <#> H = H";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   200
by (auto_tac (claset(), 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   201
       simpset() addsimps [set_prod_eq, Sigma_def,image_def])); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   202
by (res_inst_tac [("x","x")] bexI 2);
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   203
by (res_inst_tac [("x","e")] bexI 2);
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   204
by (auto_tac (claset(), 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   205
              simpset() addsimps [subgroup_f_closed, subgroup_e_closed, e_ax2,
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   206
                                  subgroup_imp_subset RS subsetD])); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   207
qed "subgroup_prod_id";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   208
val Subgroup_prod_id = export subgroup_prod_id;
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   209
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   210
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   211
(* set of inverses of an r_coset *)
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   212
Goal "[| H <| G; x \\<in> carrier G |] ==> I(H #> x) = H #>(i x)";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   213
by (ftac normal_imp_subgroup 1); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   214
by (auto_tac (claset(), 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   215
       simpset() addsimps [r_coset_eq, setinv_eq_image_inv, image_def]));
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   216
by (res_inst_tac [("x","i x ## i h ## x")] bexI 1);  
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   217
by (asm_simp_tac (simpset() addsimps [binop_assoc, inv_prod, 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   218
                                      subgroup_imp_subset RS subsetD]) 1); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   219
by (res_inst_tac [("x","i(h ## i x)")] exI 2);
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   220
by (asm_simp_tac (simpset() addsimps [inv_inv, inv_prod, 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   221
                           subgroup_imp_subset RS subsetD]) 2); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   222
by (res_inst_tac [("x","x ## i h ## i x")] bexI 2);  
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   223
by (auto_tac (claset(), 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   224
         simpset() addsimps [normal_inv_op_closed1, normal_inv_op_closed2, 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   225
                             binop_assoc, subgroup_imp_subset RS subsetD, 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   226
                             subgroup_inv_closed])); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   227
qed "rcos_inv";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   228
val r_coset_inv = export rcos_inv;
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   229
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   230
Goal "[| H <| G; H1\\<in>{*H*}; x \\<in> H1 |] ==> I(H1) = H #> (i x)";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   231
by (afs [setrcos_eq] 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   232
by (Clarify_tac 1); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   233
by (subgoal_tac "x : carrier G" 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   234
 by (rtac subsetD 2);
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   235
 by (assume_tac 3);
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   236
 by (asm_full_simp_tac (simpset() addsimps [r_coset_subset_G,
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   237
                                    subgroup_imp_subset,normal_imp_subgroup]) 2);
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   238
by (dtac repr_independence 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   239
  by (assume_tac 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   240
 by (etac normal_imp_subgroup 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   241
by (asm_simp_tac (simpset() addsimps [rcos_inv]) 1);  
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   242
qed "rcos_inv2";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   243
val r_coset_inv2 = export rcos_inv2;
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   244
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   245
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   246
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   247
(* some rules for <#> with #> or <# *)
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   248
Goal "[| H1 <= carrier G; H2 <= carrier G; x \\<in> carrier G |]\
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   249
\ ==> H1 <#> (H2 #> x) = (H1 <#> H2) #> x";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   250
by (auto_tac (claset(), 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   251
       simpset() addsimps [rcos_def, r_coset_def, 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   252
                         setprod_def, set_prod_def, Sigma_def,image_def])); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   253
by (auto_tac (claset() addSIs [bexI,exI], 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   254
               simpset() addsimps [binop_assoc, subsetD]));  
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   255
qed "setprod_rcos_assoc";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   256
val set_prod_r_coset_assoc = export setprod_rcos_assoc;
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   257
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   258
Goal "[| H1 <= carrier G; H2 <= carrier G; x \\<in> carrier G |]\
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   259
\ ==> (H1 #> x) <#> H2 = H1 <#> (x <# H2)";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   260
by (asm_simp_tac
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   261
    (simpset() addsimps [rcos_def, r_coset_def, lcos_def, l_coset_def, 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   262
                         setprod_def, set_prod_def, Sigma_def,image_def]) 1); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   263
by (force_tac (claset() addSIs [bexI,exI], 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   264
               simpset() addsimps [binop_assoc, subsetD]) 1);  
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   265
qed "rcos_prod_assoc_lcos";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   266
val rcoset_prod_assoc_lcoset = export rcos_prod_assoc_lcos;
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   267
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   268
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   269
(* product of rcosets *)
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   270
(* To show H x H y = H x y. which is done by
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   271
   H x H y =1= H (x H) y =2= H (H x) y =3= H H x y =4= H x y *)
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   272
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   273
Goal "[| H <| G; x \\<in> carrier G; y \\<in> carrier G |]\
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   274
\ ==> (H #> x) <#> (H #> y) = (H <#> (x <# H)) #> y";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   275
by (afs [setprod_rcos_assoc, normal_imp_subgroup RS subgroup_imp_subset, r_coset_subset_G, 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   276
         lcosetGaH_subset_G, rcos_prod_assoc_lcos] 1); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   277
qed "rcos_prod_step1";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   278
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   279
Goal "[| H <| G; x \\<in> carrier G; y \\<in> carrier G |]\
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   280
\ ==> (H <#> (x <# H)) #> y = (H <#> (H #> x)) #> y";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   281
by (afs [normal_imp_rcos_eq_lcos] 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   282
qed "rcos_prod_step2";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   283
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   284
Goal "[| H <| G; x \\<in> carrier G; y \\<in> carrier G |]\
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   285
\ ==> (H <#> (H #> x)) #> y = H #> (x ## y)";
11443
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents: 11394
diff changeset
   286
by (afs [setprod_rcos_assoc,normal_imp_subgroup RS subgroup_imp_subset,
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents: 11394
diff changeset
   287
         r_coset_subset_G, coset_mul_assoc, setprod_subset_G,
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents: 11394
diff changeset
   288
         normal_imp_subgroup RS subgroup_imp_subset,subgroup_prod_id,
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents: 11394
diff changeset
   289
         normal_imp_subgroup] 1);
11394
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   290
qed "rcos_prod_step3";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   291
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   292
Goal "[| H <| G; x \\<in> carrier G; y \\<in> carrier G |]\
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   293
\     ==> (H #> x) <#> (H #> y) = H #> (x ## y)";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   294
by (afs [rcos_prod_step1,rcos_prod_step2,rcos_prod_step3] 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   295
qed "rcos_prod";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   296
val rcoset_prod = export rcos_prod;
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   297
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   298
(* operations on cosets *)
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   299
Goal "[| H <| G; H1 \\<in> {*H*}; H2 \\<in> {*H*} |] ==> H1 <#> H2 \\<in> {*H*}";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   300
by (auto_tac (claset(), 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   301
              simpset() addsimps [normal_imp_subgroup RS subgroup_imp_subset, 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   302
                                  rcos_prod, setrcos_eq]));
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   303
qed "setprod_closed";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   304
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   305
Goal "[| H <| G; H1 \\<in> {*H*} |] ==> I(H1) \\<in> {*H*}";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   306
by (auto_tac (claset(), 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   307
              simpset() addsimps [normal_imp_subgroup RS subgroup_imp_subset, 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   308
                                  rcos_inv, setrcos_eq]));
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   309
qed "setinv_closed";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   310
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   311
Goal "H <<= G ==> H \\<in> {*H*}";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   312
by (simp_tac (simpset() addsimps [setrcos_eq]) 1); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   313
by (blast_tac (claset() delrules [equalityI]
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   314
          addSIs [subgroup_e_closed, e_closed, coset_join2 RS sym]) 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   315
qed "setrcos_unit_closed";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   316
11443
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents: 11394
diff changeset
   317
Goal "[|H <| G; M \\<in> {*H*}|] ==> I M <#> M = H";
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents: 11394
diff changeset
   318
by (asm_full_simp_tac (simpset() addsimps [setrcos_eq]) 1); 
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents: 11394
diff changeset
   319
by (Clarify_tac 1); 
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents: 11394
diff changeset
   320
by (asm_simp_tac 
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents: 11394
diff changeset
   321
    (simpset() addsimps [rcos_inv, rcos_prod, normal_imp_subgroup, 
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents: 11394
diff changeset
   322
                         subgroup_imp_subset, coset_mul_e]) 1); 
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents: 11394
diff changeset
   323
qed "setrcos_inv_prod_eq";
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents: 11394
diff changeset
   324
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents: 11394
diff changeset
   325
(*generalizes subgroup_prod_id*)
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents: 11394
diff changeset
   326
Goal "[|H <| G; M \\<in> {*H*}|] ==> H <#> M = M";
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents: 11394
diff changeset
   327
by (asm_full_simp_tac (simpset() addsimps [setrcos_eq]) 1); 
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents: 11394
diff changeset
   328
by (Clarify_tac 1); 
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents: 11394
diff changeset
   329
by (asm_simp_tac 
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents: 11394
diff changeset
   330
    (simpset() addsimps [normal_imp_subgroup, subgroup_imp_subset, 
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents: 11394
diff changeset
   331
                         setprod_rcos_assoc, subgroup_prod_id]) 1); 
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents: 11394
diff changeset
   332
qed "setrcos_prod_eq";
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents: 11394
diff changeset
   333
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents: 11394
diff changeset
   334
Goal "[|H <| G; M1 \\<in> {*H*}; M2 \\<in> {*H*}; M3 \\<in> {*H*}|]  \
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents: 11394
diff changeset
   335
\     ==> M1 <#> M2 <#> M3 = M1 <#> (M2 <#> M3)";
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents: 11394
diff changeset
   336
by (asm_full_simp_tac (simpset() addsimps [setrcos_eq]) 1); 
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents: 11394
diff changeset
   337
by (Clarify_tac 1); 
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents: 11394
diff changeset
   338
by (asm_simp_tac 
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents: 11394
diff changeset
   339
    (simpset() addsimps [rcos_prod, normal_imp_subgroup, 
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents: 11394
diff changeset
   340
                         subgroup_imp_subset, binop_assoc]) 1); 
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents: 11394
diff changeset
   341
qed "setrcos_prod_assoc";
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents: 11394
diff changeset
   342
11394
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   343
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   344
(**** back to Sylow again, i.e. direction Lagrange ****)
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   345
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   346
(* Theorems necessary for Lagrange *)
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   347
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   348
Goal "H <<= G ==> \\<Union> {*H*} = carrier G";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   349
by (rtac equalityI 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   350
by (force_tac (claset(), 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   351
    simpset() addsimps [subgroup_imp_subset RS subsetD, setrcos_eq, r_coset_eq]) 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   352
by (auto_tac (claset(), 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   353
              simpset() addsimps [setrcos_eq, subgroup_imp_subset, rcos_self])); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   354
qed "setrcos_part_G";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   355
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   356
Goal "[| c \\<in> {*H*};  H <= carrier G;  finite (carrier G) |] ==> finite c";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   357
by (auto_tac (claset(), simpset() addsimps [setrcos_eq])); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   358
by (asm_simp_tac (simpset() addsimps [r_coset_subset_G RS finite_subset]) 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   359
qed "cosets_finite";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   360
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   361
Goal "[| c \\<in> {*H*};  H <= carrier G; finite(carrier G) |] ==> card c = card H";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   362
by (auto_tac (claset(), simpset() addsimps [setrcos_eq])); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   363
by (res_inst_tac [("f", "%y. y ## i a"), ("g","%y. y ## a")] card_bij_eq 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   364
by (afs [r_coset_subset_G RS finite_subset] 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   365
by (blast_tac (claset() addIs [finite_subset]) 1); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   366
(* injective maps *)
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   367
   by (blast_tac (claset() addIs [restrictI, rcosI]) 3);
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   368
  by (force_tac (claset(), 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   369
      simpset() addsimps [inj_on_def, right_cancellation_iff, subsetD]) 3);
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   370
(*now for f*)
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   371
 by (force_tac (claset(),
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   372
                simpset() addsimps [binop_assoc, subsetD, r_coset_eq]) 1); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   373
(* injective *)
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   374
by (rtac inj_onI 1); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   375
by (subgoal_tac "x \\<in> carrier G & y \\<in> carrier G" 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   376
 by (blast_tac (claset() addIs [r_coset_subset_G RS subsetD]) 2);
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   377
by (rotate_tac ~1 1); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   378
by (asm_full_simp_tac
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   379
    (simpset() addsimps [right_cancellation_iff, subsetD]) 1); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   380
qed "card_cosets_equal";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   381
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   382
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   383
(** Two distinct right cosets are disjoint **)
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   384
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   385
Goal "[|H <<= G;  a \\<in> (G .<cr>);  b \\<in> (G .<cr>);  ha ## a = h ## b;  \
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   386
\       h \\<in> H;  ha \\<in> H;  hb \\<in> H|] \
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   387
\     ==> \\<exists>h\\<in>H. h ## b = hb ## a";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   388
by (res_inst_tac [("x","hb ## ((i ha) ## h)")] bexI 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   389
by (afs [subgroup_f_closed, subgroup_inv_closed] 2);
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   390
by (asm_simp_tac (simpset() addsimps [binop_assoc, left_cancellation_iff, 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   391
            transpose_inv, subgroup_imp_subset RS subsetD]) 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   392
qed "rcos_equation";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   393
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   394
Goal "[|H <<= G; c1 \\<in> {*H*}; c2 \\<in> {*H*}; c1 \\<noteq> c2|] ==> c1 \\<inter> c2 = {}";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   395
by (asm_full_simp_tac (simpset() addsimps [setrcos_eq, r_coset_eq]) 1); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   396
by (blast_tac (claset() addIs [rcos_equation, sym]) 1); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   397
qed "rcos_disjoint";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   398
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   399
Goal "H <<= G  ==> {*H*} <= Pow(carrier G)";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   400
by (simp_tac (simpset() addsimps [setrcos_eq]) 1); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   401
by (blast_tac (claset() addDs [r_coset_subset_G,subgroup_imp_subset]) 1); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   402
qed "setrcos_subset_PowG";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   403
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   404
Goal "[| finite(carrier G); H <<= G |]\
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   405
\     ==> card({*H*}) * card(H) = order(G)";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   406
by (asm_simp_tac (simpset() addsimps [order_def, setrcos_part_G RS sym]) 1); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   407
by (stac mult_commute 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   408
by (rtac card_partition 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   409
by (asm_full_simp_tac
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   410
    (simpset() addsimps [setrcos_subset_PowG RS finite_subset]) 1); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   411
by (asm_full_simp_tac (simpset() addsimps [setrcos_part_G]) 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   412
by (asm_full_simp_tac
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   413
    (simpset() addsimps [card_cosets_equal, subgroup_def]) 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   414
by (asm_full_simp_tac (simpset() addsimps [rcos_disjoint, subgroup_def]) 1); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   415
qed "lagrange";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   416
val Lagrange = export lagrange;
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   417
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   418
Close_locale "coset";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   419
Close_locale "group";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   420
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   421
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
   422