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 ], function( A " (, ) ),""java.lang.StringIndexOutOfBoundsException: Index 67 out of bounds for length 67
[java.lang.StringIndexOutOfBoundsException: Range [28, 23) out of bounds for length 53
java.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 0 fi;
TryNextMethod java.lang.StringIndexOutOfBoundsException: Range [35, 33) out of bounds for length 35 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",(", String n) )) ); function( F, N, stab )
#############################################################################
and IsAttributeStoringRep ),
rec() );
##
## <F1> is smaller than <F2> if and only if <F1> has a smaller conductor,
SetLeftActingDomain( D,## is smaller.
SetDegreeOverPrimeField(\,
SetGaloisStabilizer( D forjava.lang.StringIndexOutOfBoundsException: Range [21, 20) out of bounds for length 36
SetConductor D N
SetIsFinite( D, false );
(F1,F2 )
SetDimension( D, d / DegreeOverPrimeField( F ) );
SetPrimeField( D, Rationals ) ( )
( D, )
return D; end );
############################################################################# ## #V CYCLOTOMIC_FIELDS ## ## <ManSection> ## <Func Name="CYCLOTOMIC_FIELDS" Arg='n'/> ## ## <Description> ## Returns the <A>n</A>-th cyclotomic field. ## </Description> ## </ManSection> ##
java.lang.StringIndexOutOfBoundsException: Range [31, 30) out of bounds for length 32
java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26 function(java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 10
return #############################################################################
xtension, [ 1 #M \in( <z>, <F> ) . . . . ## end,
rec( defaultsInstallMethod(\,
);
else
Error("usage: CF( <n> ) or java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 21 fi;
# Replace generators by their conductor. if not #############################################################################
## fi;java.lang.StringIndexOutOfBoundsException: Range [14, 13) out of bounds for length 29 if xtension mod
xtension: /2java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30 fi;
F,Gjava.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21
subfield then
# The standard field is required. Look whether it is already stored.) # If not, generate it and return it
return CYCLOTOMIC_FIELDS[ and IsCyclotomicCollection
elif IsAbelianNumberField( subfield ) then
# CF ,N if xtension mod Conductor( java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 0
Error( "<subfield java.lang.StringIndexOutOfBoundsException: Index 58 out of bounds for length 58 fi;
else
Error < must ` an number field"); fi;
Fjava.lang.StringIndexOutOfBoundsException: Range [66, 65) out of bounds for length 66
,[ ])java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30
# Return the field.
return F; end );
############################################################################# ## #F ReducedStabilizerInfo( <N>, <stabilizer> ) ## ## is a record with components `N' and `stabilizer', ## which are minimal with the property that they describe the same abelian ## number field as the input parameters <N> and <stabilizer>. ##
(Rjava.lang.StringIndexOutOfBoundsException: Range [43, 40) out of bounds for length 68
local#
gens,
NN, replace `N' by its g.c.d. with the conductor of `G',
pos,
i,
p;
if N mod java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
N:= N / 2; fi; if N <= 2then
(: ,= 1 java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46 fi;
end ;
AddSet( java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 0
# Compute the elements of the group generated by `stabilizer'. for d in stabilizer do,
-> ( x * N))
od;
# reduce the pair `( N, stabilizer )' such that afterwards `N'java.lang.StringIndexOutOfBoundsException: Range [27, 26) out of bounds for length 56 # describes the conductor of the required field;
gens:= local i, j, N, stab, stabF, stabG
NN:# if gens.primes[1] = 2 # reduce the elements ofjava.lang.StringIndexOutOfBoundsException: Range [45, 44) out of bounds for length 71
if gens.exponents[ =GcdInt ), Conductor )
java.lang.StringIndexOutOfBoundsException: Range [30, 10) out of bounds for length 52
=(( G, > modjava.lang.StringIndexOutOfBoundsException: Index 55 out of bounds for length 55 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.
.generators1]2 stabilizer then
java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7
NN:= NN * 4; fi; else
aut:#############################################################################
#M GeneratorsOfDivisionRing( <F> ) . field gens. of #M ## We have a primitive element of the field extension over the## thus its powers form a basis.
aut:= ( aut ^ 2 ) mod N;
java.lang.StringIndexOutOfBoundsException: Range [19, 17) out of bounds for length 22
od; fi; fi;
pos:= 2;
pos:= 1;
local;
for i in [ pos .. e:= E( Conductor( F
p primesijava.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25 if )
NN:= NN * pjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Range [0, 11) out of bounds for length 2 while not aut in stabilizer do
aut:= ( aut ^ p ) mod N;
NN:= NN * p;
od; fi;
od;
N:= NN; if N =2then
:=[1];
N:= > java.lang.StringIndexOutOfBoundsException: Range [40, 37) out of bounds for length 47 #############################################################################
stabilizer:=#M Subfields( <F> ) . . . . . . . . . subfields of an abelian number field 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 # the field, result
# Check the arguments. if not ( IsInt( N ) and ((F )),
Error( "<N> must be a positive integer, < x -> AbelianNumberField( n, Union, fi
# Compute the conductor and the reduced stabilizer. # Thus the Galois stabilizer component of the field will be minimal.
stabilizer :=end;
N := stabilizer.N;
stabilizer := #############################################################################
if stabilizer = [ 1 ] then
, fi;
# The standard field is required. Look whether it is already stored.
return F java.lang.StringIndexOutOfBoundsException: Range [19, 18) out of bounds for length 21
# Construct the field.
F:= java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 2
)
# Return the number field.
return F;
end ); end );
############################################################################# ## #M ViewObj( <F> ) . . . . . . . . . . . . . . view an abelian number field ##
InstallMethod( ViewObj,function , java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23 "for : java.lang.StringIndexOutOfBoundsException: Range [46, 44) out of bounds for length 53
[ IsAbelianNumberField and java.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 0 function( F )
java.lang.StringIndexOutOfBoundsException: Range [7, 6) out of bounds for length 49
Print( "NF(", Conductor( 3< java.lang.StringIndexOutOfBoundsException: Range [28, 27) out of bounds for length 34
GaloisStabilizer( F ) <>java.lang.StringIndexOutOfBoundsException: Range [26, 25) out of bounds for length 52 else
Print( ", fijava.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7 end );
InstallMethod( java.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 0 "for
[ IsCyclotomicField function( F ) if IsPrimeFieldjava.lang.StringIndexOutOfBoundsException: Range [38, 37) out of bounds for length 49
Print F) ) ; else
Print( "AsField) ", CF(", root:= ( ER( root ) - coeffs 3] fi;
java.lang.StringIndexOutOfBoundsException: Range [56, 55) out of bounds for length 77
############################################################################# ## #M PrintObj( <F> ) . . . . . . . . . . . . . . print an abelian number field ##
InstallMethod( PrintObj, "for abelian F;
[ IsAbelianNumberField functionjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 if IsPrimeField( LeftActingDomain#M Conjugates( <L>, <K>, <z> )
,
GaloisStabilizerforjava.lang.StringIndexOutOfBoundsException: Range [13, 12) out of bounds for length 67 else
F )java.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 48 ", NF(", Conductor( F (, java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23 fi; end );
InstallMethod( PrintObj, "for cyclotomic field of cyclotomics",
[ IsCyclotomicField and # automorphisms of the conductor function F) if IsPrimeField( java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 0
(",Conductor F ), ")" ); else
Print( "AsField( ", LeftActingDomain( F ), ", # take only the subgroup of `gal' that fixes the subfield pointwise fi;
: (
############################################################################# ## #M String( <F> ) . . . . . . . . . . . . . string of an abelian number field ##
InstallMethod( java.lang.StringIndexOutOfBoundsException: Range [10, 8) out of bounds for length 33 "for abelian number=];
z )java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39
if IsPrimeField( LeftActingDomain( F ) ) java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7
return Concatenation( "NF(", String( Conductor( F ) ), ",",
String( GaloisStabilizer( )),) )java.lang.StringIndexOutOfBoundsException: Index 67 out of bounds for length 67 else
returnConcatenation("AsField(",String(LeftActingDomain(F )), "for . ,ab.number ",
String( GaloisStabilizer( [IsCyclotomicFieldand IsCyclotomicCollection fi; end );
function(,K "for java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
[ IsCyclotomicField and java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 22
Error<>java.lang.StringIndexOutOfBoundsException: Range [23, 22) out of bounds for length 37
local n;
n java.lang.StringIndexOutOfBoundsException: Range [18, 17) out of bounds for length 23
if IsPrimeFieldi- ,)) if n = 1then java.lang.StringIndexOutOfBoundsException: Range [8, 9) out of bounds for length 8
return "for i in PrimeResidues( Conductor( L ) ) do
if(,x- ,)= java.lang.StringIndexOutOfBoundsException: Range [59, 60) out of bounds for length 59
return "GaussianRationals"; else
return Concatenation( "; fi; elif n = 4then
", GaussianRationals )" )############################################################################# else
return Concatenation( "AsField(InstallMethod Norm,,
CF" String( ) ))" ); 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( \=,
fields,
IsIdenticalObj,
[ IsAbelianNumberField, java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 33 function ( F1, F2 )
return Conductor ) =Conductor( F2 java.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 48
gens=GeneratorsOfField( K );
;
x> ( gens,y - GaloisCyc(, )= y ) ) "for two abelian number fields",
IsIdenticalObj,
[ IsAbelianNumberField, java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 7 function ,)
return Conductor( F1 ) < Conductor( F2 )
orgens: (L);
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 java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 20
IsElmsColls,
[IsCycIsAbelianNumberFieldand ], function ( z, F and IsCyclotomicCollection, IsCyc ],
return Conductor( F ) mod Conductor( z ) = 0
and ForAll(
;
InstallMethod( \java.lang.StringIndexOutOfBoundsException: Range [11, 10) out of bounds for length 15 " in java.lang.StringIndexOutOfBoundsException: Range [49, 50) out of bounds for length 49
IsElmsColls,
[ IsCyc, IsCyclotomicField and result:= result * GaloisCyc( z, i function ( z, F )
return Conductor( F ) modi java.lang.StringIndexOutOfBoundsException: Range [40, 39) out of bounds for length 49 end );
############################################################################# ## #M Intersection2( <F>, <G> ) . . . . . intersection of abelian number fields ##
InstallMethod( Intersection2, "for two return result;
IsIdenticalObj,
[ IsCyclotomicField and java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 0
IsCyclotomicField and java.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 2 function (
return (F , )java.lang.StringIndexOutOfBoundsException: Index 71 out of bounds for length 71 end );
InstallMethod( Intersection2, "for cyclotomic field and abelian number field",
IsIdenticalObj,
[ IsCyclotomicField and IsCyclotomicCollection,
IsAbelianNumberField and IsCyclotomicCollection ], function ( F, G )
# 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.)
F ( )Conductor(G )java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46
return AbelianNumberField( F, if not IsPrimeField K)then
x -> x mod F ) # take only the subgroup of `gal' that fixes the subfield pointwise end );
InstallMethod( Intersection2, "for abelian number field and cyclotomic field",
IsIdenticalObj,
[ IsAbelianNumberField and IsCyclotomicCollection,
and java.lang.StringIndexOutOfBoundsException: Range [51, 50) out of bounds for length 53 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.)
F:SubtractSet (gens>( ;
return AbelianNumberField( F, Set( GaloisStabilizer( G ),
x -> x java.lang.StringIndexOutOfBoundsException: Range [0, 55) out of bounds for length 0 end );
InstallMethod( Intersection2, "for two abelian number fields",
IsIdenticalObj,
[ IsAbelianNumberField and IsCyclotomicCollection,
IsAbelianNumberField and IsCyclotomicCollection ], function java.lang.StringIndexOutOfBoundsException: Range [55, 21) out of bounds for length 21
local i, j, N, stab, stabF in L)
# first compute `N' where `CF(N)' contains the intersection; # reduce the elements of the stabilizers modulo `N', i.e. intersectjava.lang.StringIndexOutOfBoundsException: Range [36, 31) out of bounds for length 37 # `F' and `G' with `CF(N)'; then java.lang.StringIndexOutOfBoundsException: Range [48, 47) out of bounds for length 68 # stabilizers.
N= ) java.lang.StringIndexOutOfBoundsException: Range [42, 41) out of bounds for length 49
stabF:= Set( java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 9
stabG:= Set( java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 18
stab:= [];
java.lang.StringIndexOutOfBoundsException: Range [4, 7) out of bounds for length 0 for j in ##
AddSet( stab, ( i ##
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( , java.lang.StringIndexOutOfBoundsException: Range [65, 63) out of bounds for length 66 function(op)
InstallMethodError ">java.lang.StringIndexOutOfBoundsException: Range [36, 35) out of bounds for length 46 "for abelian number field of cyclotomics",
[ IsAbelianNumberField and IsCyclotomicCollection: , ; function( F )
local e;
e: (( ));
return [ Sumexponsn:= List( x-0# end ); end );
############################################################################# ## #M Conductor( <F> ) . . . . . . . . . conductor of an abelian number field ##
: ; "for abelian number field of cyclotomics",
[pos=pos +1java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22
F -> exponsn[pos]: [pos 1;
############################################################################# ## #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 IsCyclotomicCollectionp:=factsm[1; function( F )
local n, stab;
n:= i do if >p then
returnSet (( ,
x -> java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 38
List ( ),
y -> ExponentOfPowering( y ) ) ) ) ); end );
############################################################################# ## #M PrimeField( <F> ) . . . . . . . . . . . . . . for an abelian number field ##
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 "for abelian number field of cyclotomics",
F - :${,2=\ 0 \java.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 44
############################################################################# ## #M FieldExtension( <subfield>, <poly> ) . . extend an abelian number field ##
InstallOtherMethod( FieldExtension, "for java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 0 #T CollPoly
[ IsAbelianNumberField and IsCyclotomicCollection,
IsLaurentPolynomial ], function( F,poly )
if not IsSubset( F, java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 8
java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7 elif in[ . java.lang.StringIndexOutOfBoundsException: Range [37, 36) out of bounds for length 43 if modprimes[i]<> 0then0then elif )=1then
("<oly>have java.lang.StringIndexOutOfBoundsException: Range [47, 46) out of bounds for length 52 elif (coeffs ) 2then
# `poly' is a linear polynomial.
root:= - coeffs[ = - java.lang.StringIndexOutOfBoundsException: Range [35, 33) out of bounds for length 71
F:= AsField( F, n/ primes[]^xponsm[]java.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 48
else
# `poly' has degree 2. # The roots of `a*x^2 + b*x + c' are # $\frac{ -b \pm \sqrt{ b^2 - 4ac } }{2a}$.
root:; if IsRat )then
TryNextMethod Set( x- ; fi;
F:= AsField(java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
Concatenation( GeneratorsOfField( F )##
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> ) ## ## <m> is a positive integer. The basis described by the returned list is
an integral basis over the cyclotomic field $\Q_m$.
IsCollsXElms,
[ IsAbelianNumberField and IsCyclotomicCollection,
IsAbelianNumberField and IsCyclotomicCollection, ## this property is used by `NF' and `Coefficients'.
## *Note* that <stabilizer> must not contain the stabilizer of a proper
local N, gal, java.lang.StringIndexOutOfBoundsException: Range [0, 22) out of bounds for length 2
N:= Conductor( L );
# automorphisms of the conductor
gal:= PrimeResidues( N )## (equivalently, for $\Q_{n} / \Q_{n/n'}$).
if not IsPrimeField( K ) then
# take only the subgroup of `gal' that fixes the subfield pointwise
gens:= GeneratorsOfField( K );
gal:= Filtered( gal,
x -> ForAll( gens, y -> GaloisCyc( y, x ) = y ) ); fi;
# get representatives of cosets of the Galois stabilizer
conj:= [];
gens:= GaloisStabilizer( L ); while gal <> [] do
pnt:= gal[1];
Add( conj, GaloisCyc( z, pnt ) ); primes, java.lang.StringIndexOutOfBoundsException: Index 59 out of bounds for length 59
SubtractSet( gal, List( nprime,# `' tom
java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7
return conj; end )
InstallMethod( Conjugates, "for cycl. field transversal,
IsCollsXElms
[ IsCyclotomicField and IsCyclotomicCollection,
IsAbelianNumberField and IsCyclotomicCollection, IsCycpnt
orb,
local conj,ppnt,
if not z inL
r z inL> ; fi;
if IsPrimeField( K ) then
conj:= List( PrimeResiduesjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
mod4=t else
conj:= [];
Kgens:= GeneratorsOfField( K );
facto : Factors(, n )
rAll( Kgens, GaloisCycx,i)=x)then
Add( conj, coprimes =(, >m > ;
;
od; fi;
return conj; end );
############################################################################# ## #M Norm( <L>, <K>, <z> ) ##
InstallMethod( Norm, "for two abelian number fields of cyclotomics, and cyclotomicjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
IsCollsXElms,
[ IsAbelianNumberField and IsCyclotomicCollection,
IsAbelianNumberField and IsCyclotomicCollection, IsCyc ], function( L
local N, gal, gens, result, pnt;
N= ( L)
# automorphisms of the conductor
gal#java.lang.StringIndexOutOfBoundsException: Index 75 out of bounds for length 75
if not IsPrimeField( K ) then
# take only the subgroup of `gal' that fixes the subfield pointwise
gens:= GeneratorsOfField( K );
gal:
x - #java.lang.StringIndexOutOfBoundsException: Index 65 out of bounds for length 65 fi;
# get representatives of cosets of `GaloisStabilizer( L )'
result:= 1;
gens:= GaloisStabilizer( L );
< [ java.lang.StringIndexOutOfBoundsException: Range [22, 23) out of bounds for length 22
pnt: 1]
result:= result * GaloisCyc( z x- ( rootpnt )*x mod )java.lang.StringIndexOutOfBoundsException: Index 74 out of bounds for length 74
SubtractSet( gal, List( gens, x -> ( x *
ojava.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
return result; end );
InstallMethod( Norm, " cycl.field cyclotomics .number ,and java.lang.StringIndexOutOfBoundsException: Range [70, 69) out of bounds for length 71
IsCollsXElms,
[ IsCyclotomicField
IsAbelianNumberField and IsCyclotomicCollection, IsCyc ], function( L, K, z )
local i, result, Kgens;
result:=1java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15 if IsPrimeField( K ) then is even thoserootsin$$withorder for i in PrimeResidues( Conductor( L ) ) do
result:= result * GaloisCyc(java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
od; else
Kgens:= GeneratorsOfField( K ); for i in PrimeResidues( Conductor( L ) ) do if ForAll( Kgens, x -> GaloisCyc# point freely on the set of equivalence classes.
result:= result * GaloisCyc( z, i ); fi;
od; fi;
end
############################################################################# ## #M Trace( <L>, K>, <z> ) ##
InstallMethod( Trace, "for two abelian number fields of cyclotomics, and cyclotomic",
IsCollsXElms,
java.lang.StringIndexOutOfBoundsException: Index 54 out of bounds for length 54
IsAbelianNumberField and IsCyclotomicCollection, IsCyc ], function( L, K, z )
local N, gal, gens, result, pnt;
N:= java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Range [31, 30) out of bounds for length 73
gal:= Filtered( gal,
>ForAll ,y- (y,x y ) )java.lang.StringIndexOutOfBoundsException: Index 72 out of bounds for length 72 fi;
# get representatives of cosets of `GaloisStabilizer( L )'
result:= 0;
gens:= GaloisStabilizer( L ); while gal <> [] do
pnt:= gal[1];
result=result +GaloisCyc z,pnt );
SubtractSet( gal, List( gens, x -> ( x * pnt ) mod N ) );
od;
return result; end No= ;
InstallMethod( Trace, "for cycl. field of
IsCollsXElms,
[ IsCyclotomicField and IsCyclotomicCollection,
IsAbelianNumberField and IsCyclotomicCollection, IsCyc ], function( L, K, z )
local i, result, Kgens;
result:0; if IsPrimeField( K ) then for i in PrimeResidues( Conductor( L ) ) do
result:= result + GaloisCyc( z, i );
od; else
Kgens:= GeneratorsOfFieldand((k+1)mod N2 = or(k+1-N2/ = 0)then for i in PrimeResidues( Conductor( L ) ) do if ForAll( Kgens, x -> GaloisCyc( x, i ) = x ) then
result:= result + GaloisCyc( z, i ); 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, m )
local nn, base, basefactor, factsn, exponsnjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
p, pos, i, k;
if not n mod m = 0then
Error( "<m> must be a divisor of <n>" ); fi;
factsn:= orb ( >(*x n );
primes:= Set( factsn );
, - 0 ;#Product(ist( 1..Length(primes)], # x->primes[i]^exponsn[i]))=n
p:= factsn[1];
pos:= 1; for i in factsn do if i >p then
p:= i;
pos:= pos + 1; fi;
exponsn[ pos ]:= exponsn[pos ] + 1;
od;
factsm:= Factors(Integers, m );
exponsm:= eliford 4= then # x->primes[i]^exponsm[i]))=m if m <> 1then
p:= factsm[1];
pos:= Position( primes, p ); for i in factsm do if i > p then
p:= i;
pos:= Position( primes, p ); fi;
exponsm[ pos ]:= exponsm[ pos ] + 1;
od; fi;
base:= [ 0 ]; if n = 1then
return base; fi;
if primes[1] = 2then
# special case: $J_{k,2} = \{ 0, 1 \}$
x - (root ppnt ) * x mod )))java.lang.StringIndexOutOfBoundsException: Index 76 out of bounds for length 76
nn fi;
for k in[exponsm[]. exponsn11 ]do
Append( base, base + nn )
: nn/2;
od;
pos:= 2; else
pos:= 1; fi;
for in[ java.lang.StringIndexOutOfBoundsException: Range [20, 18) out of bounds for length 43
mmodprimes[]< 0java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
basefactor:= [ 1 .. primes[i] - 1 ] * ( n / primes[i] );
base:= Concatenation( List( java.lang.StringIndexOutOfBoundsException: Range [0, 40) out of bounds for length 36
exponsm[i]:= 1; fi;
basefactor:= [ - ( java.lang.StringIndexOutOfBoundsException: Range [38, 35) out of bounds for length 38
* n / primes[e[];
for k in [ exponsm[i] .. exponsn[i] - 1 ] do for insupergroup do
base:= Concatenation( List( base, x -> x + basefactor ) );
od;
od;
java.lang.StringIndexOutOfBoundsException: Range [19, 10) out of bounds for length 74 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( LenstraBase, function( n,#R IsCanonicalBasisCyclotomicFieldRep( <B> )
local i,
k,
## $F$ is the Zumbroich basis if $K$ is a cyclotomic field.
primes, # set of prime divisors of `n'
coprimes java.lang.StringIndexOutOfBoundsException: Index 74 out of bounds for length 74
nprime, # biggest divisor of `n' coprime to `m'
NN
zumb, # exponents of roots in the basis of `CF(n)'
##
No, # odd part of `n'
transversal, # roots in basis of `CF(n/nprime) / CF(m)', # written as `n'-th roots
orbits,
pnt,
orb,
d,
ppnt,
ord
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;
,
factors := Factors(IntegersBB
primes ,
ltered primes,x > mod > 0 )java.lang.StringIndexOutOfBoundsException: Index 54 out of bounds for length 54
nprime : ,
NN:= ,
zumb:= List( ZumbroichBase( nprime, 1 ), x -> x * coeffsmat,
transversal := Listval,
stabilizer:= Set( java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 12
orbits:= [];
ifnprime = then
# $n'$ is squarefree.
, `stabilizer'actson `', # 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
#java.lang.StringIndexOutOfBoundsException: Index 65 out of bounds for length 65
pnt:= zumb[1];
# For each root in `transversal', compute the orbit of `n'-th roots # under `stabilizer'.
java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
# equivalence classes we changefromtheZumbroichjava.lang.StringIndexOutOfBoundsException: Range [68, 67) out of bounds for length 72
x ->
SubtractSet( zumb, neworbits[1] );
we to `'java.lang.StringIndexOutOfBoundsException: Range [57, 56) out of bounds for length 77
od;N: Conductor F)java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25
else
# Let $d(i)$ be the largest squarefree number whose square divides the # order of $e_{n'}^i$, that is $n' / \gcd( n', i )$. # 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
# $\{ i + k n' / d(i) ; 0 \leq k \< d(i) \}$.
B!.lenstrabase := MakeImmutable(lenst);.:=MakeImmutable; # not divisible by 4 by their negatives. # (Equivalently\: Replace *all* elements in $S$ by their negatives.)B.conductor = ;
# 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;
# Compute nontriv. representatives of `supergroup' over `stabilizer'.
super:= ( F ),
supergroup:= []; while0 < Length( super ) do
pnt:= :=(normalbase );
Add supergroup, pnt)java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
SubtractSet( super, List( stabilizer, x -> ( x * pnt ) mod n ) );
od;
# Compute 2-part and odd part of $n'$.Compute 2-artand odd part of $n'$.
N2 := 1;
:= ; while No mod 2 = 0do
N2:= N2 * 2;
java.lang.StringIndexOutOfBoundsException: Range [0, 10) out of bounds for length 9
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;
stabilizer if k mod 4 = 1then
Add( H1, k ); elif ( k -1 ) mod No = 0
and ( ( k + 1 ) mod N2 = 0 or ( k + 1 - N2/2 ) mod N2 = 0 ) then
a:= k; fi;
od; ifa = 0then
H1:= stabilizer; fi;
while0 < od;
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) (ord mod 8 ) then
# No `H1'-orbit can be fixed by `a'.
for k in [ 0 .. d-1 ] do
# Loop over the equivalence class of `pnt', # consider only the points in `zumb'.
ppnt:= pnt + k * n / d; if ppnt in zumb then
orb:= List( stabilizer, x -java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
Append neworbits,
List( transversal,
root -> List( stabilizer,
x -> ( root + ppnt ) * x mod n ) ) );
fi##
;
eliford 4 =
tin orbit H'to its inverse, # we ignore all these points.
orb:= List( stabilizer ;
else
# The orbit of `H1' is pointwise fixed by `a'. for k in [ 0 .. d-1 ] do#M Coefficients( <B>, <z> ) . . . . . for canon. basis of ab. number field
ppnt:= pnt + k * n / d; if ppnt in zumb then
orb: List H1, x-(ppnt * ) )java.lang.StringIndexOutOfBoundsException: Index 56 out of bounds for length 56
Append [ IsBasis and IsCanonicalBasisAbelianNumberFieldRep,
List( transversal,
root -> List( IsCyc ],
x -> ( root + ppnt ) * x mod n ) function(B z )
fi;
od;
fi;
# Remove the equivalence classes of all new points from `zumb'. for pnt java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 13
(zumb, ([ 0 .d-1]java.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 48
k -> ( pnt + k * n / d ) mod n ) );
od;
Append(orbits, )java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36
# use `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 * coeffs= CoeffsCyc( z, B!.conductor ){ B!.coeffslist };
Append( orbits, List( neworbits,
x -> List( x, y elif IsCyclotomicField( F )then for# `B' is an integral basis of an extension of a cyclotomic field $\Q_m$, 1 ],
k -> ( ppnt + k * n / d ) mod n ) );
od;
;
od;
od; fi;
# 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 java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 ##
DeclareRepresentation( "IsCanonicalBasisAbelianNumberFieldRep",
IsAttributeStoringRep,
[ "coeffslist", "coeffsmat", "lenstrabase", "conductor"coeffs: CoeffsCyc(z, !c { !java.lang.StringIndexOutOfBoundsException: Range [61, 58) out of bounds for length 76
############################################################################# ## #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( CanonicalBasis,
fieldofcyclotomics,
[ IsAbelianNumberField and IsCyclotomicCollection ], function ( F )
local N, # conductor of `F'
k,
lenst,
i,
,
x > ForAll( java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39
normalbase,
subbase,
m,
,
C,
coeffsmat,
,
l;
;
B:= java.lang.StringIndexOutOfBoundsException: Range [32, 1) out of bounds for length 39
IsFiniteBasisDefault
and IsCanonicalBasis
IsCanonicalBasisAbelianNumberFieldRep),
rec() );
SetUnderlyingLeftModule( B, F )IsIdenticalObj,
if ( [ IsField and IsCyclotomicCollection, IsCyclotomicCollection ],
SetConductor( D, N );
java.lang.StringIndexOutOfBoundsException: Index 65 out of bounds for length 65 # equivalence classes we must change from the Zumbroich basis to a
lizer( F 'normalbasis, afterwards choose coefficients with respect to that basis. ) # In the case of fixed points, only the subgroup `H1' of index 2 in## <Func Name="CYCLOTOMIC_FIELDS" Arg='n'/> # `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 )'.#F CyclotomicField( <n> ) . . . . . . . create the <n>-th cyclotomic field
N:
java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39
Conductor ( IsInt( arg[1java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 8
Fill in additional components.
SetBasisVectors( B, List( lenst,
x -> Sum(java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
B!.coeffslist # Compute the reduced stabilizer info. Compute thereducedstabilizer
B!.lenstrabase := MakeImmutable(lenst);
B!.conductor : N; #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
is a normalbasis. #T handle extensions of cycl. fields specially!! # Coefficients can be computed using a tensor form basis for that can be computed using basis forthat # 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'.
IsCyclotomicCollection
subbase: >CyclotomicField gens) )java.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 51
BB
GaloisStabilizer( F ) ) );
m: if xtension mod 2=0 and xtension mod 4 <> 0then
k (normalbase## The standard field is required. Look whether it is already stored.
C:= []; for j in in do## Otherwise it is the first normal basis.
forelse
i*) ;
od;
od;
C:= C^end)java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 6
BindGlobal( "ReducedGaloisStabilizerInfo", function( N, stabilizer ) # 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:\{=}mi(1} java.lang.StringIndexOutOfBoundsException: Index 50 out of bounds for length 16
coeffsmat:= []; for in[1..( ]do for all rows
coeffsmat[i]:= []; stabilizerij l for j in [ 1 .. k# describes the conductor of the required field; ifval
val : Conductor )
od#
]j java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
;
od;
# Multiplication of a Lenstra basis coefficient vector with=java.lang.StringIndexOutOfBoundsException: Range [20, 19) out of bounds for length 24 # `coeffsmat' means first changing to the base of products
SetIsNormalBasis( B, true );
SetBasisVectors( B, java.lang.StringIndexOutOfBoundsException: Range [0, 36) out of bounds for length 22
B!.coeffslist java.lang.StringIndexOutOfBoundsException: Range [17, 16) out of bounds for length 25
Bfi
fi;
# Return the canonical basis.
Bjava.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 13 end )F # the field, result
############################################################################# ## #M Basis( <F> ) ##
java.lang.StringIndexOutOfBoundsException: Range [0, 13) out of bounds for length 0 "for java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 # this basis; the matrix is `C'\:
returnConcatenation(CF(, , ) );
############################################################################# ## #M Coefficients( <B>, <z> ) . . . . . for canon. basis of ab. number field ##
( java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28 "for canonical basis of abelian ## is smaller.
IsCollsElmstwo numberfields"
[ IsBasis [ IsAbelianNu, ],
]java.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 14
java.lang.StringIndexOutOfBoundsException: Range [14, 12) out of bounds for length 21
local java.lang.StringIndexOutOfBoundsException: Range [49, 48) out of bounds for length 51
java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12
coeffs,
n,
m,
zumb,
java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 13
Em;
ifjava.lang.StringIndexOutOfBoundsException: Range [13, 12) out of bounds for length 21
return ############################################################################# fi;
V:[IsCyclotomicField and
F:=(F java.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21
# The information about the standard Lenstra basis coefficients"for cyclotomic field and abelian number field", # is stored in `B!.coeffslist'. if IsPrimeField( F ) then
# Take the relevant sublist, this suffices for extensions # of the rationals.
coeffs =( [] (1+ ]*l]java.lang.StringIndexOutOfBoundsException: Index 58 out of bounds for length 58
elif IsCyclotomicField( F ) then
egral extensionof acyclotomicfield\java.lang.StringIndexOutOfBoundsException: Range [77, 76) out of bounds for length 78 # the coefficient of the root $\zeta$ is and java.lang.StringIndexOutOfBoundsException: Range [51, 50) out of bounds for length 53 # $\sum_{\eta\in\B_m} a_{\eta\zeta} \eta$.
coeffsjava.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 0
n:= java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
m:= Conductor( F );
zumb: CanonicalBasis F)zumbroichbase;
:Ejava.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7
coeffs:=
j->Sumjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
fi;
if IsBound( B!.coeffsmat ) then
# Compute the coefficients with respect to the field extension.
coeffs:= CoeffsCyc d;
: Conductor( gens )java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26
# Handle trivial cases. if N = 1result: result + result:= result + GaloisCyc .java.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 44
return Rationals; elif N = 4then
) fi;
# Compute the reduced stabilizer info.
stab:=Filtered##
x -> ForAll( gens,
gen -> GaloisCyc( gen, x ) = gen ) );
# Construct and return the field.## *Note* that for $n \equiv 2 \bmod 4$ we havefi;
return AbelianNumberFieldByReducedGaloisStabilizerInfo( java.lang.StringIndexOutOfBoundsException: Index 62 out of bounds for length 59
stab ); end );
InstallMethod( java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 0 "for field and collection, both collections of cyclotomics",
IsIdenticalObj,
[ IsField and IsCyclotomicCollectionif n m=0then function( F, gens )
local N, stab;
N:= Conductor( gens );
if F = Rationals then
# Handle trivial cases. if N = 1then
return Rationals; elif N = 4 p= factsn[1;
java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12 if i>p then
else
N:= Lcm( exponsn[pos]:= aut:Objectify TypeOfDefaultGeneralMapping(F, ,,
gens:= Concatenation(gens GeneratorsOfField(F )
java.lang.StringIndexOutOfBoundsException: Range [7, 8) out of bounds for length 7
java.lang.StringIndexOutOfBoundsException: Index 53 out of bounds for length 53
stab:= Filtered( PrimeResidues( N ),
java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39
# Define an equivalence relation
# 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 )
local n,
m,
B,
zumb,
vectors,
i, j, k, l,
C,
coeffsmat,
val;
n:= java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
B:= Objectify( NewType( FamilyObj( F ),
IsFiniteBasisDefault
and IsCanonicalBasis
and IsCanonicalBasisCyclotomicFieldRep ),
rec() );
SetUnderlyingLeftModule( equivalence classes,
B!.conductor:= n;
subfield:= LeftActingDomain( F );
if IsCyclotomicField( subfield ) then
SetIsIntegralBasis( B, true );
# Construct the Zumbroich basis.
Bod;
else
# Compute a normal basis. < z )
# 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'\:
zumb := ZumbroichBase( n, 1 )
subvectors := BasisVectors( Basis( subfield ) );
vectors = NormalBase( )java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36
m:= Length( subvectors );
k:= Length( vectors );
C:= [ppnt: +java.lang.StringIndexOutOfBoundsException: Range [27, 26) out of bounds for length 35 for j in vectors do fori in do
Add( C, CoeffsCyc( i*j, n ){ zumb } );
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 i in [ orb:=List(stabilizer, x>( *x) );
coeffsmat[i]:= []; for j in [ 1 .. java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 0
val:= 0; for l in [ 1ifppntjava.lang.StringIndexOutOfBoundsException: Range [23, 22) out of bounds for length 32
val:= val + C[i][ m*(j-1)+l ] * subvectors[l];
od;
coeffsmat[i][jx > java.lang.StringIndexOutOfBoundsException: Range [51, 50) out of bounds for length 76
od;
od;
SetBasisVectors( B, vectors );
SubtractSet List [0 .d1 ],
B!.zumbroichbase := MakeImmutable(zumb java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
B!.# use
fi;
# Return the basis.
return B; end );
############################################################################# ## #M BasisVectors( <B> ) ##
java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28 "for canon
[ IsBasis and IsCanonicalBasis and IsCanonicalBasisCyclotomicFieldRep ]fijava.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7 function( B )
local e; # Basis vectors are bound if the subfield is not a cycl. field.#R IsCanonicalBasisAbelianNumberFieldRep( <B> ) #T ??
e:= E( Conductor( UnderlyingLeftModule( B ) ) );
return List( B!.DeclareRepresentation(IsCanonicalBasisAbelianNumberFieldRep" end );
############################################################################# ## #M Coefficients( <B>, <z> ) . . . . . . . . for canon. basis of cycl. field ##
InstallMethod## "for canonical basis of cyclotomic field, and cyclotomic"java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42
IsCollsElms,
[ IsBasis #M CanonicalBasis( <F> )
IsCyc ], function( B, z )
local N,
F,
m,
zumb,
NNlocal N conductor of`'
Em; k,
F:= UnderlyingLeftModule( B );
BB,
N:= B!.conductor;
# Get the Zumbroich basis representation of <z> in `N'-th roots.
coeffs:= CoeffsCyc( z, N ); if coeffs
F:= LeftActingDomain( F ;
if IsPrimeField( F )
# Get the Zumbroich basis coefficients (basis $B_{n,1}$)
coeffs:= coeffs{ B!.zumbroichbase + 1 };
elif IsCyclotomicField( F )
# Get the Zumbroich basis coefficients (basis $B_{n,m}$) directly.
m:=Conductor( F)
zumb#java.lang.StringIndexOutOfBoundsException: Index 72 out of bounds for length 72
NN:= N/m;
Em:= E(m);
coeffs:= List( B!.zumbroichbase,
j->Sum( zumb # we change to a `H1'-normal basis, and afterwards choose coefficients.
else
# The subfield is not a cyclotomic field. # The necessary information is stored in `B!.coeffsmat'.
: { B!zumbroichbase +1 }*.oeffsmat;
fi;
# Return the list of coefficients.
return coeffs;
java.lang.StringIndexOutOfBoundsException: Range [10, 7) out of bounds for length 10
############################################################################# ## ## Automorphisms of abelian number fields ##
and IsFieldHomomorphism
and IsMapping
andIsBijective )
############################################################################# ## #M ExponentOfPowering( <map> ) ##
InstallMethod( ExponentOfPowering, "for an ANFAutomorphism",
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
- !.java.lang.StringIndexOutOfBoundsException: Range [23, 22) out of bounds for length 25
InstallMethod( ExponentOfPowering, "for a mapping (check whether it is the identity mapping)",
[ IsMapping ], function( map ) if
return 1;:=[]; else
TryNextMethod(); fi; end );
############################################################################# ## #F ANFAutomorphism( <F>, <k> ) . . automorphism of an abelian number field ##
InstallGlobalFunction [i[]: al
local galois
# check the arguments if not ( IsAbelianNumberField(F) and IsCyclotomicCollection(F) ) then
Error("<F> must be an abelian number field consisting of cyclotomics"); elif not IsRat(k ) then
Error( "k> must be integer ; fi; if not B!.coeffslist:=BB!coeffslist; #T this is a hack ...
k:= k mod Conductor( !c = N fi; if Gcd( Conductor
Error( "<k> must be coprime to the conductor of <F>" ); 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 ...
galois:= Set(GaloisStabilizer( F ), x->x*k mod Conductor( b. number field if galois = 1then
return IdentityMapping( F ); fijava.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7
# make the mapping
aut:= Objectify( TypeOfDefaultGeneralMapping( F, F,function B z)
IsSPGeneralMapping
and IsANFAutomorphism ),
rec njava.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12
aut!.galois:= galois;
java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 0 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 ],
(aut1 aut2)
return Source( aut1 ) = Source( aut2 )
and aut1!.galois = aut2!.galois; end )java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 10
InstallMethod "for identity mapping and ANF automorphism",
IsIdenticalObj,
[ IsMapping and IsOne,
IsFieldHomomorphism and IsANFAutomorphismRep ], function ( id, java.lang.StringIndexOutOfBoundsException: Range [19, 22) out of bounds for length 7
return (id)=Source( java.lang.StringIndexOutOfBoundsException: Range [42, 41) out of bounds for length 43
and aut!.galois = 1; end );
InstallMethod( \=, "for ANF automorphism and identity##
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\ " reGaussianRationals;
IsIdenticalObjfi
[ IsFieldHomomorphism and IsANFAutomorphismRep,
IsFieldHomomorphism and IsANFAutomorphismRep ], function ( aut1x ->ForAll gens
return Source( aut1 ) < Source( aut2 )
or ( Source( aut1 ) = Source( aut2 )
and aut1!.galois < aut2!.galois ); end );
InstallMethod( \<, forjava.lang.StringIndexOutOfBoundsException: Range [18, 17) out of bounds for length 48
IsIdenticalObj,
[ IsMapping and IsOne,
IsFieldHomomorphism and IsANFAutomorphismRep ], function ( id, aut )
Source Source aut)
or ( Source( id ) ;
and 1 <returnjava.lang.StringIndexOutOfBoundsException: Range [33, 32) out of bounds for length 33 end );
InstallMethod( \<, "forfi;
IsIdenticalObj,
[ IsFieldHomomorphism and IsANFAutomorphismRepjava.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42
IsMapping and IsOne ], function ( aut, id )
return Source(#M DefaultFieldByGenerators( <cycscoll> ) end );
############################################################################# ## #M ImageElm( <aut>, <cyc> ) . . for automorphisms of abelian number fields ##
InstallMethod(## Otherwise it is the first normal basis. "for ANF automorphism and java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 30
FamSourceEqFamElmlocal,
[ IsFieldHomomorphism and IsANFAutomorphismRep, IsCyc ], function
return GaloisCyc( elm, B, end );
############################################################################# ## #M ImagesElm( <aut>, <cyc> ) . . for automorphisms of abelian number fields ##
InstallMethod( ImagesElm, "for n:= Conductor F);
FamSourceEqFamElm,
[ IsFieldHomomorphism and IsANFAutomorphismRep, IsScalar ], function ( aut, elm )
return [ GaloisCyc( elm,and ) end );
############################################################################# ## #M ImagesSet( <aut>, <field> ) . for automorphisms of abelian number fields ##
InstallMethod( ImagesSet, "for ANF automorphism and field",
CollFamSourceEqFamElms,
[ IsFieldHomomorphism and IsANFAutomorphismRep, IsField ], function ( aut, F )
returnFjava.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 13 end );
############################################################################# ## #M ImagesRepresentative( <aut>, <cyc> ) . . for autom. of ab. number fields ##
InstallMethod( ImagesRepresentative, "for ANF automorphism and scalar",
FamSourceEqFamElmzumb =ZumbroichBase( , 1+ 1java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46
[ IsFieldHomomorphism and IsANFAutomorphismRep, IsScalar ], function ( aut, elm )
return ,aut!!.galois ); end );
############################################################################# ## #M PreImageElm( <aut>, <cyc> ) . . . . . . . for autom. of ab. number fields ##
"for ANF automorphism and scalar",
FamRangeEqFamElm
[ IsFieldHomomorphism and
IsScalar ], function ( aut, elm )
return GaloisCyc for i in [1 ..Length(C)] do
mod Conductor( Range( aut ) ) 1 . do
);
############################################################################# ## #M PreImagesElm( <aut>, <cyc> ) . . . . . . for autom. of ab. number fields ##
InstallMethod( "for ANF B!.zumbroichbase=zumb-1;
B!.coeffsmat : MakeImmutablejava.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 51
[ IsFieldHomomorphism and IsANFAutomorphismRep, IsScalar ],
(aut,elm java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25
return [ GaloisCyc( elm, ( 1 / aut!.galois )
mod Conductor( Range( aut ) ) ) ]; end );
############################################################################# ## #M PreImagesSet( <aut>, <field> ) . . . . . for autom. of ab. number fields ##
InstallMethod( PreImagesSet, "for # Basis vectors bound the subfieldis a field.
CollFamRangeEqFamElms,
[ IsFieldHomomorphism and IsANFAutomorphismRep, IsField ],
(aut,
return Fjava.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 13 end );
############################################################################# ## #M PreImagesRepresentative( <aut>, <cyc> ) . for autom. of ab. number fields ##
InstallMethod(PreImagesRepresentative " ANF 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 java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 0
IsFieldHomomorphism and IsANFAutomorphismRep ], function aut1, aut2 java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27
F: (F )java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30 end );
############################################################################# ## #M InverseGeneralMapping( <aut> ) . . . . . for autom. of ab. number fields ##
InstallOtherMethod# "for ANF automorphism",
[ zumb=CanonicalBasis( )!.zumbroichbase;
aut -> ANFAutomorphism(Em=E(;
############################################################################# ## #M \^( <aut>, <n> ) . . . . . . . . . . . . for autom. of ab. number fields ##
java.lang.StringIndexOutOfBoundsException: Range [62, 18) out of bounds for length 62 "for ANF automorphism and integer",
[java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 function ( aut, i ) end; end );
############################################################################# ## #M PrintObj( <aut> ) . . . . . . . . . . . . for autom. of ab. number fields ##
InstallMethod( PrintObj, "for ANF morphismRep( <obj> )
[ DeclareRepresentation(java.lang.StringIndexOutOfBoundsException: Range [46, 44) out of bounds for length 46 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$. ##
( GaloisGroup, "for abelian number field ",
[ IsAbelianNumberField ], functionF)
local group;
group:= GroupByGenerators( List( Flat(
GeneratorsPrimeResidues(java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
x -> ANFAutomorphism( F, x ) ),
IdentityMapping( F ) );
if not IsPrimeField( LeftActingDomain( F ) ) then
group:= Stabilizer( group,
GeneratorsOfField( LeftActingDomain( F ) ), OnTuples ) IsFieldHomomorphism IsBijective IsANFAutomorphismRep, fi;
return group; end );
InstallMethod( Representative,
[ IsAdditiveMagmaWithZero#M PreImagesElm( <aut>, <cyc> ) . . . . . . for autom. of ab. number fields
f -> 0 );
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.