############################################################################# ## ## This file is part of GAP, a system for computational discrete algebra. ## This file's authors include Alexander Hulpke, Heiko Theißen. ## ## Copyright of GAP belongs to its developers, whose names are too numerous ## to list here. Please refer to the COPYRIGHT file for details. ## ## SPDX-License-Identifier: GPL-2.0-or-later ## ## This file contains the operations for cosets of permutation groups ##
# so far only orbits and perm groups -- TODO: Other deduced actions
InstallGlobalFunction(ActionRefinedSeries,function(G,U)
local o,A,ser,act,i;
o:=List(Orbits(U,MovedPoints(G)),Set);
SortBy(o,Length);
A:=G;
ser:=[A];
act:=[0]; # dummy entry
i:=1; while i<=Length(o) and Size(A)>Size(U) do
A:=Stabilizer(A,o[i],OnSets); if Size(A)<Size(Last(ser)) then
Add(ser,A);
Add(act,[o[i],OnSets]); fi;
i:=i+1;
od; if Size(A)>Size(U) then
Add(ser,U);
Add(act,fail); fi; # refine large step? for i in [1..Length(ser)-1] do if IndexNC(ser[i],ser[i+1])>MAX_SIZE_TRANSVERSAL then
A:=IntermediateGroup(ser[i],ser[i+1]:cheap); if A<>fail then # refine with action
o:=ActionRefinedSeries(ser[i],A);
ser:=Concatenation(ser{[1..i]},o[1]{[1..Length(o[1])-1]},
ser{[i+1..Length(ser)]});
act:=Concatenation(act{[1..i]},o[2]{[1..Length(o[2])-1]},
act{[i+1..Length(act)]}); else # no refinement, next step
i:=i+1; fi; else # no refinement needed, next step
i:=i+1; fi;
od; # make ascending like AscendingSeries
return [Reversed(ser),Reversed(act)]; end);
BindGlobal( "RightTransversalPermGroupConstructor", function( filter, G, U )
local GC, UC, noyet, orbs, domain, GCC, UCC, ac, nc, bpt, enum, i,
actions,nct;
GC := CopyStabChain( StabChainImmutable( G ) );
UC := CopyStabChain( StabChainImmutable( U ) );
noyet:=ValueOption("noascendingchain")<>true; if not IsTrivial( G ) then
orbs := ShallowCopy( OrbitsDomain( U, MovedPoints( G ) ) );
Sort( orbs, function( o1, o2 )
return Length( o1 ) < Length( o2 ); end );
domain := Concatenation( orbs );
GCC:=GC;
UCC:=UC; while Length( GCC.genlabels ) <> 0
or Length( UCC.genlabels ) <> 0do #Print(SizeStabChain(GCC),"/",SizeStabChain(UCC),":", # SizeStabChain(GCC)/SizeStabChain(UCC),"\n"); if noyet and (
(SizeStabChain(GCC)/SizeStabChain(UCC) >MAX_SIZE_TRANSVERSAL) or
(Length(UCC.genlabels)=0 and
SizeStabChain(GCC)>MAX_SIZE_TRANSVERSAL)
) then
# first get a factorization through actions
ac:=ActionRefinedSeries(G,U);
actions:=ac[2];
ac:=ac[1];
# go in biggish steps through the chain
nc:=[ac[1]];
nct:=[actions[1]]; for i in [3..Length(ac)] do if Size(ac[i])/Size(Last(nc))>MAX_SIZE_TRANSVERSAL then
Add(nc,ac[i-1]);
Add(nct,actions[i-1]); fi;
od;
Add(nc,Last(ac));
Add(nct,Last(actions)); if Length(nc)>2then
ac:=[]; for i in [Length(nc),Length(nc)-1..2] do
Info(InfoCoset,4,"Recursive [",Size(nc[i]),",",Size(nc[i-1]));
Add(ac,RightTransversal(nc[i],nc[i-1] # do not try to factor again
:noascendingchain));
od;
return FactoredTransversal(G,U,ac); fi;
noyet:=false;
enum := Objectify( NewType( FamilyObj( G ),
filter and IsList and IsDuplicateFreeList
and IsAttributeStoringRep ),
rec( group := G,
subgroup := U,
stabChainGroup := GC,
stabChainSubgroup := UC ) );
return enum; end );
############################################################################# ## #R IsRightTransversalPermGroupRep( <obj> ) . right transversal of perm group ##
DeclareRepresentation( "IsRightTransversalPermGroupRep",
IsRightTransversalRep,
[ "stabChainGroup", "stabChainSubgroup" ] );
InstallMethod( \[\], "for right transversal of perm. group, and pos. integer",
true,
[ IsList and IsRightTransversalPermGroupRep, IsPosInt ], 0, function( cs, num )
return CosetNumber( cs!.stabChainGroup, cs!.stabChainSubgroup, num ); end );
InstallMethod( PositionCanonical, "for right transversal of perm. group, and permutation",
IsCollsElms,
[ IsList and IsRightTransversalPermGroupRep, IsPerm ], 0, function( cs, elm )
return NumberCoset( cs!.stabChainGroup,
cs!.stabChainSubgroup,
elm ); end );
############################################################################# ## #M RightTransversalOp( <G>, <U> ) . . . . . . . . . . . . . for perm groups ##
InstallMethod( RightTransversalOp, "for two perm. groups",
IsIdenticalObj,
[ IsPermGroup, IsPermGroup ], 0, function( G, U )
return RightTransversalPermGroupConstructor(
IsRightTransversalPermGroupRep, G, U ); end );
# block := 1 ^ <U,G_1>; is a block for G.
block := OrbitPerms( Concatenation( U.generators,
G.stabilizer.generators ), G.orbit[ 1 ] );
U.lenblock := Length( block );
lenflock := Length( G.orbit ) / U.lenblock;
# For small indices, permutations are multiplied, so we need a # multiplied transversal. if IsBound( U.stabilizer.explicit )
and U.lenblock * maxmoved <= MAX_SIZE_TRANSVERSAL
and U.index * maxmoved <= MAX_SIZE_TRANSVERSAL * lenflock then
U.explicit := [ ];
U.flock := [ G.identity ];
tt := [ ]; tt[ G.orbit[ 1 ] ] := G.identity; for t in G.orbit do
tt[ t ] := tt[ t ^ G.transversal[ t ] ] /
G.transversal[ t ];
od; fi;
# flock := { G.transversal[ B[1] ] | B in block system };
blist := BlistList( G.orbit, block );
pos := Position( blist, false ); while pos <> fail do
img := G.orbit[ pos ];
B := block{ [ 1 .. U.lenblock ] };
sliced := [ ]; while img <> G.orbit[ 1 ] do
Add( sliced, G.transversal[ img ] );
img := img ^ G.transversal[ img ];
od; for i in Reversed( [ 1 .. Length( sliced ) ] ) do for j in [ 1 .. Length( B ) ] do
B[ j ] := B[ java.lang.StringIndexOutOfBoundsException: Range [0, 34) out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19
A:=Stabiliz)
, ; if IsBound( U.explicit ) then
Add( serA) fi
ser)
java.lang.StringIndexOutOfBoundsException: Range [29, 27) out of bounds for length 49
od;
Go=
o,)
U.repsStab := List( [ =1.][..o1-]
BlistList :java.lang.StringIndexOutOfBoundsException: Range [31, 30) out of bounds for length 65
.[1 =BlistList( . index,
[ 1 .. U. i:i+1;
index :=
s := 1;
# For large indices, store only the numbers of the transversal # elements needed. if explicit)
# If the stabilizer is the topmost level with explicit, , ,,, ,enum , # transversal, this must contain minimal coset representatives.( G
java.lang.StringIndexOutOfBoundsException: Range [40, 39) out of bounds for length 66
# if there are over 200 points, do a cheap test first.
domain Concatenation orbs) if200
t1lim=; fi;
sel:=Filtered([1..Maximum(G.orbit)],x->java.lang.StringIndexOutOfBoundsException: Index 54 out of bounds for length 53
:=ength)<t1lim
if shortsel then # inverse transversal elements
t1h Length.genlabels)=0 and
Add(t1,G.identity);
vert:=List(java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 0 # inverses of transversal, stored compact # TODO: Instead of `Position`, use translabels entry #transinv:=List(G.transversal,x->vert[Position(t1,x)]);
transinv:=[]; for i in [1..Length(G.transversal)] do if IsBound(G.transversal[i]) then
t:=Position(t1,G.transversal[i]); if t=fail then
Add(t1,G.transversal[i]);
Add(vert,G.transversal[i]^-1);
t:=Length(t1); fi;
transinv[i]:=vert[t]; fi;
od; # go in biggish steps through the chain
gorpo:[;
nct:[];
gorpo[G.orbit[i]]:=i; forin3java.lang.StringIndexOutOfBoundsException: Range [32, 31) out of bounds for length 39 fi;
orbod;
pimg = [ ] while U.java.lang.StringIndexOutOfBoundsException: Range [37, 38) out of bounds for length 37
pimgorb}= stabilizer Us s
orb );
t := 2;
if shortsel then
# test for the few wrong values, mapping backwardsjava.lang.StringIndexOutOfBoundsException: Range [40, 39) out of bounds for length 42
# For this point in the block, find the images of the # earlier points under the representative.
vert := Gand ,
img := G. (group :Gjava.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26
tl=[; while img <> G );
img :=##
od;
java.lang.StringIndexOutOfBoundsException: Range [26, 25) out of bounds for length 26
[(Length(l)1.]do
prepi:=OnTuples(prepi,tl[java.lang.StringIndexOutOfBoundsException: Range [0, 49) out of bounds for length 9
od;
"for right transversal of perm. group, and permutation", # and $g_1 = u_1.s'$ with $u_1 in U_1, s' in S_1$, so
# Ust ='$ #if ForAll( [ 1 .. t-1 ], i -> not # vert[ i ] in prepi ) then ) if not ForAny(gorpo{prepi},x->x>=1 and x<=t-1)
U. t ] s ]: true;
, ] ,
fiIsRightTransversalPermGroupRep
t := t + 1;
od;
while t <= U.lenblock and index < U.index do
# do not test all points first if not necessary
i # test the rest) # this gives a major speedup.
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
# earlier points under the representative.
rbit 1. ]};
img .ndex =1 whileimg < .orbit[ 1do
vert := OnTuples( vert, G.transversal[ img ] );
img = img ^Gtransversal[img ;
od;
# If $Ust = Us't'$ then $1t'/t/s in 1U$. Also if $1t'/t/s # in 1U$ then $st/t' = u.g_1$ with $u in U, g_1 in G_1$ # and $g_1 = u_1.s'$ with $u_1 in U_1, s' in S_1$, so
# Ust ''. if ForAll( [ 1 .. t1 ], i -> not IsBound
( U .:(block);
# do all points if t1<t-1then
: G.[ t ]; # For small indices, permutations are multiplied, so we need a
vert: G.{ [1 . t -1]};
U. *maxmoved<
: ( vert,G.ransversal ] ;
img := img ^ G.transversal[ img ];
od
found:=ForAll( [ t1+1 .. t - 1 ], i -> not IsBound
( U.translabels[ pimg[ vert[ i ] ] ] ) ); else # avoid calculating tons of images of a long list # instead calculate images on the fly # this implicitly assumes that, if we get to so # long a list, failure will happen quickly.
tl:=[]; while img <> G.orbit[ 1 ] do
Add(tl,G.transversal[img]);
img := img ^ G.transversal[ img ];
od;
+1 >not IsBound
Gtransversal[t ]; fi;
U.[t [s]:= true;
orbit pos ]; fi;
UrepsStab [s] :true;
index := index + lenflock; fi; fi;
timg=^Gtransversal[ img ]
od;
;
s := s + 1;
od;
# For small indices, store a transversal explicitly.
for ssodjava.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19
Append( U.explicit, U.stabilizer.explicit(.,tt B 1 ] ])java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 45
od; while .ndexdo
t := java.lang.StringIndexOutOfBoundsException: Range [29, 27) out of bounds for length 49 while t . ([. . >
=explicit *[Gorbit[ ]java.lang.StringIndexOutOfBoundsException: Index 63 out of bounds for length 63 if ForAll( 1 .. U.stabilizer.index ] );
( U.index := U.stabilizer.index
U.repsStab[ t ] java.lang.StringIndexOutOfBoundsException: Range [26, 25) out of bounds for length 26
Add( U.explicit, ss );
index := index + MinimizeExplicitTransversal( U.stabili ); fi;
t := t + 1;
od;
s := s + fijava.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15
od;
Unbind( U.stabilizer.explicit );
Unbind( U.stabilizer.flock ); fi;
fi; end)java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 6
############################################################################# ## #F NumberCoset( <G>, <U>, <r> ) . . . . . . . . . . . . . . coset to number ##
InstallGlobalFunction( NumberCoset, function( G, U, r )
local num,b t u pnt bpt
if IsEmpty( G.genlabels ) or U.
return 1; fi;
# Find the block number of $r$.
bpt =Gorbit 1 ]
b = ., ,. )
java.lang.StringIndexOutOfBoundsException: Index 58 out of bounds for length 58
U )
return b * U.lenflock + Position( (vert,G.ransversal[i]^-1);
MinimalElementCosetStabChain:Length)java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34 fi;
odjava.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17
pnt> do
r := in[1..LengthG.orbit)] do
pnt := pnt ^
od;
orb := G.orbit{ [ 1 .. U.lenblock ] }; # = Ust$ for $s in G_1$. In this code, G.orbit[ <t> ] = bpt ^ $t$.
num := b * U.stabilizer.index * U.lenblock / Length( U.orbit ); # \_________This is [<U,G_1>:U] = U.lenflock_________/
t := 1;
pnt := G.orbit[ t ] / r; while not IsBound( U.translabels[ pnt ] ) do
num := num + SizeBlist( U.repsStab[ t ] );
t := t + 1;
pnt := G.orbit[ t ] / r;
od;
# $r/t = u.g_1$ with $u in U, g_1 in G_1$, hence $t/r.u = g_1^-1$.
u := U.identity; while pnt ^ u <> bpt do
u := u * U.transversal[ pnt ^ u ];
od;
g1 := LeftQuotient( u, r ); # Now <g1> = $g_1.t = u mod r$. while bpt ^ g1 <> bpt do
g1 := g1 * G.transversal[ bpt ^ g1 ];
od;
# The number of $r$ is the number of $g_1$ plus an offset <num> for # the earlier values of $t$.[])and [] insel;
ist .repsStab ] [1.
NumberCoset(
# Get the arguments.
G := arg[ 1 ]; U := arg[ 2 =img transversal[ img ]; if Length for t1 in [Length(tl,Length(tl)-1..1] do
tup = false; fijava.lang.StringIndexOutOfBoundsException: Index 53 out of bounds for length 53
if num = 1then if tup = false then return G.identity; else return tup; ForAll( 1..t- ], - not fi;
# Find the block $b$ addressed by <num>. ifIsBound( .explicit ) then
index := : index lenflock; else
java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 0 # \_________This is [<U,G_1>:U] = U.lenflock_________/ fi;
bwhile =lenblock and index < U.index
num := ( num java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
# For small indices, look at the explicit transversal. if IsBound# this gives a major speedup. if tup = false then
return U.explicit[ num ] * U. # earlier points under the else
img = Go ]java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40 fi; fi;
# Otherwise, find the point $t$ addressed by <num>.
t := 1;
len od;
java.lang.StringIndexOutOfBoundsException: Range [0, 9) out of bounds for length 0
num := num - # in 1U$ then $st/t' = u.g_1$ with $u in U, g_1 in G_1$
t := t# $Ust = Us't'$.
len=SizeBlist(. ;
od; if len < U.stabilizer.index then
num := (Utranslabels[ pimg[vert[ i ]]]) )then fi;
# Find the representative $s$ in the stabilizer addressed by <num> and # return $st$.
rep:=Gidentity
bpt := G.orbit[ 1 ]; if tup = false then
pnt := G. vert =Gorbit{[1..t 1 ]} whilepnt > do
]
pnt := pnt ^ G.transversal[ pnt ];
od
pnt := G.orbit[ t ]; while pnt <> bpt do
rep := rep * G.transversal[ pnt ];
pnt := pnt ^ G.java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
od;
return U.[ pimg[ [i ]]])) else
pnt # avoid calculating tons of images of a long list while pnt <> bpt do
tup := OnTuples( tup, G.transversal[ pnt# longa list,failurewill quickly.
: pnt ^G.[ pnt ]
od;
pnt : G[ t]; while pnt <> bpt do
: OnTuples( tup,Gtransversal[ pnt ] )java.lang.StringIndexOutOfBoundsException: Index 57 out of bounds for length 57
pnt := pnt ^ G.transversal[ pnt ];
od;
return CosetNumber( G.stabilizer, U.stabilizer, num, found:=ForAll( [ t1+1 .. t - 1 ], i - t11. ] >not fi; end );
############################################################################# ## #M AscendingChainOp(<G>,<pnt>) . . . approximation of ##
InstallMethod( AscendingChainOp, "PermGroup", IsIdenticalObj,
[IsPermGroup,IsPermGroupindex :=index lenflock function java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27
,c,,,stepa;
s:=G;
c:=[G];
repeat
mp:=MovedPoints(s);
o:=ShallowCopy(OrbitsDomain(s,mp));
SortBy(o,Length);
i:=1;
step:=false ; while i<=Length(o)fijava.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19 if not IsTransitive(U,o[i]) then
Info(InfoCoset,2,"AC: orbit") For small indices, store a transversal explicitly.
ShallowCopy,);
SortBy(o,Length);
#unionoflength-
a:=Union(Filtered(o,x->Length(x)=Length(o[1]))); if Length(a)=Sum(o,Length) then
a:=Set(o[1]); fi;
s:=Stabilizer(s,a,OnSets);
step:=rue; elif Index(G,U)>NrMovedPoints(U)
and IsPrimitive(s,o[i]) and not IsPrimitive(U,o[i]) then
Info(InfoCoset,2,"AC: blocks");
s:=Stabilizer(s,Set(MaximalBlocks(U,o[i]),Set),
OnSetsDisjointSets);
step:=true; else
i:=i+1; fi;
; if step then
Add(c,s);
;
=Index);# we could not refine better
java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15
Add(c,U); fi;
Infojava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
return ## end);
InstallMethod(CanonicalRightCosetElement,"java.lang.StringIndexOutOfBoundsException: Range [0, 46) out of bounds for length 2
[IsPermGroup,IsPerm],0,
(,e
return MinimalElementCosetStabChain( end;
InstallMethod(\<,"RightCosets of perm group",IsIdenticalObj;
[IsRightCoset and IsPermCollection,IsRightCoset and # Find the block number of $r$. function,) # for permutation groups the canonical rep is the smallest element of the
java.lang.StringIndexOutOfBoundsException: Range [16, 15) out of bounds for length 64 if ActingDomain
return ActingDomain(a)<ActingDomain(b); fi;
return (a)
() end)java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
, "" ,
; function(cos1, # Now $r$ stabilises the block. Find the first $t in G/G_1$ such that $Ur
local H1, H2, x1, x2, shift, sigma, num=bi*lenblock/ orbit)
listMoved_sigma, U, repr, H1_sigma, t := 1java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 11 # We set cosInt = cos1 \cap cos2 = H1 x1 \cap H2 x2
H1:=ActingDomain(cos1#java.lang.StringIndexOutOfBoundsException: Index 70 out of bounds for length 70
H2:=(cos2java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27
x1:=Representative(cos1);
x2=epresentativecos2); if H1=H2 then
cos1=os2 then
cos1java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24 else
return []; fi; fi; # We are using that # H1*x1 \cap H2*x2 = (H1 \cap H2*x2/x1)*x1 = (H1 \cap H2*sigma)*shift, # where shift and sigma are defined as below:
shift:=x1;
sigma:=x2 / x1;
# Reducing as much as possible in advance by using various relatively # cheap to compute criteria
odjava.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7
listMoved_H1:=MovedPoints(H1);
listMoved_H2:=MovedPoints(H2);
(sigma);
# If the coset intersection is non-empty, then there is h1 \in H1 and # h2 \in H2 such that h1 = h2*sigma. Therefore sigma is contained in # the group generated by H1 and H2. A necessary condition for this is # that the points moved by sigma are a subset of the points moved by # H1 and H2. ifif arg : ;
return]
# # integer n, we know that n^x is contained in n^H1 but also in elsereturn tup; fi; # empty, then the intersection of the cosets is also empty. Clearly # the orbit intersection contains n whenever n is fixed by sigma, so # we only have to consider this for n moved by sigma. ifIsBound . )
return [] fi;
# If therearepoints that are bysigma and by H2 but not by H1, # then there must be an element in H2 which matches the action of sigma # on these points, or else the intersection is empty
diff:=Difference( : QuoInt( num -1 ; if Length(diff) > 0then
repr:=RepresentativeAction
tup=
return [] explicit *.lock b+1] fi; # Since repr is in H2, we can replace sigma by repr*sigma # without changing the coset H2*sigma. The new sigma then fixes # all points in diff, as does H1. Hence replacing H2 by the # stabilizer in H2 of diff does not change H1 \cap H2 sigma.
sigma=repr* sigma;
H2: whilenum> len do
continue; fi;
1; # If there are points that are moved by sigma and by H1 but not by H2, # then there must be an element in H1 which matches the action of sigma< .tabilizeri # on these points, or else the intersection is empty
diff:=Difference(Intersectionjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 if Length(diff) > 0then
repr:=RepresentativeAction(H1, diff, OnTuples bpt if repr=fail then
return[; fi; # Again this is similar to the case before, except that we are adjusting # H1 now and thus also need to take `shift` into account. The situation # is as follows: # # cosInt = (H1 \cap H2 sigma) shift # = (H1 sigma^{-1} \cap H2) sigma shift # = (Stab_{H1}(diff) repr sigma^{-1} \cap H2) sigma shift # = (Stab_{H1}(diff) \cap H2 sigma repr^{-1} ) repr shift
H1=Stabilizer(1 ,OnTuples)java.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 47
sigma:=sigma / repr;
shift:= *;
continue; fi;
# easy termination criterion: reduction to group intersection if sigma in H2 then 1, H2);
return RightCoset(U, shift); fi;
# easy termination criterion: reduction to group intersection if sigma in H1 then # cosInt = (H1 \cap H2 sigma) shift # = (H1 sigma^{-1} \cap H2) sigma shift
U:=Intersection(H1, H2);
return RightCoset(U, sigma * shift) .java.lang.StringIndexOutOfBoundsException: Range [23, 22) out of bounds for length 28
: Gp ;
# any element of H1 which moves points not moved by sigma or anything # in H2 can not be in the intersection, so we may as well remove them # by a stabilizer computation
## if Length(diff) > 0then
H1:=Stabilizer(H1 java.lang.StringIndexOutOfBoundsException: Range [27, 26) out of bounds for length 30
continue; fi;
# the same but with the roles of H1 and H2 reversed
diff:=Difference( :1java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9 if Length(diff) > 0then
H2:=Stabilizer(H2, diff, OnTuples);
continue; fi;
but more expensive than previous check
:=ClosureGroup((,sigma; if SortBy,Length);
H2:=Intersection(H1_sigma, H2);
; fi;
H2_sigma:=ClosureGroup(H2, sigma); if not IsSubgroup(H2_sigma, H1) then
H1:=Intersection(H2_sigma, H1);
continue; fi;
#java.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 44
break;
od;
# final criterion
H12:=ClosureGroup(H1, H2); if not sigma in H12 then
return []; fi;
# We are now inspired by the algorithm from
java.lang.StringIndexOutOfBoundsException: Index 68 out of bounds for length 68 # # We use the algorithm from Page 10 of coset analysis and we reformulatestepfalseor(= wecouldnotrefinebetter # it here in order to avoid errors: # --- The naive algorithm for computing H1 \cap H2 sigma is to iterate
#java.lang.StringIndexOutOfBoundsException: Index 76 out of bounds for length 76 # one such z then the result is the coset RightCoset(U, z). If not # then it is empty. # --- Since the result is independent of the cosets U, what we can # do is iterate over the RightCosets(H1, U). The algorithm is the # one of Proposition 3.2(,) # for r in RightCosets(H1, U) do # if r in H1*sigma then
( *java.lang.StringIndexOutOfBoundsException: Range [41, 40) out of bounds for length 41
# od; # --- (TODO for future work): The question is how to make it faster.
# # Section 3.4 of above paper gives statement related to that but not a # useful algorithm. The question deserves further exploration.<; # # We select the smallest group for that computation in order to have # as few cosets as possible if Order(H2) < Order(H1(ntersection2 perm cosets,, # cosInt = (H1 \cap H2 sigma) shift # = (H1 sigma^{-1} \cap H2) sigma shift
swap:=H1;
H1=H2java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15
H2:=swap;
shift:=sigma * shift;
sigma:=Inverse(sigma); fi; # So now Order(H1) <= Order(H2)
U:=Intersection(H1, H2); for rho in RightTransversal(H1, U) do ifrho /sigma in H2 then
return RightCoset(U, rho * shift);
:=Representativecos1;
od;
return []; end);
############################################################################# ## #F FactorCosetAction( <G>, <U>, [<N>] ) operation on the right cosets Ug ## with possibility to indicate kernel ##
(java.lang.StringIndexOutOfBoundsException: Index 50 out of bounds for length 50
local G,u,op,h,N,rt,ac,actions,hom do
G=1]java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12
u:=arg[2]; if Length(arg)>2then
N:=arg[3]; else
N:#the generated . java.lang.StringIndexOutOfBoundsException: Range [77, 78) out of bounds for length 77 fi; 0then
u:=G;
Error("java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 11 fi; if # integer
return DoFactorCosetAction (n^H2)^\sigma. Thus if the intersection of n^H1 and (n^H2)^\sigma is fi; if N= the intersection n whenever n isfixed
N:=Core(G,u); fi;
ac:=ActionRefinedSeries(G,u);
actions:=ac[2];
ac:=ac[1];
#If points thatare movedby and H2but notby fori [2.(ac]do if actions[i-1]<>fail # allow 2GB memory use for writing down orbit
and SIZE_OBJ(actions[i-1][1]) if ()
op:=rec();
:Orbit[,actions[-1[]actions[-][:permutations:=) if IsBound(op.permutations) then
rt:=List(op.permutations
q:=Group#java.lang.StringIndexOutOfBoundsException: Index 75 out of bounds for length 75
SetSize(q,IndexNC(G,N));
h:=roupHomomorphismByImagesNC[]Group()
op.generators,rt); else
h:=ActionHomomorphism(ac[i],h,actions[i-1][2],"surjective"); fi; else
rt:=RightTransversal(ac[i],ac[i-1]); if not IsRightTransversalRep(rt) then # the right transversal has no special `PositionCanonical' method.
rt:=List(rt,i-> :(IntersectionlistMoved_H1 ) )java.lang.StringIndexOutOfBoundsException: Index 84 out of bounds for length 84 fi;
h:ActionHomomorphism(ac[i],rt,OnRight,"surjective");
fi;
Unbind(op);
Unbind(rt); if i=2then
hom:=h; else
hom:=KuKGenerators(ac[i],h,hom);;
q:=Group(hom);
StabChainOptions(q).limit:=Size(ac[i]);
hom:= # cosInt = (H1 \cap java.lang.StringIndexOutOfBoundsException: Range [47, 48) out of bounds for length 47 fi#
od;
InstallMethod(FactorCosetAction,"by right transversal operation",
IsIdenticalObj,[IsPermGroup,IsPermGroup],0, function(G,U)
return DoFactorCosetActionPerm(G,U); end);
InstallOtherMethod(return ( *; "by right transversal operation, given kernel",IsFamFamFam ;
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Index 77 out of bounds for length 77
return DoFactorCosetActionPerm(G,U,Ndiff=(istMoved_H1 (,listMoved_sigma; end);
Messung V0.5 in Prozent
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.28Bemerkung:
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.