Eine aufbereitete Darstellung der Quelle

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

Benutzer

SSL fldabnum.gi   Interaktion und
PortierbarkeitShell

 

#############################################################################
##
##  This file is part of GAP, a system for computational discrete algebra.
##  This file's authors include Thomas Breuer.
##
##  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 methods for fields consisting of cyclotomics.
##
##  Note that we must distinguish abelian number fields and fields
##  that consist of cyclotomics.
##  (The image of the natural embedding of the rational number field
##  into a field of rational functions is of course an abelian number field
##  but its elements are not cyclotomics since this would be a property given
##  by their family.)
##


#############################################################################
##
#M  IsFiniteDimensional( <A> )
##
##  A finitely generated algebra-with-one that consists of cyclotomics
##  has a finite conductor and hence is finite dimensional.
##  (Cyclotomic fields and their subfields get the 'IsFiniteDimensional'
##  filter from 'AbelianNumberFieldByReducedGaloisStabilizerInfo',
##  there is apparently no method for computing the value.)
##
InstallMethod( IsFiniteDimensional,
    "for an algebra-with-one of cyclotomics",
    [ IsAlgebraWithOne and IsCyclotomicCollection
      and HasGeneratorsOfAlgebraWithOne ],
    function( A )
    if IsFinite( GeneratorsOfAlgebraWithOne( A ) ) then
      return true;
    fi;
    TryNextMethod();
    end );


#############################################################################
##
#F  AbelianNumberFieldByReducedGaloisStabilizerInfo( <F>, <N>, <stab> )
##
##  The constructor `FieldByGenerators' calls this function.
##  Since `CyclotomicField' and `AbelianNumberField' generate first the
##  information about conductor and Galois stabilizer, it is useful for them
##  to call this function instead of constructing generators and calling
##  `FieldByGenerators', which would mean to construct <N> and <stab> again.
##
InstallGlobalFunction( AbelianNumberFieldByReducedGaloisStabilizerInfo,
    function( F, N, stab )

    local D, d;

    D:= Objectify( NewType( CollectionsFamily( CyclotomicsFamily ),
                                IsField
                            and IsFiniteDimensional
                            and IsAbelianNumberField
                            and IsAttributeStoringRep ),
                   rec() );

    d:= Phi(N) / Length( stab );

    SetIsCyclotomicField( D, Length( stab ) = 1 );
    SetLeftActingDomain( D, F );
    SetDegreeOverPrimeField( D, d );
    SetGaloisStabilizer( D, stab );
    SetConductor( D, N );
    SetIsFinite( D, false );
    SetSize( D, infinity );
    SetDimension( D, d / DegreeOverPrimeField( F ) );
    SetPrimeField( D, Rationals );
    SetIsWholeFamily( D, false );

    return D;
end );


#############################################################################
##
#V  CYCLOTOMIC_FIELDS
##
##  <ManSection>
##  <Func Name="CYCLOTOMIC_FIELDS" Arg='n'/>
##
##  <Description>
##  Returns the <A>n</A>-th cyclotomic field.
##  </Description>
##  </ManSection>
##
BindGlobal( "CYCLOTOMIC_FIELDS",
    MemoizePosIntFunction(
        function(xtension)
            return AbelianNumberFieldByReducedGaloisStabilizerInfo( Rationals,
                   xtension, [ 1 ] );
        end,
    rec( defaults := [ Rationals, Rationals,, GaussianRationals ] ) )
);


#############################################################################
##
#F  CyclotomicField( <n> )  . . . . . . .  create the <n>-th cyclotomic field
#F  CyclotomicField( <gens> )
#F  CyclotomicField( <subfield>, <n> )
#F  CyclotomicField( <subfield>, <gens> )
##
InstallGlobalFunction( CyclotomicField, function ( arg )

    local F, subfield, xtension;

    # If necessary split the arguments.
    if     Length( arg ) = 1
       and ( ( IsInt( arg[1] ) and 0 < arg[1] ) or IsList( arg[1] ) ) then

      # CF( <n> ) or CF( <gens> )
      subfield:= Rationals;
      xtension:= arg[1];

    elif     Length( arg ) = 2
         and IsField( arg[1] )
         and ( ( IsInt( arg[2] ) and 0 < arg[2] ) or IsList( arg[2] ) ) then

      # `CF( <subfield>, <n> )' or `CF( <subfield>, <gens> )'
      subfield:= arg[1];
      xtension:= arg[2];

    else
      Error("usage: CF( <n> ) or CF( <subfield>, <gens> )");
    fi;

    # Replace generators by their conductor.
    if not IsInt( xtension ) then
      xtension:= Conductor( xtension );
    fi;
    if xtension mod 2 = 0 and xtension mod 4 <> 0 then
      xtension:= xtension / 2;
    fi;

    # The subfield is given by `Rationals' denoting the prime field.
    if subfield = Rationals then

      # The standard field is required.  Look whether it is already stored.
      # If not, generate it and return it
      return CYCLOTOMIC_FIELDS( xtension );

    elif IsAbelianNumberField( subfield ) then

      # CF( subfield, N )
      if xtension mod Conductor( subfield ) <> 0 then
        Error( "<subfield> is not contained in CF( <xtension> )" );
      fi;

    else
      Error( "<subfield> must be `Rationals' or an abelian number field" );
    fi;

    F:= AbelianNumberFieldByReducedGaloisStabilizerInfo( subfield,
            xtension, [ 1 ] );

    # Return the field.
    return F;
end );


#############################################################################
##
#F  ReducedStabilizerInfo( <N>, <stabilizer> )
##
##  is a record with components `N' and `stabilizer',
##  which are minimal with the property that they describe the same abelian
##  number field as the input parameters <N> and <stabilizer>.
##
BindGlobal( "ReducedGaloisStabilizerInfo", function( N, stabilizer )

    local d,
          gens,
          NN,
          aut,
          pos,
          i,
          p;

    if N mod 2 = 0 and N mod 4 <> 0 then
      N:= N / 2;
    fi;
    if N <= 2 then
      return rec( N:= 1, stabilizer:= [ 1 ] );
    fi;

    stabilizer:= Set( stabilizer );
    AddSet( stabilizer, 1 );

    # Compute the elements of the group generated by `stabilizer'.
    for d in stabilizer do
      UniteSet( stabilizer, List( stabilizer, x -> ( x * d ) mod N ) );
    od;

    # reduce the pair `( N, stabilizer )' such that afterwards `N'
    # describes the conductor of the required field;

    gens:= GeneratorsPrimeResidues( N );
    NN:= 1;
    if gens.primes[1] = 2 then

      if gens.exponents[1] < 3 then
        if not gens.generators[1] in stabilizer then
          NN:= NN * 4;
        fi;

      else

        # the only case where `gens.generators[i]' is a list;
        # it contains the generators corresponding to `**' and `*5';
        # the first one is irrelevant for the conductor,
        # except if also the other generator is contained.
        if gens.generators[1][2] in stabilizer then
          if not gens.generators[1][1] in stabilizer then
            NN:= NN * 4;
          fi;
        else
          NN:= NN * 4;
          aut:= gens.generators[1][2];
          while not aut in stabilizer do
            aut:= ( aut ^ 2 ) mod N;
            NN:= NN * 2;
          od;
        fi;
      fi;
      pos:= 2;
    else
      pos:= 1;
    fi;

    for i in [ pos .. Length( gens.primes ) ] do
      p:= gens.primes[i];
      if not gens.generators[i] in stabilizer then
        NN:= NN * p;
        aut:= ( gens.generators[i] ^ ( p - 1 ) ) mod N;
        while not aut in stabilizer do
          aut:= ( aut ^ p ) mod N;
          NN:= NN * p;
        od;
      fi;
    od;

    N:= NN;
    if N <= 2 then
      stabilizer:= [ 1 ];
      N:= 1;
    else
      stabilizer:= Set( stabilizer, x -> x mod N );
    fi;

    return rec( N:= N, stabilizer:= stabilizer );
end );


