Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quelle  BW.gi   Sprache: unbekannt

 
Spracherkennung für: .gi vermutete Sprache: Unknown {[0] [0] [0]} [Methode: Schwerpunktbildung, einfache Gewichte, sechs Dimensionen]

#############################################################################
##
#W  BW.gi                 The Wedderga package            Osnel Broche Cristo
#W                                                         Olexandr Konovalov
#W                                                            Aurora Olivieri
#W                                                           Gabriela Olteanu
#W                                                              Ángel del Río
##
#############################################################################


###############################################################################
###############                      BW               #########################
###############################################################################


#############################################################################
##
#O LinCharByKernel( K, H )
##
## Returns a linear character of K with kernel H
##
InstallMethod( LinCharByKernel,
    "for subgroups", 
    true, 
    [ IsGroup , IsGroup ], 
    0,
function(K,H)

local 
cc, Epi, KH, ok, k, elKH, exp, chi;

cc := ConjugacyClasses( K );
Epi := NaturalHomomorphismByNormalSubgroup( K, H ) ;
KH := Image(Epi,K);
ok := Index(K,H);
if ok = 1 then 
  return ClassFunction( K, List( cc, x->1 ) );
else 
  repeat
    k := Random(KH);
  until ok = Order(k);
  elKH := AsSet( KH );
  exp := List( [0..ok-1], x -> Position(elKH,k^x) );
  chi := ClassFunction( K, List( cc, x -> 
    E(ok)^(Position(exp,Position(elKH, Image( Epi, Representative(x))))-1)));
  return chi;
fi;
end);


