# 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: strop (ex-23c278)`

```magma
> 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.

## 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).
