[Next][Prev] [Right] [Left] [Up] [Index] [Root]

Creation of Local Rings and Fields

The parameters describing a local ring or field are: the characteristic p of its residue class field, the inertia degree f or inertial polynomial f, the Eisenstein polynomial g of degree e describing the totally ramified extension of the inertia ring and the precision n. For local rings the precision is interpreted as an absolute precision, (specifying to what valuation the digits of the element are known) but for local fields it is interpreted as a relative precision, (specifying how many digits of the element are known).

Subsections

Elementary Creation Functions

By using the following functions any p-adic ring or field and any local ring or field can be created. Helper functions are provided to indicate whether a polynomial is inertial or eisenstein.

pAdicRing(p, n) : RngIntElt, RngIntElt -> RngLoc
pAdicRing(p) : RngIntElt -> RngLoc
pAdicField(p, n) : RngIntElt, RngIntElt -> FldLoc
pAdicField(p) : RngIntElt -> FldLoc
    Precision: RngIntElt                Default: 20
Create the ring (field) of p-adic integers (numbers) with precision n. If n is not given the floating p-adic ring (field) with infinite precision is created but elements except for the embedded integers and coercible rationals are created with the default precision given by Precision. The angle bracket notation can be used to assign a name to the uniformizing element e.g. Zp<t> := pAdicRing(p).
UnramifiedExtension(L, f) : RngLoc, RngIntElt -> RngLoc
UnramifiedExtension(L, f) : RngLoc, RngUPolElt -> RngLoc
UnramifiedExtension(L, f) : FldLoc, RngIntElt -> FldLoc
UnramifiedExtension(L, f) : FldLoc, RngUPolElt -> FldLoc
Form a local ring or field K by extending the inertia ring or field of L by the index f or the inertial polynomial f. The angle bracket notation can be used to assign a name to the uniformizing element and inertial element e.g. K<pi, a> := UnramifiedExtension(L, f). The same can be achieved by ext<L | f>. If f is an integer then L must have finite precision, otherwise L can be any local ring or field.
TotallyRamifiedExtension(L, g) : RngLoc, RngUPolElt -> RngLoc
TotallyRamifiedExtension(L, g) : FldLoc, RngUPolElt -> FldLoc
Form the totally ramified extension K of L defined by the polynomial g which is required to be an Eisenstein polynomial over L. The Eisenstein polynomial for the extended ring or field is obtained as the minimal polynomial of a root of g over the inertia ring or field of L. L can be any local ring or field. The angle bracket notation can be used to assign a name to the uniformizing element and the inertial element e.g. K<pi,a> := TotallyRamifiedExtension(L, g). The same can be achieved by ext<L | g>.
ext<L | f, g> : RngLoc, RngIntElt, RngUPolElt -> RngLoc
ext<L | g, f> : RngLoc, RngUPolElt, RngIntElt -> RngLoc
ext<L | f, g> : RngLoc, RngUPolElt, RngUPolElt -> RngLoc
ext<L | g> : RngLoc, RngUPolElt -> RngLoc
ext<L | f> : RngLoc, RngIntElt -> RngLoc
ext<L | f, g> : FldLoc, RngIntElt, RngUPolElt -> FldLoc
ext<L | g, f> : FldLoc, RngUPolElt, RngIntElt -> FldLoc
ext<L | g> : FldLoc, RngUPolElt -> FldLoc
ext<L | f, g> : FldLoc, RngUPolElt, RngUPolElt -> FldLoc
ext<L | f> : FldLoc, RngIntElt -> FldLoc
Create the local ring (field) whose inertial subring (subfield) is an unramified extension of degree f of the inertial subring (subfield) of L or an extension defined by the inertial polynomial f (or g) and whose ramified extension is a ramified extension of the ramified extension of L defined by the Eisenstein polynomial g (or f). If one of the arguments is an integer then L must have finite precision, otherwise L can be any local ring or field. The arguments cannot both define an unramified extension or both define a ramified extension. The angle bracket notation can be used to assign a name to the uniformizing element and the inertial element e.g. K<pi, a> := ext<L | f, g> or K<pi, a> := ext<L | g, f> The constructor can also be used with only one right hand side argument.
IsEisenstein(g) : RngUPolElt -> BoolElt
Return true iff g is an Eisenstein polynomial. The coefficients of g must lie in a local ring or field. The valuation used is that of the coefficient ring or field.
IsInertial(g) : RngUPolElt -> BoolElt
Return true iff g is an inertial polynomial. The coefficients of g must lie in a local ring or field. The residue field used is that of the ring corresponding to the coefficient ring or field.

