src/HOL/GroupTheory/DirProd.ML
author wenzelm
Thu, 06 Dec 2001 00:39:40 +0100
changeset 12397 6766aa05e4eb
parent 11443 77ed7e2b56c8
child 12459 6978ab7cac64
permissions -rw-r--r--
less_induct, wf_induct_rule;
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/DirProd
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
Direct product of two groups
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
Open_locale "prodgroup";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    10
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    11
val e'_def = thm "e'_def";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    12
val binop'_def = thm "binop'_def";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    13
val inv'_def = thm "inv'_def";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    14
val P_def = thm "P_def";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    15
val Group_G' = thm "Group_G'";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    16
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    17
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    18
Addsimps [P_def, Group_G', Group_G];
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    19
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    20
Goal "(P.<cr>) = ((G.<cr>) \\<times> (G'.<cr>))";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    21
by (afs [ProdGroup_def] 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    22
qed "P_carrier";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    23
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    24
Goal "(P.<f>) = \
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    25
\     (lam (x, x'): (P.<cr>). lam (y, y'): (P.<cr>). ( x ## y, x' ##' y'))";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    26
by (afs [ProdGroup_def, binop_def, binop'_def] 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    27
qed "P_bin_op";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    28
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    29
Goal "(P.<inv>) = (lam (x, y): (P.<cr>). (i x, i' y))";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    30
by (afs [ProdGroup_def, inv_def, inv'_def] 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    31
qed "P_inverse";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    32
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    33
Goal "(P.<e>) = (G.<e>, G'.<e>)";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    34
by (afs [ProdGroup_def, e_def, e'_def] 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    35
qed "P_unit";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    36
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    37
Goal "P = (| carrier = P.<cr>, \
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    38
\       bin_op = (lam (x, x'): (P.<cr>). lam (y, y'): (P.<cr>).\
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    39
\                  (x ## y, x' ##' y')), \
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    40
\       inverse = (lam (x, y): (P.<cr>). (i x, i' y)), \
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    41
\       unit = P.<e> |)";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    42
by (afs [ProdGroup_def, P_carrier, P_bin_op, P_inverse, P_unit] 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    43
by (afs [binop_def, binop'_def, inv_def, inv'_def] 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    44
qed "P_defI";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    45
val P_DefI = export P_defI;
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    46
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    47
Delsimps [P_def];
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    48
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    49
Goal "(P.<f>) : (P.<cr>) \\<rightarrow> (P.<cr>) \\<rightarrow> (P.<cr>)";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    50
by (auto_tac (claset() addSIs [restrictI], 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    51
              simpset() addsimps  [P_bin_op, P_carrier, binop'_def, 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    52
                                   bin_op_closed])); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    53
qed "bin_op_prod_closed";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    54
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    55
Goal "(P.<inv>) : (P.<cr>) \\<rightarrow> (P.<cr>)";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    56
by (auto_tac (claset() addSIs [restrictI], 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    57
              simpset() addsimps  [P_inverse, P_carrier, inv_closed, 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    58
                    inv'_def, inverse_closed])); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    59
qed "inverse_prod_closed";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    60
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    61
(* MAIN PROOF *)
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    62
Goal "P : Group";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    63
by (stac P_defI 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    64
by (rtac GroupI 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    65
by (auto_tac (claset(), 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    66
       simpset() addsimps ([P_carrier,P_bin_op,P_inverse,P_unit] RL [sym]))); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    67
(* 1.  *)
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    68
by (rtac bin_op_prod_closed 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    69
(* 2. *)
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    70
by (rtac inverse_prod_closed 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    71
(* 3. *)
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    72
by (afs [P_carrier, P_unit, export e_closed] 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    73
(* 4. *)
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    74
by (afs [P_carrier, P_bin_op, P_inverse, P_unit, Group_G' RS inverse_closed,
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    75
         inv'_def, e_def, binop'_def, Group_G' RS (export inv_ax2)] 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    76
(* 5 *)
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    77
by (afs [P_carrier,P_bin_op,P_unit, Group_G' RS unit_closed, export e_ax1,
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    78
         binop_def, binop'_def] 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    79
(* 6 *)
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    80
by (afs [P_carrier,P_bin_op, Group_G' RS bin_op_closed, 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    81
         binop'_def, binop_assoc,export binop_assoc] 1);
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    82
qed "prodgroup_is_group";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    83
val ProdGroup_is_Group = export prodgroup_is_group;
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    84
11443
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents: 11394
diff changeset
    85
Delsimps [P_def, Group_G', Group_G];
11394
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    86
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    87
Close_locale "prodgroup";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    88
Close_locale "r_group";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    89
Close_locale "group";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    90
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    91
Goal "ProdGroup : Group \\<rightarrow> Group \\<rightarrow> Group";
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    92
by (REPEAT (ares_tac [funcsetI, ProdGroup_is_Group] 1));
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    93
by (auto_tac (claset(), simpset() addsimps [ProdGroup_def])); 
e88c2c89f98e Locale-based group theory proofs
paulson
parents:
diff changeset
    94
qed "ProdGroup_arity";