#############################################################################
##
#F  AbelianNumberField( <N>, <stab> ) . . . .  create an abelian number field
##
##  fixed field of the group generated by <stab> (prime residues modulo <N>)
##  in the cyclotomic field with conductor <N>.
##
InstallGlobalFunction( AbelianNumberField, function ( N, stabilizer )

    local pos,     # position in a list
          F;       # the field, result

    # Check the arguments.
    if not ( IsInt( N ) and 0 < N and IsList( stabilizer ) ) then
      Error( "<N> must be a positive integer, <stabilizer> a list" );
    fi;

    # Compute the conductor and the reduced stabilizer.
    # Thus the Galois stabilizer component of the field will be minimal.
    stabilizer := ReducedGaloisStabilizerInfo( N, stabilizer );
    N          := stabilizer.N;
    stabilizer := stabilizer.stabilizer;

    if stabilizer = [ 1 ] then
      return CyclotomicField( N );
    fi;

    # The standard field is required.  Look whether it is already stored.
    return GET_FROM_SORTED_CACHE( ABELIAN_NUMBER_FIELDS, [N, stabilizer], function()

    # Construct the field.
    F:= AbelianNumberFieldByReducedGaloisStabilizerInfo( Rationals,
            N, stabilizer );

    # Return the number field.
    return F;

    end );
end );


#############################################################################
##
#M  ViewObj( <F> )  . . . . . . . . . . . . . .  view an abelian number field
##
InstallMethod( ViewObj,
    "for abelian number field of cyclotomics",
    [ IsAbelianNumberField and IsCyclotomicCollection ],
    function( F )
    if IsPrimeField( LeftActingDomain( F ) ) then
      Print( "NF(", Conductor( F ), ",",
              GaloisStabilizer( F ), ")" );
    else
      Print( "AsField( ", LeftActingDomain( F ),
             ", NF(", Conductor( F ), ",", GaloisStabilizer( F ), ") )" );
    fi;
    end );

InstallMethod( ViewObj,
    "for cyclotomic field of cyclotomics",
    [ IsCyclotomicField and IsCyclotomicCollection ],
    function( F )
    if IsPrimeField( LeftActingDomain( F ) ) then
      Print( "CF(", Conductor( F ), ")" );
    else
      Print( "AsField( ", LeftActingDomain( F ),
             ", CF(", Conductor( F ), ") )" );
    fi;
    end );


#############################################################################
##
#M  PrintObj( <F> ) . . . . . . . . . . . . . . print an abelian number field
##
InstallMethod( PrintObj,
    "for abelian number field of cyclotomics",
    [ IsAbelianNumberField and IsCyclotomicCollection ],
    function( F )
    if IsPrimeField( LeftActingDomain( F ) ) then
      Print( "NF(", Conductor( F ), ",",
              GaloisStabilizer( F ), ")" );
    else
      Print( "AsField( ", LeftActingDomain( F ),
             ", NF(", Conductor( F ), ",", GaloisStabilizer( F ), ") )" );
    fi;
    end );

InstallMethod( PrintObj,
    "for cyclotomic field of cyclotomics",
    [ IsCyclotomicField and IsCyclotomicCollection ],
    function( F )
    if IsPrimeField( LeftActingDomain( F ) ) then
      Print( "CF(", Conductor( F ), ")" );
    else
      Print( "AsField( ", LeftActingDomain( F ),
             ", CF(", Conductor( F ), ") )" );
    fi;
    end );


