src/HOL/GroupTheory/Sylow.ML
author nipkow
Mon, 13 May 2002 15:27:28 +0200
changeset 13145 59bc43b51aa2
parent 12459 6978ab7cac64
child 13572 1681c5b58766
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: 11370
diff changeset
     1
(*  Title:      HOL/GroupTheory/Sylow
11370
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
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
     4
    Copyright   1998-2001  University of Cambridge
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
     5
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
     6
Sylow's theorem using locales (combinatorial argument in Exponent.thy)
11443
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents: 11394
diff changeset
     7
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents: 11394
diff changeset
     8
See Florian Kamm\"uller and L. C. Paulson,
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents: 11394
diff changeset
     9
    A Formal Proof of Sylow's theorem:
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents: 11394
diff changeset
    10
	An Experiment in Abstract Algebra with Isabelle HOL
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents: 11394
diff changeset
    11
    J. Automated Reasoning 23 (1999), 235-264
11370
680946254afe new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff changeset
    12
*)
680946254afe new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff changeset
    13
11394
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
    14
Open_locale "sylow";
11370
680946254afe new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff changeset
    15
11394
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
    16
val prime_p = thm "prime_p";
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
    17
val order_G = thm "order_G";
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
    18
val finite_G = thm "finite_G";
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
    19
val calM_def = thm "calM_def";
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
    20
val RelM_def = thm "RelM_def";
11370
680946254afe new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff changeset
    21
11394
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
    22
AddIffs [finite_G];
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
    23
Addsimps [coset_mul_e];
11370
680946254afe new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff changeset
    24
11394
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
    25
Goalw [refl_def, RelM_def] "refl calM RelM";
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
    26
by Auto_tac; 
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
    27
by (asm_full_simp_tac (simpset() addsimps [calM_def]) 1); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
    28
