Operations on Structures

AssignNames(~L, S): RngPad, SeqEnum
AssignNames(~L, S): RngPadResExt, SeqEnum
AssignNames(~L, S): FldPad, SeqEnum

Assign a name to the generator of \(L\). The sequence must have only one element, which must be a string. This element is assigned to be the name of the generator when \(L\) is considered as a linear associative algebra over its base ring.

Characteristic(L): RngPad -> RngIntElt
Characteristic(L): RngPadRes -> RngIntElt
Characteristic(L): RngPadResExt -> RngIntElt
Characteristic(L): FldPad -> RngIntElt

The characteristic of the local ring or field \(L\).

# L: RngPad -> RngIntElt

The number of elements in the local ring or field \(L\). The cardinality is finite only if \(L\) is a quotient ring or a bounded free precision ring.

Iterating over the elements of a local ring is possible if it is bounded, but it will take time in proportion to the cardinality of \(L\). It is recommended only in the case of “small” local rings (i.e., rings for which the precision is be very small).

Name(L, k): RngPad, RngIntElt -> RngPadElt
Name(L, k): RngPadRes, RngIntElt -> RngPadResElt
Name(L, k): RngPadResExt, RngIntElt -> RngPadResExtElt
Name(L, k): FldPad, RngIntElt -> FldPadElt

Given a local ring or field \(L\) and an integer \(k\), return the generator of \(L\) if \(k\) is 1; otherwise, raise an error.

ChangePrecision(L, k): RngPad, Any -> RngPad
ChangePrecision(L, k): RngPad, Infty -> RngPad
ChangePrecision(~L, k): RngPad, Infty -> RngPad
ChangePrecision(L, k): RngPad, RngIntElt -> RngPad
ChangePrecision(~L, k): RngPad, RngIntElt -> RngPad
ChangePrecision(L, k): RngPadRes, RngIntElt -> RngPadRes
ChangePrecision(~L, k): RngPadRes, RngIntElt -> RngPadRes
ChangePrecision(L, k): RngPadResExt, RngIntElt -> RngPadResExt
ChangePrecision(~L, k): RngPadResExt, RngIntElt -> RngPadResExt
ChangePrecision(L, k): FldPad, RngIntElt -> FldPad
ChangePrecision(~L, k): FldPad, RngIntElt -> FldPad
ChangePrecision(L, k): FldPad, Any -> FldPad
ChangePrecision(L, k): FldPad, Infty -> FldPad
ChangePrecision(~L, k): FldPad, Infty -> FldPad

Given a local ring or field \(L\) and a non-negative single precision integer \(k\), change the maximum precision with which elements can be created to be \(k\). Depending on how \(L\) and its subrings have been constructed, there may be an upper bound (possibly infinite for free structures) on the precision to which \(L\) can be changed. For instance, the precision to which a defining polynomial has been given places a bound on the precision of the extension — no defining polynomial can be expanded beyond the precision with which it was originally specified.

L eq K: RngPad, RngPad -> BoolElt
L eq K: RngPadRes, RngPadRes -> BoolElt
L eq K: RngPadResExt, RngPadResExt -> BoolElt
L eq K: FldPad, FldPad -> BoolElt

Given local rings or fields \(L\) and \(K\), return whether or not \(L\) and \(K\) are the same object.

L ne K: RngPad, RngPad -> BoolElt
L ne K: RngPadRes, RngPadRes -> BoolElt
L ne K: RngPadResExt, RngPadResExt -> BoolElt
L ne K: FldPad, FldPad -> BoolElt

Given local rings or fields \(L\) and \(K\), return whether or not \(L\) and \(K\) are different objects.

Example: Changing Precision of Local Structures (ex-23c278)

Run in calculator (opens in a new tab)

> Zp := pAdicRing(5, 20);
> I<a> := UnramifiedExtension(Zp, 3);
> R<x> := PolynomialRing(I);
> L<b> := ext<I | x^3 + 5*a*x^2 + 5>;
> ChangePrecision(Zp, Infinity());
5-adic ring
> L;
Totally ramified extension defined by the polynomial x^3 + 5*a*x^2 + 5
 over Unramified extension defined by the polynomial x^3 + 3*x + 3
 over 5-adic ring mod 5^20
> ChangePrecision(~L, 50);
> L;
Totally ramified extension defined by the polynomial x^3 + 5*$.1*x^2 + 5
 over Unramified extension defined by the polynomial x^3 + 3*x + 3
 over 5-adic ring mod 5^17
> #L;
8758115402030106693273309895561975820501\\
6371367282235734816767743111942667866287\\
592914886772632598876953125
> AssignNames(~L, ["t"]);
> L.1;
t
> b;
b
> L eq ChangePrecision(L, 10);
false

Note that \(b\) is an element of the original ring \(L\) with precision \(60\) which is why it retains its print name.

Run in calculator (opens in a new tab)

Ramification Predicates

IsRamified(R): RngPad -> BoolElt
IsRamified(R): FldPad -> BoolElt
IsUnramified(R): RngPad -> BoolElt
IsUnramified(R): FldPad -> BoolElt
IsTotallyRamified(R): RngPad -> BoolElt
IsTotallyRamified(R): FldPad -> BoolElt

Return whether the local ring or field extension \(R\) is ramified, unramified, or totally ramified.

IsTamelyRamified(R): RngPad -> BoolElt
IsTamelyRamified(R): FldPad -> BoolElt
IsWildlyRamified(R): RngPad -> BoolElt
IsWildlyRamified(R): FldPad -> BoolElt

Return whether the local ring or field extension \(R\) is tamely ramified (the prime does not divide the ramification degree) or wildly ramified (the prime does divide the ramification degree).