# Structure Operations on Differential Operator Rings

## Category and Parent

Differential Operator Rings form the Magma category `RngDiffOp`. The notional power structures exist as parents of differential operator rings.

### `Category(R): RngDiffOp -> RngDiffOp`

### `Type(R): RngDiffOp -> RngDiffOp`

The category, or type, of the differential operator ring $R$.

### `Parent(R): RngDiffOp -> PowStr`

The power structure of the differential operator ring $R$.

## Related Structures

As outlined in the introduction, a differential operator ring $R$ is of the form $F[D]$, for a differential ring $F$. The ring $F$ is called the *base ring* or *coefficient ring* of $R$.

### `BaseRing(R): RngDiffOp -> Rng`

### `CoefficientRing(R): RngDiffOp -> Rng`

The base ring, or coefficient ring, of the differential operator ring $R$.

### `ConstantRing(R): RngDiffOp -> Rng`

The constant ring of the differential ring operator $R$.

## Derivation and Differential

By construction the variable $D$ of a differential operator ring $F[D]$ is related to the derivation $\delta_F$. That is why $\delta_F$ is also considered to be the derivation of $R$.

### `Derivation(R): RngDiffOp -> Map`

The derivation of the differential operator ring $R$.

### `Differential(R): RngDiffOp -> DiffFunElt`

The differential belonging to the derivation of the differential operator ring $R$. The derivation must have been constructed in such a way that it is defined by a differential.

### `Example: Diff Op Ring Related Structures (ex-fcdd49)`

```magma
> F<z> := RationalDifferentialField(Rationals());
> R<D> := DifferentialOperatorRing(F);
> BaseRing(R) eq F;
true
> Derivation(R);
Mapping from: RngDiff: F to RngDiff: F given by a rule [no inverse]
> Differential(R);
(1) d(z)

```

## Predicates and Booleans

### `R eq F: RngDiffOp, RngDiffOp -> BoolElt`

Returns `true` if and only if the differential operator rings $R$ and $F$ are the same.

### `IsIdentical(R, F): RngDiffOp, RngDiffOp -> BoolElt`

Returns `true` if and only if the differential operator rings $R$ and $F$ are identical.

### `IsDifferentialOperatorRing(R): . -> BoolElt`

Returns `true` if and only if the given argument is a differential operator ring.

### `HasProjectiveDerivation(R): RngDiffOp -> BoolElt`

Returns `true` iff $R$ is defined over a ring $F$ with derivation weakly of the form $(F.1)\cdot d/d(F.1)$.

### `HasZeroDerivation(R): RngDiffOp -> BoolElt`

Returns `true` iff the base ring of $R$ is an algebraic differential field or a differential series ring $F$ such that the derivation of $R$ acts as a (weak) zero derivation on $F.1$.

### `Example: Diff Op Ring Booleans (ex-74f01d)`

```magma
> F<z> := RationalDifferentialField(Rationals());
> R<D> := DifferentialOperatorRing(F);
> IsDifferentialOperatorRing(F);
false
> IsDifferentialOperatorRing(R);
true
> Derivation(R)(z);
1
> HasProjectiveDerivation(R);
false
> HasProjectiveDerivation(ChangeDerivation(R,z));
true
> HasZeroDerivation(R);
false

```

### `Example: Diff Op Ring Booleans LSR (ex-f354a2)`

```magma
> S<t> := DifferentialLaurentSeriesRing(Rationals());
> V<W> := DifferentialOperatorRing(S);
> IsDifferentialOperatorRing(V);
true
> Derivation(V)(t);
t
> HasProjectiveDerivation(V);
true
> HasZeroDerivation(V);
false
> P<Q>, mp := ChangeDerivation(V,3/t);
> IsDifferentialOperatorRing(P);
true
> HasProjectiveDerivation(P);
false
> X<y> := BaseRing(P);
> Q*y;
y*Q + 3

```

## Precision

### `RelativePrecisionOfDerivation(R): RngDiffOp -> RngElt`

The relative precision of the derivation of an operator ring over a Laurent series ring.

### `Example: Diff Op Rings Relative Precision (ex-1465b5)`

This example illustrates the relative precision of derivations of differential operatorrings.

```magma
> S<t>:=DifferentialLaurentSeriesRing(Rationals());
> RS<DS> := DifferentialOperatorRing(S);
> RelativePrecisionOfDerivation(RS);
Infinity
> RV<DV> := ChangeDerivation(RS, t^2+O(t^8));
> relprec := RelativePrecisionOfDerivation(RV);
> relprec;
6
> RelativePrecisionOfDerivation(BaseRing(RV)) eq relprec;
true

```
