| 11394 |      1 | (*  Title:      HOL/GroupTheory/DirProd
 | 
|  |      2 |     ID:         $Id$
 | 
|  |      3 |     Author:     Florian Kammueller, with new proofs by L C Paulson
 | 
|  |      4 |     Copyright   1998-2001  University of Cambridge
 | 
|  |      5 | 
 | 
|  |      6 | Direct product of two groups
 | 
|  |      7 | *)
 | 
|  |      8 | 
 | 
|  |      9 | DirProd = Coset +
 | 
|  |     10 | 
 | 
|  |     11 | consts
 | 
|  |     12 |   ProdGroup :: "(['a grouptype, 'b grouptype] => ('a * 'b) grouptype)"
 | 
|  |     13 | 
 | 
|  |     14 | defs 
 | 
|  |     15 |   ProdGroup_def "ProdGroup == lam G: Group. lam G': Group.
 | 
|  |     16 |     (| carrier = ((G.<cr>) \\<times> (G'.<cr>)),
 | 
|  |     17 |        bin_op = (lam (x, x'): ((G.<cr>) \\<times> (G'.<cr>)). 
 | 
|  |     18 |                  lam (y, y'): ((G.<cr>) \\<times> (G'.<cr>)).
 | 
|  |     19 |                   ((G.<f>) x y,(G'.<f>) x' y')),
 | 
|  |     20 |        inverse = (lam (x, y): ((G.<cr>) \\<times> (G'.<cr>)). ((G.<inv>) x, (G'.<inv>) y)),
 | 
|  |     21 |        unit = ((G.<e>),(G'.<e>)) |)"
 | 
|  |     22 | 
 | 
|  |     23 | syntax
 | 
|  |     24 |   "@Pro" :: "['a grouptype, 'b grouptype] => ('a * 'b) grouptype" ("<|_,_|>" [60,61]60)
 | 
|  |     25 | 
 | 
|  |     26 | translations
 | 
|  |     27 |   "<| G , G' |>" == "ProdGroup G G'"
 | 
|  |     28 | 
 | 
|  |     29 | locale r_group = group +
 | 
|  |     30 |   fixes
 | 
|  |     31 |     G'        :: "'b grouptype"
 | 
|  |     32 |     e'        :: "'b"
 | 
|  |     33 |     binop'    :: "'b => 'b => 'b" 	("(_ ##' _)" [80,81]80 )
 | 
|  |     34 |     INV'      :: "'b => 'b"              ("i' (_)"      [90]91)
 | 
|  |     35 |   assumes 
 | 
|  |     36 |     Group_G' "G' : Group"
 | 
|  |     37 |   defines
 | 
|  |     38 |     e'_def  "e' == unit G'"
 | 
|  |     39 |     binop'_def "x ##' y == bin_op G' x y"
 | 
|  |     40 |     inv'_def "i'(x) == inverse G' x"
 | 
|  |     41 | 
 | 
|  |     42 | locale prodgroup = r_group +
 | 
|  |     43 |   fixes 
 | 
|  |     44 |     P :: "('a * 'b) grouptype"
 | 
|  |     45 |   defines 
 | 
|  |     46 |     P_def "P == <| G, G' |>"
 | 
|  |     47 | end
 |