#############################################################################
##
#O BWNoStMon( G )
##
## Returns a list of 4-tuples:
## First position  = an irreducible not strongly monomial character of G 
##                   (a representative from his rationalized class) 
## Second position = character field of chi
## Third position  = List of strongly Shoda triples with list of primes
## Fourth position = Galois group of CF(exponent(G))/character field of chi
##
InstallMethod( BWNoStMon ,
    "for finite groups", 
    true, 
    [ IsGroup and IsFinite ], 
    0,

function(G)

local 
    irr,         # irreducible characters
    ratirr,      # rational irreducible characters
    classirr,    # irreducible characters classified into rationalized classes
    chi,        # one irreducible character
    ratchi,       # rationalized of chi
    L,           # Splitting Field of G
    sspsub,      # List of pairs [p,SST] where p is a set of primes and SST is a 
                # strongly Shoda triple such that the simple algebra associated
                # to SST is the p-part of one Wedderburn component of QG
    control,     # A list of integers controlling the position in classirr
                 # still not covered by sspsub
    GalList,      # the list of Galois Groups Gal(L/character fields) 
    sylow,       # the list of Sylow subgroups of the elements in GalList
    primes,      # a list of lists of primes controlling the p-parts still not covered 
    i,           # counter
    cf,          # character field of chi
    Gal,         # Gal(L/cf)
    d,           # integer
    pr,          # prime divisors of d
    sub,         # Conjugacy Classes of subgroups of G
    nsub,        # Cardinality of sub
    subcounter,  # counter for sub
    M,           # subgroup of G
    ssp,         # strongly Shoda pairs of M
    m,           # Size of ssp
    sspcounter,  # counter for ssp
    K,H,         # strongly Shoda pair of M
    psi,         # the strongly monomial character of M given by M
    cfpsi,       # character field of psi
    gencfpsi,    # generators of character field of psi
    dropcontrol, # list to be drop from control
    controlcounter, # control counter
    dropprimes,     # list of primes to be drop from primes
    remainingprimes,# counter of remaining primes
    primecounter,   # primes counter
    p,           # element of primes[controlcounter]
    P,           # p-Sylow subgroup of GalList[controlcounter]
    genP,        # set of generators of P
    irrcounter,   # irreducible characters counter
    sprod;       # (chi_M,psi)


# Classifying the irreducible characters into rational classes

  irr := Filtered(Irr(G),chi->chi[1]>1);
  ratirr := Difference(
              RationalizedMat( irr ),
              RationalizedMat( List( StrongShodaPairs( G ), x ->
                                     LinCharByKernel( x[1], x[2] )^G ) ) );
  classirr := List(ratirr,x->[]);
  for chi in irr do
      ratchi := RationalizedMat([chi])[1];
      if ratchi in ratirr then 
        Add(classirr[Position(ratirr,ratchi)],chi);
      fi;
  od;

# Initialization of lists

  L := CF(Exponent(G));
  sspsub := [];
  control := [];
  GalList := [];
  sylow := [];
  primes := [];
  for i in [1..Length(ratirr)] do
      chi := classirr[i][1];
      cf := Field( chi );
      Gal := GaloisGroup(AsField(cf,L));
      Add(GalList,Gal);
      d:=Gcd(Size(Gal),chi[1]);
      if  d = 1 then 
          Add(sspsub,[chi,cf]);
          Add(primes,[]);
          Add(sylow,[]);
      else
          Add(sspsub,[chi,cf,[],Gal]);
          pr := Set(FactorsInt(d));
          Add(primes,pr);
          Add(sylow,List(pr,p->SylowSubgroup(Gal,p)));
          Add(control,i);
      fi;    
  od;

sub:=ConjugacyClassesSubgroups(G);
if ForAny( [1 .. Length(sub)-1 ], i -> 
           Size(Representative(sub[i])) > Size(Representative(sub[i+1])) ) then
  sub:=ShallowCopy(ConjugacyClassesSubgroups(G));
  Sort(sub, function(v,w) return Size(Representative(v))<Size(Representative(w)); end);
fi;
nsub := Size(sub);
subcounter := nsub-1;
while Sum(List(primes,Length)) > 0 do
    M:=Representative( sub[ subcounter ] );
    ssp := StrongShodaPairs(M);
    m := Length(ssp);
    sspcounter := 1;
    while sspcounter <= m and Sum(List(primes,Length))> 0 do
        K := ssp[sspcounter][1]; 
        H := ssp[sspcounter][2];
        psi := LinCharByKernel(K,H)^M;
        cfpsi := Field(psi);
        gencfpsi := GeneratorsOfField(cfpsi);
        dropcontrol := [];
        for controlcounter in control do 
            dropprimes := [];
            chi := classirr[controlcounter][1];
            remainingprimes := Length(primes[controlcounter]);
            primecounter := 1;
            while primecounter <= remainingprimes do
                p := primes[controlcounter][primecounter];
                P := sylow[controlcounter][primecounter];
                genP := GeneratorsOfGroup(P);
                if ForAll(Cartesian(genP,gencfpsi), x -> x[2]^x[1]=x[2]) then 
                    irrcounter := 1;
                    while irrcounter <= 
Length(classirr[controlcounter]) and dropprimes <> primes[controlcounter] do
                        chi := classirr[controlcounter][irrcounter];
                        sprod := ScalarProduct( Restricted(chi,M) , psi );
                        if sprod mod p <> 0 then
                            Add(dropprimes,p);
                        fi;
                        irrcounter := irrcounter+1;
                    od;
                fi;
                primecounter := primecounter+1;
            od;
            primes[controlcounter] := Difference(primes[controlcounter],dropprimes);
            if dropprimes <> [] then
            Add(sspsub[controlcounter][3],[M,K,H,dropprimes]);
            fi;
            if primes[controlcounter] = [] then 
                control := Difference(control,[controlcounter]);
            fi;
        od;
    sspcounter := sspcounter + 1;
    od;
    subcounter:=subcounter-1;
od;

return sspsub;

end);


###############################################################################
####################                 cocycle           ########################
###############################################################################


#############################################################################
##
#O ReductionModnZ( n, m )
##
## Projection Zn^* ----> Zm^* for m|n
##
InstallMethod( ReductionModnZ ,
    "for positive integers ", 
    true, 
    [ IsPosInt , IsPosInt ], 
    0,

function(n,m)

local UZn,UZm;

if not IsInt(n/m) then 
  return fail;
fi;
  
UZn := Units( ZmodnZ(n) );
UZm := Units( ZmodnZ(m) );

return MappingByFunction( UZn, UZm,
         function(x) 
           return ZmodnZObj( Int(x), m ); 
         end);
end);


#############################################################################
##
#O GalToInt( G )
##
## Returns an isomorphism Gal(Q(xi_n)/Q)  ---->  Zn^*
##
InstallMethod( GalToInt ,
    "for Galois groups of cyclotomic extensions", 
    true, 
    [ IsGroup ], 
    0,

function(G)

local F,con,genF,powgenF,i,UZcon;

F:=Source(One(G));
con:=Conductor(F);
genF := E(con);
powgenF := [genF];
for i in [1..con-1] do
    Add(powgenF,powgenF[i]*genF);
od;
UZcon := Units(ZmodnZ(con));

return MappingByFunction(G,UZcon,
  function(x)
    return ZmodnZObj(Position(powgenF,E(con)^x),con);
    end);
    
end);