by (res_inst_tac [("x","e")] bexI 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
    29
by (auto_tac (claset(), simpset() addsimps [e_closed])); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
    30
qed "RelM_refl";
11370
680946254afe new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff changeset
    31
11394
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
    32
Goalw [sym_def, RelM_def] "sym RelM";
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
    33
by Auto_tac; 
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
    34
by (res_inst_tac [("x","i g")] bexI 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
    35
by (etac inv_closed 2);
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
    36
by (asm_full_simp_tac
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
    37
    (simpset() addsimps [coset_mul_assoc, calM_def, inv_closed]) 1); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
    38
qed "RelM_sym";
11370
680946254afe new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff changeset
    39
11394
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
    40
Goalw [trans_def, RelM_def] "trans RelM";
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
    41
by Auto_tac; 
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
    42
by (res_inst_tac [("x","ga ## g")] bexI 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
    43
by (ALLGOALS (asm_full_simp_tac
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
    44
              (simpset() addsimps [coset_mul_assoc, calM_def, binop_closed])));
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
    45
qed "RelM_trans";
11370
680946254afe new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff changeset
    46
11394
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
    47
Goalw [equiv_def] "equiv calM RelM";
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
    48
by (blast_tac (claset() addIs [RelM_refl, RelM_sym, RelM_trans]) 1); 
11370
680946254afe new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff changeset
    49
qed "RelM_equiv";
680946254afe new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff changeset
    50
11394
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
    51
Goalw [RelM_def] "M \\<in> calM // RelM  ==> M <= calM";
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
    52
by (blast_tac (claset() addSEs [quotientE]) 1); 
11370
680946254afe new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff changeset
    53
qed "M_subset_calM_prep";
680946254afe new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff changeset
    54
11394
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
    55
(*** Central Part of the Proof ***)
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
    56
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
    57
Open_locale "sylow_central";
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
    58
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
    59
val M_in_quot = thm "M_in_quot";
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
    60
val not_dvd_M = thm "not_dvd_M";
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
    61
val M1_in_M = thm "M1_in_M";
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
    62
val H_def = thm "H_def";
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
    63
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
    64
Goal "M <= calM";
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
    65
by (rtac (M_in_quot RS M_subset_calM_prep) 1);
11370
680946254afe new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff changeset
    66
qed "M_subset_calM";
680946254afe new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff changeset
    67
11394
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
    68
Goal "card(M1) = p^a";
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
    69
by (cut_facts_tac [M_subset_calM, M1_in_M] 1); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
    70
by (asm_full_simp_tac (simpset() addsimps [calM_def]) 1); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
    71
by (Blast_tac 1); 
11370
680946254afe new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff changeset
    72
qed "card_M1";
680946254afe new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff changeset
    73
11394
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
    74
Goal "\\<exists>x. x\\<in>M1";
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
    75
by (rtac (card_nonempty RS NotEmpty_ExEl) 1);
12196
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents: 11468
diff changeset
    76
by (cut_facts_tac [prime_p RS prime_imp_one_less] 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents: 11468
diff changeset
    77
by (asm_simp_tac (simpset() addsimps [card_M1]) 1);
11370
680946254afe new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff changeset
    78
qed "exists_x_in_M1";
680946254afe new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff changeset
    79
11394
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
    80
Goal "M1 <= carrier G";
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
    81
by (rtac (subsetD RS PowD) 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
    82
by (rtac M1_in_M 2);
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
    83
by (rtac (M_subset_calM RS subset_trans) 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
    84
by (auto_tac (claset(), simpset() addsimps [calM_def])); 
11370
680946254afe new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff changeset
    85
qed "M1_subset_G";
680946254afe new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff changeset
    86
11394
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
    87
Goal "\\<exists>f \\<in> H\\<rightarrow>M1. inj_on f H";
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
    88
by (rtac (exists_x_in_M1 RS exE) 1);
12459
6978ab7cac64 bounded abstraction now uses syntax "%" / "\<lambda>" instead of "lam";
wenzelm
parents: 12196
diff changeset
    89
by (res_inst_tac [("x", "%z: H. x ## z")] bexI 1);
11394
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
    90
by (rtac restrictI 2);
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
    91
by (asm_full_simp_tac (simpset() addsimps [H_def]) 2); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
    92
by (Clarify_tac 2);
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
    93
by (etac subst 2);
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
    94
by (asm_full_simp_tac (simpset() addsimps [rcosI, M1_subset_G]) 2);
11370
680946254afe new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff changeset
    95
by (rtac inj_onI 1);
11394
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
    96
by (rtac left_cancellation 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
    97
by (auto_tac (claset(), simpset() addsimps [H_def, M1_subset_G RS subsetD])); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
    98
qed "M1_inj_H";
11370
680946254afe new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff changeset
    99
11394
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   100
Goal "{} \\<notin> calM // RelM";
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   101
by (blast_tac (claset() addSEs [quotientE]
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   102
			addDs [RelM_equiv RS equiv_class_self]) 1); 
11370
680946254afe new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff changeset
   103
qed "EmptyNotInEquivSet";
680946254afe new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff changeset
   104
11394
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   105
Goal "\\<exists>M1. M1\\<in>M";
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   106
by (cut_facts_tac [M_in_quot, EmptyNotInEquivSet] 1); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   107
by (blast_tac (claset() addIs [NotEmpty_ExEl]) 1); 
11370
680946254afe new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff changeset
   108
qed "existsM1inM";
11394
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   109
val ExistsM1inM = Export existsM1inM;
11370
680946254afe new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff changeset
   110
11394
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   111
Goalw [order_def] "0 < order(G)";
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   112
by (cut_facts_tac [e_closed] 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   113
by (blast_tac (claset() addIs [zero_less_card_empty]) 1); 
11370
680946254afe new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff changeset
   114
qed "zero_less_o_G";
680946254afe new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff changeset
   115
11394
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   116
Goal "0 < m";
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   117
by (cut_facts_tac [zero_less_o_G] 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   118
by (asm_full_simp_tac (simpset() addsimps [order_G]) 1); 
11370
680946254afe new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff changeset
   119
qed "zero_less_m";
680946254afe new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff changeset
   120
11394
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   121
Goal "card(calM) = (p^a) * m choose p^a";
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   122
by (simp_tac (simpset() addsimps [calM_def, n_subsets, 
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   123
                                  order_G RS sym, order_def]) 1);  
11370
680946254afe new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff changeset
   124
qed "card_calM";
680946254afe new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff changeset
   125
680946254afe new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff changeset
   126
Goal "0 < card calM";
11394
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   127
by (simp_tac (simpset() addsimps [card_calM, zero_less_binomial, 
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   128
                                  le_extend_mult, zero_less_m]) 1); 
11370
680946254afe new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff changeset
   129
qed "zero_less_card_calM";
680946254afe new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff changeset
   130
11468
02cd5d5bc497 Tweaks for 1 -> 1'
paulson
parents: 11443
diff changeset
   131
Goal "~ (p ^ Suc(exponent p m) dvd card(calM))";
11370
680946254afe new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff changeset
   132
by (subgoal_tac "exponent p m = exponent p (card calM)" 1);
680946254afe new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff changeset
   133
 by (asm_full_simp_tac (simpset() addsimps [card_calM, 
680946254afe new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff changeset
   134
                           zero_less_m RS const_p_fac]) 2);
11394
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   135
by (cut_facts_tac [zero_less_card_calM, prime_p] 1);
11370
680946254afe new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff changeset
   136
by (force_tac (claset() addDs [power_Suc_exponent_Not_dvd], simpset()) 1); 
680946254afe new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff changeset
   137
qed "max_p_div_calM";
680946254afe new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff changeset
   138
11394
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   139
Goalw [calM_def] "finite calM";
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   140
by (res_inst_tac [("B", "Pow (carrier G)")] finite_subset 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   141
by Auto_tac; 
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   142
qed "finite_calM";
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   143
11468
02cd5d5bc497 Tweaks for 1 -> 1'
paulson
parents: 11443
diff changeset
   144
Goal "\\<exists>M \\<in> calM // RelM. ~ (p ^ Suc(exponent p m) dvd card(M))";
11394
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   145
by (rtac (max_p_div_calM RS contrapos_np) 1); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   146
by (asm_full_simp_tac (simpset() addsimps [finite_calM, 
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   147
                          RelM_equiv RSN(2, equiv_imp_dvd_card)]) 1); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   148
qed "lemma_A1";
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   149
val Lemma_A1 = Export lemma_A1;
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   150
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   151
Goal "x \\<in> H ==> x \\<in> carrier G";
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   152
by (afs [H_def] 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   153
qed "H_into_carrier_G";
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   154
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   155
Goal "g : H ==> M1 #> g = M1";
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   156
by (asm_full_simp_tac (simpset() addsimps [H_def]) 1); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   157
qed "in_H_imp_eq";
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   158
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   159
Goalw [H_def] "[| x\\<in>H; xa\\<in>H|] ==> x ## xa\\<in>H";
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   160
by (asm_full_simp_tac (simpset() addsimps [coset_mul_assoc RS sym, 
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   161
                                    binop_closed, M1_subset_G]) 1); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   162
qed "bin_op_closed_lemma";
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   163
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   164
Goal "H \\<noteq> {}";
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   165
by (asm_full_simp_tac (simpset() addsimps [H_def]) 1); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   166
by (res_inst_tac [("x","e")] exI 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   167
by (asm_full_simp_tac (simpset() addsimps [e_closed, M1_subset_G]) 1); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   168
qed "H_not_empty";
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   169
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   170
Goal "H <<= G";
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   171
by (rtac subgroupI 1);
11370
680946254afe new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff changeset
   172
by (rtac subsetI 1);
11394
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   173
by (etac H_into_carrier_G 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   174
by (rtac H_not_empty 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   175
by (afs [H_def, inv_closed] 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   176
by (Clarify_tac 1); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   177
by (eres_inst_tac [("P","%z. z #> i a = M1")] subst 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   178
by (asm_simp_tac (simpset() addsimps [coset_mul_assoc, inv_closed, 
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   179
           inv_ax1, coset_mul_e, M1_subset_G]) 1); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   180
by (blast_tac (claset() addIs [bin_op_closed_lemma]) 1); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   181
qed "H_is_SG";
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   182
val H_is_subgroup = Export H_is_SG;
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   183
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   184
Goal "[| g\\<in>carrier G; x\\<in>M1 #>  g |] ==> x\\<in>carrier G";
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   185
by (rtac (r_coset_subset_G RS subsetD) 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   186
by (assume_tac 3);
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   187
by (assume_tac 2);
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   188
by (rtac M1_subset_G 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   189
qed "rcosetGM1g_subset_G";
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   190
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   191
Goal "finite M1";
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   192
by (rtac ([ M1_subset_G, finite_G] MRS finite_subset) 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   193
qed "finite_M1";
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   194
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   195
Goal "g\\<in>carrier G ==> finite (M1 #> g)";
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   196
by (rtac finite_subset 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   197
by (rtac subsetI 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   198
by (etac rcosetGM1g_subset_G 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   199
by (assume_tac 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   200
by (rtac finite_G 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   201
qed "finite_rcosetGM1g";
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   202
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   203
Goal "g\\<in>carrier G ==> card(M1 #> g) = card(M1)";
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   204
by (asm_simp_tac
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   205
    (simpset() addsimps [M1_subset_G, card_cosets_equal, setrcosI]) 1); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   206
qed "M1_cardeq_rcosetGM1g";
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   207
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   208
Goal "g \\<in> carrier G ==> (M1, M1 #> g) \\<in> RelM";
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   209
by (simp_tac (simpset() addsimps [RelM_def,calM_def,card_M1,M1_subset_G]) 1); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   210
by (rtac conjI 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   211
 by (blast_tac (claset() addIs [rcosetGM1g_subset_G]) 1); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   212
by (asm_simp_tac (simpset() addsimps [card_M1, M1_cardeq_rcosetGM1g]) 1); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   213
by (res_inst_tac [("x","i g")] bexI 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   214
by (asm_full_simp_tac (simpset() addsimps [coset_mul_assoc, M1_subset_G, 
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   215
                                           inv_closed, inv_ax1]) 1); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   216
by (asm_simp_tac (simpset() addsimps [inv_closed]) 1); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   217
qed "M1_RelM_rcosetGM1g";
11370
680946254afe new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff changeset
   218
680946254afe new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff changeset
   219
680946254afe new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff changeset
   220
11394
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   221
(*** A pair of injections between M and {*H*} shows their cardinalities are 
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   222
     equal ***)
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   223
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   224
Goal "M2 \\<in> M ==> \\<exists>g. g \\<in> carrier G & M1 #> g = M2";
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   225
by (cut_facts_tac [M1_in_M, M_in_quot RS (RelM_equiv RS ElemClassEquiv)] 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   226
by (asm_full_simp_tac (simpset() addsimps [RelM_def]) 1); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   227
by (blast_tac (claset() addSDs [bspec]) 1); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   228
qed "M_elem_map";
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   229
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   230
val M_elem_map_carrier = M_elem_map RS someI_ex RS conjunct1;
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   231
val M_elem_map_eq = M_elem_map RS someI_ex RS conjunct2;
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   232
12459
6978ab7cac64 bounded abstraction now uses syntax "%" / "\<lambda>" instead of "lam";
wenzelm
parents: 12196
diff changeset
   233
Goal "(%x:M. H #> (SOME g. g \\<in> carrier G & M1 #> g = x)) \\<in> M \\<rightarrow> {* H *}";
11394
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   234
by (rtac (setrcosI RS restrictI) 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   235
by (rtac (H_is_SG RS subgroup_imp_subset) 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   236
by (etac M_elem_map_carrier 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   237
qed "M_funcset_setrcos_H";
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   238
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   239
Goal "\\<exists>f \\<in> M\\<rightarrow>{* H *}. inj_on f M";
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   240
by (rtac bexI 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   241
by (rtac M_funcset_setrcos_H 2);
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   242
by (rtac inj_onI 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   243
by (Asm_full_simp_tac 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   244
by (rtac ([asm_rl,M_elem_map_eq] MRS trans) 1);  
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   245
by (assume_tac 2);
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   246
by (rtac ((M_elem_map_eq RS sym) RS trans) 1); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   247
by (assume_tac 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   248
by (rtac coset_mul_inv1 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   249
by (REPEAT (etac M_elem_map_carrier 2));
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   250
by (rtac M1_subset_G 2);
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   251
by (rtac (coset_join1 RS in_H_imp_eq) 1); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   252
by (rtac H_is_SG 3);
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   253
by (blast_tac (claset() addIs [binop_closed,M_elem_map_carrier,inv_closed]) 2);
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   254
by (asm_full_simp_tac (simpset() addsimps [coset_mul_invers2, H_def, 
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   255
                            M_elem_map_carrier, subset_def]) 1); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   256
qed "inj_M_GmodH";
11370
680946254afe new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff changeset
   257
680946254afe new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff changeset
   258
11394
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   259
(** the opposite injection **)
11370
680946254afe new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff changeset
   260
11394
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   261
Goal "H1\\<in>{* H *} ==> \\<exists>g. g \\<in> carrier G & H #> g = H1";
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   262
by (auto_tac (claset(), simpset() addsimps [setrcos_eq])); 
11370
680946254afe new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff changeset
   263
qed "H_elem_map";
680946254afe new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff changeset
   264
11394
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   265
val H_elem_map_carrier = H_elem_map RS someI_ex RS conjunct1;
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   266
val H_elem_map_eq = H_elem_map RS someI_ex RS conjunct2;
11370
680946254afe new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff changeset
   267
12459
6978ab7cac64 bounded abstraction now uses syntax "%" / "\<lambda>" instead of "lam";
wenzelm
parents: 12196
diff changeset
   268
Goal "(%C:{*H*}. M1 #> (@g. g \\<in> (G .<cr>) \\<and> H #> g = C)) \\<in> {* H *} \\<rightarrow> M";
11394
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   269
by (simp_tac (simpset() addsimps [setrcos_eq]) 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   270
by (deepen_tac (claset() addIs [someI2] 
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   271
            addSIs [restrictI, RelM_equiv, M_in_quot,
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   272
                    M1_RelM_rcosetGM1g RSN (4, EquivElemClass),M1_in_M]) 0 1); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   273
qed "setrcos_H_funcset_M";
11370
680946254afe new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff changeset
   274
11394
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   275
Goal "\\<exists>g \\<in> {* H *}\\<rightarrow>M. inj_on g ({* H *})";
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   276
by (rtac bexI 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   277
by (rtac setrcos_H_funcset_M 2);
11370
680946254afe new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff changeset
   278
by (rtac inj_onI 1);
11394
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   279
by (rotate_tac ~2 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   280
by (Asm_full_simp_tac 1); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   281
by (rtac ([asm_rl,H_elem_map_eq] MRS trans) 1);  
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   282
by (assume_tac 2);
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   283
by (rtac ((H_elem_map_eq RS sym) RS trans) 1); 
11370
680946254afe new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff changeset
   284
by (assume_tac 1);
11394
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   285
by (rtac coset_mul_inv1 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   286
by (REPEAT (etac H_elem_map_carrier 2));
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   287
by (rtac (H_is_SG RS subgroup_imp_subset) 2);
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   288
by (rtac coset_join2 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   289
by (blast_tac (claset() addIs [binop_closed,inv_closed,H_elem_map_carrier]) 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   290
by (rtac H_is_SG 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   291
by (asm_full_simp_tac (simpset() addsimps [H_def, coset_mul_invers2, 
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   292
                               M1_subset_G, H_elem_map_carrier]) 1); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   293
qed "inj_GmodH_M";
11370
680946254afe new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff changeset
   294
11394
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   295
Goal "calM <= Pow(carrier G)";
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   296
by (auto_tac (claset(), simpset() addsimps [calM_def])); 
11370
680946254afe new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff changeset
   297
qed "calM_subset_PowG";
680946254afe new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff changeset
   298
11394
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   299
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   300
Goal "finite M";
11370
680946254afe new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff changeset
   301
by (rtac finite_subset 1);
11394
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   302
by (rtac (M_subset_calM RS subset_trans) 1);
11370
680946254afe new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff changeset
   303
by (rtac calM_subset_PowG 1);
11394
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   304
by (Blast_tac 1); 
11370
680946254afe new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff changeset
   305
qed "finite_M";
680946254afe new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff changeset
   306
11394
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   307
Goal "card(M) = card({* H *})";
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   308
by (blast_tac (claset() addSIs [inj_M_GmodH,inj_GmodH_M]
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   309
                  addIs [card_bij, finite_M, H_is_SG, 
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   310
                         setrcos_subset_PowG RS finite_subset, 
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   311
                         finite_Pow_iff RS iffD2]) 1);
11370
680946254afe new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff changeset
   312
qed "cardMeqIndexH";
680946254afe new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff changeset
   313
11394
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   314
Goal "card(M) * card(H) = order(G)";
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   315
by (simp_tac (simpset() addsimps [cardMeqIndexH,lagrange, H_is_SG]) 1); 
11370
680946254afe new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff changeset
   316
qed "index_lem";
680946254afe new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff changeset
   317
11394
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   318
Goal "p^a <= card(H)";
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   319
by (rtac ([prime_p,not_dvd_M] MRS div_combine RS dvd_imp_le) 1); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   320
by (blast_tac (claset() addIs [SG_card1,H_is_SG]) 2); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   321
by (simp_tac (simpset() addsimps [index_lem,order_G,power_add,mult_dvd_mono,
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   322
                                  power_exponent_dvd,zero_less_m]) 1); 
11370
680946254afe new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff changeset
   323
qed "lemma_leq1";
680946254afe new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff changeset
   324
11394
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   325
Goal "card(H) <= p^a";
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   326
by (stac (card_M1 RS sym) 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   327
by (cut_facts_tac [M1_inj_H] 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   328
by (blast_tac (claset() addSIs [M1_subset_G]
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   329
			addIs [card_inj, H_into_carrier_G,
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   330
                               finite_G RSN(2, finite_subset)]) 1); 
11370
680946254afe new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff changeset
   331
qed "lemma_leq2";
680946254afe new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff changeset
   332
11394
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   333
Goal "card(H) = p^a";
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   334
by (blast_tac (claset() addIs [le_anti_sym, lemma_leq1, lemma_leq2]) 1); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   335
qed "card_H_eq";
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   336
val Card_H_eq = Export card_H_eq; 
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   337
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   338
Close_locale "sylow_central";
11370
680946254afe new GroupTheory example, e.g. the Sylow theorem (preliminary version)
paulson
parents:
diff changeset
   339
11394
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   340
Goal "\\<exists>H. H <<= G & card(H) = p^a";
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   341
by (cut_facts_tac [Lemma_A1] 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   342
by (blast_tac (claset() addDs [ExistsM1inM, H_is_subgroup, Card_H_eq]) 1); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   343
qed "sylow1";
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   344
val Sylow1 = export sylow1;
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   345
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   346
Close_locale "sylow";
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   347
Close_locale "coset";
e88c2c89f98e Locale-based group theory proofs
paulson
parents: 11370
diff changeset
   348
Close_locale "group";