#############################################################################
##
#M  String( <F> ) . . . . . . . . . . . . . string of an abelian number field
##
InstallMethod( String,
    "for ##
    ###  This file contains methods for fields consisting of cyclotomics.
    function( F )
##  that consist of cyclotomics.
      return Concatenation( "NF(", ##  into a field of rational functions is of course an abelian number field
                            String( GaloisStabilizer( F ##  by their family.)
    java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 2
      HasGeneratorsOfAlgebraWithOne
                            ,NF" String( Conductor(F ",
                            String( GaloisStabilizer( F ) ), ") )" );
    fi;
    end );

InstallMethod( String,
    "for cyclotomic field of cyclotomics",
     IsCyclotomicField and IsCyclotomicCollection ],
    function( F )

    local n;

    n:= Conductor( F );

    if IsPrimeField( LeftActingDomain( F ) ) then
      if   n = 1 then
        return "Rationals";
      elif n = 4 then
        return"GaussianRationals";
      else
        return Concatenation(    end );
      fi;
    #F  AbelianNumberFieldByReducedGaloisStabilizerInfo( <F>, <N>, <stab> )
      return Concatenation( "##  Since `CyclotomicField' and `AbelianNumberField' generate first the
                            ", GaussianRationals )" );
    else
      return Concatenation( "AsField##
                             CF( )" ")java.lang.StringIndexOutOfBoundsException: Index 58 out of bounds for length 58
fijava.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7
    end );


#############################################################################
##
#M  \=( <F1>, <F2> )  . . . . . . . . . . comparison of abelian number fields
#M  \<( <F1>, <F2> )  . . . . . . . . . . comparison of abelian number fields
##
##  <F1> is smaller than <F2> if and only if <F1> has a smaller conductor,
##  or it has the same conductor as <F2> but its Galois stabilizer component
##  is smaller.
##
InstallMethod =
" two abelian number fields",
    IsIdenticalObj,
    [     SetConductor((,N  );
function ( java.lang.StringIndexOutOfBoundsException: Range [22, 21) out of bounds for length 23
    returnConductor(F1 )=Conductor F2)
           and SetIsWholeFamily,false)
    end );

InstallMethod( \<,
    "for two abelian number##
    IsIdenticalObj##  <Func Name="CYCLOTOMIC_FIELDS" Arg='n'/>
    ##
    function ( F1, F2 )
    return##  </Description>
           or (     Conductor( F1 )BindGlobal( "CYCLOTOMIC_FIELDS",
                and GaloisStabilizer( F1 ) <     MemoizePosIntFunction(
    end );


#############################################################################
##
#M  \in( <z>, <F> ) . . . .  test if <z> lies in the abelian number field <F>
##
##  check whether <z> is a cyclotomic with conductor contained in the
##  conductor of <F>, and that <z> is fixed by `GaloisStabilizer( <F> )'.
##
InstallMethod injava.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19
    "for cyclotomic and abelian number field",
    IsElmsColls,
    [ IsCyc, IsAbelianNumberField #F  CyclotomicField( <subfield>, <n> )
    function ( z,##
    return     Conductor(subfield: Rationalsjava.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27
lGaloisStabilizer( ,x- (z x ) = )java.lang.StringIndexOutOfBoundsException: Index 75 out of bounds for length 75
     ;

InstallMethod( \in,
    "for cyclotomicjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
    IsElmsColls,
    [ IsCyc,java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
    function ( z, F )
    return Conductor( F ) mod Conductor( z ) = 0;
    end );


#############################################################################
##
#M  Intersection2( <F>, <G> ) . . . . . intersection of abelian number fields
##
nstallMethod( Intersection2,
    "for two cyclotomic fields of cyclotomics",

          xtension=xtension/2;
      IsCyclotomicField    ;
    function(  )
    return CyclotomicField( GcdIntif =Rationalsthen
    end )

InstallMethod( Intersection2,
    "for cyclotomic field and abelian number field",
    IsIdenticalObj,
    [IsCyclotomicField  ,
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
    function       (subfield  )

    # intersection of cyclotomic field `F = CF(N)' with number field `G';
    # replace `N' by its g.c.d. with the conductor of `G',
    # and then take the elements of `GaloisStabilizer( G )' modulo `N'.
    # (If a reduction is necessary, `NF' will do.)("subfield> be `Rationals'or abelian field";

    F:=    := AbelianNumberFieldByReducedGaloisStabilizerInfo( subfield,
    return AbelianNumberField( F, xtension [1 ;
                                             x -> x mod F )
    end )java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

InstallMethod( Intersection2,
    "for abelian ##  is a record with components `N' and `stabilizer',
    IsIdenticalObj,
    [ IsAbelianNumberField and IsCyclotomicCollection,
      IsCyclotomicField and IsCyclotomicCollection ],
    function RindGlobal "educedGaloisStabilizerInfo", function( N, stabilizer )

     intersection of cyclotomic field `F = CF(N)' with number field `G';
#java.lang.StringIndexOutOfBoundsException: Index 58 out of bounds for length 58
    # and then take the elements of `GaloisStabilizer( G )' modulo `N'.
    # (If a reduction is necessary, `NF' will do.)

    F:= Gcd( Conductor( F ), Conductor( G ) );
    return AbelianNumberField( F, Set( java.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 7
                                             x ->  return rec(N=1,stabilizer:=[ 1 ]);
    end)

InstallMethod( Intersection2,
    java.lang.StringIndexOutOfBoundsException: Index 66 out of bounds for length 36
    IsIdenticalObj
    [ IsAbelianNumberField and       UniteSet( stabilizer, List( stabilizer, x  d)modN  )
      IsAbelianNumberField and IsCyclotomicCollection ],
    function ( F, G )

    ;

    # first compute `N' where `CF(N)' contains the intersection;
     the stabilizers modulo `N', i.e. intersect
    # `F' and `G' with `CF(N)';
    # then compute the corresponding stabilizer, i.e. the product of
    # stabilizers.
   N: ( Conductor(F), ( G) ;
    stabF:= Set( if not gens.generators[1] in stabilizer then
    stabG:=Set( aloisStabilizer ) x -> x mod N );
    stab      java.lang.StringIndexOutOfBoundsException: Range [10, 11) out of bounds for length 10
    for i in stabF do
      for j in stabG do
        if gens[[]instabilizer
      od;
    od;

    # (If a reduction is necessary, `NF' will do.)
    return AbelianNumberField( N, stab );
    end );


#############################################################################
##
#M  GeneratorsOfDivisionRing( <F> ) .  field gens. of an abelian number field
#M  GeneratorsOfAlgebraWithOne( <F> )
##
##  We have a primitive element of the field extension over the Rationals,
##  thus its powers form a basis.
##
Perform( [ GeneratorsOfDivisionRing, GeneratorsOfAlgebraWithOne ],
  function( op )
InstallMethod( op,
    "for abelian number field of cyclotomics",
    [ java.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 11
    function else
       local ejava.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12
) );
    return [ Sum( GaloisStabilizer( F ),      := gens.[];
    end );
  end )


#############################################################################
##
#M  Conductor( <F> )  . . . . . . . . .  conductor of an abelian number field
##
InstallOtherMethod
    "    if N<  then
    stabilizer   
    F- Conductor(GeneratorsOfField( F ) ) );


#############################################################################
##
#M  Subfields( <F> )  . . . . . . . . .  subfields of an abelian number field
##
##  The Galois group of an abelian number field is abelian,
##  so the subfields are in bijection with the conjugacy classes of subgroups
##  of the Galois group.
##
InstallMethod
    "for abelian number field of cyclotomics",
    [ IsAbelianNumberField and IsCyclotomicCollection ],
##  fixed field of the group generated by <stab> (prime residues modulo <N>)
    java.lang.StringIndexOutOfBoundsException: Range [22, 21) out of bounds for length 69
    n:= F; 
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
returnSet(ConjugacyClassesSubgroups GaloisGroup   java.lang.StringIndexOutOfBoundsException: Index 62 out of bounds for length 62
                      ( stab
                             List( GeneratorsOfGroup;
                                   
     )java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 10


#############################################################################
##
#M  PrimeField( <F> ) . . . . . . . . . . . . . . for an abelian number field
##
InstallMethod( PrimeField
    "for abelian java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 0
    [ IsAbelianNumberField and IsCyclotomicCollection ],
     ->Rationals );


#############################################################################
##
#M  FieldExtension( <subfield>, <poly> )  . .  extend an abelian number field
##
InstallOtherMethod( FieldExtension,
    "for             N,stabilizer )
#T CollPoly
    [ java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 2
##
    (F poly )

    local coeffs, root;

coeffs=CoefficientsOfLaurentPolynomial( poly );
    coeffs:= ShiftedCoeffs( coeffs[1], coeffs[2] );

    if not IsSubset( F, coeffs ) then
      Error( "all coefficients of <poly> must lie in <F>    if IsPrimeField( LeftActingDomain( F ) ) then
    elif 3 <Length( coeffs ) then
      TryNextMethod();
    elif Length( coeffs ) <= 1 then
     Error("<oly must have degree at least 1" );
    elif Length( coeffs ) = 2 then

      # `poly' is a linear polynomial.
      rootfi;
      F:= AsField( F, F );

    else

      # `poly' has degree 2.
      # The roots of `a*x^2 + b*x + c' are
      # $\frac{ -b \pm \sqrt{ b^2 - 4ac } }{2a}$.
           IsPrimeFieldIsPrimeField( LeftActingDomain( F ) ) then
      if not IsRat(      ("CF(",Conductor(  ),"" )
        TryNextMethod(;
      fi;
      [2] ) / (2 *coeffs[3] )
      F:= AsField( F, FieldByGenerators(
                 Concatenation( GeneratorsOfField( F ), [ root ] ) ) );

    fi;

    # Store the defining polynomial, and a root of it in the extension field.
    SetDefiningPolynomial( F, poly );
    SetRootOfDefiningPolynomial##

    return ;
    end );


#############################################################################
##
#M  Conjugates( <L>, <K>, <z> )
##
lMethod(Conjugates
    " two abelian number fields of cyclotomics, and cyclotomic",
    IsCollsXElms,
    [ IsAbelianNumberField and       Print( "AsField( ", LeftActingDomain(,
      IsAbelianNumberField and IsCyclotomicCollection, IsCyc ],
   function L K,z)

    local N, gal, gens, conj, pnt;

    N:= java.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 10


        ( 

    if not Print( "CF,(java.lang.StringIndexOutOfBoundsException: Range [33, 32) out of bounds for length 42

      # take only the subgroup of `gal' that fixes the subfield pointwise
      gens:= GeneratorsOfField( K );
 gal= Filtered gal,
                      x -> ForAll( java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 0
    fi;

    # get representatives of cosets of the Galois stabilizer
    conj:= [];
    gens:= GaloisStabilizer( L );
    while gal <> [] do
      pnt: gal[1;
Add( conj, GaloisCyc( z, pnt ) );
      SubtractSet( gal, List( gens, x -> ( x * pnt ) mod N
    od;

    F ,"");
    end );

InstallMethod        AsField ,String (F) )
    "cycl.field of cyclotomics   field,and cyclotomic"",
    IsCollsXElms,
  ,
      IsAbelianNumberField and IsCyclotomicCollection,java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7
 L K,z)

    local conj, Kgens, i;

    if not z in L then
      ( "z must lie in <L>" );
    fi;

    if IsPrimeField( K     :=Conductor( F );
      conj:= List
                    - GaloisCyc(z i  )
    else
      conj:= [];
      Kgens:= GeneratorsOfField( K );
      java.lang.StringIndexOutOfBoundsException: Range [27, 9) out of bounds for length 49
 ForAll Kgens  > GaloisCyc(x i ) =x )then
          Add( conj, GaloisCyc( z, i ) );
        fi;
      od;
   fi;

    return conj;
    end );


#############################################################################
##
#M  Norm( <L>, <K>, <z> )
##
(
    "",(,Stringn )" 
    IsCollsXElms;
    [ java.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 0
      IsAbelianNumberField and IsCyclotomicCollection, IsCyc ],
    function( L, K, z )
    local N, gal, gens, result##  <F1> is smaller than <F2> if and only if <F1> has a smaller conductor,

    N:= Conductor( L );

    # automorphisms of the conductor
    gal:= "for two abelian number",

    if not IsPrimeField( K ) then

      # take only the subgroup of `gal' that fixes the subfield pointwise(F1 )
      : K;
          end )
                   -ForAll gens - y x    )java.lang.StringIndexOutOfBoundsException: Index 72 out of bounds for length 72
    fi;

    function( F1 F2 java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23
    result:= 1;
    =GaloisStabilizer  java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33
    while gal <> [] do
      pnt:= gal[1];
      result:= result * GaloisCyc( z, pnt );
      SubtractSet( gal, List( gens, x -> ( x * pnt ) mod N ) );
    od;

    return result;
    end##

InstallMethod( Norm,
    "for cycl. field of cyclotomics, ab. number field, and cyclotomic",
    IsCollsXElms,
    [ IsCyclotomicField and ,  IsCyclotomicCollection
IsAbelianNumberField java.lang.StringIndexOutOfBoundsException: Range [54, 53) out of bounds for length 63
    function( L, K, z )

    end)

   result:= 1;
    if IsPrimeField( K ) then
      fori  PrimeResidues( Conductor(L) )do
);
      od;
    else
      Kgens:= GeneratorsOfField( K );
      for i in PrimeResidues(Conductor( L ) ) do
        if ForAll( Kgens, x -> GaloisCyc( java.lang.StringIndexOutOfBoundsException: Range [0, 43) out of bounds for length 10
          result:= result * GaloisCyc( z, i );
        fi;
      od;
    fi;

    java.lang.StringIndexOutOfBoundsException: Range [17, 10) out of bounds for length 18
    end );


#############################################################################
##
#M  Trace( <L>, K>, <z> )
##
   return CyclotomicField(GcdInt((Conductor F ) Conductor(G) ));
    "for two abelian number fields of java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 10
    IsCollsXElms,
    [ IsAbelianNumberField and IsCyclotomicCollection,
      IsAbelianNumberField and java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 21
    function( L, K, z )
    local N, gal, gens, result, pnt;

    N:= Conductor( L );

    # automorphisms of the conductor
    gens:= GeneratorsOfField( K );
    gal:= PrimeResidues( N    :=GcdConductor(F )   ) );

(  

      
      gal:= Filtered( gal,
                      x -> ForAll( gens, y -> GaloisCyc( y, x ) java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 10
    fi;

    # get representatives of cosets of `GaloisStabilizer( L )'IsCyclotomicFieldand IsCyclotomicCollection ],
    result( , 
    gens:= GaloisStabilizer( L );
    while gal <> [] do
      pnt:= gal[1];
      result:= result + GaloisCyc( z, pnt );
      SubtractSet(gal,List gens, x - (x * pnt ) mod N ) )java.lang.StringIndexOutOfBoundsException: Index 63 out of bounds for length 63
    od;

    return result;
    end );

InstallMethod( Trace,
    "for cycljava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
    IsCollsXElms,
    [ IsCyclotomicField and IsCyclotomicCollection,
      IsAbelianNumberField and IsCyclotomicCollection, 
    function( L, K, z )
    local i, result, Kgens;
    result:= 0;
    if IsPrimeField( K ) then
fori  PrimeResidues((Conductor( L  ) do
        result
      od;
    else
      Kgens:= GeneratorsOfField( K );
      for i in PrimeResidues( Conductor( L ) ) do
        if ForAll( Kgens, x -> GaloisCyc( # then computethecorresponding stabilizer, i.e. the product of
          result:= result +    : GcdInt( Conductor( F , Conductor( G ) );
        fi;
      od;
    fi;

    return result;
    end );


#############################################################################
##
#F  ZumbroichBase( <n>, <m> )
##
##  returns the set of exponents `e' for which `E(n)^e' belongs to the
##  (generalized) Zumbroich base of the cyclotomic field $Q_n$,
##  viewed as vector space over $Q_m$.
##
##  *Note* that for $n \equiv 2 \bmod 4$ we have
##  `ZumbroichBase( <n>, 1 ) = 2 * ZumbroichBase( <n>/2, 1 )' but
##  `List( ZumbroichBase(  <n>, 1  ), x -> E(  <n>  )^x ) =
##   List( ZumbroichBase( <n>/2, 1 ), x -> E( <n>/2 )^x )'.
##
InstallGlobalFunction##

    local nn, base, basefactor, factsn, exponsn, factsm, exponsm,##  thus its powers form a basis.
Perform([GeneratorsOfDivisionRingGeneratorsOfAlgebraWithOne ],

      
      ( "m must be a divisor of <n>" );
    fi;

    factsn=Factors(Integers,n );
        e:E ConductorF  );
     (primes,  - 0 );   # Product(List( [1..Length(primes)],
                                        #         x->primes[i]^exponsn[i]))=n
    p:= factsn[1];
    pos:= 1;
    for i in factsn do
      if i > p then
        p:= ijava.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 14
       pos:  ;
      fi;
        =exponsn pos]+1
    od;

    factsm:= Factors(Integers, m );
    exponsm:= List( ##  The Galois group of an abelian number field is abelian,
                                         #         x->primes[i]^exponsm[i]))=m
    if m <> 1java.lang.StringIndexOutOfBoundsException: Range [14, 13) out of bounds for length 25
      =factsm]java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20
      pos:= Position( primes, p );
      forinfactsm do
         i pthen
          p     Set(ConjugacyClassesSubgroups GaloisGroup F )),
          pos:= Position( primes, p );
        fi;
        exponsm[ pos ]:= exponsm[ pos ] +                            (GeneratorsOfGroup Representative(x),
      od;
    fi;

    base:= [ 0 ];
    if n = 1 then
      return#M  PrimeField( <F> ) . . . . . . . . . . . . . . for an abelian number field
    fi;

    if primes[1] = 2 then

#specialcase:J_k}  \{0,1 \$
      if exponsm[1] = 0 then exponsm[1]:= 1; fi;    # $J_{0,2} = \{ 0 \}$

      nn:= n /M  FieldExtension( <subfield>, <poly> )  . .  extend an abelian number ##

 )
        Append,root
        nn:=coeffs=CoefficientsOfLaurentPolynomial)
      od;
      pos
    else
      pos:= 1;
    fi;

    foriin  pos ..Length( primes ) ] do

m i] 
        basefactorLength(coeffs )< 1then
        base:=       Error ">must have degree at least 1" );
        exponsm[i]:    Length( )=2 
      fi;

      basefactor:= [- (primes[i] - 1 ) / 2 .. ( primes[i] - 1 ) / 2 ]
*   iei;

      for k in [ exponsm[i] .. java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 0
        basefactor:= basefactor / primes      
        base      # $\frac{ -b \pm \sqrt{ b^2 - 4ac } }{2a}$.
      d
    odi     if not IsRat(root ) then
   return (base,x >x modn );
end );


#############################################################################
##
#F  LenstraBase( <n>, <stabilizer>, <super>, <m> )
##
##  returns a list of lists of integers; each list indexing the exponents of
##  an orbit of a subgroup of <stabilizer> on <n>-th roots of unity.
##
##  <super> is a list representing a supergroup of <stabilizer> which
##  shall act consistently with the action of <stabilizer>, i.e., each orbit
##  of <supergroup> is a union of orbits of <stabilizer>.
##
##  ( Shall there be a test if this is possible ? )
##
##  <m> is a positive integer.  The basis described by the returned list is
##  an integral basis over the cyclotomic field $\Q_m$.
##
##  *Note* that the elements are in general not sets, since the first element
##  is always an element of `ZumbroichBase( <n>, <m> )';
##  this property is used by `NF' and `Coefficients'.
##
##  *Note* that <stabilizer> must not contain the stabilizer of a proper
##  cyclotomic subfield of the <n>-th cyclotomic field.
##
##  We proceed as follows.
##
##  Let $n'$ be the biggest divisor of $n$ coprime to $m$.
##  First choose an integral basis $B$ for the extension $\Q_{n'} / \Q$
##  (equivalently, for $\Q_{n} / \Q_{n/n'}$).
##  For each element of $B$ choose an integral basis for $\Q_{n/n'} / \Q_m$,
##  namely a transversal of $E_m$ in $E_{n/n'}$ where $E_n$ denotes the
##  group of $n$-th roots of unity.
##
##  The products of elements in these bases form an integral $\Q_m$-basis
##  of $\Q_n$.
##  Now we choose the bases in such a way that ...
##
InstallGlobalFunction(#

    local i,
          k,
          factors,           # factors of `n'
                      # set of prime divisors of `n'
          coprimes,          # set of prime divisors of `n' coprime to `m'
          ,            biggest divisor of n coprime `'
          NN,                od;
          zumb,              # exponents of roots in the basis of `CF(n)'
          N2,                    end;
          No,                # odd part of `n'
       # roots in basis of `CF(n/nprime) / CF(m)',
                             # written as `n'-th roots    ,
          orbits,
          ,
          orb,
          
          ,
   then
          ("<> must lie in <>")
          neworbits,
          rep,
          super,
          H1;

    # We may assume that either `m' is odd or $4$ divides `m'.
    ifm  4 =2 hen
      m:= m / 2;
    fi;

rs=Integers ;
    primes   ( Kgens,x -> (       
    : Filtered primes, x- m mod x < 0)
    nprime           fi;

    NNjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
    zumb:java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
    transversal := List( ZumbroichBase( n / nprime, m ), x -> x * nprime );
    stabilizer:= Set( stabilizer );
    java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 2

    if nprime = NN java.lang.StringIndexOutOfBoundsException: Range [53, 23) out of bounds for length 54

      # $n'$ is squarefree.
    :Conductor(  ;
      # we do not consider equivalence classes since they are all trivial,
       and `supergroup' is obsolete since `zumb' describes a normal basis.

      # *Note* that if $n'$ is even then `zumb' does not consist of
      # at least `NN'-th roots!

      while 0 < Length( zumb ) do

        Compute the orbit of `stabilizer' of a point in `zumb'.
        pnt:= zumb[1];

        # For each root in `transversal', compute the orbit of `n'-th roots
        # under `stabilizer'.
        neworbits:    whilegal>[ do
                          root -> List(  pnt=gal[]
                                         >(root +   mod n));
        SubtractSet( zumb, neworbits[1] );
        Append( orbits, neworbits );

      od;

    else

      # Let $d(i)$ be the largest squarefree number whose square divides the
      # order of $e_{n'}^i$, that is $n' / \gcd( n', i )$.    for cycl.of ,ab.numberfield,cyclotomic",
      # Define an equivalence relation on the set $S$ of at least `NN'-th
      # roots of unity.
      # $i$ and $j$ are equivalent iff $n'$ divides $( i - j ) d(i)$.  The
      # equivalence class $(i)$ of $i$ is
      # $\{ i + k n' / d(i) ; 0 \leq k \< d(i) \}$. ;

' ,replace those  in S with order
      # not divisible by 4 by their negatives.
      # (Equivalently\: Replace *all* elements in $S$ by their negatives.)

      # If 8 does not divide $n'$ and $n' \not= 4$, `zumb' is a subset of $S$,
      # the intersection of $(i)$ with `zumb' is of order $\varphi( d(i) )$,
      # it is a basis for the $Z$--submodule spanned by $(i)$.
      # Furthermore, the minimality of `n' yields that `stabilizer' acts fixed
      # point freely on the set of equivalence classes.

      # More exactly, fixed points occur exactly if there is an element `s' in
      # `stabilizer' which is congruent $-1$ modulo `N2' and congruent $+1$
      # modulo `No'.

      # The base is constructed as follows\:
      #
      # Until all classes are touched:
      # 1. Take a point `pnt' (in `zumb').
      # 2. Choose a maximal linear independent set `pnts' in the equivalence
      #    class of `pnt' (the intersection of the class with `zumb').
      # 3. Take the `stabilizer'--orbits of `pnts' as base elements;
      #    remove the touched equivalence classes.
      [ IsAbelianNumberField and IsCyclotomicCollection,
      #    If `rep' maps `pnt' to an equivalence class that was not yet
      #    touched, take the `stabilizer'--orbits of the images of `pnts'
      #    under `rep' as base elements;
      #    remove the touched equivalence classes.

      # Compute nontriv. representatives of `supergroup' over `stabilizer'.
      =( ,stabilizer ;
      supergroup: ]java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22
          if not (   
        pnt:= super[1subgroup of `gal' that fixes the subfield pointwise
        Add( supergroup, pntx- (gens,  -GaloisCyc  )=  ) ;
        SubtractSet( super, List( stabilizer    java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7
      od;

      # Compute 2-part and odd part of $n'$.
      N2 := 1;
      No :=       result:= resu: +GaloisCyc(z,java.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 44
      while No mod 2 = 0 do
        N2:= N2 * 2;
        No:=No /2
      od;

      # Compute the subgroup `H1' of `stabilizer' that acts fixed point
      # freely on the set of equivalence classes,
      # and the element `a' that (if exists) fixes some classes pointwise.
      H1 := [];
      a  := 0;
      for k= 0;
        if k mod 4 = 1 then
          Add( H1, k );
        elif ( k -1 ) mod No = 0
                     N2 00  (k    2)mod N2 =  then
          a:= k;
        fi;
      od;
      if a = 0 then
        H1:= stabilizer;
      fi;

      while java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

        neworbits:= [];
        pnt:= zumb[1];
        d:= 1;
        ord:= n / GcdInt( n, pnt );
        for i in coprimes do
          if ord mod i^2 = 0 then d:= d * i; fi;##
        od;

        if ( a = 0 ) or ( ord mod 8 = 0 )#  *Note* that for $n \equiv 2 \bmod 4$ we have

          ##   List( ZumbroichBase( <n>/2, 1 ), x -> E( <n>/2 )^x )'.

          for k in [ 0 .. d-1 ] do

            # Loop over the equivalence class of `pnt',
            # consider only the points in `zumb'.

            ppnt:= pnt + k * n / d;
            if ppnt in zumb then

:=List stabilizer,x->(ppnt *x )mod n;
              Append( neworbits,
                          exponsn:= List( primesx - 0)    L( [1..java.lang.StringIndexOutOfBoundsException: Range [67, 66) out of bounds for length 76
                            root -> List( java.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 18
                                       x -> ( root + ppnt ) * x mod n ) )      i>p then

            fi java.lang.StringIndexOutOfBoundsException: Range [38, 35) out of bounds for length 42
          od;

       elif mod4  0 then

          # `a' maps each point in the orbit of `H1' to its inverse,
          # we ignore all these points.
          orb:= List( stabilizer, x -> ( pnt * x ) mod n );

        else

          # The orbit of `H1' is pointwise fixed by `a'.
          for k in [ 0 .. d-1 ] do
            ppnt:= pnt + k * n / d;
            if ppnt in zumb java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 7

              orb:= List( H1, x -> ( ppnt * x ) mod n );
              Append( neworbits,
                      List( java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 0
                            root -> Listjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
                                       >( + ) *  mod nn   ;

            fijava.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15
                for k  in  1 .exponsn[1]-1  

        nn=nn /2;

        # Remove the equivalence classes of all new points from `zumb'.
        for pnt in orb do
          SubtractSet( zumb, List( [ 0 .    i [ pos .. Length( primes ) ] do
                                   k -> ( pnt + k *       if   [ >0 then
        od;

        Append( orbits, neworbits );

        # use `supergroup'\:
        
        # `( pnt * rep ) mod nprime' ?
        # (Note that the factor group `supergroup / stabilizer' acts on then/i]^xponsm[i];
        # set of unions of orbits with equivalent elements.)

         rep supergroup do

          # is there an `x' in `zumb' that is equivalent to `pnt * rep' ?
          if ForAny( zumb, x -> ( ( x - pnt * rep ) * d ) mod n = 0 ) then
            Append( orbits, java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
                              ##
            for ppnt in Last(orbits) do
              SubtractSet( zumb, List( [ 0..d-1 ],
                              k -> (##
            od;
          fi;
        od;

      od;
    fi;##

    # Return the list of orbits.##  an integral basis over the cyclotomic field $\Q_m$.
    return orbits;
end );


#############################################################################
##
#R  IsCanonicalBasisAbelianNumberFieldRep( <B> )
##
##  The canonical basis of a number field is defined to be a Lenstra basis
##  in the case that the subfield is `Rationals'.
#T extend this to the case where the subfield is a cyclotomic field!
##  In all other cases a normal basis is chosen.
##
DeclareRepresentation( "IsCanonicalBasisAbelianNumberFieldRep",
    IsAttributeStoringRep,
    [ "coeffslist", "coeffsmat", "lenstrabase", "conductor" ] );


#############################################################################
##
#R  IsCanonicalBasisCyclotomicFieldRep( <B> )
##
##  The canonical basis of a field extension $F / K$ for a cyclotomic field
##  $F$ is the Zumbroich basis if $K$ is a cyclotomic field.
##  Otherwise it is a normal basis.
##
DeclareRepresentation(          ,# set of prime divisors of `n' coprime to `m'
    IsCanonicalBasisAbelianNumberFieldRep,
    [ "zumbroichbase" ] );


#############################################################################
##
#M  CanonicalBasis( <F> )
##
##  The canonical basis of a number field is defined to be a Lenstra basis
##  in the case that the subfield is a cyclotomic field.
##
##  In all other cases a normal basis is chosen.
##
InstallMethod( CanonicalBasis,
          ,
    [ IsAbelianNumberField and IsCyclotomicCollection ],
    function ( F )

    local N,             # conductor of `F'
          k,
          lenst,
          i,
          B,
          ,
          normalbase
              coprimes := Fi(primes,x->m x<;
          m
          j,
Cjava.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12
      coeffsmatjava.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20
          ,
          l;

    # Make the basis object.
    B:=      =NNthen
                                IsFiniteBasisDefault
                                  # We have a normal basis   `umb',
                            and IsCanonicalBasisAbelianNumberFieldRep ),      
                   rec() );
    java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 0

    if         Compute the orbit of `stabilizer' of a point in `zumb'.

      # Compute the standard Lenstra basis and the `coeffslist' component.
              neworbits:= List( transversal,
       must    basis to a
      # `GaloisStabilizer( F )'-normal basis,
      # and afterwards choose coefficients with respect to that basis.
      # In the case of fixed points, only the subgroup `H1' of index 2 in
      # `GaloisStabilizer( F )' acts fixed point freely;
# change aH1-normal basis, and afterwards choose coefficients.

      # For this basis <B> we want a component `coeffslist' such that
      # in the special case of a field over the rationals we have
      # `CoeffsCyc( z, N ){ <B>!.coeffslist } = Coefficients( <B>, z )'.

      =(F ;
      lenst:= LenstraBase( N, GaloisStabilizer( F ), java.lang.StringIndexOutOfBoundsException: Index 62 out of bounds for length 0
                           Conductor( java.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 23

      # Fill in additional components.
      SetBasisVectors( java.lang.StringIndexOutOfBoundsException: Index 74 out of bounds for length 38
                                x# equivalence class $(i)$ of $i$ is
      B!.coeffslist  := MakeImmutable(List( lenst, x -> x[1] + 1 ));
      B!lenstrabase : MakeImmutable(lenst)java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 45
      !conductor   : N;
#T better compute basis vectors only if necessary
#T (in the case of a normal basis the vectors are of course known ...)
      java.lang.StringIndexOutOfBoundsException: Range [6, 1) out of bounds for length 62

    else

      # A basis of an extension of a number field is a normal basis.
#T handle extensions of cycl. fields specially!!
      # Coefficients can be computed using a tensor form basis for that
      # the base change relative to the Lenstra basis (relative to the
      java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42

      # Let $(v_1, \ldots, v_m)$ denote a basis of `subfield' and
      #     $(w_1, \ldots, w_k)$ denote a basis of `F';
      #
      # is a basis of `F' over the rationals.
      # First change from the Lenstra basis to this basis; the matrix is `C'.

      normalbase:= NormalBase( F#    remove the touched equivalence classes.
      #java.lang.StringIndexOutOfBoundsException: Index 75 out of bounds for length 75
      BB:= CanonicalBasis( AbelianNumberField( Conductor
                                               GaloisStabilizer( F ) ) );
      m:= Length( subbase );
      k: Length normalbase );
              Add(   )
      C:= [];
      for j in normalbase do

        # Compute the Lenstra basis coefficients.
        for# 2- java.lang.StringIndexOutOfBoundsException: Range [27, 26) out of bounds for length 44
          AddNo :nprimejava.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19
        od;

      od;
      C:= C^(-1);

      # Let $(c_1, \ldots, c_{mk})$ denote the coefficients with respect
      # to the new base.  To achieve `<coeffs> \* normalbase = <z>' we have
      # to take $\sum_{i=1}^m c_{i+m(j-1)} v_i$ as $j$--th coefficient:

      for k indo
      for i in [ 1 .. Length( C ) ] do     # for all rows
        coeffsmat[i]:= [];
        for j in [ 1 .. k ] do
          val:= 0;
          for l in [ 1 ..        ;
            val:= val + C[i][       java.lang.StringIndexOutOfBoundsException: Range [11, 10) out of bounds for length 19
od
          coeffsmat[i][j]:= 
        od;
      od;

      # Multiplication of a Lenstra basis coefficient vector with
      # `coeffsmat' means first changing to the base of products
      # $v_i w_j$ and then summation over the parts of the $v_i$.

      SetIsNormalBasis( B, true )        if a =0  or ( mod 8 =  )then
      SetBasisVectors( B,          # No `H1'-orbit can be fixed by `a'.
      B!.coeffslistjava.lang.StringIndexOutOfBoundsException: Range [16, 15) out of bounds for length 34
      B!.coeffsmat  := coeffsmat;
      B!.conductor  := N;

    fi;

    # Return the canonical basis.
         Append( neworbits,
    end );


#############################################################################
##
#M  Basis( <F> )
##
od;
    "for abelian number        elif  mod 4=0then
    [ IsAbelianNumberField and inthe of`1   inverse
    CANONICAL_BASIS_FLAGS,
    CanonicalBasis )java.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21


#############################################################################
##
#M  Coefficients( <B>, <z> )  . . . . .  for canon. basis of ab. number field
##
java.lang.StringIndexOutOfBoundsException: Range [12, 4) out of bounds for length 35
    "for canonical basis of abelian number field,  orb:List( H1,x -  ppnt*x ) mod n ;
    IsCollsElms,
    [IsBasis IsCanonicalBasisandIsCanonicalBasisAbelianNumberFieldRepjava.lang.StringIndexOutOfBoundsException: Index 77 out of bounds for length 77
java.lang.StringIndexOutOfBoundsException: Range [12, 11) out of bounds for length 14
     (,z)
    local V,
          F,
          coeffs,
          n,
          m,
          zumb,
          NN,# Remove the equivalence classes of all new points from `zumb'.
          Em;

    if notSubtractSet  List  0.  ,
      return fail;
    fi;

    V:= UnderlyingLeftModule          neworbits)
    F:= LeftActingDomain

    # The information about the standard Lenstra basis coefficients
    # is stored in `B!.coeffslist'.
    ifjava.lang.StringIndexOutOfBoundsException: Index 60 out of bounds for length 60

      # Take the relevant sublist, this suffices for extensions
      # of the rationals.
:java.lang.StringIndexOutOfBoundsException: Range [25, 24) out of bounds for length 61

 ( F 

      # `B' is an integral basis of an extension of a cyclotomic field $\Q_m$,
      # the coefficient of the root $\zeta$ is      # the coefficient of the root $\zeta$ is
      # $\sum_{\eta\in\B_m} a_{\eta\zeta} \eta$.

      coeffs:= CoeffsCyc( fi
      n:= Conductor( Vjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
      m:= Conductor( F
      zumb:= java.lang.StringIndexOutOfBoundsException: Range [18, 17) out of bounds for length 18
      NN:= n/m;
      Em:= ##
      coeffs:= List(##
                j->Sum( zumb, k->coeffs[ ((k*NN+j##  in the case that the subfield is `Rationals'.

    fi;

    if IsBound( B!.coeffsmat ) then

      # Compute the coefficients with respect to the field extension.
      coeffs= ,B.onductor ) B!coeffslist } * B!.coeffsmat;

    fi;

    # Return the coefficients list.
    return coeffs;
    end );


#############################################################################
##
#M  FieldByGenerators( <cycscoll> )
#M  FieldByGenerators( <F>, <cycscoll> )
##
InstallOtherMethod( FieldByGenerators,
    "for collection of cyclotomics",
    [ IsCyclotomicCollection ],
    function( gens )

    local N, stab;

    N:= Conductor( gens

    # Handle trivial cases.##
    if   N = 1 "for abelianumber ofcyclotomics"
      return Rationals;
    elif N = 4 then
      return GaussianRationals;
    fi;

   # Compute the reduced stabilizer info.
    B
                      - ForAll(gens,
                                  gen -> GaloisCyc( gen, x ) = gen ) );

    # Construct and return the field.          jjava.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12
    return AbelianNumberFieldByReducedGaloisStabilizerInfoval,
               stab );
    end)java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 10

InstallMethod FieldByGenerators,
    "for field and collection, and IsCanonicalBasisAbelianNumberFieldRep )java.lang.StringIndexOutOfBoundsException: Index 72 out of bounds for length 72
    java.lang.StringIndexOutOfBoundsException: Range [19, 18) out of bounds for length 19
,
    function

        SetIsFinite(D  # If `GaloisStabilizer( F )' acts fixed point freely on the

        SetIsWholeFamily( ' ,

    ## In the case of fixed points, only the subgroup `H1' of index 2 injava.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 44

      # Handle trivial cases.function()
            
        return     rec( defaults := [ java.lang.StringIndexOutOfBoundsException: Range [65, 30) out of bounds for length 65
      elif N = 4 then#F  CyclotomicField( <gens> )
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
      fi


      xtension:arg[1];
      gens:= Concatenation( gens, GeneratorsOfField         and IsField( arg[1]java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30
    java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7

#  the  stabilizerinfo.
    stab:= Filtered( PrimeResidues( N ),
                     x -> ForAll( gens.conductorconductor   =
                                  gen -> GaloisCyc( gen, x ) = #T (in the case of a normal basis the vectors are of course known ...)

    # Construct and return the field.
    return # A basis of an extension of a number fieldanormal java.lang.StringIndexOutOfBoundsException: Index 68 out of bounds for length 68
    end # Coefficients computed a tensor formjava.lang.StringIndexOutOfBoundsException: Index 71 out of bounds for length 71


#############################################################################
##
#M  DefaultFieldByGenerators( <cycscoll> )
##
InstallMethod( DefaultFieldByGenerators,
    "for collection of cyclotomics",
    [  ],
    gens- CyclotomicField(Conductor(gens ) ));


#############################################################################
##
#M  CanonicalBasis( <F> )
##
##  The canonical basis of a field extension $F / K$ for a cyclotomic field
##  $F$ is the Zumbroich basis if $K$ is a cyclotomic field.
##  Otherwise it is the first normal basis.
##
InstallMethod( CanonicalBasis,
    "for cyclotomic field of Add( C, Coefficients( BB,* )java.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 44
     IsCyclotomicField IsCyclotomicCollection,
    function#F  ReducedStabilizerInfo( <N>, <stabilizer> )

    local n,
          ,
          # to take $sum_i1^m c_{+mj-) v_i$asN=  /2;
          subfield,
          zumb,
          java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
          vectors,
          jk,l,
          C,
          coeffsmat,
    val;

n= Conductor( F);

    B:= # the          i[]=val;
                                 not gens.generators[1][1] in stabilizer
                            IsCanonicalBasis
                            and java.lang.StringIndexOutOfBoundsException: Index 60 out of bounds for length 36
                   rec() );
    SetUnderlyingLeftModule( B, F );
    B!.conductor:= java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0

    subfield:= java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9

if( )then

      

      # Construct the Zumbroich basis.##  in the cyclotomic field with conductor <N>.
      java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

    else

      # Compute a normal basis.

        (. .s(<F>)
  #     $(w_1, \ldots, w_k)$ denote `vectors'.
      # Define $u_{i+m(j-1)} = v_i w_j$.  Then $(u_l; 1\leq l\leq mk)$
      # is a $Q$-basis of `F'.  First change from the Zumbroich basis to
      

     zumb: ZumbroichBase( n, 1)+ 1;
      subvectors := BasisVectors( Basis( subfield )              GaloisStabilizer( F ), ")" );
      vectors:   )java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36
      m:= Length( subvectors );
k=  )
      : [;
      for j in<F> ) . . . . . . . . . . . . . . print an abelian number field
        Print( "NF(", ,""java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40
          Add( C, CoeffsCyc( i*j, n;
        od  andjava.lang.StringIndexOutOfBoundsException: Range [51, 50) out of bounds for length 53
      od;
      C: C^-)java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17

      # Let $(c_1, \ldots, c_{mk})$ denote the coefficients with respect##
      # to the new basis.
      To achieve `<coeffs> \* BasisVectors( <B> ) = <z>' we have
      # to take $\sum_{i=1}^m c_{i+m(j-1)} v_i$ as $j$--th coefficient\:

java.lang.StringIndexOutOfBoundsException: Index 54 out of bounds for length 21
      for
        coeffsmat[i      and  ,
        for j in [ 1 .. k ] do
          val:= 0;
          l in [ 1  .. m] do
im(1+ java.lang.StringIndexOutOfBoundsException: Range [55, 54) out of bounds for length 58
          F) java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36
                # `B' is an int  of java.lang.StringIndexOutOfBoundsException: Range [49, 48) out of bounds for length 78
        od;
      ;

      SetBasisVectors( B, vectors #
      java.lang.StringIndexOutOfBoundsException: Range [23, 22) out of bounds for length 34

      B!.zumbroichbase java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
      ,

    java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

    # Return the basis.
    return B;
    end


#############################################################################
##
#M  BasisVectors( <B> )
##
InstallMethod( Perform( [ GeneratorsOfDivisionRing, GeneratorsOfAlgebraWithOne ],
    "for canon. basis of cyclotomic field of cyclotomics",
    [ IsBasis and "for abelian number field of cyclotomics",
        [ IsAbelianNumberField and IsCyclotomicCollection ],
    local e;
    # Basis vectors are bound if the subfield is not a cycl. field.
#T ??
    e##
    return 
    end )forabelian field cyclotomics,


#############################################################################
##
#M  Coefficients( <B>, <z> )  . . . . . . . . for canon. basis of cycl. field
##
java.lang.StringIndexOutOfBoundsException: Range [15, 13) out of bounds for length 28
" java.lang.StringIndexOutOfBoundsException: Range [19, 18) out of bounds for length 62
    IsCollsElms,
    [ end 
      IsCyc ],
    function( B, z )
    local N,
          coeffsjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
 java.lang.StringIndexOutOfBoundsException: Range [30, 26) out of bounds for length 54
          m,
          zumb,
          NN,
          Em;

    F:= UnderlyingLeftModule( B );
    if not z in F then return fail; fi;

    N:= B!.conductor;

      # `poly' is a linear polynomial.
    coeffs:= CoeffsCyc( z, N );
    if coeffs =

    java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28

   if   IsPrimeField F )then

      # Get the Zumbroich basis coefficients (basis $B_{n,1}$)= ((root) -coeffs[] /2 *coeffs[ );
      coeffs:= coeffs{ B!.(   ,   root]  );

    elif IsCyclotomicField( F ) then

      # Get the Zumbroich basis coefficients (basis $B_{n,m}$) directly.
      m:= java.lang.StringIndexOutOfBoundsException: Range [0, 19) out of bounds for length 13
#############################################################################
      NN:= N/m;
      Em:= E(m);
      coeffs:= List(  IsCollsXElms,
                     j->Sum( IsAbelianNumberField and IsCyclotomicCollection

    

      # The subfield is not a cyclotomic field.
      # The necessary information is stored in `B!.coeffsmat'.
      { B!zumbroichbase +}*B.oeffsmat;

    fi;

    # Return the list of coefficients.x- ForAll(gens  - GaloisCyc y x       Em=(;
    return coeffs;
    conj: [java.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 14


#############################################################################
##
##  Automorphisms of abelian number fields
##


#############################################################################
##
#R  IsANFAutomorphismRep( <obj> )
##
DeclareRepresentation( "IsANFAutomorphismRep",
    IsAttributeStoringRep, [ "galois" ] );


#############################################################################
##
#P  IsANFAutomorphism( <obj> )
##
DeclareSynonym( "IsANFAutomorphism", IsANFAutomorphismRep
    and IsFieldHomomorphism
    and IsMapping
    and IsBijective );


#############################################################################
##
#M  ExponentOfPowering( <map> )
##
InstallMethod( java.lang.StringIndexOutOfBoundsException: Range [34, 33) out of bounds for length 34
    "for [ IsAbelianNumberField and 
    [ IsMapping and IsANFAutomorphismRep ],
    map -> map!.galois );

InstallMethod( java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 29
    "for an identity mapping",
    [ IsMapping and IsOne ],
    map -1)

InstallMethod( ExponentOfPowering,
    "for a java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 0
    [ IsMapping ],
 )
    if IsOne( map ) then
      return 1java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15
    else )java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 10
      TryNextMethod();
    ;
    end );


#############################################################################
##
#F  ANFAutomorphism( <F>, <k> )  . .  automorphism of an abelian number field
##
InstallGlobalFunction( ANFAutomorphism, function ( F, k )

    local galois, aut;

    # check the arguments
     notnot( IsAbelianNumberField(F)and IsCyclotomicCollection(F) ) hen
      Error("<F> must be an abelian number field consisting of cyclotomics");
     notIsRat(k  then
      Error( "<
#M  Trace( <L>, K>, <z> )
     not
#T this is a hack ...
      :  mod ( ;
    fiand IsCyclotomicCollection IsCyc]java.lang.StringIndexOutOfBoundsException: Index 63 out of bounds for length 63
    if Gcdjava.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36
      Error( "<k>     if not IsPrimeFiel( K  then
    fi;

    # Let $F / K$ be a field extension where $Q_n$ is the conductor of $F$;
     let $S(F)$ be the group of those prime residues mod $n$ that fix $F$
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
    # to $S(K) / S(F)$.  Thus each automorphism of $F / K$ corresponds tojava.lang.StringIndexOutOfBoundsException: Range [14, 13) out of bounds for length 21
    # a coset $c$ of $S(K)$, and it acts on $F$ like each element of $c$.
    # The automorphism `ANFAutomorphism( F/K, k )' maps $x\in F / K$ to
    # `GaloisCyc( <x>, k )'.

ive.
    galois:= Set(GaloisStabilizer;
    if=java.lang.StringIndexOutOfBoundsException: Range [2, 1) out of bounds for length 2
      ##  viewed as vector space over $Q_m$.
    java.lang.StringIndexOutOfBoundsException: Range [27, 6) out of bounds for length 27
java.lang.StringIndexOutOfBoundsException: Range [10, 9) out of bounds for length 18
    # make the mapping
aut=( ,,
  ponsm:= List( primes, x -> 0 );    # Product(List( [1..Length(primes)],
                         and IsANFAutomorphism ),
                     rec() );

    aut!.galoisp: i;

    return aut;;
end );


#############################################################################
##
#M  \=( <aut1>, <aut2> )  . . . .  for automorphisms of abelian number fields
#M  \=( <id>, <aut> ) . . . . . .  for automorphisms of abelian number fields
#M  \=( <aut>, <id> ) . . . . . .  for automorphisms of abelian number fields
##
InstallMethod( \=,
    "fornn:= n  / ^(exponsm[1 +1)java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36
    IsIdenticalObj,
    [ IsFieldHomomorphism and IsANFAutomorphismRepAppend( base, base + nn );
       and IsANFAutomorphismRep ,
    function ( aut1, aut2 )
    return     Source(     else
           and aut1!.galois = aut2!.galoisLength )]do
    end );

(\=java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 18
    "for identity mapping and ANF automorphism",
    IsIdenticalObj,
     IsMapping  IsOne,
      IsFieldHomomorphism and IsANFAutomorphismRep ],
    function ( id, aut )
n         fi
           and aut!.galois = 1;
    end );

InstallMethod( \=,
    "orANF automorphism and identity mapping",
    od;
    [ IsFieldHomomorphism and IsANFAutomorphismRepreturn Set( base, x -> x mod n );
      IsMapping and IsOne
    function ( aut, id )
    return     Source( id ) = Source( aut )
           and aut!.galois = 1;
    end );


#############################################################################
##
#M  \<( <aut1>, <aut2> )  . . . .  for automorphisms of abelian number fields
##
InstallMethod( \<,
    "for two ANF java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 2
    IsIdenticalObj,
    [ IsFieldHomomorphism and IsANFAutomorphismRep,
      IsFieldHomomorphism and IsANFAutomorphismRep ],
function , aut2)
    return    Source( aut1 ) 
           or factors,          java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 45
                and aut1!.galois < aut2!.galois );
    end );

InstallMethod(N2                 -of `'
    "for identity mapping and ANF automorphism",
    IsIdenticalObj
    [ IsMapping and IsOne,
      IsFieldHomomorphismd,
    function  , )
    return    Source          ,
           or (     Source( id ) = 
                and 1 < #
    end );

nstallMethod\
    "for ANF automorphism andjava.lang.StringIndexOutOfBoundsException: Range [33, 32) out of bounds for length 54
    IsIdenticalObj,
    [ IsFieldHomomorphism and IsANFAutomorphismRep,
      IsMapping and IsOne ],
    function ( aut, id )
    return Source( aut ) < Source( id );
    end );


#############################################################################
##
#M  ImageElm( <aut>, <cyc> )  . .  for automorphisms of abelian number fields
##
InstallMethod( ImageElm,
    "forANFautomorphism scalar",
    FamSourceEqFamElm,
     IsFieldHomomorphism IsANFAutomorphismRep, ]java.lang.StringIndexOutOfBoundsException: Index 60 out of bounds for length 60
    function ( aut, elm )
    return GaloisCyc
##


#############################################################################
##
#M  ImagesElm( <aut>, <cyc> ) . .  for automorphisms of abelian number fields
##
java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 2
    "for ANF InstallMethod( ExponentOfPowering##  the pointwise stabilizer of the subfield in $U$.
    InstallMethod 
    [ IsFieldHomomorphism and IsANFAutomorphismRep, IsScalar ],
(     ( java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17
    return [ GaloisCycelse
    end );


#############################################################################
##
#M  ImagesSet( <aut>, <field> ) .  for automorphisms of abelian number fields
##
InstallMethod( ImagesSet,
    "for ANF automorphismInstallGlobalFunction(ANFAutomorphism,function(  k java.lang.StringIndexOutOfBoundsException: Index 57 out of bounds for length 57
    CollFamSourceEqFamElms,
    [ IsFieldHomomorphism 
    function (     if (IsAbelianNumberField(F java.lang.StringIndexOutOfBoundsException: Range [41, 40) out of bounds for length 73
    return F;
    end );


#############################################################################
##
#M  ImagesRepresentative( <aut>, <cyc> )  . . for autom. of ab. number fields
##
 ImagesRepresentative
    "for if    , k) > java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
    FamSourceEqFamElm,
    [ IsFieldHomomorphism and IsANFAutomorphismRep, IsScalar 
    function ( # The automorphism `ANFAutomorphism( F/K, k )' maps $x\in F / K$ to
    return GaloisCyc( elm, aut!java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
    end:= Set(aloisStabilizer F) >k Conductor(F ))[1];


#############################################################################
##
#M  PreImageElm( <aut>, <cyc> ) . . . . . . . for autom. of ab. number fields
##
InstallMethod( PreImageElm,
    "for ANF automorphism and scalar",
    FamRangeEqFamElm,
    [  and IsBijective and java.lang.StringIndexOutOfBoundsException: Index 67 out of bounds for length 67
      IsScalar ],
    function ( aut, elm )
    return GaloisCyc( elm, ( 1 / aut!.galois )
                           mod
    end );


#############################################################################
##
#M  PreImagesElm( <aut>, <cyc> )  . . . . . . for autom. of ab. number fields
##
InstallMethod( PreImagesElm,
    "for ANF automorphism and scalar",
    FamRangeEqFamElm,
    [ IsFieldHomomorphism and IsANFAutomorphismRep, IsScalar ],
    function ( aut, elm )
    return [ GaloisCyc( elm, ( 1 / aut!.galois )
                             mod Conductor( Range( aut ) ) ) ];
    end );


#############################################################################
##
#M  PreImagesSet( <aut>, <field> )  . . . . . for autom. of ab. number fields
##
InstallMethod( PreImagesSet,
    "for ANF automorphism and scalar",
    CollFamRangeEqFamElms,
    [ IsFieldHomomorphism and IsANFAutomorphismRep, IsField ],
    function ( aut, F )
    return F;
    end );


#############################################################################
##
#M  PreImagesRepresentative( <aut>, <cyc> ) . for autom. of ab. number fields
##
InstallMethod( PreImagesRepresentative,
    "for ANF automorphism and scalar",
    FamRangeEqFamElm,
    [ IsFieldHomomorphism and IsANFAutomorphismRep, IsScalar ],
    function ( aut, elm )
    return GaloisCyc( elm, ( 1 / aut!.galois )
                           mod Conductor( Range( aut ) ) );
    end );


#############################################################################
##
#M  CompositionMapping2( <aut2>, <aut1> ) . . for autom. of ab. number fields
##
InstallMethod( CompositionMapping2,
    "for two ANF automorphisms",
    FamSource1EqFamRange2,
    [ IsFieldHomomorphism and IsANFAutomorphismRep,
      IsFieldHomomorphism and IsANFAutomorphismRep ],
    function ( aut1, aut2 )
    return ANFAutomorphism( Source( aut1 ), aut1!.galois * aut2!.galois );
    end );


#############################################################################
##
#M  InverseGeneralMapping( <aut> )  . . . . . for autom. of ab. number fields
##
InstallOtherMethod( InverseGeneralMapping,
    "for ANF automorphism",
    [ IsFieldHomomorphism and IsANFAutomorphismRep ],
    aut -> ANFAutomorphism( Source( aut ), 1 / aut!.galois ) );


#############################################################################
##
#M  \^( <aut>, <n> )  . . . . . . . . . . . . for autom. of ab. number fields
##
InstallMethod( \^,
    "for ANF automorphism and integer",
    [ IsFieldHomomorphism and IsANFAutomorphismRep, IsInt ],
    function ( aut, i )
    return ANFAutomorphism( Source( aut ), aut!.galois^i );
    end );


#############################################################################
##
#M  PrintObj( <aut> ) . . . . . . . . . . . . for autom. of ab. number fields
##
InstallMethod( PrintObj,
    "for ANF automorphism",
    [ IsFieldHomomorphism and IsANFAutomorphismRep ],
    function ( aut )
    Print( "ANFAutomorphism( ", Source( aut ), ", ", aut!.galois, " )" );
    end );


#############################################################################
##
#M  GaloisGroup( <F> )  . . . . . . . Galois group of an abelian number field
##
##  The required group is a factor group of the Galois group $G$
##  of the enveloping cyclotomic field.
##  So the group $U$ generated by the actions of the generators of $G$ on <F>
##  is the Galois group of <F>, viewed as field over the rationals.
##
##  If <F> is a field over a proper extension of the rationals then we take
##  the pointwise stabilizer of the subfield in $U$.
##
InstallMethod( GaloisGroup,
    "for abelian number field ",
    [ IsAbelianNumberField ],
    function( F )
    local group;

    group:= GroupByGenerators( List( Flat(
                    GeneratorsPrimeResidues( Conductor( F ) ).generators ),
                        x -> ANFAutomorphism( F, x ) ),
                IdentityMapping( F ) );

    if not IsPrimeField( LeftActingDomain( F ) ) then
      group:= Stabilizer( group,
                  GeneratorsOfField( LeftActingDomain( F ) ), OnTuples );
    fi;

    return group;
end );


InstallMethod( Representative,
    [ IsAdditiveMagmaWithZero and IsCyclotomicCollection ],
    f -> 0 );

Messung V0.5 in Prozent
C=73 H=83 G=77

¤ Diese beiden folgenden Angebotsgruppen bietet das Unternehmen0.75Angebot  ¤

*Eine klare Vorstellung vom Zielzustand






Wurzel

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.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Open Source Software

     Quellcodebibliothek
     Eigene Quellcodes
     Fremde Quellcodes
     Suchen

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik

Statistik
#Sources=1128594
#Domains=1976912