# Differential Operator Rings

## Creation

### `DifferentialOperatorRing(F): RngDiff -> RngDiffOp`

Returns the differential operator ring over the differential field $F$.

### `Example: Create Diff Op Ring (ex-42ff41)`

```magma
> F<z> := RationalDifferentialField(Rationals());
> R := DifferentialOperatorRing(F);
> R;
Differential operator ring over Differential Ring of Algebraic function field
defined over Rational Field by
$.2 - 4711
with derivation given by (1) d(z)

```

### `AssignNames(~R, S): RngDiffOp, [MonStgElt]`

Given a differential operator ring $R$ with $n$ indeterminates and a sequence $S$ of $n$ strings, assign the elements of $S$ to the names of the variables of $R$.

This procedure only changes the names used in the printing of the elements of $R$.

## Creation of Differential Operators

The easiest way to create an element in a given ring is to use the angle bracket construction to attach a name to the indeterminate of the differential operator ring. Other constructions are given below.

### `Name(R, i): RngDiffOp, RngIntElt -> RngDiffElt`

### `R . i: RngDiffOp, RngIntElt -> RngDiffOpElt`

The $i$-th indeterminate of the differential ring $R$, where $i$ must be $1$.

### `R ! s: RngDiffOp, RngElt -> RngDiffOpElt`

Coerce the element $s$ into the differential operator ring $R$. Elements that are coercible into $R$ are elements coercible into its underlying ring, sequences, and differential operators defined over the base ring of the coefficient ring of $R$.

When the base ring of $R$ is an algebraic differential field, elements of other differential operator rings over algebraic differential fields can be coerced into $R$ so long as the underlying rings of the differential fields are the same.

### `Zero(R): RngDiffOp -> RngDiffOpElt`

The zero element of the differential operator ring $R$.

### `One(R): RngDiffOp -> RngDiffOpElt`

The identity element of the differential operator ring $R$.

### `Example Diff Op Coercion (ex-facb79)`

```magma
> F<z> := RationalDifferentialField(Rationals());
> R<D> := DifferentialOperatorRing(F);
> R.1;
D
> R!(1/z);
1/z;
> R![1/2,0,5,z];
z*D^3 + 5*D^2 + 1/2
> S<T> := DifferentialOperatorRing(ChangeDerivation(F,z));
> R!T;
z*D
> S!D;
1/z*T

```
