# Element Operations on Differential Ring Elements

## Category and Parent

### `Category(s): RngDiffElt -> RngDiffElt`

### `Type(s): RngDiffElt -> RngDiffElt`

The category, or type, of the differential ring element $s$.

### `Parent(s): RngDiffElt -> RngDiff`

The parent of the differential ring element $s$.

## Arithmetic

All the usual arithmetic operations are possible for differential ring elements.

### `s + t: RngDiffElt, RngDiffElt -> RngDiffElt`

The sum of the two differential ring elements $s$ and $t$.

### `- s: RngDiffElt -> RngDiffElt`

The negation of the differential ring element $s$.

### `s - t: RngDiffElt, RngDiffElt -> RngDiffElt`

The difference between the differential ring elements $s$ and $t$.

### `s * t: RngDiffElt, RngDiffElt -> RngDiffElt`

The product of the differential ring elements $s$ and $t$.

### `s ^ n: RngDiffElt, RngIntElt -> RngDiffElt`

Given a differential ring element $s$ and an integer $n$, return the $n$-th power of $s$. If $s$ is invertible, $n$ may be negative.

### `s div t: RngDiffElt, RngDiffElt -> RngDiffElt`

Given the differential ring elements $s$ and $t$, return the exact division of $s$ by $t$, if $s$ is divisible by $t$.

### `s / t: RngDiffElt, RngDiffElt -> RngDiffElt`

Given the differential field elements $s$ and $t$, return $s$ divided by $t$.

## Predicates and Booleans

### `s eq t: RngDiffElt, RngDiffElt -> BoolElt`

Return `true` iff the differential ring elements $s$ and $t$ are exactly the same.

### `IsZero(s): RngDiffElt -> BoolElt`

Return `true` iff the differential ring element $s$ is the zero element of its parent.

### `IsOne(s): RngDiffElt -> BoolElt`

Return `true` iff the differential ring element $s$ is the unity element of its parent.

### `IsWeaklyEqual(s, t): RngDiffElt, RngDiffElt -> BoolElt`

Return `true` if and only if the differential ring element $s$ is weakly equal to the differential ring element $t$.

### `IsWeaklyZero(s): RngDiffElt -> BoolElt`

Return `true` if and only if the differential ring element $s$ is weakly equal to the zero element of its parent.

### `IsOrderTerm(s): RngDiffElt -> BoolElt`

### `IsOrderTerm(s): RngSerElt -> BoolElt`

Return `true` if and only if the differential ring element $s$ is purely an order term of a differential series ring.

### `Example: Diff Ring Elts Booleans (ex-61c4b6)`

This examples shows the booleans for various differential rings.

```magma
> F<z> := RationalDifferentialField(Rationals());
> S<t> := DifferentialLaurentSeriesRing(Rationals());
> IsOne(F!1);
true
> t eq t+O(t^2);
false
> IsWeaklyEqual(t, t+O(t^2));
true
> IsWeaklyZero(t^(-1));
false
> IsWeaklyZero(O(t));
true
> IsOrderTerm(t+O(t^2));
false
> IsOrderTerm(O(t));
true

```

## Coefficients and Terms

### `O(s): RngDiffElt -> RngDiffElt`

Creates the order term of the differential series $s$.

### `Truncate(s): RngDiffElt -> RngDiffElt`

The known part of the differential series $s$.

### `Eltseq(s): RngDiffElt -> SeqEnum`

Returns the coefficients of the differential ring element $s$.

### `Exponents(s): RngDiffElt -> SeqEnum`

### `Exponents(s): RngSerElt -> SeqEnum`

Returns the interval from the valuation of $s$ to (including) the degree of $s$.

### `Example Coefficients Terms Algebraic Differential Elements (ex-18d9d7)`

```magma
> F<z> := RationalDifferentialField(Rationals());
> _<X> := PolynomialRing(F);
> K<x>, mp := ext<F|X^2+X+1>;
> seq := Eltseq(x^2);
> seq;
[ -1, -1 ]
> Universe(seq) eq F;
true

```

### `Example Coefficients Terms Differential Series (ex-4eef4b)`

```magma
> S<t> := DifferentialLaurentSeriesRing(Rationals());
> O(t+t^2);
O(t)
> Parent(O(t)) eq S;
true
> trunc := Truncate(t^(-1)+5*t^2 +O(t^4));
> trunc;
t^-1 + 5*t^2
> Parent(trunc) eq S;
true
> seq := Eltseq(trunc);
> seq;
[ 1, 0, 0, 5 ]
> Universe(seq) eq Rationals();
true
> Exponents(trunc);
[ -1 .. 2 ]

```

## Conjugates, Norm and Trace

### `MinimalPolynomial(s): RngDiffElt -> RngUPolElt`

The minimal polynomial of the differential field element $s$ over the base field.

### `Example Minimal Polynomial Differential Rings (ex-ecfdbc)`

```magma
> F<z> := RationalDifferentialField(Rationals());
> P<X> := PolynomialRing(F);
> K<x>, mp := ext<F|X^2+X+1>;
> f := MinimalPolynomial(x^2);
> f;
X^2 + X + 1
> Parent(f) eq P;
true
> g := MinimalPolynomial(x+3/2);
> g;
X^2 + -2*X + 7/4

```

## Derivatives and Differentials

### `Derivative(s): RngDiffElt -> RngDiffElt`

The image of $s$ under the derivation of the parent of $s$. Notice that it can be different to the “usual” derivative, as it relies on the defined derivation.

### `Differential(s): RngDiffElt -> RngDiffElt`

Returns the differential of $s$ in the algebraic differential field $F$, as a differential in the differential space of the underlying ring of $F$.

### `Example: Derivative Differential Diff Ring Elements (ex-396a0f)`

```magma
> F<z> := RationalDifferentialField(Rationals());
> Derivative(z^2 + 7/z);
(2*z^3 - 7)/z^2
> Differential(z);
(1) d(z)
> Differential(1/z+6+5*z);
((5*z^2 - 1)/z^2) d(z)
> S<t> := DifferentialLaurentSeriesRing(Rationals());
> Derivative(5 + 2*t + 3*t^2);
2*t + 6*t^2

```
