> > // set up standard matrix group > G := SL(4, 7); > > G; MatrixGroup(4, GF(7)) Generators: [3 0 0 0] [0 5 0 0] [0 0 1 0] [0 0 0 1] [6 0 0 1] [6 0 0 0] [0 6 0 0] [0 0 6 0] > > // generator of G > G.1; [3 0 0 0] [0 5 0 0] [0 0 1 0] [0 0 0 1] > > x := G.1 * G.2; > x; [4 0 0 3] [2 0 0 0] [0 6 0 0] [0 0 6 0] > Order (x); 342 > > RandomSchreier (G); > > Base (G); < Vector space of degree 4, dimension 1 over GF(7) Echelonized basis: (1 0 0 0), (1 0 0 0), Vector space of degree 4, dimension 1 over GF(7) Echelonized basis: (0 1 0 0), Vector space of degree 4, dimension 1 over GF(7) Echelonized basis: (0 0 1 0), Vector space of degree 4, dimension 1 over GF(7) Echelonized basis: (0 0 0 1), (0 0 0 1), (0 0 1 0) > > > BasicOrbitLengths (G); [ 400, 6, 399, 392, 343, 6, 6 ] > > G := OmegaPlus (100, 5); > > g := Random (G); > time n := Order (g); Time: 0.000 > n; 3102655976587867427292017364912 > > time h := g^(n div 2); Time: 0.000 > Order (h); 2 > > // char and min poly computations > repeat > g := Random (G); > c := CharacteristicPolynomial (g); > m := MinimalPolynomial (g); > until m ne c; > > F := GF (5); > > P := PolynomialRing (F); > c := P!c; > Factorisation (c); [ , , , , , , ] > > m := P!m; > Factorisation (m); [ , , , , , , ] > > > // reducible example > O53 := PermutationGroup<45 | > (2,3)(4,6)(7,9)(8,11)(12,16)(13,14)(15,19)(18,22)(20,25)(21,26)(27,33)(28,35) > (29,34)(31,38)(36,43)(39,41), > (1,2,4,7,10,14,16,3,5)(6,8,12,17,21,27,34,41,44)(9,13,18,23,29,37,33,40,43\ ) > (11,15,20)(19,24,30,25,31,22,28,36,38)(26,32,39)(35,42,45)>; > > O53; Permutation group O53 acting on a set of cardinality 45 (2, 3)(4, 6)(7, 9)(8, 11)(12, 16)(13, 14)(15, 19)(18, 22)(20, 25)(21, 26)(27, 33)(28, 35)(29, 34)(31, 38)(36, 43)(39, 41) (1, 2, 4, 7, 10, 14, 16, 3, 5)(6, 8, 12, 17, 21, 27, 34, 41, 44)(9, 13, 18, 23, 29, 37, 33, 40, 43)(11, 15, 20)(19, 24, 30, 25, 31, 22, 28, 36, 38)(26, 32, 39)(35, 42, 45) > CompositionFactors (O53); G | C(2, 3) = S(4, 3) 1 > > P := PermutationModule(O53, GaloisField(2)); > P; GModule P of dimension 45 over GF(2) > > IsIrreducible (P); false GModule of dimension 44 over GF(2) GModule of dimension 1 over GF(2) > > // module composition series > S, F := CompositionSeries(P); > > // submodules > S; [ GModule of dimension 14 over GF(2), GModule of dimension 20 over GF(2), GModule of dimension 21 over GF(2), GModule of dimension 29 over GF(2), GModule of dimension 30 over GF(2), GModule of dimension 31 over GF(2), GModule P of dimension 45 over GF(2) ] > > // module composition factors > F; [ GModule of dimension 14 over GF(2), GModule of dimension 6 over GF(2), GModule of dimension 1 over GF(2), GModule of dimension 8 over GF(2), GModule of dimension 1 over GF(2), GModule of dimension 1 over GF(2), GModule of dimension 14 over GF(2) ] > > C := Constituents(P); > C; [ GModule of dimension 1 over GF(2), GModule of dimension 6 over GF(2), GModule of dimension 8 over GF(2), GModule of dimension 14 over GF(2) ] > [IsAbsolutelyIrreducible(m): m in C]; [ true, true, false, true ] > > M := C[3]; > M; GModule M of dimension 8 over GF(2) > f, A, d := IsAbsolutelyIrreducible (M); > > // matrix algebra generator for endomorphism algebra E of M (field) > A; [1 0 1 1 0 1 0 0] [0 0 0 0 1 0 1 0] [0 0 0 0 0 0 0 1] [1 1 0 0 0 0 1 0] [0 0 1 0 0 1 1 0] [0 1 0 0 0 0 1 1] [0 1 1 0 1 1 0 0] [0 0 1 0 0 0 0 1] > // dimension of E > d; 2 > > // action of O53 on this factor > > H := ActionGroup (M); > > // absolute representation > A := AbsoluteRepresentation (H); > A; MatrixGroup(4, GF(2^2)) Generators: [ 1 0 0 0] [$.1^2 0 1 $.1] [ 1 $.1 $.1^2 $.1^2] [ 1 $.1 $.1 $.1] [ 1 $.1 1 1] [ 0 $.1 0 $.1^2] [ 0 $.1^2 0 $.1] [ 1 0 0 1] > > CompositionFactors (A); G | C(2, 3) = S(4, 3) 1 > > // setting up a matrix group > G := sub [3, 0, 0, 1] > >; > > G; MatrixGroup(2, GF(5)) Generators: [1 2] [0 1] [3 0] [0 1] > #G; 20 > > IdentifyGroup (G); <20, 3> > H := SmallGroup (20, 3); > H; GrpPC : H of order 20 = 2^2 * 5 PC-Relations: H.1^2 = H.2, H.2^2 = Id(H), H.3^5 = Id(H), H.3^H.1 = H.3^2, H.3^H.2 = H.3^4 > > // imprimitive group > G := MatrixGroup<6, GF(7) | > [ 5, 0, 4, 5, 2, 4, 3, 2, 1, 4, 5, 2, 6, 0, 0, 4, 3, 6, 5, 4, 4, 3, 6, 1, > 2, 3, 3, 5, 2, 6, 0, 2, 3, 4, 0, 6 ], > [ 0, 0, 6, 4, 3, 6, 4, 4, 5, 4, 2, 1, 2, 0, 3, 6, 1, 2, 2, 5, 6, 3, 1, 4, > 5, 2, 1, 5, 0, 3, 6, 6, 1, 2, 3, 1 ], > [ 3, 3, 3, 5, 1, 6, 3, 0, 5, 0, 5, 4, 3, 1, 2, 4, 5, 2, 5, 3, 6, 1, 6, 2, > 2, 4, 1, 0, 2, 5, 3, 4, 2, 3, 5, 0 ], > [ 1, 2, 3, 4, 0, 5, 6, 0, 1, 2, 3, 0, 0, 3, 2, 6, 0, 4, 3, 3, 4, 2, 5, 0, > 4, 4, 3, 6, 3, 0, 5, 2, 1, 5, 6, 4 ], > [ 1, 6, 2, 5, 0, 1, 1, 4, 2, 2, 4, 5, 0, 2, 4, 4, 0, 5, 4, 5, 1, 2, 2, 6, > 3, 2, 6, 6, 6, 1, 2, 4, 1, 0, 1, 6 ], > [ 4, 6, 1, 3, 2, 5, 2, 0, 6, 2, 5, 4, 5, 0, 5, 1, 2, 3, 2, 6, 6, 1, 4, 2, > 5, 3, 1, 0, 2, 2, 1, 4, 0, 4, 2, 2 ], > [ 5, 3, 4, 1, 2, 6, 0, 0, 3, 4, 4, 1, 1, 0, 6, 5, 0, 4, 2, 6, 6, 1, 4, 2, > 6, 2, 3, 1, 0, 1, 0, 4, 2, 5, 5, 4 ] >; > > G; MatrixGroup(6, GF(7)) Generators: [5 0 4 5 2 4] [3 2 1 4 5 2] [6 0 0 4 3 6] [5 4 4 3 6 1] [2 3 3 5 2 6] [0 2 3 4 0 6] [0 0 6 4 3 6] [4 4 5 4 2 1] [2 0 3 6 1 2] [2 5 6 3 1 4] [5 2 1 5 0 3] [6 6 1 2 3 1] [3 3 3 5 1 6] [3 0 5 0 5 4] [3 1 2 4 5 2] [5 3 6 1 6 2] [2 4 1 0 2 5] [3 4 2 3 5 0] [1 2 3 4 0 5] [6 0 1 2 3 0] [0 3 2 6 0 4] [3 3 4 2 5 0] [4 4 3 6 3 0] [5 2 1 5 6 4] [1 6 2 5 0 1] [1 4 2 2 4 5] [0 2 4 4 0 5] [4 5 1 2 2 6] [3 2 6 6 6 1] [2 4 1 0 1 6] [4 6 1 3 2 5] [2 0 6 2 5 4] [5 0 5 1 2 3] [2 6 6 1 4 2] [5 3 1 0 2 2] [1 4 0 4 2 2] [5 3 4 1 2 6] [0 0 3 4 4 1] [1 0 6 5 0 4] [2 6 6 1 4 2] [6 2 3 1 0 1] [0 4 2 5 5 4] > > IsPrimitive (G); false > // blocks > B := Blocks (G); > > #B; 3 > B[1]; Vector space of degree 6, dimension 2 over GF(7) Generators: (1 1 6 5 4 0) (0 6 2 5 0 1) Echelonized basis: (1 0 1 3 4 1) (0 1 5 2 0 6) > > // Now obtain a permutation representation of G in its action on the blocks. > P := BlocksImage (G); > P; Permutation group P acting on a set of cardinality 3 Id(P) Id(P) Id(P) Id(P) Id(P) (1, 2, 3) (1, 2) > #P; 6 > g := G.6 * G.7; > ImprimitiveAction (G, g); (2, 3) > > // hom from G to P > tau := hom< G -> P | [P.i : i in [1..Ngens (P)]]>; > > // kernel of hom > K := Kernel (tau); > K; MatrixGroup(6, GF(7)) of order 2^12 * 3^3 Generators: [5 0 4 5 2 4] [3 2 1 4 5 2] [6 0 0 4 3 6] [5 4 4 3 6 1] [2 3 3 5 2 6] [0 2 3 4 0 6] [0 0 6 4 3 6] [4 4 5 4 2 1] [2 0 3 6 1 2] [2 5 6 3 1 4] [5 2 1 5 0 3] [6 6 1 2 3 1] [3 3 3 5 1 6] [3 0 5 0 5 4] [3 1 2 4 5 2] [5 3 6 1 6 2] [2 4 1 0 2 5] [3 4 2 3 5 0] [1 2 3 4 0 5] [6 0 1 2 3 0] [0 3 2 6 0 4] [3 3 4 2 5 0] [4 4 3 6 3 0] [5 2 1 5 6 4] [0 5 2 5 1 1] [4 0 3 3 1 1] [1 1 2 4 0 0] [0 4 6 1 2 6] [1 2 2 5 4 5] [4 0 4 5 6 0] [5 5 6 6 1 3] [0 0 3 6 1 4] [3 4 3 5 0 6] [4 2 0 4 2 2] [3 0 5 5 3 3] [5 6 1 5 3 3] [6 5 5 0 6 2] [1 3 4 3 6 4] [5 2 1 4 5 2] [2 0 6 1 2 0] [5 3 0 4 5 6] [1 3 5 2 3 2] [6 0 0 0 0 0] [0 6 0 0 0 0] [0 0 6 0 0 0] [0 0 0 6 0 0] [0 0 0 0 6 0] [0 0 0 0 0 6] [5 2 5 0 4 5] [5 1 5 2 6 3] [4 2 3 3 3 3] [3 6 2 1 4 6] [1 3 5 6 6 6] [6 6 5 1 6 1] > > > /* name simple group */ > F := GF(3); > P := GL(5,F); > gens := [ > P![2,1,2,1,2,2,0,0,0,2,0,2,0,0,0,0,1,2,0,1,1,0,2,2,1], > P![2,1,0,2,1,1,2,0,2,2,1,1,2,1,1,0,2,0,1,1,1,1,2,2,2]]; > G := sub