###############################################################################
##
#O CocycleByData( exp, Gal, cf, M, K, H, div)
##
## Returns a pair formed by a positive integer cond and 
## the (additive) twisting for a crossed product algebra over 
## Gal=Galcf(Q(cond)/cf) associated to the triple (M,K,H) to the div power
##
InstallGlobalFunction(CocycleByData,function( exp, Gal, cf, M, K, H, div,N,Epi,NH,KH,ok,k)

local   

out;        # output, a cocycle of Galcf with coefficients in <E(cond)>
#ok;         # Order of K/H
#cond;       # Lcm(Conductor(cf),ok)

#ok := Index(K,H);
# cond:=Lcm(Conductor(cf),ok);




if N=K then

  ok := 1;
  out:=function(a,b) return 0; end;

else # if N_M(H) <> K    
 
  out:=function(a,b) # returns the twisting for the croosed product 
                     # algebra over Galcf given by the triple (M,K,H)
  local
  
    bij,bijunit, pow,
    i,          # Loop controller
    Epi2,       # NH --> NH/KH
    NdK,        # N/K
    coc,        # Twisting for the crossed product over NdK
    Uok,        # Units(ZmodnZ(ok))
    funNdK,     # Embedding of NdK in Uok,
    GalSSP,     # Subgroup(Uok,Image(funNdK))
    cocSSP,     # cocycle in Z^2(GalSSP,<E(ok)>)
    Galcf,      # Subgroup(Uok,Image(GalToInt(Galcf)));
    Galcomp,    # Intersection(GalSSP,Galcf);
    T;          # Right Transversal of Galcomp in Galcf 
    
    
    Epi2:=NaturalHomomorphismByNormalSubgroup( NH, KH ) ;
    NdK:=Image(Epi2,NH);
    bij := MappingByFunction(ZmodnZ(ok),KH,i->k^Int(i));
    

    # The cocycle in Z^2(NdK,<E(ok)>)
    
       
    coc := function(a,b)
       return PreImagesRepresentativeNC(bij,
                              PreImagesRepresentativeNC(Epi2,a*b)^-1 *
                              PreImagesRepresentativeNC(Epi2,a) *
                              PreImagesRepresentativeNC(Epi2,b) );
       end;   
          
#########################################################################

    # The cocycle in Z^2(GalSSP,<E(ok)>)

    Uok:=Units(ZmodnZ(ok));
    bijunit := MappingByFunction(Uok,KH,i->k^Int(i));

    funNdK := MappingByFunction(NdK,Uok,
        function(n) 
            return PreImagesRepresentativeNC(bij,
                                 k^PreImagesRepresentativeNC( Epi2 , n ) );
              end
              );
                      
    GalSSP := Subgroup(Uok,Image(funNdK));

    cocSSP := function(a,b)
                return coc(PreImagesRepresentativeNC(funNdK,a),
                           PreImagesRepresentativeNC(funNdK,b));
                end;
    
#########################################################################
    
    # The cocycle in Z^2(Galcf,<E(cond)>)
    
    Galcf:=Subgroup(Uok,Image(ReductionModnZ(exp,ok),Gal));
    
    if IsSubset(GalSSP,Galcf) then
      return cocSSP(a,b);
    else
      Galcomp := Intersection(GalSSP,Galcf);
      pow := 1/Index(Galcf,Galcomp) mod div;
      T := 
      List(RightTransversal(Galcf,Galcomp),i->CanonicalRightCosetElement(Galcomp,i));
           
      return
        Sum(T,t-> cocSSP(t*a*CanonicalRightCosetElement(Galcomp,t*a)^-1,
        CanonicalRightCosetElement(Galcomp,t*a)*b*
        CanonicalRightCosetElement(Galcomp,t*a*b)^-1)*t^-1
            )*pow;
    fi;  
  end;
fi;

return [ok,out];

end);


#############################################################################
##
#E
##

[ Dauer der Verarbeitung: 0.52 Sekunden  ]

                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge