# Derivations of function fields: extension#

class sage.rings.function_field.derivations_polymod.FunctionFieldDerivation_inseparable(parent, u=None)[source]#

Initialize this derivation.

INPUT:

• `parent` – the parent of this derivation

• `u` – a parameter describing the derivation

EXAMPLES:

```sage: K.<x> = FunctionField(GF(2))
sage: R.<y> = K[]
sage: L.<y> = K.extension(y^2 - x)
sage: d = L.derivation()
```
```>>> from sage.all import *
>>> K = FunctionField(GF(Integer(2)), names=('x',)); (x,) = K._first_ngens(1)
>>> R = K['y']; (y,) = R._first_ngens(1)
>>> L = K.extension(y**Integer(2) - x, names=('y',)); (y,) = L._first_ngens(1)
>>> d = L.derivation()
```

This also works for iterated non-monic extensions:

```sage: K.<x> = FunctionField(GF(2))
sage: R.<y> = K[]
sage: L.<y> = K.extension(y^2 - 1/x)
sage: R.<z> = L[]
sage: M.<z> = L.extension(z^2*y - x^3)
sage: M.derivation()
d/dz
```
```>>> from sage.all import *
>>> K = FunctionField(GF(Integer(2)), names=('x',)); (x,) = K._first_ngens(1)
>>> R = K['y']; (y,) = R._first_ngens(1)
>>> L = K.extension(y**Integer(2) - Integer(1)/x, names=('y',)); (y,) = L._first_ngens(1)
>>> R = L['z']; (z,) = R._first_ngens(1)
>>> M = L.extension(z**Integer(2)*y - x**Integer(3), names=('z',)); (z,) = M._first_ngens(1)
>>> M.derivation()
d/dz
```

We can also create a multiple of the canonical derivation:

```sage: M.derivation([x])
x*d/dz
```
```>>> from sage.all import *
>>> M.derivation([x])
x*d/dz
```
class sage.rings.function_field.derivations_polymod.FunctionFieldDerivation_separable(parent, d)[source]#

Derivations of separable extensions.

EXAMPLES:

```sage: K.<x> = FunctionField(QQ)
sage: R.<y> = K[]
sage: L.<y> = K.extension(y^2 - x)
sage: L.derivation()
d/dx
```
```>>> from sage.all import *
>>> K = FunctionField(QQ, names=('x',)); (x,) = K._first_ngens(1)
>>> R = K['y']; (y,) = R._first_ngens(1)
>>> L = K.extension(y**Integer(2) - x, names=('y',)); (y,) = L._first_ngens(1)
>>> L.derivation()
d/dx
```
class sage.rings.function_field.derivations_polymod.FunctionFieldHigherDerivation(field)[source]#

Bases: `Map`

Base class of higher derivations on function fields.

INPUT:

• `field` – function field on which the derivation operates

EXAMPLES:

```sage: F.<x> = FunctionField(GF(2))
sage: F.higher_derivation()
Higher derivation map:
From: Rational function field in x over Finite Field of size 2
To:   Rational function field in x over Finite Field of size 2
```
```>>> from sage.all import *
>>> F = FunctionField(GF(Integer(2)), names=('x',)); (x,) = F._first_ngens(1)
>>> F.higher_derivation()
Higher derivation map:
From: Rational function field in x over Finite Field of size 2
To:   Rational function field in x over Finite Field of size 2
```
class sage.rings.function_field.derivations_polymod.FunctionFieldHigherDerivation_char_zero(field)[source]#

Higher derivations of function fields of characteristic zero.

INPUT:

• `field` – function field on which the derivation operates

EXAMPLES:

