GAP 4.8.9 installation with standard packages -- copy to your CoCalc project to get it
% This file was created automatically from jumpstart.msk.1% DO NOT EDIT!2\Chapter{A basic example}34This chapter shows a basic example of how to use {\package{RDS}}. Some5of the functions used here make choices which might not be optimal but6should suffice for most ``everyday'' situations. If you plan to do7more involved computations, you should also see the other chapters to8learn about the concepts behind these high-level functions.910Here we will construct relative difference sets of Dembowski-Piper11type ``b'' and order $9$ as an example. We will take the elementary12abelian group as an example. The general idea is as follows: Find a13``nice'' normal subgroup $U$ and generate relative difference sets14coset by coset. The normal subgroup has to be chosen such that we know15how many elements to choose from each coset modulo $U$.1617The calculations here are very easy, a more demanding example can be found18in chapter "RDS:An Example Program".1920%%%%%%%%%%%%%%%%%%%%%%21\Section{First Step: Integers instead of group elements}2223Difference sets are represented by lists of integers. Every difference24set is assumed to contain $1$. This is assumed implicitly. So the25lists representing difference sets *must not* contain 1 (a partial26difference set of length $n$ is hence represented by a list of length27$n-1$). If a partial difference set contains $1$, many functions will28produce errors.2930To find Difference sets in a group, say $G$, begin with generating the31group (and forbidden subgroup) and defining the parameters. Like this:3233\beginexample34gap> LoadPackage("rds");35----------------------------------------------------------------36Loading RDS 1.237by Marc Roeder (marc_roeder@web.de)38----------------------------------------------------------------39true40gap> k:=9;;lambda:=1;;groupOrder:=81;;41gap> forbiddenGroupOrder:=9;;42gap> G:=ElementaryAbelianGroup(groupOrder);43<pc group of size 81 with 4 generators>44gap> Gdata:=PermutationRepForDiffsetCalculations(G);;45gap> N:=Subgroup(G,GeneratorsOfGroup(G){[1,2]});46Group([ f1, f2 ])47gap> Size(N)=forbiddenGroupOrder; #just a test...48true49\endexample5051Once we have calculated <Gdata>, this will be used very often to52represent the group <G> as it contains much more information.5354%%%%%%%%%%%%%%%%%%%%%%55\Section{Signatures: An important tool}5657The ``signature'' of a subset $S\subseteq G$ of a group relative to a58normal subgroup $U$ is the multiset of numbers of elements $S$59contains from each coset modulo $U$. Possible values of these numbers60can be calculated a priori for relative difference sets.6162\beginexample63gap> sigdat:=SignatureData(Gdata,N,k,lambda,10^5);;64\endexample6566The argument $10^5$ depends on your degree of impatience. Larger67numbers take more time in this step, but give better results for later68reduction steps.6970Now we will look for a ``nice'' normal subgroup. A normal subgroup is71``nice'', if it has only few signatures and the number of different72entries in each signature is low. If you have different choices here73do some experiments, to see what works. Let's see what we have:7475\beginexample76gap> NormalSgsHavingAtMostNSigs(sigdat,1,[1..7]);77[ rec( sigs := [ [ 3, 3, 3 ] ], subgroup := Group([ f1, f2, f3 ]) ),78rec( sigs := [ [ 3, 3, 3 ] ], subgroup := Group([ f1, f2, f4 ]) ),79rec( sigs := [ [ 3, 3, 3 ] ], subgroup := Group([ f1, f2, f3*f4 ]) ),80rec( sigs := [ [ 3, 3, 3 ] ], subgroup := Group([ f1, f2, f3*f4^2 ]) ) ]81\endexample8283The second parameter of "NormalSgsHavingAtMostNSigs" is the maximal84number of signatures the subgroup may have. The third parameter gives85the desired lengths of the signatures (the index of the normal86subgroup).8788So in this example we have no real choice. Let's take the first group89for $U$. The signature means that we have to get $3$ elements from90each coset modulo $U$. So we generate startsets of length $2$ in the91trivial coset $U$ (representing partial relative difference sets of92length $3$).93This could be done using "AllDiffsets", of course. But here we will94use another method. The function "StartsetsInCoset" generates95startsets in $U$ by generating an initial set of startsets and then96raising the length of each startset by $1$. Then a reduction using97signatures and automorphism is performed. This is done until all98startsets have the desired length or no startset remains (in which99case there is no relative difference set). For the reduction, a100suitable set of automorphisms must be chosen. This is done by the101function "SuitableAutomorphismsForReduction":102103\beginexample104gap> U:=last[1].subgroup;105Group([ f1, f2, f3 ])106gap> auts:=SuitableAutomorphismsForReduction(Gdata,U);107[ <permutation group of size 303264 with 8 generators> ]108gap> startsets:=StartsetsInCoset([],U,N,2,auts,sigdat,Gdata,lambda);109#I Size 18110#I 1/ 0 @ 0:00:00.071111#I Size 8112#I 1/ 0 @ 0:00:00.038113#I -->1 @ 0:00:00.042114[ [ 4, 22 ] ]115\endexample116117For larger examples, this takes a wile. Taking $10^6$ (or even more)118for the generation of <sigdat> can save some time here. A few remarks119about the parameters of "StartsetsInCoset". The first parameter `[]'120is the set of startsets which we start with (as we just started, this121is empty). The second parameter is the coset we use to generate122startsets and third parameter is the forbidden subgroup. The fourth123parameter is the length of the startsets we want to generate (remember124that $1$ is assumed to be in every startset without being listed. So125we want startsets of size $3$ represented by lists of length $2$.126Hence the $2$ in this place). Instead of <auts> a suitable list of127groups of automorphisms of $G$ in permutation representation may be128inserted. These are used for the reduction of startsets. For large129groups <auts[1]> it is a good idea to add some subgroups of <auts[1]>130to the list (ascending in order) <auts>, as the reduction is done131using the first group in the list and then reducing the already132reduced list again using the next group.133134%%%%%%%%%%%%%%%%%%%%%%135\Section{Change of coset vs. brute force}136137Now we have startsets of length $2$ in $U$ and there are two138possibilities:139140{\bf (1)} Find $3$ more elements from another coset like this:141\beginexample142gap> cosets:=RightCosets(G,U);143[ RightCoset(Group( [ f1, f2, f3 ] ),<identity> of ...),144RightCoset(Group( [ f1, f2, f3 ] ),f4),145RightCoset(Group( [ f1, f2, f3 ] ),f4^2) ]146gap> startsets:=StartsetsInCoset(startsets,cosets[2],N,5,auts,sigdat,Gdata,lambda);147#I Size 27148#I 1/ 0 @ 0:00:00.127149#I Size 11150#I 1/ 0 @ 0:00:00.058151#I -->1 @ 0:00:03.311152#I Size 2153#I 2/ 2 @ 0:00:00.015154#I -->2 @ 0:00:00.015155[ [ 4, 22, 5, 28, 73 ], [ 4, 22, 5, 28, 77 ] ]156\endexample157And $3$ more from the last one (of course, we could also change to158force, but it seems to work this way\dots).159\beginexample160gap> startsets:=StartsetsInCoset(startsets,cosets[3],N,8,auts,sigdat,Gdata,lambda);161#I Size 9162#I 1/ 0 @ 0:00:00.056163#I Size 1164#I 1/ 1 @ 0:00:00.006165#I -->1 @ 0:00:00.009166#I Size 1167#I 1/ 1 @ 0:00:00.006168#I -->1 @ 0:00:00.006169[ [ 4, 22, 5, 28, 73, 37, 66, 78 ] ]170\endexample171172So we found one difference set of order $9$ in the elementary abelian173group of order $81$. To get the difference set containing $1$174explicitly and as a subset of $G$, say175\beginexample176gap> PermList2GroupList(Concatenation(startsets[1],[1]),Gdata);177[ f3, f1*f3^2, f4, f2*f3*f4, f1*f2^2*f3^2*f4, f1^2*f4^2, f2*f3^2*f4^2,178f1^2*f2^2*f3*f4^2, <identity> of ... ]179\endexample180181{\bf (2)} Do a brute force search. Here we have to convert182the forbidden group $N$ into a list of integers $Np$. And we have to183raise the length of the startsets by one before we can start. This is184due to the ordering we chose (which is not necessarily compatible with185the cosets modulo $U$).186187\beginexample188gap> Np:=GroupList2PermList(Set(N),Gdata);189[ 1, 2, 3, 6, 7, 10, 16, 19, 32 ]190gap> startsets:=ExtendedStartsetsNoSort(startsets,[1..groupOrder],Np,8,Gdata,lambda);;191gap> Size(startsets);19254193gap> foundsets:=[];;194gap> for set in startsets195> do196> Append(foundsets,AllDiffsets(set,[1..groupOrder],k-1,Np,Gdata,lambda));197> od;198gap> Size(foundsets);199162200\endexample201202Now <foundsets> contains $162$ relative $(9,9,9,1)$-difference sets203(represented by lists of length $8$). These are all equivalent (as seen above). Equivalence can be tested like this:204205\beginexample206gap> ReducedStartsets(foundsets,[Gdata.Aac],i->true,Gdata);207#I Size 162208#I 1/ 0 @ 0:00:00.001209[ [ 4, 22, 36, 39, 49, 50, 60, 61 ] ]210\endexample211212%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%213%%214%E END215%%216217218