GAP 4.8.9 installation with standard packages -- copy to your CoCalc project to get it
% This file was created automatically from sigs.msk.1% DO NOT EDIT!2\Chapter{Invariants for Difference Sets}34This chapter contains an important tool for the generation of5difference sets. It is called the ``coset signature'' and is an6invariant for equivalence of partial relative difference sets. For7large $\lambda$, there is an invariant calculated by8"MultiplicityInvariantLargeLambda". This invariant can be used9complementary to the coset signature and is explained in section10"RDS:An invariant for large lambda".1112Most of the methods explained here are not commonly used. If you do13not want to know how coset signatures work in detail, you can safely14skip a large part of this and go straight to the explanation of15"SignatureDataForNormalSubgroups" and "ReducedStartsets".1617The functions "RDSFactorGroupData", "MatchingFGData" will be18interesting for you, if you look for difference sets with the same19parameters in different gorups. "SignatureDataForNormalSubgroups" and20"SigInvariant"2122The last section ("RDS:Blackbox functions") of this chapter has some23functions which allow the user to use coset signatures with even less24effort. But be aware that these functions make choices for you that25you probably do not want if you do very involved calculations. In26particular, the coset signatures are not stored globally and hence27cannot be reused. For a demonstration of these easy-to-use functions,28see chapter "RDS:A basic example"2930%%%%%%%%%%%%%%%%%%%%31\Section{The Coset Signature}3233Let $R \subseteq G$ be a (partial) relative difference set (for34definition see "Introduction") with forbidden set $N\subseteq G$. Let35$U\leq G$ be a normal subgroup and $C=\{g_1,\dots, g_{|G:U|}\}$ be a36system of representatives of $G/U$.3738The intersection number of $R$ with $Ug_i$ is defined as $v_i=|R\cap39Ug_i|$. For every normal subgroup $U\leq G$ the multiset $\{|R\cap40Ug_i| \colon g_i\in C\}$ is called ``coset signature of $R$ (relative41to $U$)''.4243Let $D\subseteq G$ be a relative difference set and44$\{v_1,\dots,v_{|G:U|}\}$ its coset signature. Then the following45equations hold (see \cite{Bruck55},\cite{RoederDiss}):4647$$48\matrix{49\sum v_i=k\cr50\sum v_i^2=\lambda(|U|-|U\cap N|)+k\cr51\sum_j v_j v_{ij}=52\lambda(|U|-|g_iU \cap N|)&{\rm for }\ g_i\not\in U}53$$54where $v_{ij}=|D\cap g_ig_jU|$. If the forbidden set $N$ is a55subgroup of $G$ we have $|g_iU\cap N|$ is either $0$ or equal to56$|U\cap N|$.5758Given a group $G$, the forbidden set $N\subseteq G$ and some normal59subgroup $U\leq G$, the right sides of this equations are known. So we60may ask for tuples $(v_1,\dots,v_{|G:U|})$ solving this system of61equations. Of course, we index the $v_i$ with the elements of $G/U$,62so the last equation poses conditions to the ordering of the tuple63$(v_1,\dots,v_{|G:U|})$.6465So we call any multiset $\{v_1,\dots,v_{|G:U|}\}$ solving the above66equations an ``admissible signature'' for $U$.6768%In \GAP, admissible signatures are represented by lists as returned by69%`Collected'7071\>CosetSignatureOfSet( <set>, <cosets> ) F7273`CosetSignatureOfSet( <set>,<cosets>)' returns the *ordered list* of74intersection numbers of <set>. That is, the size of the intersection75of <set> with each Element of <cosets>.7677Note that it is not tested, if <cosets> is really a list of cosets.78`CosetSignatureOfSet( <set>,<cosets>)' works for any List <set> and any79list of lists <cosets>. So be careful!808182\beginexample83gap> G:=SymmetricGroup(5);;84gap> A:=AlternatingGroup(5);;85gap> CosetSignatureOfSet([(1,2),(1,5),(1,2,3)],RightCosets(G,A));86[ 1, 2 ]87gap> CosetSignatureOfSet([(1,2),(1,5),(1,2,3)],[A]);88[ 1 ]89gap> CosetSignatureOfSet([(1,2),(1,5),(1,2,3)],[[(1,2),(1,2,3)],[(3,2,1)]]);90[ 0, 2 ]91\endexample929394\>CosetSignatures( <Gsize>, <Usize>, <diffsetorder> ) O95\>CosetSignatures( <Gsize>, <Nsize>, <Usize>, <Intersectsizes>, <k>, <lambda> ) O9697`CosetSignatures( <Gsize>,<Usize>,<diffsetorder>)' returns all98$<Gsize>/<Usize>$ tuples such that the sum of the squares of each tuple99equals <Usize>+<diffsetorder>. And the sum of each tuple equals100<diffsetorder>+1.101102These are necessary conditions for signatures of difference sets and103normal subgroups of order <Usize> in groups of order <Gsize> (see "The104Coset Signature").105106`CosetSignatures( <Gsize>,<Nsize>,<Usize>,<Intersectsizes>,<k>,<lambda>)'107Calculates all multiset meeting some conditions for signatures of relative108difference sets and normal subgroups of order <Usize> in groups of109order <Gsize> (see "The Coset Signature").110Here <Nsize> is the size of the forbidden group,111<Intersectsizes> is a list of integers determining the size of the112intersection of the forbidden set and the normal Subgroup of order <Usize>.113The pararmeters <k> and <lambda> are the usual ones for designs.114`CosetSignatures' returns a list containing one pair for each entry <i> of115<Intersectsizes>. The first entry of this pair is116$[<Gsize>,<Nsize>,<Usize>,<i>,<k>,<lambda>]$ and the second one is a list117of admissible signatures with these parameters.118119120\beginexample121gap> CosetSignatures(256,16,64,[1,4,8,16],17,1);122[ [ [ 256, 16, 64, 1, 17, 1 ], [ ] ],123[ [ 256, 16, 64, 4, 17, 1 ], [ [ 3, 4, 4, 6 ] ] ],124[ [ 256, 16, 64, 8, 17, 1 ], [ [ 4, 4, 4, 5 ] ] ],125[ [ 256, 16, 64, 16, 17, 1 ], [ ] ] ]126#And for an ordinary difference set of order 16.127gap> CosetSignatures(273,1,39,[1],17,1);128[ [ [ 273, 1, 39, 1, 17, 1 ],129[ [ 0, 1, 2, 3, 3, 4, 4 ], [ 0, 2, 2, 2, 3, 3, 5 ],130[ 1, 1, 1, 2, 4, 4, 4 ], [ 1, 1, 1, 3, 3, 3, 5 ],131[ 1, 1, 2, 2, 2, 4, 5 ] ] ] ]132\endexample133134\>TestSignatureLargeIndex( <sig>, <group>, <Normalsg>[, <factorgrp>] ) O135136*this does only work for ordinary difference sets, not for137relative difference sets in general*138139`TestSignatureLargeIndex(<sig>,<group>,<Normalsg>[,<factorgrp>])' tests140if <sig> meets some necessary conditions of "The Coset Signature" to be141a signature for a difference set in <group> for the normal subgroup142<Normalsg>. <factorgrp> is the factorgroup <group>/<Normalsg>.143The returned value is <true> or <false> resp.144145146147\>TestSignatureCyclicFactorGroup( <sig>, <Nsize> ) O148149*This does only work for ordinary difference sets, not for relative150difference sets in general*151152`TestSignatureCyclicFactorGroup(<sig>,<Nsize>)' test if <sig> meets153meets some necessary conditions of "The Coset Signature" to be a signature154for a difference set in some group, which has a normal subgroup of155size <Nsize> such that the factor group is cyclic.156The returned value is <true> or <false> resp.157158159160\>TestedSignatures( <sigs>, <group>, <Normalsg>[, <maxtest>][, <moretest>] ) O161162*this does only work for ordinary difference sets, not for163relative difference sets in general*164165Let <sigs> be a list of possible signatures as returned by166"CosetSignatures". Let <Normalsg> be a subgroup of <group>.167For each signature in <sigs>, the necessary conditions described in168"The Coset Signature" are tested to decide169if the signature can be a signature of a difference set in <group> for170for the normal subgroup <Normalsg>.171172As this involves computation for all permutations of the signature, this173can be very costly. The argument <maxtest> determines how many174permutations are admissible. If <maxtest>=0, all signatures are tested,175regardless of how much work is necessary for this. If a signature has176too many permutations, it is returned without test. Even though it is177not wise, `<maxtest>=0' is the default option.178If `InfoLevel(InfoRDS)'\index{InfoRDS@{\tt InfoRDS}} is at least $2$,179information about skipped signatures is echoed.180181If the boolean value <moretest> is <false> and all signatures in <sigs> but182the last one are found to be not admissible, the last one is returned183without test. This saves the time to test the last signature, but if184chances are that there is no difference set in <group>, this may also185give away a chance to find out early (every difference set has186signatures, so no admissible signature means that no difference set can187exist). Default is <true>.188189190`TestedSignatures' calls "TestSignatureCyclicFactorGroup" or191"TestSignatureLargeIndex" and returns a sublist of <sigs>.192193194195\beginexample196gap> G:=SmallGroup(273,2);;197gap> N:=First(NormalSubgroups(G),g->Order(g)=39);198Group([ f1, f3 ])199gap> sigs:=CosetSignatures(273,1,39,[1],17,1);200[ [ [ 273, 1, 39, 1, 17, 1 ],201[ [ 0, 1, 2, 3, 3, 4, 4 ], [ 0, 2, 2, 2, 3, 3, 5 ],202[ 1, 1, 1, 2, 4, 4, 4 ], [ 1, 1, 1, 3, 3, 3, 5 ],203[ 1, 1, 2, 2, 2, 4, 5 ] ] ] ]204gap> TestedSignatures(sigs[1][2],G,N);205[ [ 1, 1, 1, 2, 4, 4, 4 ], [ 1, 1, 1, 3, 3, 3, 5 ] ]206\endexample207208\>TestedSignaturesRelative( <sigs>, <fgdata>, [, <maxtest>][, <moretest>] ) O209210`TestedSignaturesRelative' takes a list <sigs> of lists of integers and211returns a those which may be signatures of relative difference sets with212forbidden set.213214<fgdata> is a record as returned by215`RDSFactorGroupData(<U>,<N>,<lambda>,<Gdata>)'216If <maxtest> is set, a signature $s$ is only tested if217`NrPermutationsList(s)'218is less than <maxtest> if <maxtest> is set to 0, all signatures are tested219this is the default.220If <moretest> is tue, a signature is tested even if it is the only one left.221This means we do not assume that there must be an admissable signature at all.222The default for <moretest> is <true>.223224225226\>SigInvariant( < diffset >, <data> ) O227228Given a partial relative difference set <diffset> and a list of229records with entries <cosets> and <sigs>.230Here <cosets> is a full list of cosets and <sigs> is a list of231signatures that may occur for relative difference sets.232233For each record <rec> in <data>, the intersection numbers of234<diffset> with the cosets of <rec.cosets> are computed stored in235a set <sig>. If none of the signatures in <rec.sigs> is pointwise236greater or equal <sig>, `SigInvariant( <diffset>,<data>) returns `fail'.237Otherwise <sig> is added to a list of signatures that is returned.238239Note the returned invariant is that of $diffset\cup \{1\}$.240The output from `SignatureDataForNormalSubgroups' can be used as <data>.241242243244\beginexample245gap> G:=SmallGroup(273,2);246<pc group of size 273 with 3 generators>247gap> Gdata:=PermutationRepForDiffsetCalculations(G);;248gap> N:=First(NormalSubgroups(G),g->Order(g)=39);249Group([ f1, f3 ])250gap> sigs:=CosetSignatures(273,1,39,[1],17,1);251[ [ [ 273, 1, 39, 1, 17, 1 ],252[ [ 0, 1, 2, 3, 3, 4, 4 ], [ 0, 2, 2, 2, 3, 3, 5 ],253[ 1, 1, 1, 2, 4, 4, 4 ], [ 1, 1, 1, 3, 3, 3, 5 ],254[ 1, 1, 2, 2, 2, 4, 5 ] ] ] ]255gap> TestedSignatures(sigs[1][2],G,N);256[ [ 1, 1, 1, 2, 4, 4, 4 ], [ 1, 1, 1, 3, 3, 3, 5 ] ]257gap> sigs:=TestedSignatures(sigs[1][2],G,N);258[ [ 1, 1, 1, 2, 4, 4, 4 ], [ 1, 1, 1, 3, 3, 3, 5 ] ]259gap> ## calculate cosets in permutation notation:260gap> rc:=List(RightCosets(G,N),i->GroupList2PermList(Set(i),Gdata));;261gap> data:=[rec(cosets:=rc,sigs:=sigs)];;262gap> SigInvariant([3,4,5],data);263[ [ [ 0, 0, 0, 0, 0, 1, 3 ], 1 ] ]264\endexample265266For an example using "SignatureDataForNormalSubgroups" see the example267after "RDS:ReducedStartsets" below.268269\>SignatureDataForNormalSubgroups( <Normals>, <globalSigData>, <forbiddenSet>, <Gdata>, <parameters> ) O270271Let <Gdata> be a record as returned by "PermutationRepForDiffsetCalculations".272Let <Normals> be a list of normal subgroups of <Gdata.G>, and <forbiddenSet> the forbidden set273(as set of group elements or group).274275<parameters> must be a list of length 4 of the form <[k,lambda,maxtest,moretest]>276with <k> the length of the relative difference set to be constructed and <lambda> the parameter277as always. <maxtest> and <moretest> are passed to `TestedSignaturesRelative' and must be set.278279`SignatureDataForNormalSubgroups' returns a list containing one record for each group $U$ in280<Normals>. This record contains:281\beginlist282\item{1.} the subgroup <U> named <.subgroup>283\item{2.} the signatures <.sigs> for <U>284\item{3.} the cosets <.cosets> modulo <U> as lists of integers285\endlist286287Moreover, the list <globalSigData> is used to store global information which can be288reused with other groups. The $i^{th}$ entry of <globalSigData> is a list of records289that contains all known information about subgroups of order $i$.290Each of these records has the following components:291\beginlist292\item{1.} <.cspara> the parameters for "CosetSignatures"293\item{2.} <.sigs> the output of "CosetSignatures" when the input is <.cspara>294\item{3.} <.fgsigs> a list of records containing data about factor groups with parameters <.cspara>:295\beginlist296\item{3.1.} <.fg> the factor group297\item{3.2.} <.fgaut> the automorphism group of <.fg>298\item{3.3.} <.Nfg> the image of the forbidden set $N$ under the natural epimorphism to <.fg>299\item{3.4.} <.fgintersect> the pairs $[g,|g\cap N| ]$ for all $g$ in <.fg>. Here $N$ is the forbidden set.300\item{3.5.} <.sigs> the known admissible signatures (this is a subset of the set in number 2.301of course)302\endlist303\endlist304305The list <globalSigData> can be used if different groups are studied. If a group has a normal306subgroup with parameters (in the sense of <.cspara>) listed in <globalSigData>, the signatures307from a previous calculation may be used. Of course, the factor groups have to be checked first.308This check is done with "MatchingFGData" or "MatchingFGDataNonGrp".309310So the second run of `SignatureDataForNormalSubgroups' with the same parameters and different311<Gdata> and <Normals> will normally be much faster, as the signatures are already stored in312<globalSigData>. Note that <maxtest> and <moretest> are not stored. So a second run with313larger <maxtest> will not result in a recalculation of signatures.314315316317318\beginexample319gap> G:=CyclicGroup(57);320<pc group of size 57 with 2 generators>321gap> Gdata:=PermutationRepForDiffsetCalculations(G);;322gap> SignatureDataForNormalSubgroups(NormalSubgroups(Gdata.G),sigdata,323> [One(Gdata.G)],Gdata,[8,1,10^6,true]); # for ordinary diffset of order 7.324[ rec( subgroup := Group([ f1*f2^6 ]),325sigs := [ [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 2 ] ],326cosets := [ [ 1, 20, 40 ], [ 3, 23, 43 ], [ 6, 26, 46 ], [ 9, 29, 49 ],327[ 12, 32, 52 ], [ 15, 35, 55 ], [ 18, 38, 57 ],328[ 4, 21, 41 ], [ 7, 24, 44 ], [ 10, 27, 47 ],329[ 13, 30, 50 ], [ 16, 33, 53 ], [ 19, 36, 56 ],330[ 2, 22, 39 ], [ 5, 25, 42 ], [ 8, 28, 45 ], [ 11, 31, 48 ],331[ 14, 34, 51 ], [ 17, 37, 54 ] ] ),332rec( subgroup := Group([ f2 ]), sigs := [ [ 1, 3, 4 ] ],333cosets := [ [ 1, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42,33445, 48, 51, 54 ],335[ 2, 5, 8, 11, 14, 17, 20, 23, 26, 29, 32, 35, 38, 41, 44, 47, 50,33653, 56 ],337[ 4, 7, 10, 13, 16, 19, 22, 25, 28, 31, 34, 37, 40, 43, 46, 49,33852, 55, 57 ] ] ) ]339gap> Filtered([1..Size(sigdata)],i->IsBound(sigdata[i]));340[ 3, 19 ]341gap> Size(sigdata[3]);3422343gap> sigdata[3][1].cspara;sigdata[3][2].cspara;344[ 57, 1, 3, 1, 7, 1 ]345[ 57, 1, 3, 1, 8, 1 ]346\endexample347348The following three functions are used by349"SignatureDataForNormalSubgroups". If you do not want to write your350own function for signature management, you might not need them.351352\>RDSFactorGroupData( <U>, <N>, <lambda>, <Gdata> ) O353354takes the subgroup <U> of <G>, the forbidden set <N> as a subgroup or355subset of <G> and the record of data <Gdata> as returned by356`PermutationRepForDiffsetCalculations(<G>)' and returns a record containing357\beginlist358\item{.fg} the factor group modulo <U>359\item{.fglist} the factor group as a strictly ordered list360\item{.cosets} the cosets modulo <U> as lists of integers361\item{.lambda} the parameter <lambda> as passed to the function362\item{.Usize} the size of <U>363\item{.fgaut} the automorphism group of <.fg>364\item{.Nfg} the image of <N> in <.fg>365\item{.fgintersect} a list of pairs such that the $i^{th}$ entry is the366pair consisting of <.fg[i]> and the size of the intersection of <.fg> with367<.Nfg> as cosets modulo <U>.368\item{.intersectshort} ist just the second component of <.fgintersect>.369\endlist370371372373\>MatchingFGDataNonGrp( <fgdatalist>, <fgmatchdata> ) O374375Let <fgdatalist> be a list of records and <fgmatchdata> a record with components376<.fg>, <.Nfg> and <.fgintersect> as returned by "RDSFactorGroupData".377Then `MatchingFGDataNonGrp' returns the entry of <fgdatalist> that defines378the same admissible signatures as <fgmatchdata>. If no such entry exists,379`fail' is returned.380381The forbidden set $N$ is not assumed to be a group.382383384385\>MatchingFGData( <fgdatalist>, <fgmatchdata> ) O386387Let <fgdatalist> be a list of records and <fgmatchdata> a record with components388<.fg>, <.Nfg>, <.fgintersect> and <.fgaut> as returned by "RDSFactorGroupData".389Then `MatchingFGDataNonGrp' returns the entry of <fgdatalist> that defines390the same admissible signatures as <fgmatchdata>. If no such entry exists,391`fail' is returned.392393Here the forbidden set $N$ has to be a group.394395396397\>ReducedStartsets( <startsets>, <autlist>, <csdata>, <Gdata> ) O398\>ReducedStartsets( <startsets>, <autlist>, <func>, <Gdata> ) O399400Let <startsets> be a set of partial relative difference sets, <autlist> a401list of permutation groups and <Gdata> record returned by402`PermutationRepForDiffsetCalculations'.403Then `ReducedStartsets' partitions the list <startsets> according to the404values of the function <func> and performs a test for equivalence on the405elements of the partition. The list returned is a sublist406of <startsets> of pairwise non-equivalent partial relative difference sets407if <func> is an invariant for partial relative difference sets. All elements408for which <func> returns `fail' are discarded.409410If a list <csdata> of records as used for "SigInvariant" (i.e. containing411<.cosets> and <.signatures>) is pased, then `ReducedStartsets'412uses "SigInvariant" for <func>.413414415416\beginexample417gap> G:=CyclicGroup(57);418<pc group of size 57 with 2 generators>419gap> Gdata:=PermutationRepForDiffsetCalculations(G);;420gap> cosetsigs:=SignatureDataForNormalSubgroups(NormalSubgroups(Gdata.G),421> sigdata, [One(Gdata.G)],Gdata,[8,1,10^6,true]);;422gap> SigInvariant([3,4,5,9],cosetsigs);423[ [ [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1 ], 1 ], [ [ 1, 1, 3 ], 1 ] ]424gap> ssets:=AllDiffsets([],2,[],Gdata);;425gap> Size(ssets);4261458427gap> Size(ReducedStartsets(ssets,[Group(())],cosetsigs,Gdata));428#I Size 1458429#I 5/ 0 @ 0:00:00.126430486431gap> Size(ReducedStartsets(ssets,[Gdata.Ai],cosetsigs,Gdata));432#I Size 1458433#I 5/ 0 @ 0:00:00.12343417435\endexample436\>`MaxAutsizeForOrbitCalculation' V437438In "ReducedStartsets", a bound is needed to decide if `Orbit' or439`RepresentativeAction' should be used. If the group is larger than440<MaxAutsizeForOrbitCalculation@RDS>, `RepresentativeAction' is used.441The default value for `maxAutsizeForOrbitCalculation' is $5*10^6$.442If you want to change it, you will have to edit the file `sigs.gd'.443444445446447448%%%%%%%%%%%%%%%%%%%%%%449\Section{An invariant for large lambda}450451\>MultiplicityInvariantLargeLambda( <set>, <Gdata> ) O452453Let <set> be a partial relative difference set with $\lambda>1$.454Set `<P>:=AllPresentables(<set>,<Gdata>)' then the set of multiplicities455of <P> is an invariant for partial relative difference sets.456457`MultiplicityInvariantLargeLambda' returns a list in a form as `Collected'458does.459460461462\beginexample463gap> G:=CyclicGroup(7);;Gdata:=PermutationRepForDiffsetCalculations(G);;464gap> AllPresentables([2,3],Gdata);465[ 2, 3, 7, 2, 7, 6 ]466gap> MultiplicityInvariantLargeLambda([2,3],Gdata);467[ [ 1, 2 ], [ 2, 2 ] ]468\endexample469(Read this output as: two elements occur once and two occur twice).470471This invariant can be used for "ReducedStartsets" complementary to the472signature invariant by defining473\begintt474gap> partfunc:=function(list)475> local sig;476> if sig=fail477> then return fail;478> fi;479> return [MultiplicityInvariantLargeLambda(list,Gdata),SigInvariant(list,sigdata)];480> end;481function( list ) ... end482\endtt483484<partfunc> can then be passed to "ReducedStartsets". Of course,485<sigdata> has to be the list of records defining the coset signatures.486487488%%%%%%%%%%%%%%%%%%%%%%489\Section{Blackbox functions}490491Here are a few functions used in chapter "RDS:A basic example". These492are meant as black boxes for quick tests. Some of them make choices493for you which might not be suitable to the chase you consider, so for494serious studies, consider using the more complicated-looking functions495above (an example for this comprises chapter "RDS:An Example496Program").497498\>SignatureData( <Gdata>, <forbiddenSet>, <k>, <lambda>, <maxtest> ) F499500Let <Gdata> be a record as returned by "PermutationRepForDiffsetCalculations".501Let <forbiddenSet> the forbidden set (as set or group).502503<k> is the length of the relative difference set to be constructed and504<lambda> the usual parameter. <maxtest> is the505Then `SignatureData' calls "SignatureDataForNormalSubgroups" for506normal subgroups of order at least `RootInt(Gdata.G)'. Here <maxtest>507is an integer which determines how many permutations of a possible508signature are checked to be a sorted signature. Choose a value of at509least $10^5$. Larger numbers here normaly result in better results510when generating difference sets (making reduction more effective).511512`SigntureData' chooses normal subgroups of <Gdata.G> and uses513"SignatureDataForNormalSubgroups" to calculate signature data. The global514data generated by "SignatureDataForNormalSubgroups" is just discarded.515516517\beginexample518gap> G:=CyclicGroup(57);;Gdata:=PermutationRepForDiffsetCalculations(G);;519gap> sigdat:=SignatureData(Gdata,[One(Gdata.G)],8,1,10^5);520[ rec( subgroup := Group([ f2 ]), sigs := [ [ 1, 3, 4 ] ],521cosets := [ [ 1, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54 ],522[ 2, 5, 8, 11, 14, 17, 20, 23, 26, 29, 32, 35, 38, 41, 44, 47, 50, 53, 56 ],523[ 4, 7, 10, 13, 16, 19, 22, 25, 28, 31, 34, 37, 40, 43, 46, 49, 52, 55, 57 ] ] ) ]524\endexample525\>NormalSgsHavingAtMostNSigs( <sigdata>, <n>, <lengthlist> ) F526527Let <sigdata> be a list as returned by "SignatureDataForNormalSubgroups", an528integer <n> and a list of integers <lengthlist>.529`NormalSgsHavingAtMostNSigs' filters <sigdata> and returns530a list of records with components .subgroup and .sigs531is returned, such that for every entry532.subgroup is a normal subgroup of index in <lengthlist> having at most <n>533signatures.534535536\>SuitableAutomorphismsForReduction( <Gdata>, <normalsg> ) F537538Given a normal subgroup <normalsg> of <Gdata.G>, the function returns539a list containing the group of automorphisms of <Gdata.G> which540stabilizes all cosets modulo <normalsg>. This group is returned as a541group of permutations on <Gdata.Glist> (which is actually the right542regular representation).543The returned list can be used with "StartsetsInCoset".544545546\>StartsetsInCoset( <ssets>, <coset>, <forbiddenSet>, <aim>, <autlist>, <sigdat>, <Gdata>, <lambda> ) F547548Assume, we want to generate difference sets ``coset by coset'' modulo some549normal subgroup.550Let <ssets> be a (possibly empty) set of startsets, <coset> the coset from551which to take the elements to append to the startsets from <ssets>.552Furthermore, let <aim> be the size of the generated partial difference sets553(that is, the size of the elements from <ssets> plus the number of elements554to be added from <coset>). Let <autlist> be a list of groups of555automorphisms (in permutation representation) to use with the reduction556algorithm. Here the output from `SuitableAutomorphismsForReduction' can be557used.558And <Gdata> and sigdat are the records as returned by559"PermutationRepForDiffsetCalculations" and560"SignatureDataForNormalSubgroups" (or "SignatureData", alternatively). The561parameter <lambda> is the usual one for difference sets (the number of ways562of expressing elements outside the forbidden set as quotients).563564Then `StartsetsInCoset' returns a list of partial difference sets (a list of565lists of integers) of length <aim>.566567The list of permutation groups <autlist> is used for equivalence testing.568Each equivalence test is performed calculating equivalence with respect569to the first group, one element per equivalence class is retained and the570equivalence test is repeated using the second group from <autlist>...571Using an ascending list of automorphism groups can speed up the process572of equivalence testing.573574575576\beginexample577gap> G:=CyclicGroup(57);;Gdata:=PermutationRepForDiffsetCalculations(G);;578gap> sigdat:=SignatureData(Gdata,[One(Gdata.G)],8,1,10^5);;579gap> N:=First(NormalSubgroups(G),n->Size(n)=19);580gap> auts:=SuitableAutomorphismsForReduction(Gdata,N);581[ <permutation group of size 18 with 3 generators> ]582gap> g:=One(G);;while g in N do583> g:=Random(G);584> od;585gap> coset:=GroupList2PermList(Set(RightCoset(N,g)),Gdata);586[ 2, 5, 8, 11, 14, 17, 20, 23, 26, 29, 32, 35, 38, 41, 44, 47, 50, 53, 56 ]587gap> Size(StartsetsInCoset([],coset,[],4,auts,sigdat,Gdata,1));588#I Size 19589#I 1/ 0 @ 0:00:00.003590#I Size 26591#I 1/ 0 @ 0:00:00.001592#I -->10 @ 0:00:00.004593#I Size 88594#I 1/ 0 @ 0:00:00.003595#I -->45 @ 0:00:00.018596#I Size 125597#I 1/ 0 @ 0:00:00.006598#I -->64 @ 0:00:00.03159964600gap> Size(StartsetsInCoset([],coset,[],4,[Group(())],sigdat,Gdata,1));601#I Size 19602#I 1/ 0 @ 0:00:00.000603#I Size 136604#I 1/ 0 @ 0:00:00.004605#I -->136 @ 0:00:00.024606#I Size 648607#I 1/ 0 @ 0:00:00.021608#I -->648 @ 0:00:00.310609#I Size 1140610#I 1/ 0 @ 0:00:00.036611#I -->1140 @ 0:00:00.9806121140613\endexample614615616