; > flag, name := SimpleGroupName(G); > flag; true > "name is ", name; name is [* <18, 1, "M11"> *] > > F := GF(7^2); > P := GL (6,F); > w := PrimitiveElement (F); > gens := [ > P![w^12,w^36, 0, 5, 2, 0,w^44,w^36, 0, 6, 2, 0, > w^42,w^42,w^28,w^22,w^22, 3, 4, 3, 0,w^36,w^12, 0, > 2, 3, 0,w^20,w^12, 0,w^14,w^14, 1,w^18,w^18, w^4], > > P![w^38,w^26,w^25,w^21, w^9, 3,w^21,w^45,w^33, w^4,w^28, > 2, 6, 4, w^1, w^7,w^15, 4, 1,w^36,w^35, w^5,w^41, 5, > w^31, w^7,w^43,w^36,w^12, 1,w^34,w^42,w^11,w^39,w^47, 2] > ]; > G := sub

; > LieCharacteristic (G); 5 > flag, name := LieType(G, 5); > flag; true > name; <"A", 1, 5> > > // constructive recognition > S := Alt (26); > S; Permutation group S acting on a set of cardinality 26 Order = 2^22 * 3^10 * 5^6 * 7^3 * 11^2 * 13^2 * 17 * 19 * 23 (1, 2)(3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26) (1, 2, 3) > M := PermutationModule (S, GF (5^2)); > G := ActionGroup (M); > G := RandomConjugate (G); > f, type, n := GuessAltsymDegree (G); > f, type, n; true Alternating 26 > f, alpha, beta := RecogniseAlternating (G, n); > f; true > x := beta (S.1); > alpha (G.2); (6, 21, 10) > > x := Random (G); > y := alpha (x); > z := beta (y); > Order (x * z^-1); 1 > > // matrix group defined over "large" field > K := GF(5, 7); > G := > MatrixGroup<6, GF(5, 7) | > [w^19035, w^14713, w^50617, w^14957, w^51504, w^48397, w^16317, w^3829, > w^35189, w^2473, w^19497, w^77192, w^46480, w^6772, w^29577, w^61815, > w^54313, w^16757, w^43765, w^64406, w^58788, w^30789, w^13579, w^66728, > w^7733, w^45434, w^42411, w^61613, w^12905, w^6889, w^50116, w^16117, > w^56717, w^25226, w^49940, w^36836 ], > [w^63955, w^40568, w^45004, w^11642, w^39536, w^11836, w^52594, w^71166, > w^47015, w^74450, w^32373, w^37021, w^76381, w^18155, w^57943, w^31194, > w^62524, w^65864, w^11868, w^76867, w^26483, w^41335, w^64856, w^41125, > w^43990, w^40104, w^24842, w^3153, w^23777, w^60024, w^14454, w^68648, > w^43403, w^26710, w^39779, w^22074 ] >; > LMGCompositionFactors (G); G | A(1, 78125) = L(2, 78125) * | Cyclic(2) 1 > > // databases of sporadic and other groups > G := MatrixGroup ("J1", 1); > G; MatrixGroup(20, GF(2)) of order 2^3 * 3 * 5 * 7 * 11 * 19 Generators: [1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [0 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [0 0 0 0 1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0] [1 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0] [1 0 1 1 1 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0] [0 1 0 1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0] [0 0 0 1 1 0 0 1 1 0 0 0 1 1 0 0 0 0 0 0] [0 0 1 1 1 0 1 1 0 0 1 0 0 0 1 0 0 0 0 0] [0 0 0 0 1 1 0 0 0 1 0 1 1 0 0 1 0 0 0 0] [1 1 1 1 1 0 0 1 1 1 1 1 1 0 0 1 0 0 0 0] [0 1 1 1 0 0 0 1 1 1 0 1 1 1 0 0 0 0 0 0] [0 0 1 0 1 0 0 0 0 1 1 1 0 0 1 1 0 0 0 0] [0 0 1 0 1 0 0 0 0 0 1 1 0 1 1 0 0 1 0 0] [1 0 0 0 1 0 1 0 1 0 0 0 1 0 1 1 1 0 0 0] [1 1 0 0 1 0 1 1 0 1 1 1 0 1 0 0 1 1 1 1] [1 1 0 1 0 1 0 1 1 1 0 1 1 1 1 0 0 0 0 1] [1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [0 1 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0] [1 0 1 0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0] [0 1 1 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0] [1 0 0 1 0 1 0 0 0 1 1 0 0 0 0 0 0 0 0 0] [1 1 1 1 0 0 0 1 0 0 1 1 0 0 0 0 0 0 0 0] [0 0 0 1 0 0 1 1 0 1 1 1 1 0 0 0 0 0 0 0] [1 0 1 0 1 0 1 1 0 0 0 1 1 0 0 0 0 0 0 0] [1 0 0 0 0 0 0 1 0 1 0 0 1 1 1 1 0 0 0 0] [0 1 1 0 0 1 0 1 0 1 0 0 1 1 1 1 1 0 0 0] [1 0 1 0 0 0 1 0 0 1 1 0 0 1 0 0 0 0 0 0] [1 1 0 0 0 1 1 0 0 0 0 0 0 1 0 1 0 0 0 0] [0 1 0 0 0 1 1 0 1 0 1 1 0 1 1 0 0 0 0 0] [1 0 1 1 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0] [0 0 0 0 0 1 1 0 0 0 1 0 0 1 0 1 0 0 1 0] [0 0 1 1 1 1 0 1 0 1 0 1 1 0 1 0 0 1 1 0] [0 0 1 0 1 1 0 1 0 1 1 0 0 0 0 0 0 0 0 1] > > // maximals of classical groups > > // normalisers in GL(8, 7) of maximals of O^+(8, 7) > // which are of C6-type > > L := ClassicalMaximals ("O+", 8, 7: normaliser := true, classes := {6}); > LMGCompositionFactors (L[1]); G | Cyclic(2) * | Alternating(8) * | Cyclic(2) * | Cyclic(2) * | Cyclic(2) * | Cyclic(2) * | Cyclic(2) * | Cyclic(2) * | Cyclic(3) * | Cyclic(2) 1 > G := L[1]; > P, phi, M := RadicalQuotient (G); > P; Permutation group P acting on a set of cardinality 1680 Order = 40320 = 2^7 * 3^2 * 5 * 7 > Q, tau := DegreeReduction (P); > Q; Permutation group Q acting on a set of cardinality 105 Order = 40320 = 2^7 * 3^2 * 5 * 7 > tau; Mapping from: GrpPerm: P to GrpPerm: Q > CompositionFactors (Q); G | Cyclic(2) * | Alternating(8) 1 > SetVerbose ("Subgroups", 2); > // all insoluble subgroups of order not divisible by 7 > S := NonsolvableSubgroups (Q: OrderDividing := #Q div 7); +subgroups +radical quotient -radical quotient: 0.000 secs +subgroups_tf +database lookup .db lookup: top layer has order 40320, quotient is Sym(8) .db lookup: have read all subgroups (296) from database .db lookup: got mapping onto group after 2 tries -database lookup: success: 0.050 secs .subgroups_tf: database look up was succesful .subgroups_tf: database lookup : 0.050 secs .subgroups_tf: all necessary subgroups of TF group were in database. .subgroups_tf: time for conversion: 0.000 secs. -subgroups_tf: 20 subgroup classes found: 0.050 secs -subgroups: 20 subgroup classes found: 0.050 secs > #S; 20 > L := [s`subgroup: s in S]; > T := [ (l @@ tau) @@ phi: l in L]; > [LMGOrder (t): t in T]; [ 23040, 23040, 46080, 46080, 46080, 46080, 46080, 46080, 69120, 92160, 92160, 138240, 138240, 138240, 138240, 276480, 276480, 276480, 276480, 552960 ] > V := VectorSpace (GF (7), 8); > > // demonstrate that there are orbits of vectors having > // different lengths under each subgroup > for i in [1..#T] do > i; > repeat > v := Random (V); O := Orbit (T[i], v); > u := Random (V); O1 := Orbit (T[i], u); > until #O ne #O1; > end for; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 > > // 6-dimensional repn of the Braid group on 4 strings > // defined over rational function field of rank 2 > Q := Rationals (); > E := RationalFunctionField (Q, 2); > > A := > [-t * q^2, 0,0,q^2 -q, q^2 - q,0, > 0,0,0,q,0,0, > 0,0,0,0,q,0, > 0,1,0,1-q,0,0, > 0,0,1,0,1-q,0, > 0,0,0,0,0,1]; > > B := [0,q,0,0,0,0, > 1,1-q,0,0,0,0, > 0,0,1,0,0,0, > 0,t*(q - q^2), 0, -t *q^2, 0, q^2 - q, > 0,0,0,0,0,q, > 0,0,0,0,1,1-q]; > > C := [1,0,0,0,0,0, > 0,0,q,0,0,0, > 0,1,1-q,0,0,0, > 0,0,0,0,q,0, > 0,0,0,1,1-q,0, > 0,0,t*(q-q^2), 0, t*(q - q^2), -t * q^2]; > > R := sub; > R; MatrixGroup(6, Multivariate rational function field of rank 2 over Rational Field) Generators: [ -q^2*t 0 0 q^2 - q q^2 - q 0] [ 0 0 0 q 0 0] [ 0 0 0 0 q 0] [ 0 1 0 -q + 1 0 0] [ 0 0 1 0 -q + 1 0] [ 0 0 0 0 0 1] [ 0 q 0 0 0 0] [ 1 -q + 1 0 0 0 0] [ 0 0 1 0 0 0] [ 0 -q^2*t + q*t 0 -q^2*t 0 q^2 - q] [ 0 0 0 0 0 q] [ 0 0 0 0 1 -q + 1] [ 1 0 0 0 0 0] [ 0 0 q 0 0 0] [ 0 1 -q + 1 0 0 0] [ 0 0 0 0 q 0] [ 0 0 0 1 -q + 1 0] [ 0 0 -q^2*t + q*t 0 -q^2*t + q*t -q^2*t] > > // now specialise to case t = -1/q > > F := RationalFunctionField (Q); > G := GL(6, F); > a := [q,0,0,q^2 - q, q^2 - q, 0, > 0,0,0,q, 0, 0, > > > 0,0,0,0, q, 0, > 0,1,0,1-q,0,0, > 0,0,1,0,1-q,0, > 0,0,0,0,0,1]; > b:=[ > 0,q,0,0,0,0, > 1,1-q,0,0,0,0, > 0,0,1,0,0,0, > 0,q-1,0,q,0,q^2 - q, > 0,0,0,0,0,q, > 0,0,0,0,1,1-q]; > > c := [ > 1,0,0,0,0,0, > 0,0,q,0,0,0, > 0,1,1-q,0,0,0, > 0,0,0,0,q,0, > 0,0,0,1,1-q,0, > 0,0,q-1,0,q-1,q]; > > H := sub; > > I := CongruenceImage (H); > I; MatrixGroup(6, GF(3)) Generators: [1 0 0 0 0 0] [0 0 0 1 0 0] [0 0 0 0 1 0] [0 1 0 0 0 0] [0 0 1 0 0 0] [0 0 0 0 0 1] [0 1 0 0 0 0] [1 0 0 0 0 0] [0 0 1 0 0 0] [0 0 0 1 0 0] [0 0 0 0 0 1] [0 0 0 0 1 0] [1 0 0 0 0 0] [0 0 1 0 0 0] [0 1 0 0 0 0] [0 0 0 0 1 0] [0 0 0 1 0 0] [0 0 0 0 0 1] > IsIsomorphic (I, Sym (4)); true Mapping from: GrpMat: I to GrpPerm: $, Degree 4, Order 2^3 * 3 Composition of Mapping from: GrpMat: I to GrpPC and Mapping from: GrpPC to GrpPC and Mapping from: GrpPC to GrpPerm: $, Degree 4, Order 2^3 * 3 > > // P_4, the "pure braid group" is a subgroup of index 24 inside B_4 > > W := SLPGroup (3); > pure := [ > W.3 * W.2 * W.1^2 * W.2^-1 * W.3^-1, > W.2 * W.1^2 * W.2^-1, > W.3 * W.2^2 * W.3^-1, > W.1^2, W.2^2, W.3^2 > ]; > > A := Evaluate (pure, [H.1, H.2, H.3]); > > P := sub ; > > // P has no torsion elements > I := CongruenceImage (P); > I; MatrixGroup(6, GF(3)) of order 1 > > M := GModule (H); > f, U, W := IsIrreducible (M); > > U, W; GModule U of dimension 4 over Univariate rational function field over Rational Field GModule W of dimension 2 over Univariate rational function field over Rational Field > > // can prove that 2-dimension repn > // is faithful repn for P_3 > // so PA is in kernel of hom from P_4 to P_3 > A := ActionGroup (U); > gens := [ActionGenerator (U, i): i in [1..3]]; > A; MatrixGroup(4, Univariate rational function field over Rational Field) Generators: [q -q^2 + 2*q 0 0] [0 (2*q - 1)/(q - 2) (q^2 - 1)/(q^2 - 4*q + 4) 0] [0 -q - 1 (-q^2 + q - 1)/(q - 2) 0] [0 1 (q - 1)/(q - 2) 1] [q 0 0 0] [1 (2*q - 1)/(q - 2) (q + 1)/(q^2 - 4*q + 4) 0] [0 -q^2 + 1 (-q^2 + q - 1)/(q - 2) 0] [0 q - 1 (q - 1)/(q - 2) 1] [1 -q (q^4 - 2*q^3 - q)/(q - 2) q^4 + q^3] [0 -1/(q - 2) (q^4 - 3*q^3 + 2*q^2 - q + 1)/(q^2 - 4*q + 4) (q^4 - q^2)/(q - 2)] [0 1 (-q^3 + 2*q^2 + q - 1)/(q - 2) -q^3 - q^2] [0 0 q - 1 q^2] > IsSoluble (A); true > X := Evaluate (pure, [A.i : i in [1..3]]); > PA := sub< A | X >; > PA; MatrixGroup(4, Univariate rational function field over Rational Field) Generators: [1 0 0 0] [(-q^2 + 1)/(q - 2) (q^3 - q^2 - 1)/(q - 2) (q^2 - 1)/(q^2 - 4*q + 4) 0] [q^2 - 1 -q^3 + q^2 + q - 1 (-q^2 + q - 1)/(q - 2) 0] [-q + 1 q^2 - 2*q + 1 (q^2 - 2*q + 1)/(q - 2) q^2] [1 q^3 - q (q^3 - q)/(q - 2) 0] [(-q^2 + 1)/(q - 2) (2*q^3 - 2*q^2 - q)/(q - 2) (q^3 - q)/(q^2 - 4*q + 4) 0] [q^2 - 1 -q^3 + q (-2*q^2 + q)/(q - 2) 0] [-q + 1 q^2 - q (2*q - 2)/(q - 2) 1] [q^2 -q^3 + q (-q^3 + q)/(q - 2) 0] [(q^2 - 1)/(q - 2) (-q^3 + 2*q - 2)/(q - 2) (-q^3 + q)/(q^2 - 4*q + 4) 0] [-q^2 + 1 q^3 - q (q^3 - 2)/(q - 2) 0] [q - 1 -q^2 + q (-2*q + 2)/(q - 2) q^2] [q^2 -q^3 + q (-q^3 + q)/(q - 2) 0] [0 (-q^2 + q - 1)/(q - 2) (-q^3 + q^2 + q - 1)/(q^2 - 4*q + 4) 0] [0 q^2 - 1 (q^3 - q^2 - 1)/(q - 2) 0] [0 -q + 1 (-q^2 + 2*q - 1)/(q - 2) 1] [q^2 0 0 0] [(q^2 - 1)/(q - 2) (-q^2 + q - 1)/(q - 2) (-q^2 + 1)/(q^2 - 4*q + 4) 0] [-q^2 + 1 q^3 - q^2 - q + 1 (q^3 - q^2 - 1)/(q - 2) 0] [q - 1 -q^2 + 2*q - 1 (-q^2 + 2*q - 1)/(q - 2) 1] [1 q^3 - q (q^3 - q)/(q - 2) 0] [0 (q^3 - q^2 - 1)/(q - 2) (q^3 - q^2 - q + 1)/(q^2 - 4*q + 4) 0] [0 -q^2 + 1 (-q^2 + q - 1)/(q - 2) 0] [0 q - 1 (q^2 - 2*q + 1)/(q - 2) q^2] > > // commutator of two generators? > (PA.1, PA.2); [1 0 0 0] [0 1 0 0] [0 0 1 0] [0 0 0 1] > > // do all generators commute? > gens := [PA.i : i in [1..Ngens (PA)]]; > for i in [1..#gens] do > for j in [i + 1..#gens] do > x := (gens[i], gens[j]); > i, j, IsIdentity (x); > end for; > end for; 1 2 true 1 3 true 1 4 true 1 5 true 1 6 true 2 3 true 2 4 true 2 5 true 2 6 true 3 4 true 3 5 true 3 6 true 4 5 true 4 6 true 5 6 true > > // do all generators commute? > forall{: x in gens, y in gens | IsIdentity ((x, y))}; true > > // is PA abelian > IsAbelian (PA); true > > // this group is abelian so can't be in kernel from P_4 to P_3 > > Q := Rationals (); > P := PolynomialRing (Q); > f := x^2 - 2; > E := ext; > P := GL(2, E); > G := sub

