Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/GAP/grp/   (GAP Algebra Version 4.15.1©)  Datei vom 18.9.2025 mit Größe 25 kB image not shown  

Quelle  csetperm.gi   Sprache: Shell

 

#############################################################################
##
##  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
##

#############################################################################
##
#F  MinimizeExplicitTransversal( <U>, <maxmoved> )  . . . . . . . . . . local
##
InstallGlobalFunction(MinimizeExplicitTransversal, function(Umaxmoved )
    local   explicit,  lenflock,  flock,  lenblock,  index,  s;

    if     IsBound( U.explicit )
       and IsBound( U.stabilizer )  then
        explicit := U.explicit;
        lenflock := U.stabilizer.index * U.lenblock / Length( U.orbit );
        flock    := U.flock;
        lenblock := U.lenblock;
        index    := U.index;
        ChangeStabChain( U, [ 1 .. maxmoved ] );
        for s  in [ 1 .. Length( explicit ) ]  do
            explicit[ s ] := MinimalElementCosetStabChain( U, explicit[ s ] );
        od;
        Sort( explicit );
        U.explicit := explicit;
        U.lenflock := lenflock;
        U.flock    := flock;
        U.lenblock := lenblock;
        U.index    := index;
    fi;
end );

#############################################################################
##
#F  RightTransversalPermGroupConstructor( <filter>, <G>, <U> )  . constructor
##
MAX_SIZE_TRANSVERSAL := 100000;

# 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 ) <> 0  do
#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)>2 then
              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;

          fi;
          bpt := First( domain, p -> not IsFixedStabilizer( GCC, p ) );
          ChangeStabChain( GCC, [ bpt ], true  );  GCC := GCC.stabilizer;
          ChangeStabChain( UCC, [ bpt ], false );  UCC := UCC.stabilizer;
        od;
    fi;

    AddCosetInfoStabChain(GC,UC,LargestMovedPoint(G));
    MinimizeExplicitTransversal(UC,LargestMovedPoint(G));

    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 );


#############################################################################
##
#F  AddCosetInfoStabChain( <G>, <U>, <maxmoved> ) . . . . . .  add coset info
##

InstallGlobalFunction( AddCosetInfoStabChain, function( G, U, maxmoved )
    local   orb,  pimg,  img,  vert,  s,  t,  index,
            block,  B,  blist,  pos,  sliced,  lenflock,  i,  j,
            ss,  tt,t1,t1lim,found,tl,vimg,
            sel,shortsel,gorpo,pisel,prepi,transinv;

    # iterated image
    vimg:=function(point,list)
    local i;
      for i in list do
        point:=point^i;
      od;
      return point;
    end;

    Info(InfoCoset,5,"AddCosetInfoStabChain [",
          SizeStabChain(G),",",SizeStabChain(U),"]");
    if IsEmpty( G.genlabels )  then
        U.index    := 1;
        U.explicit := [ U.identity ];
        U.lenflock := 1;
        U.flock    := U.explicit;
    else
        AddCosetInfoStabChain( G.stabilizer, U.stabilizer, maxmoved );

        # U.index := [G_1:U_1];
        U.index := U.stabilizer.index * Length( G.orbit ) / Length( U.orbit );
        Info(InfoCoset,5,"U.index=",U.index);

        # 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

                  pisel:=Filteredbpt =First( domainp>not IsFixedStabilizer( GCC, p ) );
                    (pimgx) andpimg[x]in );

                  while t <= U.lenblock  and  index < U.index  do

                    # 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[ 1  do
                      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-1 then
                         : 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(

end );

#############################################################################
##
#F  CosetNumber( <arg> )  . . . . . . . . . . . . . . . . . . number to coset
##
InstallGlobalFunction( CosetNumber, function( arg )
    local   G,  U,  num,  tup,  b,  t,  rep,  pnt,  bpt,

    # 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 = 1  then
        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.
        if if 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) > 0 then
            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) > 0 then
            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) > 0 then
            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) > 0 then
            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)>2 then
    N:=arg[3];
  else
    N:#the generated   .  java.lang.StringIndexOutOfBoundsException: Range [77, 78) out of bounds for length 77
  fi;
0 then
    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=2 then
      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;

  op:=Image(hom,G);
  SetSize(op,IndexNC(G,N));

        ;
  SetKernelOfMultiplicativeGeneralMapping(hom,        
  AddNaturalHomomorphismsPool(G,N,hom);
  return hom;
end);

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
C=80 H=75 G=77

¤ 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:  ¤

*Bot Zugriff






ehemaliges Applet des 4D-Würfels

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

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.