Example RngLoc_el_creation (H59E1)

The creation of local rings using the above functions is illustrated below. Note that when making a ramified extension of an already ramified ring it is necessary for the eisenstein polynomial to be over the base ring so that the constant coefficient can have valuation one (such an element will not exist in the integers or in any subring).

> L<b, a> := ext<pAdicRing(5) | x^4 - x^3 + 2*x^2 - x + 2, x^4 + 125*x^2 + 5>;
> P<y> := PolynomialRing(L);
> T<d, c> := TotallyRamifiedExtension(L, y^3 + b^4*a^5*y + b*a^2);
> T;
Local Ring with Eisenstein polynomial x^12 + (-31230*c^3 - 31230*c^2 - 31230*c -
62460)*x^10 + (1219141375*c^3 - 487656550*c^2 + 487656550*c - 975313100)*x^8 + 
(1561625*c^3 + 10930250*c^2 + 10149875*c + 10930250)*x^6 + (-31250*c^3 + 
14375*c^2 - 26875*c + 36250)*x^4 + (-68293750*c^3 + 87806250*c^2 + 
195125000)*x^2 + 10*c^2 + 15*c + 10 over Inertia Ring of degree 4 over 5-adic 
Ring
When creating ramified extensions it is possible to lose accuracy when the coefficients of the polynomial are known to more precision than the base ring allows. In addition if the precision of the base ring is only 1 then there isn't even enough precision to allow the constant coefficient to be non-zero to that precision.

> L<p, a> := UnramifiedExtension(pAdicRing(5, 1), 3);

> TotallyRamifiedExtension(L, x^4 + 5); >> TotallyRamifiedExtension(L, x^4 + 5); ^ Runtime error in 'TotallyRamifiedExtension': Insufficient precision to extend the ring > L<p, a> := UnramifiedExtension(pAdicRing(5, 2), x^5 + x^2 + 2); > TotallyRamifiedExtension(L, x^4 + 5); Local Ring with Eisenstein polynomial x^4 + 5 over L > ext<L | x^4 + 125*x^2 + 5>; Local Ring with Eisenstein polynomial x^4 + 5 over L

Between Ring and Field

These functions are provided to easily gain the field with the same invariants as a given ring and the ring with the same invariants as a given field.

IntegerRing(L) : FldLoc -> RngLoc
Integers(L) : FldLoc -> RngLoc
RingOfIntegers(L) : FldLoc -> RngLoc
The ring R of integers in the local field L. This is the set of elements of non-negative valuation.
FieldOfFractions(L) : RngLoc -> FldLoc
The field of fractions F of the local ring L. The relative precision of F is the precision of L.

Attributes of Local Rings and Fields

There are two attributes of local rings and fields that can be set and altered by the user.

