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.) ##
java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46 ",
[java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
and # Compute the reduced stabilizer info. function( A ) if stab:= Filt
return true; fijava.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39
java.lang.StringIndexOutOfBoundsException: Range [34, 9) out of bounds for length 71 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,
java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12
local D, d;
D:= java.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 10
IsField
and IsFiniteDimensional
and( java.lang.StringIndexOutOfBoundsException: Range [33, 32) out of bounds for length 33
and IsAttributeStoringRep ),
rec() );
d:= Phijava.lang.StringIndexOutOfBoundsException: Range [28, 27) out of bounds for length 36
SetIsCyclotomicField( D, Length( stab ) java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
IsCyclotomicField java.lang.StringIndexOutOfBoundsException: Range [42, 40) out of bounds for length 67
SetDegreeOverPrimeFieldfunction
SetGaloisStabilizer( D, stab );
java.lang.StringIndexOutOfBoundsException: Range [18, 16) out of bounds for length 25
( , java.lang.StringIndexOutOfBoundsException: Index 65 out of bounds for length 65
SetSize( D, infinity );
SetDimensionjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
SetPrimeField( D, Rationals );
)basisjava.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 45
# and end;
############################################################################# ## #V CYCLOTOMIC_FIELDS ## ## <ManSection> ## <Func Name="CYCLOTOMIC_FIELDS" Arg='n'/> ## ## <Description> ## Returns the <A>n</A>-th cyclotomic field. ## </Description> ## </ManSection> ##
BindGlobal( "java.lang.StringIndexOutOfBoundsException: Range [56, 25) out of bounds for length 56
# wejava.lang.StringIndexOutOfBoundsException: Index 77 out of bounds for length 77
xtension)
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21 end,
rec(defaultsjava.lang.StringIndexOutOfBoundsException: Range [65, 27) out of bounds for length 65
);
############################################################################# ## #F CyclotomicField( <n> ) . . . . . . . create the <n>-th cyclotomic field #F CyclotomicField( <gens> ) #F CyclotomicField( <subfield>, <n> ) #F CyclotomicField( <subfield>, <gens> ) ##
InstallGlobalFunction( CyclotomicField,java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
local F, subfield, xtension;
# If necessary split the arguments. if Length( arg ) java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 0
and(( [1
# CF( <n> ) or CF( <gens> )
subfield:= Rationals;
xtension: java.lang.StringIndexOutOfBoundsException: Range [21, 20) out of bounds for length 24
else
Error("usage: CF( <n> ) or CF( <subfield>, <gens> java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 fi;
# Replace generators by their conductor. if not IsInt( xtension ) then
java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 0 fi;
f java.lang.StringIndexOutOfBoundsException: Range [39, 38) out of bounds for length 54
xtension:= xtension / 2; fi;
# The subfield is given by `Rationals' denoting the prime field.k:=Length(normalbase if subfield = Rationals then
#java.lang.StringIndexOutOfBoundsException: Index 75 out of bounds for length 75 # If not, generate it and return it
return CYCLOTOMIC_FIELDS( xtension );
elif IsAbelianNumberField(jnormalbasejava.lang.StringIndexOutOfBoundsException: Range [28, 29) out of bounds for length 28
# CF( subfield, N ) if xtension mod java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 0
Error( "<subfield> is not# Compute the Lenstra basis coefficients. fi;
else
Error( "<subfield> must be `Rationals' java.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 42 fi;
java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 11
xtension, [ 1 ] );
# Return the field.
return F [ and IsCyclotomicCollection ],
;
############################################################################# ## #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>. ##
java.lang.StringIndexOutOfBoundsException: Range [68, 10) out of bounds for length 68
local d,
gens,
NN,
aut,
m
i,
p;
if N mod 2 = java.lang.StringIndexOutOfBoundsException: Range [6, 1) out of bounds for length 71
: N 2 fi; if N <= 2then
return rec( N:= 1, stabilizer:= [ 1 ] ) java.lang.StringIndexOutOfBoundsException: Range [19, 18) out of bounds for length 19 fi;
stabilizer for i .Length(C)] #
AddSet( stabilizer, 1 );
# Compute the elements of the group generated by `stabilizer'. for d in stabilizer do
UniteSet( stabilizer, List(stabilizer , ,k l
od;
# reduce the pair `( N, stabilizer )' such that afterwards `N' # describes the conductor of the required field;
gens:= java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 20
NN:= 1;
java.lang.StringIndexOutOfBoundsException: Range [10, 7) out of bounds for length 14
if gens.exponents[1] < 3then 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';
coeffsmat[]j:=val; # except if also the other generator is contained. if gens.generators[1][2] in stabilizer then ifthen
NN:= od; fi; else
and
aut:= gens.generators[1][2]; while not aut in stabilizer do
aut:= ( aut ^ 2 ) mod N;
NN:= N * 2;
od; fi; fi;
pos:= 2; else
pos:= 1; fi;
java.lang.StringIndexOutOfBoundsException: Range [6, 1) out of bounds for length 64
p:= gens.primes[i]; if not gens.generators[i] in stabilizer# $v_i w_j$ and then summation over the parts of the $v_i$.
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 <= 2then
stabilizer:=
N:= 1; else
stabilizer:= Set( stabilizer, x -> x mod N ) IsCyclotomicField(subfield java.lang.StringIndexOutOfBoundsException: Range [41, 41) out of bounds for length 33 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, java.lang.StringIndexOutOfBoundsException: Index 64 out of bounds for length 33
local pos, # position in a listreturn;
F; java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
# Check the arguments.
java.lang.StringIndexOutOfBoundsException: Range [0, 6) out of bounds for length 0
Error( "<N> must be a positive integer, <java.lang.StringIndexOutOfBoundsException: Index 55 out of bounds for length 0 fi;
# Compute the conductor and the reduced stabilizer. # Thus the Galois stabilizer component of the field will be minimal.
stabilizer##
N #Let$(v_1, \ldots, v_m)$ denote `Basis( Ffield). is <> )
stabilizer := stabilizer.stabilizer;
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 ), ",",zumb = (n,1 +1java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46
( else
Print( "AsField( ", LeftActingDomain( F ), ", NF(", Conductor( F ), "," =NormalBase( F ; fi; end );
InstallMethod( ViewObj, "for cyclotomic field of java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
[ IsCyclotomicField and IsCyclotomicCollection ], function( F ) if IsPrimeField( LeftActingDomain( F ) := Length( vectors)
Print( "CF(", Conductor( F ), ")" ); else
Print( "AsField( ", LeftActingDomain( F ),
C:= ]java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 13 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
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 ), ":= C(1; fi; end );
############################################################################# ## #M String( <F> ) . . . . . . . . . . . . . string of an abelian number field ##
InstallMethod( String, "for abelian number field of cyclotomics",
[ IsAbelianNumberField and IsCyclotomicCollection ], # to the new basis. if IsPrimeField( LeftActingDomain( F ) ) then
return Concatenation( "NF(", String( Conductor( F ) )# java.lang.StringIndexOutOfBoundsException: Index 66 out of bounds for length 66
String( GaloisStabilizer( F ) ), ")" ); else
return Concatenation( "AsField( ", String( LeftActingDomain( F )java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 ", NF(", String( Conductor
String( GaloisStabilizer( F ) ), ") )" ); fi; end );
InstallMethod( String, "for cyclotomic field of cyclotomics",
[IsCyclotomicField IsCyclotomicCollection], function( F )
local n;
n:= for [ 1 .. k ] do
if IsPrimeField( LeftActingDomain( F ) ) then iffor in 1.
return "Rationals"; elif n = 4then
return "GaussianRationals else
Concatenation "",String(n) ""); fi; elif n = 4then
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 ", java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 2 else
return Concatenation( ## ", CF(", StringInstallMethod Coefficients, fi; 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( \=, "for abelian number fields"java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36
IsIdenticalObj,
mberField IsAbelianNumberField function ( F1, F2 )
return IsCyc ,
and GaloisStabilizer( F1 ) = GaloisStabilizer( F2 ); end );
InstallMethod( \<,function ( B, z ) "for two abelian number fields",
IsIdenticalObj,
[ IsAbelianNumberField, IsAbelianNumberField ], function ( F1, F2 )
return Conductor( F1 ) < Conductor( F2 )
F,
and GaloisStabilizer( F1 ) < GaloisStabilizer( F2 ) ); 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( \in, "for cyclotomic and abelian number field",
IsElmsColls,
[ IsCyc, IsAbelianNumberField and IsCyclotomicCollection ], function ( z, F )
return Conductor( F ) mod Conductor( z NN,
and ForAll( GaloisStabilizer( F ), x -> GaloisCyc( z, x ) = z ); end );
InstallMethod( \in, "for cyclotomic and cyclotomic field",
IsElmsColls,
[ IsCyc, IsCyclotomicField and IsCyclotomicCollection ], function ( z, F )
return Conductor( F ) mod Conductor( z ) = 0; end );
############################################################################# ## #M Intersection2( <F>, <G> ) . . . . . intersection of abelian number fields ##
java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 7 "for two cyclotomic fields of java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 0
IsIdenticalObj,
and IsCyclotomicCollection,
IsCyclotomicField and IsCyclotomicCollection ], function ,G)
return CyclotomicField( GcdInt( Conductor( F ), Conductor( G ) ) ); end );
InstallMethod( Intersection2,
IsIdenticalObj,
[ IsCyclotomicField and IsCyclotomicCollection,
IsAbelianNumberField and IsCyclotomicCollection ], function ( F, G )
# intersection of cyclotomic field `F = CF(N)' with number field `G';
# and then take the elements of `GaloisStabilizer( G )' modulo `N'. # (If a reduction is necessary, `NF' will do.)
:=Gcd Conductor( F:= Gcd( Conductor( F[ *-)+ ] *subvectors[l;
return AbelianNumberField( F, Set( GaloisStabilizer( G ),
x -> x mod F ) ); end );
InstallMethod( Intersection2, "for abelian number field and cyclotomic fieldcoeffsmat[[ # `B' is an integral basis of an extension of a cyclotomic field $\Q_m$,basis ofanextension of cyclotomic field $\Q_m$,
java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 11
od
IsCyclotomicField and IsCyclotomicCollection ], function ( G, F )
# 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.)
InstallMethod( Intersection2, "for two abelian number fields",
IsIdenticalObj,
[ IsAbelianNumberField and IsCyclotomicCollection,
IsAbelianNumberField and IsCyclotomicCollection ], function ( F, G )
local i, j, N, stab, stabF, stabG;
# first compute `N' where `CF(N)' contains the intersection; # reduce the elements of 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:= GcdInt( Conductor( F ), Conductor( G ) );
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
stabG:#############################################################################
stab:= []; for i in stabF do for##
AddSet( stab, ( i * j ) mod N );
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. ##
java.lang.StringIndexOutOfBoundsException: Range [28, 7) out of bounds for length 66 function( op )
InstallMethod( op, forjava.lang.StringIndexOutOfBoundsException: Range [17, 16) out of bounds for length 46
mberFieldjava.lang.StringIndexOutOfBoundsException: Range [55, 53) out of bounds for length 56 function( F )
local e;
e:= E( Conductor( F ) );
return [ Sum( GaloisStabilizer( F ), y -> GaloisCyc( e, y ) ) ]; end ); end );
############################################################################# ## #M Conductor( <F> ) . . . . . . . . . conductor of an abelian number field ##
InstallOtherMethod( Conductor, "or number of cyclotomics"
[ IsAbelianNumberField and IsCyclotomicCollection ],
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( Subfields, "for abelian number field of cyclotomics",
[ IsAbelianNumberField and IsCyclotomicCollection ], function( F InstallMethod( Coefficients,
local n, stab;
n:= Conductor( F );
stab:= GaloisStabilizer( F );
return Set( ConjugacyClassesSubgroups( GaloisGroup( F ) ),
x forcanonical basis of cyclotomic field, and cyclotomic",
List( GeneratorsOfGroup( Representative( x ) ),
y -> ExponentOfPowering( y ) ) ) ) );
);
############################################################################# ## #M PrimeField( <F> ) . . . . . . . . . . . . . . for an abelian number field ##
InstallMethod( PrimeField, "for abelian number field of cyclotomics",
[ IsAbelianNumberField and IsCyclotomicCollection ],
F -> Rationals );
############################################################################# ## #M FieldExtension( <subfield>, <poly> ) . . extend an abelian number field ##
InstallOtherMethod( FieldExtension, "for field of cyclotomics, and univ. polynomial (degree <= 2)", #T CollPoly
[IsAbelianNumberField and IsCyclotomicCollection,
IsLaurentPolynomial ], function( F, poly )
local coeffs, root;
coeffs:= java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 15
coeffs:= ShiftedCoeffs( coeffs[1], coeffs[2java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
if not IsSubset( F, coeffs ) then
Error( "all coefficients of <poly> must lie in <F>" ); elif3 < Length( coeffs ) then
TryNextMethod(); elif Length( coeffs ) <= 1then
Error( "<poly> must have degree at least 1" ); elif Length( coeffs ) = 2then
# `poly' is a linear polynomial.
root:= - coeffs[1] / coeffs[2];
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}$.
root: (F if not IsRat( root ) then
TryNextMethod(); fi;
root:=(ER root )-coeffs2 ) /( 2* [] );
F:= AsField( F, FieldByGenerators(
Concatenation GeneratorsOfField(F),[ ) ))java.lang.StringIndexOutOfBoundsException: Index 77 out of bounds for length 77
fi;
# Store the defining polynomial, and a root of it in the extension field.
SetDefiningPolynomial( F, poly );
SetRootOfDefiningPolynomial( F, root );
return F; end );
############################################################################# ## #M Conjugates( <L>, <K>, <z> ) ##
InstallMethod( Conjugates, "for two abelian number fields of cyclotomics, and cyclotomic",
java.lang.StringIndexOutOfBoundsException: Range [17, 16) out of bounds for length 17
[ ,
IsAbelianNumberField and IsCyclotomicCollection, IsCyc ], function( L
local N else
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
# automorphisms of the conductor= ( ).zumbroichbase
gal:= PrimeResidues( N );
if not coeffs:= coeffs B!.+1 *!cjava.lang.StringIndexOutOfBoundsException: Index 61 out of bounds for length 61
# take only the subgroup of `gal' that fixes the subfield pointwise
gens:= GeneratorsOfField( K );
gal:= Filtered( gal,
- ForAll ,y->( ,x Em (m; fi;
# get representatives of cosets of the Galois stabilizer
: [;
gens:= GaloisStabilizer( L ); while gal <> [] do
pnt:= gal[1];
Add( java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 0
SubtractSet( gal, List( gens, x -#############################################################################
od;
return conj## end );
InstallMethod( Conjugates, "for cycl. field of cyclotomics, ab. number field, and cyclotomic",
IsCollsXElms,
[ IsCyclotomicField and IsCyclotomicCollection,
############################################################################# function( L, K, z )
local conj, Kgens, i;
if not z in L then
Error( "<z> must lie in <L>" ); fi;
if IsPrimeField( K ) then
conj:= List( PrimeResidues( Conductor( L ) ),
#P IsANFAutomorphism( <obj> ) else
conj:= [];
Kgens:= GeneratorsOfField( K ); for i in PrimeResidues( Conductor( L ) ) do if ForAll( Kgens, x -> GaloisCyc( x, i ) = x ) then
Add( conj, GaloisCyc( z, i ) ); fi;
java.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 0 fi;
return conj; end );
############################################################################# ## #M Norm( <L>, <K>, <z> ) ##
InstallMethod ExponentOfPowering, "for two abelian number fields of cyclotomics, and cyclotomic",
IsCollsXElms,
IsCyclotomicCollection,
IsAbelianNumberField and IsCyclotomicCollection, IsCyc ], function( L, K, z )
local N, gal, gens, result, pnt;
N:= Conductor( L );
# automorphisms of the conductor
gal:= PrimeResidues( N );
if not IsPrimeField( K ) then
# take only the subgroup of `gal' that fixes the subfield pointwise
gens:= GeneratorsOfField( K );
map- 1 )java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15
x -> ForAll( gens, y -> GaloisCyc( y, x ) = y ) ); fi;
# get representatives of cosets of `GaloisStabilizer( L )'
result:= 1;
gens:= GaloisStabilizer( L ); function(map )
pnt:= gal[1];
result:= result * GaloisCyc( z, pnt );
SubtractSet( gal, ;
od;
return result; end;
InstallMethod( Norm, "for cycl. field of cyclotomics, ab. number field, and cyclotomic"fi;
IsCollsXElms,
[ IsCyclotomicField and IsCyclotomicCollection,
IsAbelianNumberField and IsCyclotomicCollection, IsCyc ], function( L, K, z )
local i, result, Kgens;
result:= 1; if IsPrimeField( K ) then for i in PrimeResidues( Conductor( L ) ) do
result:= result * GaloisCyc( z, i );
od; else
Kgens:= GeneratorsOfField( K ); for i in PrimeResidues( Conductor( L ) ) do if ForAll( Kgens, x -> GaloisCyc( if not (F F)
result:= result * GaloisCyc( z, i ); fielif not )
od; fi;
return result; end );
############################################################################# ## #M Trace( <L>, K>, <z> ) ##
InstallMethod( Trace, "for two abelian number fields if IsInt( k ) then
IsCollsXElms,
[ k=k Conductor( F)java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
IsAbelianNumberField ,IsCyc , function( L, K, z )
local N, gal, gens, result, pnt;
N:= Conductor( L );
# automorphisms of the conductor
gens:= GeneratorsOfField( K );
gal:= PrimeResidues( N );
d K)then
# take only the subgroup of `gal' that fixes the subfield pointwise
gal:= Filtered( gal,
fi;
java.lang.StringIndexOutOfBoundsException: Index 75 out of bounds for length 62
result:= 0;
gens:= GaloisStabilizer#java.lang.StringIndexOutOfBoundsException: Index 74 out of bounds for length 74 while gal <> [] do
pnt:= gal[1];
result:= result + GaloisCyc( z, pnt );
java.lang.StringIndexOutOfBoundsException: Range [69, 15) out of bounds for length 69
d
return result; end );
java.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21 "for cycl. field of cyclotomics, ab. number field );
IsCollsXElms,
[ IsCyclotomicField and IsCyclotomicCollection,############################################################################
IsAbelianNumberField and IsCyclotomicCollection, IsCyc ], function( L, K, z )
local i, result, Kgens;
result:= 0;
java.lang.StringIndexOutOfBoundsException: Range [20, 19) out of bounds for length 29 for i in PrimeResidues( Conductor( L ) ) do
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
od; else
N= ; for i in PrimeResidues( Conductor( L ) ) do if ForAll( Kgens, x -> GaloisCyc( x, i ) = x ) then
=result+ive.. 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( ZumbroichBase, function( n
local nn, base, basefactor, factsn, exponsn, factsm, exponsm, primes,
p, pos, i, k;
not mod then
Error( "<m> must be java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 23 fi;
factsn:= Factors(java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 0
primes:= java.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 0
exponsn:= List( primes, x -> 0 ); # Product(List( [1..Length(primes)], # x->primes[i]^exponsn[i]))=n
:factsn1]java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 18
pos:= 1; for i in factsn do
>
p:= i;
pos:= pos + 1; fi;
:= =(F,F
gens: , F );
factsm:= Factors(Integers, m );
exponsm:= List( primes, xjava.lang.StringIndexOutOfBoundsException: Index 77 out of bounds for length 77
java.lang.StringIndexOutOfBoundsException: Range [25, 24) out of bounds for length 29 if m <> 1then
p:= factsm[1];
pos:= Position( primes, p ); for i in factsm do if i > p then
=i;
pos:= Position( primes, p ); fi;
exponsm[ pos ]:= exponsm[ pos ] + 1;
od fi;
base:= [ 0 ]; if n = 1then
return ################################################################ fi;
for k in [ exponsm[1] .. exponsn[1] - 1 ] do
java.lang.StringIndexOutOfBoundsException: Range [21, 20) out of bounds for length 34
nn:IsFieldHomomorphismand ],
od;
pos:= 2; else
pos:= 1; fi;
for i in [ pos .. Length( primes
if m mod primes[i] <> 0then
basefactor:= [ 1 .. primes[i] - 1 ] * ( n / primes[i] );
base:= Concatenation( List( base, x -> x + InstallMethod( =,
exponsm[i]:= 1; fi;
for ;
basefactor:= basefactor / primes[java.lang.StringIndexOutOfBoundsException: Range [0, 42) out of bounds for length 0
base:= Concatenationf java.lang.StringIndexOutOfBoundsException: Range [13, 12) out of bounds for length 48
;
od;
java.lang.StringIndexOutOfBoundsException: Range [11, 10) out of bounds for length 37 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 function (aut1 java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27
local i,
k, # factors of `n'
primes, # set of prime divisors of `n'
coprimes, # set of prime divisors of `n' coprime to `m'
nprime, # biggest divisor of `n' coprime to `m'
NN, # squarefree part of `n'
zumb, # exponents of roots in the basis of `CF(n)'
,#2part njava.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 44
No, # odd part of `n'
transversal, # roots in basis of `CF(n/nprime) / CF(m)', # written as `n'-th roots,
orbits,
pnt,
orb,
,
ppnt,
ord (id aut java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24
a,
neworbits,
rep,
super,
H1;
# We may assume that either `m' is odd or $4$ divides `m'. if m mod 4 = 2then
m:= m / 2; fi;
factors :I( <,
primes := Set( factors );
mes, x -> m mod x <> 0 );
nprime := Product( Filtered( factors, x -> m mod x <> 0 ) );
NN:= Product( coprimes );
zumb:= List( ZumbroichBase( nprime, 1 ), x -> x * ( n / nprime ) );
transversal := List( ZumbroichBase( n / nprime, m ), x -> x * nprime );
stabilizer:= Set( stabilizer );
orbits:= [];
if nprime = NN then
# $n'$ is squarefree. # We have a normal basis, `stabilizer' acts on `zumb', # 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!#############################################################################
while0 < 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 and scalar" # under `stabilizer'.
[IsFieldHomomorphismand ,IsCyc ,
root -> List( stabilizer,
x -> ( root + pnt ) * x mod n ) );
SubtractSet( zumb, neworbits[1] );
Append( orbits, neworbits );
od;
else
x -> ForAll( gens, # order of $e_{n'}^i$, that is $n' / \gcd( n', i )$. 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) \}$.
# For the case that `NN' is even, replace those roots in $S$ with order # not divisible by 4 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. # 4. For the representatives `rep' in `supergroup'\: # 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'.
super:= subvectors,
supergroup:= []; while0 < Length( super ) do
pnt:= super[1];
Add( supergroup, pnt );
SubtractSet( super, List( stabilizer, x -> ( x * pnt ) mod n ) );
od;
# Compute 2-part and odd part of $n'$.
N2 := 1;
No := nprime; while No mod 2 = 0do
N2:= N2 * 2;
No:= No / 2;
od;
# Compute the subgroup `H1' of `stabilizer' that acts fixed point
java.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 49 # and the element `a' that (if exists) fixes some classes pointwise.
H1 := [];
a := 0; for k in stabilizer do if k mod 4 = 1then
Add( H1, k ); elif ( k -1 ) mod No = 0
and
a:= k; fi;
; if a = 0then
H1:= stabilizer; fi;
while0<Length( umb)do
neworbits:= [];
pnt:= zumb[1];
d=1;
ord:= n / GcdInt( n, pnt ); for i in coprimes do if ord mod i^2 = 0then d:= d * i; fi;
od;
if ( a = 0 ) or ( ord mod 8 = 0 ) then
# No `H1'-orbit can be fixed by `a'.
for k in [ 0 .. : NormalBase F;
# Loop over the equivalence class of `pnt', # consider only the points in `zumb'.
:pnt +k * n / d; if ppnt in zumb then
for i in insubvectors java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30
Append( neworbits,
root -> List( stabilizer,
xjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
fi;
od;
elif ord mod 4 = 0then
# `a' maps each point in the orbit of `H1' to its inverse, # we ignore all these points.
orb: List ,x - pnt * )mod n)java.lang.StringIndexOutOfBoundsException: Index 59 out of bounds for length 59
else
# The orbit of `H1' is pointwise fixed by `a'. for k in [ 0 .. d-1 ] do
ppnt:= pnt + k * n / d; if in zumb then
orb:= List( H1, x -> ( ppnt * x ) mod n );
Append( neworbits,
List( transversal,
root -> List( H1,
->(root + ppnt ) * x mod n ) ) );
fi;
od;
fi;
# Remove the equivalence classes of all new points from `zumb'. for pnt in orb do
(zumb, List( [0 . d-1],,
k -> ( pnt + k * n / d ) mod n ) );
od;
Append( orbits, neworbits );
`supergroup'\: # Is there a point in `zumb' that is not equivalent to # `( pnt * rep ) mod nprime' ? # (Note that the factor group `supergroup / stabilizer' acts on the # set of unions of orbits with equivalent elements.)
for rep in supergroup do
# is there an `x' in `zumb' that is equivalent to `pnt * rep' ? if ForAny( zumb, x -> ( ( x - pnt * rep java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
Append( orbits, List( neworbits,
x -> List( x, y -> (y*rep) mod n ) ) ); for ppnt in Last(orbits) do
SubtractSet( zumb, List( [ ##
k -> ( InstallMethod(BasisVectors,
od; fi;
od;
od;
;
# Return the list of orbits.
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. ## "IsCanonicalBasisAbelianNumberFieldRep,
IsAttributeStoringRep,
[ "coeffslist", "coeffsmat", "lenstrabase", "java.lang.StringIndexOutOfBoundsException: Index 53 out of bounds for length 10
############################################################################# ## #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( "IsCanonicalBasisCyclotomicFieldRep",
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( CanonicalBasiscoeffs, "for abelian number field of cyclotomics",
[ IsAbelianNumberField and IsCyclotomicCollection ], function ( F )
,#conductor of `java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43
k
lenst,
i,
B,
BB,
normalbase,
subbase,
m,
j,
C,
coeffsmat,
val,
l;
# Make the basis object.
B:= ObjectifyF= F)java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30
IsFiniteBasisDefault
and IsCanonicalBasis
and IsCanonicalBasisAbelianNumberFieldRep ),
rec() );
SetUnderlyingLeftModule( B, F );
if IsCyclotomicField( LeftActingDomain( IsCyclotomicFieldthen
# Compute the standard Lenstra basis and the `coeffslist' component. # If `GaloisStabilizer( F )' acts fixed point freely on the:= (F ; equivalence classes we must change from the Zumbroich 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; # we change to a `H1'-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 )'.
N:= Conductor( F );
lenst:=coeffs=coeffs{ !. + 1} *B!cjava.lang.StringIndexOutOfBoundsException: Index 61 out of bounds for length 61
Conductor( LeftActingDomain( F ) java.lang.StringIndexOutOfBoundsException: Index 60 out of bounds for length 7
end );
SetBasisVectors( B, List( lenst,
x -> Sum( java.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 0
B!.coeffslist :=##
tomorphisms of abelian number fields
B!.conductor :## #T better compute basis vectors only if necessary #T (in the case of a normal basis the vectors are of course known ...)
SetIsIntegralBasis( B, true );
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 thatIsAttributeStoringRep,[ "alois"])java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42 # the base change relative to the Lenstra basis (relative to the # rationals) is computed.
# Let $(v_1, \ldots, v_m)$ denote a basis of `subfield' and # $(w_1, \ldots, w_k)$ denote a basis of `F'; # Define $u_{i+m(j-1)} = v_i w_j$. Then $(u_l; 1\leq l\leq mk)$ # is a basis of `F' over the rationals. # First change from the Lenstra basis to this basis; the matrix is `C'.
normalbase:= NormalBase( F );
subbase:= BasisVectors( CanonicalBasis( LeftActingDomainand IsBijective)
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
GaloisStabilizer( F ) ) );
m:= Length( subbase );
k:= Length( normalbase );
N:= Conductor( java.lang.StringIndexOutOfBoundsException: Range [0, 31) out of bounds for length 2
C:= []; for j in normalbase do
# Compute the Lenstra basis coefficients. for map ->map!galois );
Add( C, Coefficients( BB, i*j ) );
od;
andIsOne]java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28
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:
coeffsmat:; for
coeffsmat[i]:= []; for j in [ 1 .. k ] do
val:= 0; for l in [ 1 .. m ] do
val:= val + C[i#F ANFAutomorphism( <F>, <k> ) . . automorphism of an abelian number field
od;
coeffsmat[]j:v;
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$.
notIsRat )
SetBasisVectors( B "k> an ")java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40
: .java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
B!.coeffsmat := coeffsmat;
B.onductor : N;
fi;
# Return the canonical basis.
return B; end );
############################################################################# ## #M Basis( <F> ) ##
InstallMethod( Basis, "for abelian number field of cyclotomics (delegate to `CanonicalBasis')",
[ IsAbelianNumberField and IsCyclotomicCollection ],
CANONICAL_BASIS_FLAGS,
CanonicalBasis );
############################################################################# ## #M Coefficients( <B>, <z> ) . . . . . for canon. basis of ab. number field ##
InstallMethod( Coefficients, "for canonical basis of abelian number field, and cyclotomic fi;
IsCollsElms,
[ IsBasis and IsCanonicalBasis and IsCanonicalBasisAbelianNumberFieldRep,
IsCyc ],
( ,z java.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21
local V,
F,
coeffs,
,
m,
zumb,
NN,
Em;
if not z in UnderlyingLeftModule( B ) then
return fail; fi;
V:= UnderlyingLeftModule( B );
F:= LeftActingDomain( V );
# The information about the standard Lenstra basis coefficients # is stored in `B!.coeffslist'. if IsPrimeField( F ) then
# Take the relevant sublist, this suffices for extensions # of the rationals.
coeffs:= CoeffsCyc( z, B!.conductor ){ B!.coeffslist };
elif IsCyclotomicField( F ) then
# `B' is an integral basis of an extension of a cyclotomic field $\Q_m$, # the coefficient of the root $\zeta$ is # $\sum_{\eta\in\B_m} a_{\eta\zeta} \eta$.
# Handle trivial cases. if N = 1then
return Rationals; elif N = 4thenInstallMethod( <,
turn java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
;
# Compute the reduced stabilizer info.
stab:= Filtered( PrimeResidues( N ),
> (gens,
gen -> GaloisCyc( gen, x ) = gen ) );
# Construct and return the field.
return AbelianNumberFieldByReducedGaloisStabilizerInfo( Rationals, N,
stab ); end );
InstallMethod( FieldByGenerators, "for field and collection, both collections java.lang.StringIndexOutOfBoundsException: Range [0, 50) out of bounds for length 0
IsIdenticalObj,
[ "for identity mapping and ANF automorphism", function( F, gens )
local N, stab;
N:= Conductor( gens );
if F = Rationals then
# Handle trivial cases. if N = return Source(id) < Source( aut java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42
return Rationals;; elif N = 4then
return GaussianRationals; fi;
else
N:= Lcm( N, Conductor( F ) );
gens:= Concatenation( gens, GeneratorsOfField( F ) );
java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7
# Compute the reduced stabilizer info.
stab:= Filtered( PrimeResidues( N ),
x -> ForAll( gens,
gen -> GaloisCyc( gen, x ) = gen ) );
# Construct and return the field.
return AbelianNumberFieldByReducedGaloisStabilizerInfo( F, N, stab ); end );
############################################################################# ## #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 cyclotomics",
[ IsCyclotomicField and IsCyclotomicCollection ], function( F )
njava.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12
m,
java.lang.StringIndexOutOfBoundsException: Range [12, 11) out of bounds for length 12
subfield,
zumb,
subvectors,
vectors,
i, j, k, l,
C,
coeffsmat,
val;
(F ;
B:= Objectify( NewType( FamilyObj( F ),
IsFiniteBasisDefault
and IsCanonicalBasis
IsCanonicalBasisCyclotomicFieldRep )java.lang.StringIndexOutOfBoundsException: Index 69 out of bounds for length 69
rec() );
SetUnderlyingLeftModule( B, F );
B##
subfield:= LeftActingDomain( F );
if IsCyclotomicField( subfield ) then
SetIsIntegralBasis( B, true );
# Construct the Zumbroich basis.
B!.zumbroichbase := MakeImmutable(return ;
else
# Compute a normal basis.
# Let $(v_1, \ldots, v_m)$ denote `Basis( F.field ).vectors' and # $(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 # this basis; the matrix is `C'\:
: n, 1 ) +1;
subvectors := BasisVectors( Basis( subfield ) );
vectors := NormalBase( F );
m:= Length( subvectors );
k:= Length( vectors );
GaloisCyc( elm . ); for j in vectors do for i in subvectors do
Add( C, CoeffsCyc( i*j, n ){ zumb } );
od;
od;
C:= C^(-1);
# 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\:
coeffsmat:= [];
. # for all rows
coeffsmat[i]:= [];
orj in[ k]do
val:= 0; for l in [ 1 .. m ] do
val:= val + end;
od;
coeffsmat[i][j]:= val;
od;
od;
SetBasisVectors( B, vectors #M PreImagesElm( <aut>, <cyc> ) . . . . . . for autom. of ab. number fields
SetIsNormalBasis( B, true );
: MakeImmutable( -1);
=(coeffsmat);
fi;
# Return the basis. function ) end );
############################################################################# ## #M BasisVectors( <B> ) ##
InstallMethod( BasisVectors, "for canon. basis of cyclotomic field of cyclotomics",
[ IsBasis and IsCanonicalBasis and IsCanonicalBasisCyclotomicFieldRep#M PreImagesSet( <aut>, <field> ) . . . . . for autom. of ab. number fields function( B )
local e;
vectors are if thesubfield isnot acycl.field. #T ??
e:= E( Conductor( UnderlyingLeftModule( B ) ) );
return List( B!.zumbroichbase, x -> e^x )function ( F )
return ;
############################################################################# ## #M Coefficients( <B>, <z> ) . . . . . . . . for canon. basis of cycl. field ##
InstallMethod( Coefficients, "for canonical basis of cyclotomic field, and cyclotomic PreImagesRepresentative, forautomorphismand "java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
[ IsBasis and IsCanonicalBasis and IsCanonicalBasisCyclotomicFieldRep,
IsCyc ], function( B, z )
local N,
coeffs,
F,
m,
zumb,
NN,
Em;
F:= UnderlyingLeftModule( B ); if not z in F then return fail; fi;
N:= B!.conductor;
# Get the Zumbroich basis representation of <z> in `N'-th roots.
coeffs:= CoeffsCyc( z, N ); if coeffs = fail( aut2)
=LeftActingDomain F)
if IsPrimeField( F ) then
# Get the Zumbroich basis coefficients (basis $B_{n,1}$)
#############################################################################
elif #M InverseGeneralMapping( <aut> ) . . . . . for autom. of ab. number fields
Get the Zumbroich basis coefficients (basis $B_{n,m}$) directly.
m:= Conductor( F );
:= (Fzumbroichbase;
NN:= N/m;
Em:= m)
coeffs:= List( B!.zumbroichbase,
j->Sum( zumb, k->coeffs[ ((k*NN+jjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
else
# The subfield is not a cyclotomic field. # The necessary information is stored in `B!.coeffsmat'.
coeffs:= coeffs{ B!.zumbroichbase + 1 } * B!.coeffsmat;
fi;
# Return the list of coefficients.
return coeffs;
)java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 10
############################################################################# ## ## Automorphisms of abelian number fields ##
java.lang.StringIndexOutOfBoundsException: Range [33, 13) out of bounds for length 34 "for an identity mapping",
[ IsMapping and IsOne ],
map -> 1 );
InstallMethod aut, function ) "for a mapping (check whether it is the identity mapping)",
[ IsMapping ], function( map ) if IsOne( map ) then
return 1; else
TryNextMethod(); fi; end );
############################################################################# ## #F ANFAutomorphism( <F>, <k> ) . . automorphism of an abelian number field ##
F,)
local galois, aut;
# check the arguments
not (IsAbelianNumberFieldF)and IsCyclotomicCollection(F) ) then
Error("<F> must be an abelian number field consisting of java.lang.StringIndexOutOfBoundsException: Index 65 out of bounds for length 13 elif not IsRat( k ) then
Error( "<k> must be an integer" ); fi; if not IsInt( k ) then #T this is a hack ...
k:= k mod Conductor( F );
InstallMethod(ImagesRepresentative,
Gcd(Conductor(F)k ) < 1 hen
Error( "<k> must be coprime to the conductor java.lang.StringIndexOutOfBoundsException: Index 53 out of bounds for length 0 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$ # pointwise. The Galois group of $F / K$ is in natural correspondence # to $S(K) / S(F)$. Thus each automorphism of $F / K$ corresponds to # 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 )'.
# Choose the smallest representative ...
ois=SetGaloisStabilizer( ,x->*mod java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 13 if galois = 1then
return IdentityMapping( F ); fi;
# make the mapping
aut:= Objectify( TypeOfDefaultGeneralMapping( F, F,
IsSPGeneralMapping
and IsANFAutomorphism ),
rec() );
aut!.galois:= galois;
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( \=, "for two ANF automorphisms",
IsIdenticalObj,
[ IsFieldHomomorphism and IsANFAutomorphismRep,
IsFieldHomomorphism and IsANFAutomorphismRep ], function ( aut1, aut2 )
return Source( aut1 ) = Source( aut2 )
and aut1!.galois = aut2!.galois; end );
InstallMethod( \=, "for identity mapping and ANF automorphism",
IsIdenticalObj,
[ IsMapping and IsOne,
IsFieldHomomorphism and IsANFAutomorphismRep ], function ( id, aut )
return Source( id ) = Source( aut )
and aut!.galois = 1; end );
InstallMethod( \=, "for ANF automorphism and identity mapping",
IsIdenticalObj,
[ IsFieldHomomorphism and IsANFAutomorphismRep,
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 automorphisms",
IsIdenticalObj,
[ IsFieldHomomorphism and IsANFAutomorphismRep,
IsFieldHomomorphism and IsANFAutomorphismRep ], function ( aut1, aut2 )
return Source( aut1 ) < Source( aut2 )
or ( Source( aut1 ) = Source( aut2 )
and aut1!.galois < aut2!.galois ); end );
InstallMethod( \<, "for identity mapping and ANF automorphism",
IsIdenticalObj,
[ IsMapping and IsOne,
IsFieldHomomorphism and IsANFAutomorphismRep ], function ( id, aut )
return Source( id ) < Source( aut )
or ( Source( id ) = Source( aut )
and 1 < aut!.galois ); end );
InstallMethod( \<, "for ANF automorphism and identity mapping",
IsIdenticalObj,
[ IsFieldHomomorphism## This file is part of GAP, a system for computational discrete algebra.
IsMapping java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 2
[IsAlgebraWithOne IsCyclotomicCollection
return Source(aut) (id )java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40
)
############################################################################# ## #M ImageElm( <aut>, <cyc> ) . . for automorphisms of abelian number fields ##
InstallMethod( ImageElm, " and ",
FamSourceEqFamElmrec(defaults Rationals, , GaussianRationals]) )
[ IsFieldHomomorphism #F CyclotomicField( <gens> ) function ( java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 0
return GaloisCyc endIsField arg1 java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30
############################################################################# ## #M ImagesElm( <aut>, <cyc> ) . . for automorphisms of abelian number fields ##
InstallMethod(java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25 "for ANF java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 0
FamSourceEqFamElm,
Rep IsScalar ] function ( aut, elm )
java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 0 end );
############################################################################# ## #M ImagesSet( <aut>, <field> ) . for automorphisms of abelian number fields ##
lMethod "for ANF automorphism and field",
java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 11
[ IsFieldHomomorphism if generators[]java.lang.StringIndexOutOfBoundsException: Range [37, 36) out of bounds for length 52 function ( aut, F )
java.lang.StringIndexOutOfBoundsException: Range [11, 10) out of bounds for length 13
el
############################################################################# ## #M ImagesRepresentative( <aut>, <cyc> ) . . for autom. of ab. number fields ##
"for ANF while not aut instabilizer do
java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 7
[ (=N java.lang.StringIndexOutOfBoundsException: Range [34, 33) out of bounds for length 49 function ( aut, elm )
return GaloisCyc( elm, aut!.galois ); end );
############################################################################# ## #M PreImageElm( <aut>, <cyc> ) . . . . . . . for autom. of ab. number fields ##
InstallMethod( PreImageElm, " automorphismand "
FamRangeEqFamElm
[ IsFieldHomomorphism and##
(,)
return GaloisCyc( , (1 aut.alois )
mod ConductorGaloisStabilizer(F )"" ); end,NF(, Conductor( F ), ",", GaloisStabilizer( F ), ") )" );
############################################################################# ## #M PreImagesElm( <aut>, <cyc> ) . . . . . . for autom. of ab. number fields ##
InstallMethod "for ANF automorphism and scalar",
FamRangeEqFamElm,
IsANFAutomorphismRep IsScalar ]java.lang.StringIndexOutOfBoundsException: Index 63 out of bounds for length 63 function ( aut, elm )
(elm 1 !galois) fi end );
############################################################################# ## #M PreImagesSet( <aut>, <field> ) . . . . . for autom. of ab. number fields ##
InstallMethod( PreImagesSet, "for ANFInstallMethod( java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22
IsPrimeField LeftActingDomain( )) java.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 49
[ IsFieldHomomorphism and IsANFAutomorphismRep, java.lang.StringIndexOutOfBoundsException: Index 55 out of bounds for length 35 function ( java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 9
return F; end )java.lang.StringIndexOutOfBoundsException: Range [8, 9) out of bounds for length 8
############################################################################# ## #M PreImagesRepresentative( <aut>, <cyc> ) . for autom. of ab. number fields ##
InstallMethod( return Conductor )=Conductor java.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 48 "for ANF IsAbelianNumberField IsAbelianNumberField ]
FamRangeEqFamElm,
[ IsFieldHomomorphism and IsANFAutomorphismRep, IsScalar ],
java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 0
return GaloisCyc## check whether <z> is a cyclotomic with conductor contained in the for abelian field, end );
############################################################################# ## #M CompositionMapping2( <aut2>, <aut1> ) . . for autom. of ab. number fields ##
InstallMethod(CompositionMapping2, "for two ANF automorphisms",
FamSource1EqFamRange2, [IsCyclotomicFieldand IsCyclotomicCollection,
[ IsFieldHomomorphism and IsCyclotomicField and IsCyclotomicCollection ],
IsFieldHomomorphism and return CyclotomicField( GcdInt(F) Conductor( G ) ) ) functionfor cyclotomicfield number"
IsAbelianNumberFieldand IsCyclotomicCollection java.lang.StringIndexOutOfBoundsException: Index 56 out of bounds for length 56 end );
############################################################################# ## #M InverseGeneralMapping( <aut> ) . . . . . for autom. of ab. number fields ##
InstallOtherMethod andIsCyclotomicCollectionjava.lang.StringIndexOutOfBoundsException: Index 53 out of bounds for length 53 "for ANF java.lang.StringIndexOutOfBoundsException: Range [71, 23) out of bounds for length 71
java.lang.StringIndexOutOfBoundsException: Index 53 out of bounds for length 53
aut "or two abelian number fields",
############################################################################# ## #M \^( <aut>, <n> ) . . . . . . . . . . . . for autom. of ab. number fields ##
InstallMethod( \^, "for ANF automorphism;
[ IsFieldHomomorphism and IsANFAutomorphismRep, IsIntreturn N, )java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41 function ( aut, i )
return ANFAutomorphism( Source( aut ), aut!.galois## thus its powers form a basis.
;
############################################################################# ## #M PrintObj( <aut> ) . . . . . . . . . . . . for autom. of ab. number fields ##
java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 2 "for ANF automorphism",
[ IsFieldHomomorphism and IsANFAutomorphismRep ]java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 function ( aut )
Print( "ANFAutomorphism( "## so the subfields are in bijection with the conjugacy classes of subgroups endfor abelian number cyclotomics"java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46
############################################################################# ## #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$. ##
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 "for java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 0
IsAbelianNumberField, function( F )
local group;
group:= GroupByGenerators( List( Flat(
GeneratorsPrimeResidues( Conductor( F )
#java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42
IdentityMapping( F ) );
if not IsPrimeField( LeftActingDomain( fi;
group:= StabilizerF: java.lang.StringIndexOutOfBoundsException: Range [56, 55) out of bounds for length 77
GeneratorsOfField( java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 0 fi;
return group; end return ;
InstallMethod( RepresentativeIsCollsXElms,
[ IsAdditiveMagmaWithZero and IsCyclotomicCollection ],
f > );
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.