
diff -r 2c4bb701546a -r 680946254afe src/HOL/GroupTheory/Group.thy
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/GroupTheory/Group.thy	Sun Jun 10 08:03:35 2001 +0200
@@ -0,0 +1,60 @@
+(*  Title:      HOL/GroupTheory/Group
+    ID:         $Id$
+    Author:     Florian Kammueller, with new proofs by L C Paulson
+    Copyright   2001  University of Cambridge
+*)
+
+(* Theory of Groups, for Sylow's theorem. F. Kammueller, 11.10.96
+Step 1: Use two separate .thy files for groups  and Sylow's thm, respectively:
+
+Besides the formalization of groups as polymorphic sets of quadruples this
+theory file contains a bunch of declarations and axioms of number theory
+because it is meant to be the basis for a proof experiment of the theorem of
+Sylow. This theorem uses various kinds of theoretical domains.  To improve the
+syntactical form I have deleted here in contrast to the first almost complete
+version of the proof (8exp/Group.* or presently results/AllgGroup/Group.* )
+all definitions which are specific for Sylow's theorem. They are now contained
+in the file Sylow.thy.
+*)
+
+Group = Exponent +
+
+
+constdefs
+
+  carrier :: "('a set * (['a, 'a] => 'a) * ('a => 'a) * 'a) => 'a set"
+   "carrier(G) == fst(G)"
+  
+  bin_op  :: "('a set * (['a, 'a] => 'a) * ('a => 'a) * 'a) => (['a, 'a] => 'a)"
+   "bin_op(G)  == fst(snd(G))"
+  
+  invers :: "('a set * (['a, 'a] => 'a) * ('a => 'a) * 'a) => ('a => 'a)"
+"invers(G) == fst(snd(snd(G)))"
+  
+  unity     :: "('a set * (['a, 'a] => 'a) * ('a => 'a) * 'a) => 'a"
+ "unity(G)     == snd(snd(snd(G)))"
+  
+  order     :: "('a set * (['a, 'a] => 'a) * ('a => 'a) * 'a) => nat"
+   "order(G) == card(fst(G))"
+
+  r_coset    :: "[('a set * (['a, 'a] => 'a) * ('a => 'a) * 'a), 'a set, 'a] => 'a set"    
+   "r_coset G  H  a == {b . ? h : H. bin_op G h a = b}"
+
+  set_r_cos  :: "[('a set * (['a, 'a] => 'a) * ('a => 'a) * 'a), 'a set] => 'a set set"
+
+   "set_r_cos G H == {C . ? a : carrier G. C = r_coset G H a}"
+
+  subgroup :: "['a set,('a set * (['a, 'a] => 'a) * ('a => 'a) * 'a)] => bool"
+               ("_ <<= _" [51,50]50)
+
+   "H <<= G == H <= carrier(G) & (H,bin_op(G),invers(G),unity(G)) : Group"
+
+  Group :: "'a  set"
+
+   "Group == {(G,f,inv,e). f : G -> G -> G & inv : G -> G & e : G &\
+\                     (! x: G. ! y: G. !z: G.\
+\                     (f (inv x) x = e) & (f e x = x) &
+		      (f (f x y) z = f (x) (f y z)))}"
+
+end
+




