[Next][Prev] [Right] [Left] [Up] [Index] [Root]
Subsections
Characteristic(O) : RngFunOrd -> RngIntElt
The characteristic of the function field F/k or one of its orders O.
Applies to any field in Magma. Returns whether F is perfect.
Degree(F, G) : FldFun, FldFun -> RngIntElt
Degree(O) : RngFunOrd -> RngIntElt
The degree [F:G] of the field extension F/G where G is the base
field of F unless specified.
For an order O, this function returns
the rank of O as a module over its coefficient ring. Note that this
rank is equal to the degree [F:G] where F and G are the field of fractions
of O and the coefficient ring of O respectively.
AbsoluteDegree(O) : RngFunOrd -> RngIntElt
The degree of the function field F or the order O as a finite extension of k(x) or k[x] or
as an infinite extension of k.
DefiningPolynomial(O) : RngFunOrd -> RngUPolElt
The defining polynomial of the function field F over its coefficient ring.
For an order O belonging to a function field F, this function returns
the defining polynomial of O, which may be different from that of
F/k(x, α1, ..., αr).
DefiningPolynomials(O) : FldFunOrd -> [RngUPolElt]
Return the defining polynomials of the function field
F or the order O as a sequence of polynomials over
the coefficient ring.
Basis(O) : RngFunOrd -> SeqEnum[FldFunElt]
Basis(O, R) : RngFunOrd, Rng -> SeqEnum[RngElt]
The basis 1, α, ..., αn - 1 of the function
field F[α] over the coefficient field.
Given an order O belonging to a function field F, this function returns
the basis of O in the form of function field elements.
Given an additional ring R, return the basis of O as elements of R.
Return the matrix M and a denominator d which transforms elements of the order O1
into elements of the order O2.
The coefficient ideals of the order O of a relative extension. These are
the ideals {Ai} of the coefficient ring of O
such that for every element e of O, e = ∑i ai * bi where {bi}
is the basis returned for O and each ai ∈Ai.
Given an order O in a function field F of degree n,
this returns an n x n matrix whose
i-th row contains the coefficients for the i-th basis
element of O with respect to the power basis of F. Thus,
if bi is the i-th basis element of O,
bi=∑j=1nMijαj - 1
where M is the matrix and αis the generator of F.
A root of the defining polynomial of the order O.
The discriminant of the order O, up to a unit in its coefficient ring.
The discriminant of the order O of an algebraic function field F
over the bottom coefficient ring of O, (the subring
of the rational function field F extends).
DegreeOfExactConstantField(F) : FldFunG -> RngIntElt
The dimension of the exact constant field of the function field
F/k over k. The exact
constant field is the algebraic closure of k in F.
The genus of the function field F/k.
> PF<x> := PolynomialRing(GF(31, 3));
> P<y> := PolynomialRing(PF);
> FF1<b> := ext<FieldOfFractions(PF) | y^2 - x^3 + 1>;
> P<y> := PolynomialRing(FF1);
> FF2<d> := ext<FF1 | y^3 - b*x*y - 1>;
> Characteristic(FF2);
31
> EFF2I := EquationOrderInfinite(FF2);
> MFF2I := MaximalOrderInfinite(FF2);
> Degree(MFF2I) eq 3;
true
> AbsoluteDegree(EFF2I);
6
> Genus(FF2);
9
> DefiningPolynomial(EFF2I);
$.1^3 + [ 0, 30/x^3 ]*$.1 + [ 30/x^9, 0 ]
> Basis(MFF2I);
[ 1, 1/x*d, 1/x^2*d^2 ]
> Discriminant(EFF2I);
Ideal of Maximal Equation Order of FF1 over Valuation ring of Univariate
rational function field over GF(31^3)
Variables: x with generator 1/x
Generator:
(4*x^3 + 27)/x^15*b + 4/x^18
> AbsoluteOrder(EFF2I);
Order of Algebraic function field defined over Univariate rational function
field over GF(31^3) by
y^6 + 29*y^3 + (30*x^5 + x^2)*y^2 + 1 over Valuation ring of Univariate rational
function field over GF(31^3) with generator 1/x
> AbsoluteDiscriminant(EFF2I);
(2*x^9 + 25*x^6 + 6*x^3 + 29)/x^33
> Discriminant($2);
(30*x^24 + 6*x^21 + 16*x^18 + 20*x^15 + 16*x^12 + 7*x^9 + 27*x^6 + 3*x^3 +
30)/x^48
Invariants are slightly different for non--simple fields.
> P<x> := PolynomialRing(Rationals());
> P<y> := PolynomialRing(P);
> F<a, b> := FunctionField([3*y^3 - x^2, x*y^2 + 1]);
> DefiningPolynomials(F);
[
3*y^3 - x^2,
x*y^2 + 1
]
> DefiningPolynomials(EquationOrderFinite(F));
[
y^3 - 1/3*x^2,
y^2 + x
]
> DefiningPolynomials(EquationOrderInfinite(F));
[
$.1^3 - 1/3/$.1^4,
$.1^2 + 1/$.1
]
> Basis(F);
[
1,
a,
a^2,
$.1*b,
$.1*a*b,
$.1*a^2*b
]
> TransformationMatrix(EquationOrderFinite(F), MaximalOrderFinite(F));
[1 0 0 0 0 0]
[0 1 0 0 0 0]
[0 0 x 0 0 0]
[0 0 0 1 0 0]
[0 0 0 0 x 0]
[0 0 0 0 0 x]
1
> TransformationMatrix(MaximalOrderFinite(F), EquationOrderFinite(F));
[x 0 0 0 0 0]
[0 x 0 0 0 0]
[0 0 1 0 0 0]
[0 0 0 x 0 0]
[0 0 0 0 1 0]
[0 0 0 0 0 1]
x
SeparatingElement: FldFunGElt Default:
The sequence of global gap numbers of the function field F/k (in
characteristic zero this is always [1, ..., g]). A separating
element used internally for the computation can be specified, it
defaults to SeparatingElement(F). See the description of
GapNumbers.
GapNumbers(P) : PlcFunElt -> SeqEnum[RngIntElt]
The sequence of gap numbers of the function field F/k at
P where P must be a place of degree one. See the description of
GapNumbers.
Returns a separating element of the function field F/k.
SeparatingElement: FldFunGElt Default:
The ramification divisor of the function field F/k. The semantics of calling RamificationDivisor() with F or the zero divisor of F are
identical. For further details see the description of
RamificationDivisor.
SeparatingElement: FldFunGElt Default:
The Weierstrass places of the function field F/k. The semantics of calling WeierstrassPlaces with F or the zero divisor of F are
identical. See the description of WeierstrassPlaces.
SeparatingElement: FldFunGElt Default:
The Wronskian orders of the function field F/k. The semantics of calling WronskianOrders with F or the zero divisor of F are
identical. See the description of WronskianOrders.
The different of the maximal order O.
The index of S in O where S is a suborder of O and
O and S have the same equation order.
Finding Galois groups (of normal closures) of polynomials over
rational function fields over k∈{Q, Fq}, where Fq denotes
the finite field of characteristic p with q=pr, r∈Z> 0
is a hard problem, in general. All practical algorithms use the
classification of transitive groups, which is known up to degree 31
[CHM98]. These algorithms fall into two groups: The
absolute resolvent method [SM85] and the method of Stauduhar
[Sta73].
The Magma implementation is based on an extension of the method of
Stauduhar by Klüners, Geißler [Gei03], [GK00]
and, more recently, Fieker.
There is no longer any limit on the degree of the polynomials or fields.
In contrast to the absolute resolvent method, it also provides
the explicit action on the roots of the polynomial f which generates
the function field. The algorithm strongly depends on the fact that
the corresponding problem is implemented for the residue class field.
Roughly speaking, the method of Stauduhar traverses the subgroup
lattice of transitive permutation groups of degree n from the
symmetric group to the actual Galois group. This is done by using
so-called relative resolvents. Resolvents are polynomials whose
splitting fields are subfields of the splitting field of the given
polynomial which are computed using approximations of the roots of the
polynomial f.
If the Galois group is imprimitive the current implementation for
polynomials over Q(t) changes the starting point of the algorithm
in the subgroup lattice, to get as close as possible to the actual
Galois group. This is done via computation of subfields of a stem
field of f, that is the field extension of k(t) which we get by
adjoining a root of f to k(t).
In the case Q(t) the Galois group is found as a subgroup of the
intersection of suitable wreath products (using the knowledge of the
subfields) which may be easily computed.
In the case k=Q we use for primitive groups a combination of the
method of Stauduhar and the absolute resolvent method. The Frobenius
automorphism of the underlying field already determines a subgroup of
the Galois group, which is used to speed up computations in the
primitive case.
SetVerbose("GaloisGroup", n): Maximum: 5
Old: BoolElt Default: false
Given a separable, irreducible polynomial f(t, x) of degree n
over the rational function field k(t), K∈{Q, Fq}, q != 2,
this function returns a permutation group that forms the Galois group
of the normal closure of F=k[t][x]/f(t, x)k[t][x] in some algebraic
closure of k(t). The permutation group acts on the points 1, 2, ..., n. The roots of f are calculated in the process, expressed
as power series and returned as the second argument: For a prime
polynomial p(t)∈k(t) denote by bar(N) the splitting field of
the polynomial f(t, x) mod p(t). It is well known that the roots of
the polynomial f(t, x) can be expressed as power series in
bar(N)[[t]].
We embed bar(N) in an unramified
p-adic extension.
The third return value is a structure containing
information about the computation that can be used to compute the
roots of f to arbitrary precision. This can be used for example
in GaloisSubgroup to compute arbitrary subfields
of the splitting field.
The required precision increases linearly with the index of the
subgroups, which are passed traversing the subgroup lattice. Therefore
computations may slow down considerably for higher degrees and large
indices.
The default version employs series computations over either
unramified p-adic fields (k=Q) or finite fields (k=Fq) and
returns proven results. The prime polynomial is determined during a
Galois group computation in such a way that f is squarefree modulo
p.
If Old is set to true, then the old version is called.
Since the return values af the new version differ substantially from the
old one, this may be used in old applications.
A Galois group computation is shown below.
> k<t>:= FunctionField(Rationals());
> R<x>:= PolynomialRing(k);
> f:= x^15 + (-1875*t^2 - 125)*x^3 + (4500*t^2 + 300)*x^2 +
> (-3600*t^2 - 240)*x + 960*t^2+ 64;
> G, r, S:= GaloisGroup(f);
> TransitiveGroupDescription(G);
1/2[S(5)^3]S(3)
> A := Universe(r);
> AssignNames(~A, ["t"]);
> A;
Power series ring in t over Unramified extension
defined by the polynomial (1 + O(191^20))*x^4 +
O(191^20)*x^3 + (7 + O(191^20))*x^2 + (100 +
O(191^20))*x + 19 + O(191^20)
over Unramified extension defined by the
polynomial (1 + O(191^20))*x + 190 + O(191^20)
over pAdicField(191)
> r[1];
> r[1];
-54*$.1^3 + 68*$.1^2 + 31*$.1 - 12 + O(191) +
(-15*$.1^3 - 66*$.1^2 - 2*$.1 - 39 + O(191))*t
+ O(t^2)
> S;
GaloisData of type p-Adic (FldFun over Q)
> TransitiveGroupIdentification(G);
99 15
Some examples for polynomials over rational function fields over finite fields
> k<x>:= FunctionField(GF(1009));
> R<y>:= PolynomialRing(k);
> f:= y^10 + (989*x^4 + 20*x^3 + 989*x^2 + 20*x + 989)*y^8 + (70*x^8 +
> 869*x^7 + 310*x^6 + 529*x^5 + 600*x^4 + 479*x^3 + 460*x^2 + 719*x +
> 120)*y^6 + (909*x^12 + 300*x^11 + 409*x^10 + 1000*x^9 + 393*x^8 +
> 657*x^7 + 895*x^6 + 764*x^5 + 420*x^4 + 973*x^3 + 177*x^2 + 166*x +
> 784)*y^4 + (65*x^16 + 749*x^15 + 350*x^14 + 909*x^13 + 484*x^12 +
> 452*x^11 + 115*x^10 + 923*x^9 + 541*x^8 + 272*x^7 + 637*x^6 + 314*x^5 +
> 724*x^4 + 490*x^3 + 948*x^2 + 99*x + 90)*y^2 + 993*x^20 + 80*x^19 +
> 969*x^18 + 569*x^17 + 895*x^16 + 101*x^15 + 742*x^14 + 587*x^13 +
> 55*x^12+ 437*x^11 + 97*x^10 + 976*x^9 + 62*x^8 + 171*x^7 + 930*x^6 +
> 604*x^5 + 698*x^4 + 60*x^3 + 60*x^2 + 1004*x + 1008;
> G, r, p:= GaloisGroup(f);
> t1, t2:= TransitiveGroupIdentification(G);
> t1;
1
> t2;
10
And a second one.
> k<t>:= FunctionField(GF(7));
> R<x>:= PolynomialRing(k);
> f:= x^12 + x^10 + x^8 + (6*t^2 + 3)*x^6 + (4*t^4 + 6*t^2 + 1)*x^4 +
> (5*t^4 + t^2)*x^2 + 2*t^4;
> G, r, p:= GaloisGroup(f);
> G;
Permutation group G acting on a set of cardinality 12
(2, 8)(3, 9)(4, 10)(5, 11)
(1, 5, 9)(2, 6, 10)(3, 7, 11)(4, 8, 12)
(1, 12)(2, 3)(4, 5)(6, 7)(8, 9)(10, 11)
> A := Universe(r);
> AssignNames(~A, ["t"]);
> r;
[
w^950*t^13 + w^1350*t^12 + w^1900*t^11 + w^500*t^10 + w^2050*t^9 + 2*t^8 +
w^1350*t^7 + w^300*t^6 + w^350*t^5 + w^1450*t^4 + w^950*t^3 + w^1000*t^2
+ w^1100*t + w^550,
w^1175*t^13 + w^1825*t^12 + w^1675*t^11 + w^725*t^10 + w^1025*t^9 +
w^1825*t^8 + w^1325*t^7 + w^775*t^6 + w^1775*t^5 + w^1325*t^4 +
w^1575*t^3 + w^1175*t^2 + w^2225*t + w^2275,
w^25*t^13 + w^1075*t^12 + w^425*t^11 + w^925*t^10 + w^225*t^9 + w^2375*t^8 +
w^2125*t^7 + w^625*t^6 + w^1175*t^5 + w^425*t^4 + w^575*t^3 + w^825*t^2
+ w^1175*t + w^2375,
w^175*t^13 + w^1525*t^12 + w^575*t^11 + w^475*t^10 + w^1575*t^9 + w^1025*t^8
+ w^475*t^7 + w^775*t^6 + w^1025*t^5 + w^1775*t^4 + w^1625*t^3 +
w^2175*t^2 + w^1025*t + w^1025,
w^1025*t^13 + w^1975*t^12 + w^2125*t^11 + w^1475*t^10 + w^2375*t^9 +
w^1975*t^8 + w^2075*t^7 + w^1825*t^6 + w^425*t^5 + w^875*t^4 +
w^1425*t^3 + w^2225*t^2 + w^1175*t + w^325,
w^650*t^13 + w^2250*t^12 + w^100*t^11 + w^1100*t^10 + w^1150*t^9 + 2*t^8 +
w^1050*t^7 + w^2100*t^6 + w^1250*t^5 + w^550*t^4 + w^650*t^3 +
w^2200*t^2 + w^1700*t + w^1450,
w^2150*t^13 + w^150*t^12 + w^700*t^11 + w^1700*t^10 + w^850*t^9 + 5*t^8 +
w^150*t^7 + w^1500*t^6 + w^1550*t^5 + w^250*t^4 + w^2150*t^3 +
w^2200*t^2 + w^2300*t + w^1750,
w^2375*t^13 + w^625*t^12 + w^475*t^11 + w^1925*t^10 + w^2225*t^9 + w^625*t^8
+ w^125*t^7 + w^1975*t^6 + w^575*t^5 + w^125*t^4 + w^375*t^3 +
w^2375*t^2 + w^1025*t + w^1075,
w^1225*t^13 + w^2275*t^12 + w^1625*t^11 + w^2125*t^10 + w^1425*t^9 +
w^1175*t^8 + w^925*t^7 + w^1825*t^6 + w^2375*t^5 + w^1625*t^4 +
w^1775*t^3 + w^2025*t^2 + w^2375*t + w^1175,
w^1375*t^13 + w^325*t^12 + w^1775*t^11 + w^1675*t^10 + w^375*t^9 +
w^2225*t^8 + w^1675*t^7 + w^1975*t^6 + w^2225*t^5 + w^575*t^4 +
w^425*t^3 + w^975*t^2 + w^2225*t + w^2225,
w^2225*t^13 + w^775*t^12 + w^925*t^11 + w^275*t^10 + w^1175*t^9 + w^775*t^8
+ w^875*t^7 + w^625*t^6 + w^1625*t^5 + w^2075*t^4 + w^225*t^3 +
w^1025*t^2 + w^2375*t + w^1525,
w^1850*t^13 + w^1050*t^12 + w^1300*t^11 + w^2300*t^10 + w^2350*t^9 + 5*t^8 +
w^2250*t^7 + w^900*t^6 + w^50*t^5 + w^1750*t^4 + w^1850*t^3 + w^1000*t^2
+ w^500*t + w^250
]
> p;
t^2 + 4
For finite extensions L of Q(t) and Fq(t)
Magma can compute all fields between L and Q(t) or Fq(t). It should be
noted that the computation of subfields does not depend on the
Galois groups.
The implementation over Q is using the algorithm of Klüners [Klü02].
The implementation over Fq(t) follows the newer ideas of Klüners and
van Hoeij.
All algebraic function fields G with k(x) ⊂G ⊆F. For
non relative algebraic function fields F.
A subfield computation is shown below.
> k<x>:= FunctionField(Rationals());
> R<y>:= PolynomialRing(k);
> f:= y^14 - 3234*y^12 + (8*x + 123480)*y^11 + (-696*x - 1152480)*y^10 +
> (27672*x - 43563744)*y^9 + (-663544*x + 1795525424)*y^8 + (10660416*x -
> 33905500608)*y^7 + (-120467088*x + 409661347536)*y^6 + (976911040*x -
> 3428257977088)*y^5 + (-5684130144*x + 20264929189344)*y^4 + (23251514496*x -
> 83582683562112)*y^3 + (-63672983360*x + 229899367865216)*y^2 +
> (105037027200*x - 380160309247488)*y - 79060128000*x + 286518963720192;
> F:= FunctionField(f);
> Subfields(F);
[
<Algebraic function field defined over Univariate rational function field
over Rational Field
Variables: x by
y^14 - 3234*y^12 + (8*x + 123480)*y^11 + (-696*x - 1152480)*y^10 + (27672*x
- 43563744)*y^9 + (-663544*x + 1795525424)*y^8 + (10660416*x -
33905500608)*y^7 + (-120467088*x + 409661347536)*y^6 + (976911040*x -
3428257977088)*y^5 + (-5684130144*x + 20264929189344)*y^4 +
(23251514496*x - 83582683562112)*y^3 + (-63672983360*x +
229899367865216)*y^2 + (105037027200*x - 380160309247488)*y -
79060128000*x + 286518963720192, Mapping from: FldFun: F to FldFun: F>,
<Algebraic function field defined over Univariate rational function field
over Rational Field
Variables: x by
y^7 + 294*y^6 - 107016*y^5 + (2744*x + 576240)*y^4 + (-806736*x +
2469418896)*y^3 + (88740960*x - 312072913824)*y^2 + (-4329483200*x +
15606890921216)*y + 79060128000*x - 286518963720192, Mapping from:
Algebraic function field defined over Univariate rational function field
over Rational Field
Variables: x by
y^7 + 294*y^6 - 107016*y^5 + (2744*x + 576240)*y^4 + (-806736*x +
2469418896)*y^3 + (88740960*x - 312072913824)*y^2 + (-4329483200*x +
15606890921216)*y + 79060128000*x - 286518963720192 to FldFun: F>
]
Let K be a finite extension of the rational function field over
a finite field, the rationals or a number field.
In contrast to the number field situation, there are two different
natural notions of automorphisms here: we distinguish between
automorphisms that fix the base field and arbitrary automorphisms that
can also induce non-trivial maps of the constant field.
The first case, automorphisms fixing the base field of K, is analogous
to the number field case and was implemented by Jürgen Klüners.
The second case of more general automorphisms has been implemented by
Florian Heß along the lines of his paper [Heß04].
Here the constant field of K can, in fact, be any exact perfect field
in Magma with a few provisos.
Computes all Q(t) automorphisms of the absolute finite extension
K that fix k. The field k has to be Q(t) for this function.
Return the group of k-automorphisms of the algebraic function
field K together with the map from the group to the sequence of
automorphisms of K. The field k has to be Q(t).
We define an extension of degree 7 over Q(t) and compute the
automorphisms.
> Q:=Rationals();
> Qt<t>:=PolynomialRing(Q);
> Qtx<x>:=PolynomialRing(Qt);
> f := x^7 + (t^3 + 2*t^2 - t + 13)*x^6 + (3*t^5 - 3*t^4
> + 9*t^3 + 24*t^2 - 21*t + 54)*x^5 + (3*t^7 -
> 9*t^6 + 27*t^5 - 22*t^4 + 6*t^3 + 84*t^2 -
> 121*t + 75)*x^4 + (t^9 - 6*t^8 + 22*t^7 -
> 57*t^6 + 82*t^5 - 70*t^4 - 87*t^3 + 140*t^2 -
> 225*t - 2)*x^3 + (-t^10 + 5*t^9 - 25*t^8 +
> 61*t^7 - 126*t^6 + 117*t^5 - 58*t^4 - 155*t^3
> + 168*t^2 - 80*t - 44)*x^2 + (-t^10 + 8*t^9 -
> 30*t^8 + 75*t^7 - 102*t^6 + 89*t^5 + 34*t^4 -
> 56*t^3 + 113*t^2 + 42*t - 17)*x + t^9 - 7*t^8
> + 23*t^7 - 42*t^6 + 28*t^5 + 19*t^4 - 60*t^3 -
> 2*t^2 + 16*t - 1;
> K:=FunctionField(f);
> A:=Automorphisms(K, BaseField(K));
> #A;
7
Now we transform this list into a group to see that it is really cyclic.
We pass in special functions for equality testing and multiplication
to speed the algorithm up.
> G := GenericGroup(A: Eq := func<a,b | a`Images eq b`Images>,
> Mult := func<a,b | hom<K -> K | a`Images @ b>>);
> G;
Finitely presented group G on 2 generators
Relations
G.1 = Id(G)
G.1 * G.2 = G.2 * G.1
G.1 * G.2^2 = G.2^2 * G.1
G.1 * G.2^3 = G.2^3 * G.1
G.1 * G.2^4 = G.2^4 * G.1
G.1 * G.2^5 = G.2^5 * G.1
G.1 * G.2^6 = G.2^6 * G.1
G.1 = G.2^7
Finally, we verify that this gives the same result as
AutomorphismGroup.
> AutomorphismGroup(K, BaseField(K));
Finitely presented group on 2 generators
Relations
$.1 = Id($)
$.1 * $.2 = $.2 * $.1
$.1 * $.2^2 = $.2^2 * $.1
$.1 * $.2^3 = $.2^3 * $.1
$.1 * $.2^4 = $.2^4 * $.1
$.1 * $.2^5 = $.2^5 * $.1
$.1 * $.2^6 = $.2^6 * $.1
$.1 = $.2^7
Mapping from: GrpFP to [
Mapping from: FldFun: K to FldFun: K,
Mapping from: FldFun: K to FldFun: K,
Mapping from: FldFun: K to FldFun: K,
Mapping from: FldFun: K to FldFun: K,
Mapping from: FldFun: K to FldFun: K,
Mapping from: FldFun: K to FldFun: K,
Mapping from: FldFun: K to FldFun: K
] given by a rule
Given two absolute finite extensions K and L of Q(t), decide
if L is an extension of K. If this is the case, return an embedding
map from K into L.
Given two absolute finite extensions K and L of Q(t), decide
if L is Q(t)-isomorphic to K. If this is the case, return a
map from K onto L.
Subfields and IsIsomorphic are illustrated below.
> Q:=Rationals();
> Qt<t>:=PolynomialRing(Q);
> Qtx<x>:=PolynomialRing(Qt);
> K:=FunctionField(x^4-t^3);
> L:=Subfields(K);
> #L;
2
> L:=L[2][1]; L;
Algebraic function field defined over Univariate
rational function field over Rational Field
Variables: t by
x^2 - t^3
Now we will check if L is indeed a subfield of K:
> IsSubfield(L,K);
true Mapping from: FldFun: L to FldFun: K
Obviously, L can be defined using a simpler polynomial:
> LL:=FunctionField(x^2-t);
> IsIsomorphicOverQt(LL,L);
true Mapping from: FldFun: LL to FldFun: L
BaseMorphism: Map Default: false
Bound: RngIntElt Default: ∞
Strategy: MonStgElt Default: None
Given two function fields K and E, this function computes a list
of at most Bound field isomorphisms from K to E.
If BaseMorphism is given it should be an isomorphism f between
the constant fields of K and E. In this case only isomorphisms extending
f are considered.
The default behaviour is for all isomorphisms from K to E which
extend SOME isomorphism of the constant field of K to that of E
considered. In this case (no base morphism is specified), the constant
fields must be finite, the rationals or a number field. If the
base morphism f is specified then the constant fields can be any
exact perfect fields ( finite or characteristic 0 ).
If the base morphism f is specified, it can be defined in the natural
way for most constant field types. For example, for finite fields and
number fields, the usual hom<k->l|x>, where x gives the image
of k.1, can be used. A common situation is where the constant fields
of K and E are equal to k and f is the identity. This can be
defined very simply for any k by IdentityFieldMorphism(k) .
Several more intrinsics related to field morphisms are described
in the following subsection.
The possible choices of Strategy are None, Weierstrass
or DegOne. If Strategy is different to None, this
determines the places that are used as the basis of the construction of
the maps. In all cases, a finite set of places of E and K which
must correspond under any isomorphism are used. All isomorphisms
are found between the canonical affine models (as defined by Heß)
obtained by omitting one of these places from each of E and K.
DegOne can only be used with finite constant fields. In this case,
isomorphisms are determined which map a fixed degree one place of K
to any one of the finite number of degree one places of E.
This function can fail in rare situations if the constant field of K
is too small and no degree one place exists. In this case an appropriate
error message is displayed.
Weierstrass uses the Weierstrass places of the fields. Isomorphisms
are determined which map a fixed Weierstrass place of K to any of
those of E with the same degree and Riemann-Roch data. This strategy
can be very fast if the residue field and Riemann-Roch data of a
particular place of K match those of only a few (or no!) Weierstrass
places of E.
In case of fields of genus <2, the constant field must be finite.
BaseMorphism: Map Default: false
Strategy: MonStgElt Default: None
As above, except the function only computes a single isomorphism
if one exists.
BaseMorphism: Map Default: false
Bound: RngIntElt Default: ∞
Strategy: MonStgElt Default: None
This function computes a list of at most Bound
automorphisms of the function field K. This is an
abbreviation for Isomorphisms(K, K) and the parameters
are as described above.
An important difference is that the BaseMorphism, if specified,
must be of field morphism type. IdentityFieldMorphism may be
used, but basic constrictors for non-trivial constant field maps f
will usually cause an error if used directly. The way around this
is to use the following conversion
f := FieldMorphism(f)
(See the following subsection)
Automorphisms(K,p1,p2) : FldFunG, PlcFunElt, PlcFunElt -> [Map]
Bound: RngIntElt Default: ∞
As above except that the constant field morphism is taken as
the identity and only iso/automorphisms which take function field place
p1 to p2 are computed.
BaseMorphism: Map Default: false
Strategy: MonStgElt Default: None
Given a function field K, this function computes that group of
automorphisms satisfying the conditions specified by the parameters
and returns it as a finitely-presented group.
The map also returned is invertible and takes a group element to the
function field isomorphism that it represents.
Strategy: MonStgElt Default: None
In this variation, the automorphism group of the function field
K is computed in
its permutation representation on a set of places or divisors
or in its linear representation on a space of differentials or
subspace of K.
The return values consist of the representing group G, a map
(with inverse) from G to the maps of K giving the actual
isomorphisms, and a sequence of isomorphisms of K which
consist of the kernel of the representation.
Only automorphisms fixing the constant field are considered here.
If the set/space on which the representation is to be defined
is not invariant by the automorphism group, a run-time error
will result.
The argumentf should be a map defining the representation.
Its domain must be an enumerated sequence for a permutation representation
or a vector space for a linear representation.
Its codomain should be K or a space or enumerated sequence of
elements of K, places of K, divisors of K or differentials
of K. The examples below show some common ways of producing f
by using functions like DifferentialSpace and
RiemannRochSpace.
The isomorphisms returned by the functions in the last subsection are of
general Map type but contain some extra internal structure. The same
is true of the maps used to specify BaseMorphism. These objects come
in two flavours: field morphisms, that represent maps between general
fields, and the more specialised function field morphisms, representing
maps between algebraic function fields. This subsection contains
several related functions that are very useful when working with (function)
field morphisms.
Returns true, if the map is a field or function field morphism;
false otherwise.
Converts a homomorphism between fields into a field morphism.
Returns the identity automorphism of field F as a field morphism.
Returns true if f is the identity morphism; false otherwise.
Returns true, if the two maps are both field morphisms or function field
morphisms and are equal; false otherwise.
Either returns "true" and the inverse morphism for (function) field morphism
f, or "false" if inverse does not exist, or "unknown" if it cannot be computed.
The composition of the field morphisms f and g.
We illustrate the use of the general isomorphism functions
with some examples.
In the first, we have a rational function field of characteristic 5:
> k<w> := GF(5);
> kxf<x> := RationalFunctionField(k);
> kxfy<y> := PolynomialRing(kxf);
> F<a> := FunctionField(x^2+y^2-1);
> L := Isomorphisms(kxf, F);
> #L eq #PGL(2, k);
In the next example we consider the function field of a hyperelliptic
curve defined over Q(i) [i2 = - 1] and a Galois twist of it.
The fields are not isomorphic over Q(i) but they are over Q:
> k<i> := QuadraticField(-1);
> kxf<x> := RationalFunctionField(k);
> kxfy<y> := PolynomialRing(kxf);
> F1<a> := FunctionField(y^2-x^5-x^2-i);
> F2<b> := FunctionField(i*y^2-x^5-i*x^2+1);
> c := IdentityFieldMorphism(k);
> IsIsomorphic(F1,F2 : BaseMorphism := c);
false
> IsIsomorphic(F1,F2);
true Mapping from: FldFun: F1 to FldFun: F2 given by a rule
> L := Isomorphisms(F1, F2);
> [<f(a), f(x), f(i)> : f in L];
[
<-i*b, i*x, -i>,
<i*b, i*x, -i>
]
In the next example we consider the function field of the genus 3
plane curve x3 * y + y3 * z + z3 * x=0, which has full automorphism group
PGL2(F7). We compute automorphisms over different finite fields
and also compute the automorphisms group as an FP group.
> k := GF(11);
> kxf<x> := RationalFunctionField(k);
> kxfy<y> := PolynomialRing(kxf);
> K<y> := FunctionField(x^3*y+y^3+x);
> L := Automorphisms(K);
> #L;
3
> // Extend base field to get all autos
> k := GF(11^3);
> kxf<x> := RationalFunctionField(k);
> kxfy<y> := PolynomialRing(kxf);
> K<y> := FunctionField(x^3*y+y^3+x);
> L := Automorphisms(K);
> #L;
504
> // restrict to just "geometric" autos, which fix the base
> c := IdentityFieldMorphism(k);
> L := Automorphisms(K : BaseMorphism := c);
> #L;
168
> // get the automorphism group instead as an FP group
> G,mp := AutomorphismGroup(K : BaseMorphism := c);
> G;
Finitely presented group G on 2 generators
Relations
G.2^3 = Id(G)
(G.1^-1 * G.2)^3 = Id(G)
G.1^7 = Id(G)
(G.2^-1 * G.1^-3)^2 = Id(G)
(G.2^-1 * G.1^-1)^4 = Id(G)
> #G;
168
> IdentifyGroup(G); // find in small group database
<168, 42>
Finally, we give an example of a genus 1 function field over
F5 where the group of automorphisms is computed acting
on various spaces of functions and differentials.
> k<w> := GF(5);
> kxf<x> := RationalFunctionField(k);
> kxfy<y> := PolynomialRing(kxf);
> f := x^3 + y^3 + 1;
> F<a> := FunctionField(f);
> f := Numeration(Set(Places(F, 1)));
> G, h, K := AutomorphismGroup(F, f);
> #G; Type(G);
12
GrpPerm
> V, f := SpaceOfDifferentialsFirstKind(F);
> G, h, K := AutomorphismGroup(F, f);
> #G; Type(G);
2
GrpMat
> D := &+ Places(F, 1);
> V, f := DifferentialSpace( -D );
> G, h := AutomorphismGroup(F, f);
> #G;
12
> V, f := RiemannRochSpace( D );
> G, h, ker := AutomorphismGroup(F, f);
> #G; #ker;
12
1
[Next][Prev] [Right] [Left] [Up] [Index] [Root]
|