1#############################################################################
2##
3##  genss.gd              genss package
4##                                                           Max Neunhoeffer
5##                                                              Felix Noeske
6##
7##  Copyright 2006 Lehrstuhl D für Mathematik, RWTH Aachen
8##
9##  Declaration stuff for generic Schreier-Sims
10##
11#############################################################################
12
13#############################################################################
14# Our Info class:
15#############################################################################
16
17DeclareInfoClass( "InfoGenSS" );
18SetInfoLevel(InfoGenSS,1);
19
20#############################################################################
21# The following global record contains default values for options for the
22# main function "StabilizerChain":
23#############################################################################
24
25DeclareGlobalVariable( "GENSS" );
26InstallValue(GENSS,rec());
27
28
29#############################################################################
30# Our main type:
31#############################################################################
32
33BindGlobal( "StabilizerChainFamily", NewFamily( "StabilizerChainFamily" ) );
34DeclareCategory( "IsStabilizerChain", IsComponentObjectRep );
35DeclareRepresentation( "IsStabilizerChainByOrb", IsStabilizerChain,
36  [ "size",        # false or a size if known
37    "orb",         # the orbit
38    "cand",        # a record for base point candidates (shared between layers)
39    "stab",        # the next layer
40    "base",        # the global list of base points (shared between layers)
41    "layer",       # the layer, 1 is top
42    "opt",         # the options record (shared between layers)
43  ] );
44BindGlobal( "StabChainByOrbType",
45  NewType(StabilizerChainFamily,IsStabilizerChain and IsStabilizerChainByOrb));
46
47
48#############################################################################
49# A few helper functions needed elsewhere:
50#############################################################################
51
52DeclareGlobalFunction( "GENSS_CopyDefaultOptions" );
53DeclareGlobalFunction( "GENSS_MapBaseImage" );
54DeclareGlobalFunction( "GENSS_FindVectorsWithShortOrbit" );
55DeclareGlobalFunction( "GENSS_FindShortOrbit" );
56DeclareGlobalFunction( "GENSS_IsOneProjective" );
57DeclareGlobalFunction( "GENSS_RandomElementFromAbove" );
58DeclareGlobalFunction( "GENSS_OpFunctionMaker" );
59
60#############################################################################
61# Now to the heart of the method, the Schreier-Sims:
62#############################################################################
63
64DeclareOperation( "FindBasePointCandidates",
65  [ IsGroup, IsRecord, IsInt, IsObject ] );
66DeclareGlobalFunction( "GENSS_NextBasePoint" );
67DeclareGlobalFunction( "GENSS_CreateStabChainRecord" );
68DeclareGlobalFunction( "GENSS_StabilizerChainInner" );
69DeclareGlobalFunction( "GENSS_DeriveCandidatesFromStabChain" );
70DeclareGlobalFunction( "GENSS_TrivialOp" );
71DeclareOperation( "StabilizerChain", [ IsGroup ] );
72DeclareOperation( "StabilizerChain", [ IsGroup, IsRecord ] );
73DeclareOperation( "AddGeneratorToStabilizerChain",
74                  [IsStabilizerChain,IsObject] );
75DeclareOperation( "SiftGroupElement", [ IsStabilizerChain, IsObject ] );
76DeclareOperation( "SiftGroupElementSLP", [ IsStabilizerChain, IsObject ] );
77DeclareOperation( "StrongGenerators", [IsStabilizerChain] );
78DeclareOperation( "NrStrongGenerators", [IsStabilizerChain] );
79DeclareOperation( "GENSS_CreateSchreierGenerator",
80  [ IsStabilizerChain, IsPosInt, IsPosInt ] );
81DeclareGlobalFunction( "GENSS_FindGensStabilizer" );
82DeclareGlobalFunction( "GENSS_FindShortGensStabilizerOld" );
83DeclareGlobalFunction( "GENSS_FindShortGensStabilizer" );
84DeclareGlobalFunction( "SLPChainStabilizerChain" );
85DeclareGlobalFunction( "GENSS_Prod" );
86DeclareOperation( "VerifyStabilizerChainMC", [ IsStabilizerChain, IsInt ] );
87DeclareGlobalFunction( "VerifyStabilizerChainTC" );
88DeclareGlobalFunction( "VerifyStabilizerChainTC2" );
89DeclareGlobalFunction( "GENSS_ImageElm" );
90DeclareGlobalFunction( "GENSS_PreImagesRepresentative" );
91DeclareGlobalFunction( "GroupHomomorphismByImagesNCStabilizerChain" );
92DeclareOperation( "AddNormalizingGenToLayer",
93                  [ IsStabilizerChain, IsObject, IsPosInt ] );
94
95#############################################################################
96# The following operations apply to stabilizer chains:
97#############################################################################
98
99DeclareAttribute( "Size", IsStabilizerChain );
100DeclareOperation( "IsProved", [IsStabilizerChain] );
101DeclareOperation( "StabChainOp", [IsPermGroup, IsStabilizerChain] );
102DeclareOperation( "GroupIteratorByStabilizerChain", [IsStabilizerChain] );
103DeclareGlobalFunction( "GENSS_GroupNextIterator" );
104DeclareGlobalFunction( "GENSS_GroupIsDoneIterator" );
105DeclareGlobalFunction( "GENSS_GroupShallowCopy" );
106DeclareGlobalFunction( "GENSS_MakeIterRecord" );
107
108DeclareOperation( "BaseStabilizerChain", [IsStabilizerChain] );
109DeclareOperation( "SiftBaseImage", [IsStabilizerChain, IsList] );
110
111DeclareOperation( "SetStabilizerChain", [IsGroup,IsStabilizerChain] );
112DeclareAttribute( "StoredStabilizerChain", IsGroup );
113
114#############################################################################
115# The following operations are about methods to compute stabilisers:
116#############################################################################
117
118DeclareOperation( "Stab", [IsGroup, IsObject, IsFunction, IsRecord] );
119DeclareOperation( "Stab", [IsList, IsObject, IsFunction, IsRecord] );
120DeclareOperation( "Stab", [IsGroup, IsObject, IsFunction] );
121DeclareOperation( "Stab", [IsList, IsObject, IsFunction] );
122DeclareOperation( "StabMC", [IsGroup, IsObject, IsFunction, IsRecord] );
123DeclareOperation( "StabMC", [IsGroup, IsObject, IsFunction] );
124DeclareOperation( "StabMC", [IsList, IsObject, IsFunction, IsRecord] );
125DeclareOperation( "StabMC", [IsList, IsObject, IsFunction] );
126
127#######################################################
128# The following operations are for backtrack searches:
129#######################################################
130
131DeclareGlobalFunction( "BacktrackSearchStabilizerChainElement" );
132DeclareGlobalFunction( "ComputeSuborbitsForStabilizerChain" );
133DeclareGlobalFunction( "BacktrackSearchStabilizerChainSubgroup" );
134
135