; > G; MatrixGroup(2, E) Generators: [2 1] [1 1] [ y -1] [-3*y + 3 -y + 3] > CongruenceImage; Intrinsic 'CongruenceImage' Signatures: ( G) -> GrpMat, HomGrp, SeqEnum [ Prime, ExtDegree, Virtual, Limit ] construct congruence image H of G; return H, homomorphism from G to H, and images of generators of G; Virtual: construct Virtual congruence; Prime: applies to input defined over char 0 only; if positive, then lower bound for characteristic of image or if 0 then construct char 0 congruence image; ExtDegree: if G defined over (rational) function field of positive char, then attempt to construct congruence image over extension of this degree of coefficient field; Limit: degree of field extensions to consider in positive char or examine tuples in residue ring mod Limit in char 0. > I := [CongruenceImage (G: Prime := p): p in [3, 5,7,11, 13, 19, 23,29]]; > LMGCompositionFactors (I[1]); G | Cyclic(2) * | Cyclic(5) * | Cyclic(2) 1 > LMGCompositionFactors (I[2]); G | A(1, 25) = L(2, 25) * | Cyclic(2) 1 > LMGCompositionFactors (I[3]); G | A(1, 7) = L(2, 7) * | Cyclic(2) 1 > LMGCompositionFactors (I[4]); G | A(1, 121) = L(2, 121) * | Cyclic(2) 1 > [LMGCompositionFactors (h): h in I]; [ G | Cyclic(2) * | Cyclic(5) * | Cyclic(2) 1, G | A(1, 25) = L(2, 25) * | Cyclic(2) 1, G | A(1, 7) = L(2, 7) * | Cyclic(2) 1, G | A(1, 121) = L(2, 121) * | Cyclic(2) 1, G | A(1, 169) = L(2, 169) * | Cyclic(2) 1, G | A(1, 361) = L(2, 361) * | Cyclic(2) 1, G | A(1, 23) = L(2, 23) * | Cyclic(2) 1, G | A(1, 841) = L(2, 841) * | Cyclic(2) 1 ] > > // if p > 3 and y^2 - 2 is irreducible mod p > // then CongruenceImage is SL(2, p^2) otherwise SL(2,p) > > > > quit; Total time: 30.350 seconds, Total memory usage: 153.84MB > > // set up standard matrix group > G := SL(4, 7); > > G; MatrixGroup(4, GF(7)) Generators: [3 0 0 0] [0 5 0 0] [0 0 1 0] [0 0 0 1] [6 0 0 1] [6 0 0 0] [0 6 0 0] [0 0 6 0] > > // generator of G > G.1; [3 0 0 0] [0 5 0 0] [0 0 1 0] [0 0 0 1] > > x := G.1 * G.2; > x; [4 0 0 3] [2 0 0 0] [0 6 0 0] [0 0 6 0] > Order (x); 342 > > RandomSchreier (G); > > Base (G); < Vector space of degree 4, dimension 1 over GF(7) Echelonized basis: (1 0 0 0), (1 0 0 0), Vector space of degree 4, dimension 1 over GF(7) Echelonized basis: (0 1 0 0), Vector space of degree 4, dimension 1 over GF(7) Echelonized basis: (0 0 1 0), Vector space of degree 4, dimension 1 over GF(7) Echelonized basis: (0 0 0 1), (0 0 0 1), (0 0 1 0) > > > BasicOrbitLengths (G); [ 400, 6, 399, 392, 343, 6, 6 ] > > G := OmegaPlus (100, 5); > > g := Random (G); > time n := Order (g); Time: 0.000 > n; 28467169590294361113737793360 > > time h := g^(n div 2); Time: 0.000 > Order (h); 2 > > // char and min poly computations > repeat > g := Random (G); > c := CharacteristicPolynomial (g); > m := MinimalPolynomial (g); > until m ne c; > > F := GF (5); > > P := PolynomialRing (F); > c := P!c; > Factorisation (c); [ , , , , ] > > m := P!m; > Factorisation (m); [ , , , , ] > > > // reducible example > O53 := PermutationGroup<45 | > (2,3)(4,6)(7,9)(8,11)(12,16)(13,14)(15,19)(18,22)(20,25)(21,26)(27,33)(28,35) > (29,34)(31,38)(36,43)(39,41), > (1,2,4,7,10,14,16,3,5)(6,8,12,17,21,27,34,41,44)(9,13,18,23,29,37,33,40,43\ ) > (11,15,20)(19,24,30,25,31,22,28,36,38)(26,32,39)(35,42,45)>; > > O53; Permutation group O53 acting on a set of cardinality 45 (2, 3)(4, 6)(7, 9)(8, 11)(12, 16)(13, 14)(15, 19)(18, 22)(20, 25)(21, 26)(27, 33)(28, 35)(29, 34)(31, 38)(36, 43)(39, 41) (1, 2, 4, 7, 10, 14, 16, 3, 5)(6, 8, 12, 17, 21, 27, 34, 41, 44)(9, 13, 18, 23, 29, 37, 33, 40, 43)(11, 15, 20)(19, 24, 30, 25, 31, 22, 28, 36, 38)(26, 32, 39)(35, 42, 45) > CompositionFactors (O53); G | C(2, 3) = S(4, 3) 1 > > P := PermutationModule(O53, GaloisField(2)); > P; GModule P of dimension 45 over GF(2) > > IsIrreducible (P); false GModule of dimension 44 over GF(2) GModule of dimension 1 over GF(2) > > // module composition series > S, F := CompositionSeries(P); > > // submodules > S; [ GModule of dimension 14 over GF(2), GModule of dimension 20 over GF(2), GModule of dimension 21 over GF(2), GModule of dimension 29 over GF(2), GModule of dimension 30 over GF(2), GModule of dimension 44 over GF(2), GModule P of dimension 45 over GF(2) ] > > // module composition factors > F; [ GModule of dimension 14 over GF(2), GModule of dimension 6 over GF(2), GModule of dimension 1 over GF(2), GModule of dimension 8 over GF(2), GModule of dimension 1 over GF(2), GModule of dimension 14 over GF(2), GModule of dimension 1 over GF(2) ] > > C := Constituents(P); > C; [ GModule of dimension 1 over GF(2), GModule of dimension 6 over GF(2), GModule of dimension 8 over GF(2), GModule of dimension 14 over GF(2) ] > [IsAbsolutelyIrreducible(m): m in C]; [ true, true, false, true ] > > M := C[3]; > M; GModule M of dimension 8 over GF(2) > f, A, d := IsAbsolutelyIrreducible (M); > > // matrix algebra generator for endomorphism algebra E of M (field) > A; [0 1 0 1 1 0 1 0] [0 0 1 0 0 0 0 0] [0 1 1 0 0 0 0 0] [0 0 0 0 1 1 1 0] [0 0 0 1 0 0 0 1] [1 1 1 0 1 0 1 0] [1 1 1 0 0 1 0 1] [0 0 0 1 0 1 1 1] > // dimension of E > d; 2 > > // action of O53 on this factor > > H := ActionGroup (M); > > // absolute representation > A := AbsoluteRepresentation (H); > A; MatrixGroup(4, GF(2^2)) Generators: [ 1 1 $.1 1] [ 0 1 0 0] [ 0 $.1 $.1 $.1] [ 0 $.1^2 1 $.1] [ $.1 $.1^2 1 1] [ $.1 $.1^2 0 $.1^2] [ 1 $.1^2 1 $.1] [$.1^2 1 0 $.1] > > CompositionFactors (A); G | C(2, 3) = S(4, 3) 1 > > // setting up a matrix group > G := sub [3, 0, 0, 1] > >; > > G; MatrixGroup(2, GF(5)) Generators: [1 2] [0 1] [3 0] [0 1] > #G; 20 > > IdentifyGroup (G); <20, 3> > H := SmallGroup (20, 3); > H; GrpPC : H of order 20 = 2^2 * 5 PC-Relations: H.1^2 = H.2, H.2^2 = Id(H), H.3^5 = Id(H), H.3^H.1 = H.3^2, H.3^H.2 = H.3^4 > > // imprimitive group > G := MatrixGroup<6, GF(7) | > [ 5, 0, 4, 5, 2, 4, 3, 2, 1, 4, 5, 2, 6, 0, 0, 4, 3, 6, 5, 4, 4, 3, 6, 1, > 2, 3, 3, 5, 2, 6, 0, 2, 3, 4, 0, 6 ], > [ 0, 0, 6, 4, 3, 6, 4, 4, 5, 4, 2, 1, 2, 0, 3, 6, 1, 2, 2, 5, 6, 3, 1, 4, > 5, 2, 1, 5, 0, 3, 6, 6, 1, 2, 3, 1 ], > [ 3, 3, 3, 5, 1, 6, 3, 0, 5, 0, 5, 4, 3, 1, 2, 4, 5, 2, 5, 3, 6, 1, 6, 2, > 2, 4, 1, 0, 2, 5, 3, 4, 2, 3, 5, 0 ], > [ 1, 2, 3, 4, 0, 5, 6, 0, 1, 2, 3, 0, 0, 3, 2, 6, 0, 4, 3, 3, 4, 2, 5, 0, > 4, 4, 3, 6, 3, 0, 5, 2, 1, 5, 6, 4 ], > [ 1, 6, 2, 5, 0, 1, 1, 4, 2, 2, 4, 5, 0, 2, 4, 4, 0, 5, 4, 5, 1, 2, 2, 6, > 3, 2, 6, 6, 6, 1, 2, 4, 1, 0, 1, 6 ], > [ 4, 6, 1, 3, 2, 5, 2, 0, 6, 2, 5, 4, 5, 0, 5, 1, 2, 3, 2, 6, 6, 1, 4, 2, > 5, 3, 1, 0, 2, 2, 1, 4, 0, 4, 2, 2 ], > [ 5, 3, 4, 1, 2, 6, 0, 0, 3, 4, 4, 1, 1, 0, 6, 5, 0, 4, 2, 6, 6, 1, 4, 2, > 6, 2, 3, 1, 0, 1, 0, 4, 2, 5, 5, 4 ] >; > > G; MatrixGroup(6, GF(7)) Generators: [5 0 4 5 2 4] [3 2 1 4 5 2] [6 0 0 4 3 6] [5 4 4 3 6 1] [2 3 3 5 2 6] [0 2 3 4 0 6] [0 0 6 4 3 6] [4 4 5 4 2 1] [2 0 3 6 1 2] [2 5 6 3 1 4] [5 2 1 5 0 3] [6 6 1 2 3 1] [3 3 3 5 1 6] [3 0 5 0 5 4] [3 1 2 4 5 2] [5 3 6 1 6 2] [2 4 1 0 2 5] [3 4 2 3 5 0] [1 2 3 4 0 5] [6 0 1 2 3 0] [0 3 2 6 0 4] [3 3 4 2 5 0] [4 4 3 6 3 0] [5 2 1 5 6 4] [1 6 2 5 0 1] [1 4 2 2 4 5] [0 2 4 4 0 5] [4 5 1 2 2 6] [3 2 6 6 6 1] [2 4 1 0 1 6] [4 6 1 3 2 5] [2 0 6 2 5 4] [5 0 5 1 2 3] [2 6 6 1 4 2] [5 3 1 0 2 2] [1 4 0 4 2 2] [5 3 4 1 2 6] [0 0 3 4 4 1] [1 0 6 5 0 4] [2 6 6 1 4 2] [6 2 3 1 0 1] [0 4 2 5 5 4] > > IsPrimitive (G); false > // blocks > B := Blocks (G); > > #B; 3 > B[1]; Vector space of degree 6, dimension 2 over GF(7) Generators: (1 1 6 5 4 0) (0 6 2 5 0 1) Echelonized basis: (1 0 1 3 4 1) (0 1 5 2 0 6) > > // Now obtain a permutation representation of G in its action on the blocks. > P := BlocksImage (G); > P; Permutation group P acting on a set of cardinality 3 Id(P) Id(P) Id(P) Id(P) Id(P) (1, 2, 3) (1, 2) > #P; 6 > g := G.6 * G.7; > ImprimitiveAction (G, g); (2, 3) > > // hom from G to P > tau := hom< G -> P | [P.i : i in [1..Ngens (P)]]>; > > // kernel of hom > K := Kernel (tau); > K; MatrixGroup(6, GF(7)) of order 2^12 * 3^3 Generators: [5 0 4 5 2 4] [3 2 1 4 5 2] [6 0 0 4 3 6] [5 4 4 3 6 1] [2 3 3 5 2 6] [0 2 3 4 0 6] [0 0 6 4 3 6] [4 4 5 4 2 1] [2 0 3 6 1 2] [2 5 6 3 1 4] [5 2 1 5 0 3] [6 6 1 2 3 1] [3 3 3 5 1 6] [3 0 5 0 5 4] [3 1 2 4 5 2] [5 3 6 1 6 2] [2 4 1 0 2 5] [3 4 2 3 5 0] [1 2 3 4 0 5] [6 0 1 2 3 0] [0 3 2 6 0 4] [3 3 4 2 5 0] [4 4 3 6 3 0] [5 2 1 5 6 4] [0 5 5 6 5 3] [0 0 0 5 5 2] [5 5 6 4 6 4] [5 6 1 3 2 3] [0 5 0 3 6 6] [1 2 5 6 1 1] [1 0 4 2 5 2] [4 3 0 3 1 3] [3 2 6 3 5 4] [4 4 5 2 1 2] [0 5 2 6 3 3] [5 0 4 5 3 5] [0 3 0 6 1 2] [1 5 6 2 6 0] [0 5 2 6 4 5] [2 6 0 0 1 5] [1 2 5 5 6 2] [4 0 1 1 3 6] [2 4 6 4 5 2] [3 6 1 1 0 2] [5 3 5 3 3 5] [3 6 1 4 5 6] [0 2 4 2 3 1] [3 2 3 2 6 4] [3 6 5 5 5 4] [1 4 2 1 6 5] [4 1 3 5 0 0] [2 6 0 6 6 6] [3 1 4 4 3 6] [4 6 5 1 4 4] > > > /* name simple group */ > F := GF(3); > P := GL(5,F); > gens := [ > P![2,1,2,1,2,2,0,0,0,2,0,2,0,0,0,0,1,2,0,1,1,0,2,2,1], > P![2,1,0,2,1,1,2,0,2,2,1,1,2,1,1,0,2,0,1,1,1,1,2,2,2]]; > G := sub