L`DefaultPrecision
Can be used to retrieve or set the default precision of the local ring or field L. If L is a fixed precision ring or field setting this attribute has no effect since its value will be constantly the same as the precision of the ring. If L is a floating (infinite precision) local ring or field, this will change the precision with which elements are created when they can't have infinite precision.
L`SeriesPrinting
By default, elements of a p-adic ring are printed as integers, elements of an unramified extension are printed as polynomials in the inertial element and elements of a ramified extension are printed as a polynomial in pi over the inertial subring of degree strictly less than e where e is the ramification degree of the ring and pi is the uniformizer of the ring. The coefficients of the polynomial may have valuation. Field elements are printed with the valuation taken out and explicitly multiplied in. So an element of a p-adic field is printed as an integer co--prime to the prime of the field multiplied by the prime to the power of the valuation of the element. An element of a ramified extension is printed as pi^v times a polynomial in pi over the inertial subfield where v is the valuation of the element. At least one coefficient of the polynomial will have valuation zero.

If the SeriesPrinting attribute is true then the elements of any local ring or field are printed as a power series in the uniformizing element with coefficients in the residue class field. Series printing has the advantage that the valuations of all the terms of the element can be seen.


Example RngLoc_series-print (H59E2)

SeriesPrinting affects the way in which local ring elements are printed. This can be illustrated in a very simple way.

> Zp<p> := pAdicRing(5, 30);
> p;    
5
> Zp`SeriesPrinting := true;
> p;
p
> I<p, a> := UnramifiedExtension(Zp, 3);
> p;
p
> a;
a
> p - a^4;
(-2 - p^2 - p^3 - p^5 - p^6 - p^7 + 2*p^8 - 2*p^11 - 2*p^12 - 2*p^13 - p^14 + 
    2*p^15 + p^16 - 2*p^18 - 2*p^19 + 2*p^21 + 2*p^22 - 2*p^23 - p^25 - 2*p^26 +
    2*p^27 - p^29)*a^2 + (-2 + p - 2*p^4 - 2*p^5 + 2*p^6 + 2*p^8 + p^9 - 2*p^10
    + 2*p^12 + 2*p^13 - p^14 - p^17 + p^18 - p^20 + p^21 - 2*p^22 - p^23 - p^24
    - 2*p^26 - p^27 + p^28 - 2*p^29)*a - 2*p - p^2 - p^4 - 2*p^6 + p^7 - 2*p^10
    + p^11 + 2*p^12 + 2*p^13 + p^14 + p^15 + 2*p^16 + p^18 - p^19 - 2*p^20 - 
    2*p^21 - p^23 - p^24 + 2*p^25 + p^26 - 2*p^28 - p^29
This is consistent with Zp having SeriesPrinting on since the p-adic coefficients are printed as series in p and I having SeriesPrinting off since the element in the extension prints at the top level as a polynomial in the inertial element a.

> Zp`SeriesPrinting := false;
> p;
5
> a;
a
> p - a^4;                    
-174659774575780565777*a^2 - 345782849124284351247*a - 258756843222138625660
> I`SeriesPrinting := true;
> p;
p
> a;
a
> p - a^4;
-2*a^2 - 2*a + (a - 2)*p + (-a^2 - 1)*p^2 - a^2*p^3 + (-2*a - 1)*p^4 + (-a^2 - 
    2*a)*p^5 + (-a^2 + 2*a - 2)*p^6 + (-a^2 + 1)*p^7 + (2*a^2 + 2*a)*p^8 + a*p^9
    + (-2*a - 2)*p^10 + (-2*a^2 + 1)*p^11 + (-2*a^2 + 2*a + 2)*p^12 + (-2*a^2 +
    2*a + 2)*p^13 + (-a^2 - a + 1)*p^14 + (2*a^2 + 1)*p^15 + (a^2 + 2)*p^16 - 
    a*p^17 + (-2*a^2 + a + 1)*p^18 + (-2*a^2 - 1)*p^19 + (-a - 2)*p^20 + (2*a^2
    + a - 2)*p^21 + (2*a^2 - 2*a)*p^22 + (-2*a^2 - a - 1)*p^23 + (-a - 1)*p^24 +
    (-a^2 + 2)*p^25 + (-2*a^2 - 2*a + 1)*p^26 + (2*a^2 - a)*p^27 + (a - 2)*p^28
    + (-a^2 - 2*a - 1)*p^29
> I`SeriesPrinting := false;
Now that I has SeriesPrinting on, the element of I prints as a series in the uniformizing element (which is the prime) with coefficients in the extension that are identical to their coercion into the residue class field. With no series printing at all the element prints as a polynomial in the inertia element with its p-adic coefficients printing as integers.

> P<x> := PolynomialRing(I);
> L<b, a> := LocalRing(I, x^2 + 5);
> b;
b
> a;
a
> b - a;
-a + b
> b - a + a*b^2 + 5*a^3;   
318726006651259488600*a^2 + 264230431886649961879*a - 115681249486688052215 + b
With no series printing the elements print as polynomials in the uniformizing element with coefficients in the inertia ring which print according to the SeriesPrinting attribute of their parent.

> L`SeriesPrinting := true;
> b;
b
> a;
a
> b - a;
-a + b
> b - a + a*b^2 + 5*a^3;
-a + b + (-a - 2)*b^2 + (-a^2 + 1)*b^4 + (a^2 - 2)*b^6 + (2*a^2 - a + 1)*b^8 + 
    (-a^2 + 2*a + 2)*b^10 + (2*a^2 - 2*a)*b^12 + (-a^2 + 2)*b^14 + (-a^2 - a - 
    1)*b^16 - b^18 + (-a^2 - 2*a - 2)*b^20 + (2*a^2 + a + 2)*b^22 + (-a^2 - 2*a
    - 2)*b^24 + (a^2 - 2*a - 1)*b^26 - b^28 + (-a^2 - 2*a - 2)*b^30 + (2*a^2 - 
    2*a - 2)*b^32 + (-a^2 - 2*a + 2)*b^34 + 2*a*b^36 + (-2*a^2 + a - 1)*b^38 + 
    (-a^2 + 2*a - 1)*b^40 + (-2*a^2 - a + 1)*b^42 + (-2*a^2 + a)*b^44 + (-2*a^2
    - 1)*b^46 + (2*a^2 - 2*a - 1)*b^48 + (a^2 - 2*a - 2)*b^50 + (-a^2 + 2*a + 
    2)*b^52 + (2*a^2 + 1)*b^54 + (-a^2 + 2*a + 2)*b^56 + (-2*a^2 - a + 1)*b^58

Again with SeriesPrinting the element prints as a series in the uniformizing element (now b) with coefficients in the inertia ring which are identical to their coercion into the residue class field. Note that the series printing attributes of subrings become uneffective when SeriesPrinting is on for the super ring but have an effect when it is off.

Elements with infinite precision can have infinite series expansions. In these cases when SeriesPrinting is on the series for the element will be printed to the default precision of the ring.

> R := pAdicRing(2);                                                    
> R!-1;
-1
> R`SeriesPrinting := true;
> R!-1;
1 + 2 + 2^2 + 2^3 + 2^4 + 2^5 + 2^6 + 2^7 + 2^8 + 2^9 + 2^10 + 2^11 + 2^12 + 
    2^13 + 2^14 + 2^15 + 2^16 + 2^17 + 2^18 + 2^19 + O(2^20)

More Creation Functions

All local rings and fields can also be created by a combination of the following functions. They have been provided to make creation easier by the variety of arguments they allow. In some cases these functions make it possible to create a local ring or field in one line whereas with the elementary functions several may be required. The LocalRing functions do not take local fields as arguments and similarly the LocalField functions do not take local rings as arguments.

LocalRing(p, f, n) : RngIntElt, RngIntElt, RngIntElt -> RngLoc
LocalField(p, f, n) : RngIntElt, RngIntElt, RngIntElt -> FldLoc
LocalRing(p, f) : RngIntElt, RngIntElt -> RngLoc
LocalField(p, f) : RngIntElt, RngIntElt -> FldLoc
Create the unramified extension of degree f of the p-adic ring (field) with precision n. If n is not given a finite precision is given to the resulting ring or field. The angle bracket notation can be used to assign a name to the uniformizing element and the root of unity of order p^f - 1 e.g. I<t,a> := LocalRing(p, f).
LocalRing(L, f, n) : RngLoc, RngIntElt -> RngLoc
LocalField(L, f, n) : FldLoc, RngIntElt, RngIntElt -> FldLoc
LocalRing(L, f) : RngLoc, RngIntElt -> RngLoc
LocalField(L, f) : FldLoc, RngIntElt -> FldLoc
Create the unramified extension of degree f of the local ring (field) L with precision n. If the precision is not specified then it is inherited from L. If L is an infinite precision ring (field) then the precision must be specified, otherwise L can be any local ring or field. The angle bracket notation can be used to assign a name to the uniformizing element and the inertial element e.g. I<t,a> := LocalRing(L, f).
LocalRing(p, g, n) : RngIntElt, RngUPolElt, RngIntElt -> RngLoc
LocalField(p, g, n) : RngIntElt, RngUPolElt, RngIntElt -> FldLoc
LocalRing(p, g) : RngIntElt, RngUPolElt -> RngLoc
LocalField(p, g) : RngIntElt, RngUPolElt -> FldLoc
    Precision: RngIntElt                Default: 20
Create the totally ramified or unramified extension of the p-adic ring (field) defined by the polynomial g which must be either Eisenstein or Inertial. The polynomial g should have coefficients in (or coercible into) the p-adic ring. Note that the precision n refers to the uniformizing element of the extension, not to that of the underlying p-adic ring (field). It must be at least as great as the degree of g if g is an Eisenstein polynomial (for the p-adic subring or subfield to have precision at least one). If n is not given the ring or field is created with infinite precision. The defining polynomial of the extension is the polynomial g reduced to precision n which may be different to g. The angle bracket notation can be used to assign a name to the uniformizing element and the inertial element e.g. L<pi, a> := LocalField(p, g).
LocalRing(L, g, n) : RngLoc, RngUPolElt, RngIntElt -> RngLoc
LocalField(L, g, n) : FldLoc, RngUPolElt, RngIntElt -> FldLoc
LocalRing(L, g) : RngLoc, RngUPolElt -> RngLoc
LocalField(L, g) : FldLoc, RngUPolElt -> FldLoc
    Precision: RngIntElt                Default: 20
Create the totally ramified extension of the ring (field) L defined by the Eisenstein polynomial g or the unramified extension defined by the Inertial polynomial g of degree e. The polynomial g should have coefficients in (or coercible into) L. If the precision n is not specified then it is set to be that of L, multiplied by e if g is Eisenstein. The precision n must be greater than e if g is Eisenstein for the ring to be created (so that the p-adic subring or subfield can have precision at least one). The defining polynomial of the extension is the polynomial g reduced to precision n which may be different to g. The angle bracket notation can be used to assign a name to the uniformizing element and the inertial element e.g. K<pi,a> := LocalRing(L, g).
LocalRing(p, f, g, n) : RngIntElt, RngIntElt, RngUPolElt, RngIntElt -> RngLoc
LocalField(p, f, g, n) : RngIntElt, RngIntElt, RngUPolElt, RngIntElt -> FldLoc
LocalRing(p, f, g, n) : RngIntElt, RngUPolElt, RngUPolElt, RngIntElt -> RngLoc
LocalField(p, f, g, n) : RngIntElt, RngUPolElt, RngUPolElt, RngIntElt -> FldLoc
LocalRing(p, f, g) : RngIntElt, RngIntElt, RngUPolElt -> RngLoc
LocalField(p, f, g) : RngIntElt, RngIntElt, RngUPolElt -> FldLoc
LocalRing(p, f, g) : RngIntElt, RngUPolElt, RngUPolElt -> RngLoc
LocalField(p, f, g) : RngIntElt, RngUPolElt, RngUPolElt -> FldLoc
    Precision: RngIntElt                Default: 20
Create the totally ramified extension defined by the Eisenstein polynomial g (or f) of the unramified extension of degree f or defined by the inertial polynomial f (or g) of the p-adic ring or field. The polynomials g (and f) should have coefficients in (or coercible into) the p-adic ring. Note that the precision n refers to the uniformizing element of the ramified extension. It must be at least as great as the degree of the Eisenstein polynomial given (for the p-adic subring or subfield to have precision at least one). The defining polynomials are the polynomials f and g reduced to precision n which may differ to f and g. If n is not given the ring or field is created with infinite precision. The angle bracket notation can be used to assign a name to the uniformizing element and the inertial element e.g. L<pi,a> := LocalField(p, f, g).

Example RngLoc_creation-ex (H59E3)

In this example we show several ways of creating local rings with different properties. The following is an example of creating a local ring that can be specified by a polynomial over an existing (or easily) created structure.

> R<x> := PolynomialRing(Integers());
> LocalRing(LocalRing(5, 5), x^4 + 5, 5);
Local Ring with Eisenstein polynomial x^4 + 5 over Inertia Ring 
of degree 5 over 5-adic Ring mod 5^2
However, if the polynomial that defines the local ring is strictly over the Inertia Ring of the ring to be created then it is neatest to create the ring in several steps as shown below.

> I<p, a> := LocalRing(3, 2);
> P<y> := PolynomialRing(I);
> L<b, c> := LocalRing(I, y^4 + 27*a^4*y^3 - 81*y^2 + 3*y + 3*a);
> L;
Local Ring with Eisenstein polynomial x^4 - 27*x^3 - 81*x^2 + 3*x + 3*a over I
Equivalently, since the precision of L was not specified, it could have been created using TotallyRamifiedExtension. A similar process is necessary when a ramified extension of an already ramified extension is made. In this case the polynomial must involve elements of the base ring in order for it to have a constant coefficient with valuation one, mandatory for the polynomial to be eisenstein.

> L<b, a> := LocalRing(5, x^4 - x^3 + 2*x^2 - x + 2, x^4 + 125*x^2 + 5);
> P<y> := PolynomialRing(L);
> T<d, c> := LocalRing(L, y^3 + b^4*a^5*y + b*a^2);
> T;
Local Ring with Eisenstein polynomial x^12 + (-31230*c^3 - 31230*c^2 - 31230*c -
62460)*x^10 + (1219141375*c^3 - 487656550*c^2 + 487656550*c - 975313100)*x^8 + 
(1561625*c^3 + 10930250*c^2 + 10149875*c + 10930250)*x^6 + (-31250*c^3 + 
14375*c^2 - 26875*c + 36250)*x^4 + (-68293750*c^3 + 87806250*c^2 + 
195125000)*x^2 + 10*c^2 + 15*c + 10 over Inertia Ring of degree 4 over 5-adic 
Ring
This is the same ring that was created in the example in Section Elementary Creation Functions.

Local Fields can be created similarly. A few simple examples are given.

> LocalField(3, 2, x^3 - 3);
Local Field with Eisenstein polynomial x^3 - 3 over Inertia Field of degree 2 
over 3-adic Field mod 3^20
> LocalField(3, 2);
Inertia Field of degree 2 over 3-adic Field mod 3^20
> LocalField(5, x^4 + 5);
Local Field with Eisenstein polynomial x^4 + 5 over 5-adic Field 
> RingOfIntegers($1);
Local Ring with Eisenstein polynomial x^4 + 5 over 5-adic Ring 
> FieldOfFractions($1);
Local Field with Eisenstein polynomial x^4 + 5 over 5-adic Field 
> LocalField(2, x^2 + x + 1);
Inertia Field of degree 2 over 2-adic Field

 [Next][Prev] [Right] [Left] [Up] [Index] [Root]