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 );
# Replace generators by their conductor. if not IsInt( xtension ) then
xtension:= Conductor( xtension ); fi; if xtension mod 2 = 0 and xtension mod 4 <> 0then
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 ) <> 0then
Error( "<subfield> is not contained in CF( <xtension> )" ); fi;
else
Error( "<subfield> must be `Rationals' or an abelian number field" ); fi;
############################################################################# ## #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 <> 0then
N:= N / 2; fi; if N <= 2then
return rec( N:= 1, stabilizer:= [ 1 ] ); fi;
# 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] = 2then
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'; # 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 <= 2then
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 = 1then
return "Rationals"; elif n = 4then
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",
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 functionelse
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 )
if not IsSubset( F, coeffs ) then
Error( "all coefficients of <poly> must lie in <F> if IsPrimeField( LeftActingDomain( F ) ) then elif3 <Length( coeffs ) then
TryNextMethod(); elif Length( coeffs ) <= 1then
Error("<oly must have degree at least 1" ); elif Length( coeffs ) = 2then
# `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 = 1then
return#M PrimeField( <F> ) . . . . . . . . . . . . . . for an abelian number field fi;
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!
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 # 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 = 0do
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 = 1then
Add( H1, k ); elif ( k -1 ) mod No = 0
N2 00 (k 2)mod N2 = then
a:= k; fi;
od; if a = 0then
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 = 0then d:= d * i; fi;##
od;
if ( a = 0 ) or ( ord mod 8 = 0 )# *Note* that for $n \equiv 2 \bmod 4$ we have
# 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 mod40then
# `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 [ >0then
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;
# 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 );
# Handle trivial cases.## if N = 1 "for abelianumber ofcyclotomics"
return Rationals; elif N = 4then
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 = 4then#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 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 ##
############################################################################# ## #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
¤ Diese beiden folgenden Angebotsgruppen bietet das Unternehmen0.75Angebot
¤
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.