; > flag, name := SimpleGroupName(G); > flag; true > "name is ", name; name is [* <18, 1, "M11"> *] > > F := GF(7^2); > P := GL (6,F); > w := PrimitiveElement (F); > gens := [ > P![w^12,w^36, 0, 5, 2, 0,w^44,w^36, 0, 6, 2, 0, > w^42,w^42,w^28,w^22,w^22, 3, 4, 3, 0,w^36,w^12, 0, > 2, 3, 0,w^20,w^12, 0,w^14,w^14, 1,w^18,w^18, w^4], > > P![w^38,w^26,w^25,w^21, w^9, 3,w^21,w^45,w^33, w^4,w^28, > 2, 6, 4, w^1, w^7,w^15, 4, 1,w^36,w^35, w^5,w^41, 5, > w^31, w^7,w^43,w^36,w^12, 1,w^34,w^42,w^11,w^39,w^47, 2] > ]; > G := sub

; > LieCharacteristic (G); 5 > flag, name := LieType(G, 5); > flag; true > name; <"A", 1, 5> > > // constructive recognition > S := Alt (26); > S; Permutation group S acting on a set of cardinality 26 Order = 2^22 * 3^10 * 5^6 * 7^3 * 11^2 * 13^2 * 17 * 19 * 23 (1, 2)(3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26) (1, 2, 3) > M := PermutationModule (S, GF (5^2)); > G := ActionGroup (M); > G := RandomConjugate (G); > f, type, n := GuessAltsymDegree (G); > f, type, n; true Alternating 26 > f, alpha, beta := RecogniseAlternating (G, n); > f; true > x := beta (S.1); > alpha (G.2); (10, 24, 12) > > x := Random (G); > y := alpha (x); > z := beta (y); > Order (x * z^-1); 1 > > // matrix group defined over "large" field > K := GF(5, 7); > G := > MatrixGroup<6, GF(5, 7) | > [w^19035, w^14713, w^50617, w^14957, w^51504, w^48397, w^16317, w^3829, > w^35189, w^2473, w^19497, w^77192, w^46480, w^6772, w^29577, w^61815, > w^54313, w^16757, w^43765, w^64406, w^58788, w^30789, w^13579, w^66728, > w^7733, w^45434, w^42411, w^61613, w^12905, w^6889, w^50116, w^16117, > w^56717, w^25226, w^49940, w^36836 ], > [w^63955, w^40568, w^45004, w^11642, w^39536, w^11836, w^52594, w^71166, > w^47015, w^74450, w^32373, w^37021, w^76381, w^18155, w^57943, w^31194, > w^62524, w^65864, w^11868, w^76867, w^26483, w^41335, w^64856, w^41125, > w^43990, w^40104, w^24842, w^3153, w^23777, w^60024, w^14454, w^68648, > w^43403, w^26710, w^39779, w^22074 ] >; > LMGCompositionFactors (G); G | A(1, 78125) = L(2, 78125) * | Cyclic(2) 1 > > // databases of sporadic and other groups > G := MatrixGroup ("J1", 1); > G; MatrixGroup(20, GF(2)) of order 2^3 * 3 * 5 * 7 * 11 * 19 Generators: [1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [0 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [0 0 0 0 1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0] [1 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0] [1 0 1 1 1 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0] [0 1 0 1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0] [0 0 0 1 1 0 0 1 1 0 0 0 1 1 0 0 0 0 0 0] [0 0 1 1 1 0 1 1 0 0 1 0 0 0 1 0 0 0 0 0] [0 0 0 0 1 1 0 0 0 1 0 1 1 0 0 1 0 0 0 0] [1 1 1 1 1 0 0 1 1 1 1 1 1 0 0 1 0 0 0 0] [0 1 1 1 0 0 0 1 1 1 0 1 1 1 0 0 0 0 0 0] [0 0 1 0 1 0 0 0 0 1 1 1 0 0 1 1 0 0 0 0] [0 0 1 0 1 0 0 0 0 0 1 1 0 1 1 0 0 1 0 0] [1 0 0 0 1 0 1 0 1 0 0 0 1 0 1 1 1 0 0 0] [1 1 0 0 1 0 1 1 0 1 1 1 0 1 0 0 1 1 1 1] [1 1 0 1 0 1 0 1 1 1 0 1 1 1 1 0 0 0 0 1] [1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [0 1 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0] [1 0 1 0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0] [0 1 1 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0] [1 0 0 1 0 1 0 0 0 1 1 0 0 0 0 0 0 0 0 0] [1 1 1 1 0 0 0 1 0 0 1 1 0 0 0 0 0 0 0 0] [0 0 0 1 0 0 1 1 0 1 1 1 1 0 0 0 0 0 0 0] [1 0 1 0 1 0 1 1 0 0 0 1 1 0 0 0 0 0 0 0] [1 0 0 0 0 0 0 1 0 1 0 0 1 1 1 1 0 0 0 0] [0 1 1 0 0 1 0 1 0 1 0 0 1 1 1 1 1 0 0 0] [1 0 1 0 0 0 1 0 0 1 1 0 0 1 0 0 0 0 0 0] [1 1 0 0 0 1 1 0 0 0 0 0 0 1 0 1 0 0 0 0] [0 1 0 0 0 1 1 0 1 0 1 1 0 1 1 0 0 0 0 0] [1 0 1 1 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0] [0 0 0 0 0 1 1 0 0 0 1 0 0 1 0 1 0 0 1 0] [0 0 1 1 1 1 0 1 0 1 0 1 1 0 1 0 0 1 1 0] [0 0 1 0 1 1 0 1 0 1 1 0 0 0 0 0 0 0 0 1] > > // maximals of classical groups > > // normalisers in GL(8, 7) of maximals of O^+(8, 7) > // which are of C6-type > > L := ClassicalMaximals ("O+", 8, 7: normaliser := true, classes := {6}); > LMGCompositionFactors (L[1]); G | Cyclic(2) * | Alternating(8) * | Cyclic(2) * | Cyclic(2) * | Cyclic(2) * | Cyclic(2) * | Cyclic(2) * | Cyclic(2) * | Cyclic(3) * | Cyclic(2) 1 > G := L[1]; > P, phi, M := RadicalQuotient (G); > P; Permutation group P acting on a set of cardinality 240 Order = 40320 = 2^7 * 3^2 * 5 * 7 > Q, tau := DegreeReduction (P); > Q; Permutation group Q acting on a set of cardinality 30 Order = 40320 = 2^7 * 3^2 * 5 * 7 Id(Q) Id(Q) Id(Q) Id(Q) Id(Q) Id(Q) (1, 2)(3, 4)(5, 6)(7, 8)(9, 11)(10, 12)(13, 17)(14, 18)(15, 19)(16, 20)(21, 23)(22, 24)(25, 27)(26, 29)(28, 30) (1, 3)(2, 4)(5, 7)(6, 8)(9, 11)(10, 12)(13, 14)(15, 16)(17, 18)(19, 20)(21, 22)(23, 24)(25, 27)(26, 28)(29, 30) (1, 5)(2, 6)(3, 7)(4, 8)(9, 10)(11, 12)(13, 17)(14, 18)(15, 21)(16, 22)(19, 23)(20, 24)(25, 27)(26, 28)(29, 30) (2, 9)(6, 10)(13, 15)(17, 21)(19, 25)(20, 26)(23, 27)(24, 28) (2, 13)(4, 14)(9, 15)(11, 16)(19, 25)(20, 27)(23, 26)(24, 28) Id(Q) > tau; Mapping from: GrpPerm: P to GrpPerm: Q > CompositionFactors (Q); G | Cyclic(2) * | Alternating(8) 1 > SetVerbose ("Subgroups", 2); > // all insoluble subgroups of order not divisible by 7 > S := NonsolvableSubgroups (Q: OrderDividing := #Q div 7); +subgroups +radical quotient -radical quotient: 0.000 secs +subgroups_tf +database lookup .db lookup: top layer has order 40320, quotient is Sym(8) .db lookup: have read all subgroups (296) from database .db lookup: got mapping onto group after 1 tries -database lookup: success: 0.080 secs .subgroups_tf: database look up was succesful .subgroups_tf: database lookup : 0.080 secs .subgroups_tf: all necessary subgroups of TF group were in database. .subgroups_tf: time for conversion: 0.000 secs. -subgroups_tf: 20 subgroup classes found: 0.080 secs -subgroups: 20 subgroup classes found: 0.080 secs > #S; 20 > L := [s`subgroup: s in S]; > T := [ (l @@ tau) @@ phi: l in L]; > [LMGOrder (t): t in T]; [ 23040, 23040, 46080, 46080, 46080, 46080, 46080, 46080, 69120, 92160, 92160, 138240, 138240, 138240, 138240, 276480, 276480, 276480, 276480, 552960 ] > V := VectorSpace (GF (7), 8); > > // demonstrate that there are orbits of vectors having > // different lengths under each subgroup > for i in [1..#T] do > i; > repeat > v := Random (V); O := Orbit (T[i], v); > u := Random (V); O1 := Orbit (T[i], u); > until #O ne #O1; > end for; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 > > // 6-dimensional repn of the Braid group on 4 strings > // defined over rational function field of rank 2 > Q := Rationals (); > E := RationalFunctionField (Q, 2); > > A := > [-t * q^2, 0,0,q^2 -q, q^2 - q,0, > 0,0,0,q,0,0, > 0,0,0,0,q,0, > 0,1,0,1-q,0,0, > 0,0,1,0,1-q,0, > 0,0,0,0,0,1]; > > B := [0,q,0,0,0,0, > 1,1-q,0,0,0,0, > 0,0,1,0,0,0, > 0,t*(q - q^2), 0, -t *q^2, 0, q^2 - q, > 0,0,0,0,0,q, > 0,0,0,0,1,1-q]; > > C := [1,0,0,0,0,0, > 0,0,q,0,0,0, > 0,1,1-q,0,0,0, > 0,0,0,0,q,0, > 0,0,0,1,1-q,0, > 0,0,t*(q-q^2), 0, t*(q - q^2), -t * q^2]; > > R := sub; > R; MatrixGroup(6, Multivariate rational function field of rank 2 over Rational Field) Generators: [ -q^2*t 0 0 q^2 - q q^2 - q 0] [ 0 0 0 q 0 0] [ 0 0 0 0 q 0] [ 0 1 0 -q + 1 0 0] [ 0 0 1 0 -q + 1 0] [ 0 0 0 0 0 1] [ 0 q 0 0 0 0] [ 1 -q + 1 0 0 0 0] [ 0 0 1 0 0 0] [ 0 -q^2*t + q*t 0 -q^2*t 0 q^2 - q] [ 0 0 0 0 0 q] [ 0 0 0 0 1 -q + 1] [ 1 0 0 0 0 0] [ 0 0 q 0 0 0] [ 0 1 -q + 1 0 0 0] [ 0 0 0 0 q 0] [ 0 0 0 1 -q + 1 0] [ 0 0 -q^2*t + q*t 0 -q^2*t + q*t -q^2*t] > > // now specialise to case t = -1/q > > F := RationalFunctionField (Q); > G := GL(6, F); > a := [q,0,0,q^2 - q, q^2 - q, 0, > 0,0,0,q, 0, 0, > > > 0,0,0,0, q, 0, > 0,1,0,1-q,0,0, > 0,0,1,0,1-q,0, > 0,0,0,0,0,1]; > b:=[ > 0,q,0,0,0,0, > 1,1-q,0,0,0,0, > 0,0,1,0,0,0, > 0,q-1,0,q,0,q^2 - q, > 0,0,0,0,0,q, > 0,0,0,0,1,1-q]; > > c := [ > 1,0,0,0,0,0, > 0,0,q,0,0,0, > 0,1,1-q,0,0,0, > 0,0,0,0,q,0, > 0,0,0,1,1-q,0, > 0,0,q-1,0,q-1,q]; > > H := sub; > > I := CongruenceImage (H); > I; MatrixGroup(6, GF(3)) Generators: [1 0 0 0 0 0] [0 0 0 1 0 0] [0 0 0 0 1 0] [0 1 0 0 0 0] [0 0 1 0 0 0] [0 0 0 0 0 1] [0 1 0 0 0 0] [1 0 0 0 0 0] [0 0 1 0 0 0] [0 0 0 1 0 0] [0 0 0 0 0 1] [0 0 0 0 1 0] [1 0 0 0 0 0] [0 0 1 0 0 0] [0 1 0 0 0 0] [0 0 0 0 1 0] [0 0 0 1 0 0] [0 0 0 0 0 1] > IsIsomorphic (I, Sym (4)); true Mapping from: GrpMat: I to GrpPerm: $, Degree 4, Order 2^3 * 3 Composition of Mapping from: GrpMat: I to GrpPC and Mapping from: GrpPC to GrpPC and Mapping from: GrpPC to GrpPerm: $, Degree 4, Order 2^3 * 3 > > // P_4, the "pure braid group" is a subgroup of index 24 inside B_4 > > W := SLPGroup (3); > pure := [ > W.3 * W.2 * W.1^2 * W.2^-1 * W.3^-1, > W.2 * W.1^2 * W.2^-1, > W.3 * W.2^2 * W.3^-1, > W.1^2, W.2^2, W.3^2 > ]; > > A := Evaluate (pure, [H.1, H.2, H.3]); > > P := sub ; > > // P has no torsion elements > I := CongruenceImage (P); > I; MatrixGroup(6, GF(3)) of order 1 > > M := GModule (H); > f, U, W := IsIrreducible (M); > > U, W; GModule U of dimension 4 over Univariate rational function field over Rational Field GModule W of dimension 2 over Univariate rational function field over Rational Field > > // can prove that 2-dimension repn > // is faithful repn for P_3 > // so PA is in kernel of hom from P_4 to P_3 > A := ActionGroup (U); > gens := [ActionGenerator (U, i): i in [1..3]]; > A; MatrixGroup(4, Univariate rational function field over Rational Field) Generators: [ 1 0 0 0] [ q q -2*q^2 + 2*q -q^2 - q] [ 0 0 1 0] [ 1 0 -q + 1 -q] [ 0 1 0 0] [ q^2 0 -q^3 + q 0] [ 0 0 1 0] [ q - 1 0 -q^2 + q 1] [ q 0 0 0] [ q 1 -q^2 - q 0] [ 1 0 -q 0] [ 0 0 q - 1 1] > IsSoluble (A); true > X := Evaluate (pure, [A.i : i in [1..3]]); > PA := sub< A | X >; > PA; MatrixGroup(4, Univariate rational function field over Rational Field) Generators: [ 1 0 q^3 - q 0] [ 0 1 q^3 - q 0] [ 0 0 q^2 0] [ -q + 1 -q + 1 2*q^2 - 2*q q^2] [ q^2 0 -q^3 + q 0] [ 0 1 0 0] [ 0 0 1 0] [ 0 -q + 1 q^2 - 2*q + 1 q^2] [ 1 0 q^3 - q 0] [ 0 q^2 0 0] [ 0 0 q^2 0] [ 0 q - 1 -q^2 + 2*q - 1 1] [ 1 0 0 0] [ 0 q^2 -q^3 + q 0] [ 0 0 1 0] [ -q + 1 0 q^2 - 2*q + 1 q^2] [ q^2 0 -q^3 + q 0] [ 0 q^2 -q^3 + q 0] [ 0 0 1 0] [ q - 1 q - 1 -2*q^2 + 2*q 1] [ q^2 0 0 0] [ 0 1 q^3 - q 0] [ 0 0 q^2 0] [ q - 1 0 -q^2 + 2*q - 1 1] > > // commutator of two generators? > (PA.1, PA.2); [1 0 0 0] [0 1 0 0] [0 0 1 0] [0 0 0 1] > > // do all generators commute? > gens := [PA.i : i in [1..Ngens (PA)]]; > for i in [1..#gens] do > for j in [i + 1..#gens] do > x := (gens[i], gens[j]); > i, j, IsIdentity (x); > end for; > end for; 1 2 true 1 3 true 1 4 true 1 5 true 1 6 true 2 3 true 2 4 true 2 5 true 2 6 true 3 4 true 3 5 true 3 6 true 4 5 true 4 6 true 5 6 true > > // do all generators commute? > forall{: x in gens, y in gens | IsIdentity ((x, y))}; true > > // is PA abelian > IsAbelian (PA); true > > // this group is abelian so can't be in kernel from P_4 to P_3 > > Q := Rationals (); > P := PolynomialRing (Q); > f := x^2 - 2; > E := ext; > P := GL(2, E); > G := sub