```sage: K.<x> = FunctionField(QQ); _.<Y> = K[]
sage: L.<y> = K.extension(Y^3 + x + x^3*Y)
sage: h = L.higher_derivation()
sage: h
Higher derivation map:
From: Function field in y defined by y^3 + x^3*y + x
To:   Function field in y defined by y^3 + x^3*y + x
sage: h(y,1) == -(3*x^2*y+1)/(3*y^2+x^3)
True
sage: h(y^2,1) == -2*y*(3*x^2*y+1)/(3*y^2+x^3)
True
sage: e = L.random_element()
sage: h(h(e,1),1) == 2*h(e,2)
True
sage: h(h(h(e,1),1),1) == 3*2*h(e,3)
True
```
```>>> from sage.all import *
>>> K = FunctionField(QQ, names=('x',)); (x,) = K._first_ngens(1); _ = K['Y']; (Y,) = _._first_ngens(1)
>>> L = K.extension(Y**Integer(3) + x + x**Integer(3)*Y, names=('y',)); (y,) = L._first_ngens(1)
>>> h = L.higher_derivation()
>>> h
Higher derivation map:
From: Function field in y defined by y^3 + x^3*y + x
To:   Function field in y defined by y^3 + x^3*y + x
>>> h(y,Integer(1)) == -(Integer(3)*x**Integer(2)*y+Integer(1))/(Integer(3)*y**Integer(2)+x**Integer(3))
True
>>> h(y**Integer(2),Integer(1)) == -Integer(2)*y*(Integer(3)*x**Integer(2)*y+Integer(1))/(Integer(3)*y**Integer(2)+x**Integer(3))
True
>>> e = L.random_element()
>>> h(h(e,Integer(1)),Integer(1)) == Integer(2)*h(e,Integer(2))
True
>>> h(h(h(e,Integer(1)),Integer(1)),Integer(1)) == Integer(3)*Integer(2)*h(e,Integer(3))
True
```
class sage.rings.function_field.derivations_polymod.FunctionFieldHigherDerivation_global(field)[source]#

Higher derivations of global function fields.

INPUT:

• `field` – function field on which the derivation operates

EXAMPLES:

```sage: K.<x> = FunctionField(GF(2)); _.<Y> = K[]
sage: L.<y> = K.extension(Y^3 + x + x^3*Y)
sage: h = L.higher_derivation()
sage: h
Higher derivation map:
From: Function field in y defined by y^3 + x^3*y + x
To:   Function field in y defined by y^3 + x^3*y + x
sage: h(y^2, 2)
((x^7 + 1)/x^2)*y^2 + x^3*y
```
```>>> from sage.all import *
>>> K = FunctionField(GF(Integer(2)), names=('x',)); (x,) = K._first_ngens(1); _ = K['Y']; (Y,) = _._first_ngens(1)
>>> L = K.extension(Y**Integer(3) + x + x**Integer(3)*Y, names=('y',)); (y,) = L._first_ngens(1)
>>> h = L.higher_derivation()
>>> h
Higher derivation map:
From: Function field in y defined by y^3 + x^3*y + x
To:   Function field in y defined by y^3 + x^3*y + x
>>> h(y**Integer(2), Integer(2))
((x^7 + 1)/x^2)*y^2 + x^3*y
```
class sage.rings.function_field.derivations_polymod.RationalFunctionFieldHigherDerivation_global(field)[source]#

Higher derivations of rational function fields over finite fields.

INPUT:

• `field` – function field on which the derivation operates

EXAMPLES:

```sage: F.<x> = FunctionField(GF(2))
sage: h = F.higher_derivation()
sage: h
Higher derivation map:
From: Rational function field in x over Finite Field of size 2
To:   Rational function field in x over Finite Field of size 2
sage: h(x^2, 2)
1
```
```>>> from sage.all import *
>>> F = FunctionField(GF(Integer(2)), names=('x',)); (x,) = F._first_ngens(1)
>>> h = F.higher_derivation()
>>> h
Higher derivation map:
From: Rational function field in x over Finite Field of size 2
To:   Rational function field in x over Finite Field of size 2
>>> h(x**Integer(2), Integer(2))
1
```