; > G; MatrixGroup(2, E) Generators: [2 1] [1 1] [ y -1] [-3*y + 3 -y + 3] > CongruenceImage; Intrinsic 'CongruenceImage' Signatures: ( G) -> GrpMat, HomGrp, SeqEnum [ Prime, ExtDegree, Virtual, Limit ] construct congruence image H of G; return H, homomorphism from G to H, and images of generators of G; Virtual: construct Virtual congruence; Prime: applies to input defined over char 0 only; if positive, then lower bound for characteristic of image or if 0 then construct char 0 congruence image; ExtDegree: if G defined over (rational) function field of positive char, then attempt to construct congruence image over extension of this degree of coefficient field; Limit: degree of field extensions to consider in positive char or examine tuples in residue ring mod Limit in char 0. > I := [CongruenceImage (G: Prime := p): p in [3, 5,7,11, 13, 19, 23,29]]; > LMGCompositionFactors (I[1]); G | Cyclic(2) * | Cyclic(5) * | Cyclic(2) 1 > LMGCompositionFactors (I[2]); G | A(1, 25) = L(2, 25) * | Cyclic(2) 1 > LMGCompositionFactors (I[3]); G | A(1, 7) = L(2, 7) * | Cyclic(2) 1 > LMGCompositionFactors (I[4]); G | A(1, 121) = L(2, 121) * | Cyclic(2) 1 > [LMGCompositionFactors (h): h in I]; [ G | Cyclic(2) * | Cyclic(5) * | Cyclic(2) 1, G | A(1, 25) = L(2, 25) * | Cyclic(2) 1, G | A(1, 7) = L(2, 7) * | Cyclic(2) 1, G | A(1, 121) = L(2, 121) * | Cyclic(2) 1, G | A(1, 169) = L(2, 169) * | Cyclic(2) 1, G | A(1, 361) = L(2, 361) * | Cyclic(2) 1, G | A(1, 23) = L(2, 23) * | Cyclic(2) 1, G | A(1, 841) = L(2, 841) * | Cyclic(2) 1 ] > > // if p > 3 and y^2 - 2 is irreducible mod p > // then CongruenceImage is SL(2, p^2) otherwise SL(2,p) > > > quit; Total time: 29.370 seconds, Total memory usage: 146.56MB