Elements of function fields: extension

class sage.rings.function_field.element_polymod.FunctionFieldElement_polymod[source]

Bases: FunctionFieldElement

Elements of a finite extension of a function field.

EXAMPLES:

sage: K.<x> = FunctionField(QQ); R.<y> = K[]
sage: L.<y> = K.extension(y^2 - x*y + 4*x^3)
sage: x*y + 1/x^3
x*y + 1/x^3
>>> 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*y + Integer(4)*x**Integer(3), names=('y',)); (y,) = L._first_ngens(1)
>>> x*y + Integer(1)/x**Integer(3)
x*y + 1/x^3
K.<x> = FunctionField(QQ); R.<y> = K[]
L.<y> = K.extension(y^2 - x*y + 4*x^3)
x*y + 1/x^3
element()[source]

Return the underlying polynomial that represents the element.

EXAMPLES:

sage: K.<x> = FunctionField(QQ); R.<T> = K[]
sage: L.<y> = K.extension(T^2 - x*T + 4*x^3)
sage: f = y/x^2 + x/(x^2+1); f
1/x^2*y + x/(x^2 + 1)
sage: f.element()
1/x^2*y + x/(x^2 + 1)
>>> from sage.all import *
>>> K = FunctionField(QQ, names=('x',)); (x,) = K._first_ngens(1); R = K['T']; (T,) = R._first_ngens(1)
>>> L = K.extension(T**Integer(2) - x*T + Integer(4)*x**Integer(3), names=('y',)); (y,) = L._first_ngens(1)
>>> f = y/x**Integer(2) + x/(x**Integer(2)+Integer(1)); f
1/x^2*y + x/(x^2 + 1)
>>> f.element()
1/x^2*y + x/(x^2 + 1)
K.<x> = FunctionField(QQ); R.<T> = K[]
L.<y> = K.extension(T^2 - x*T + 4*x^3)
f = y/x^2 + x/(x^2+1); f
f.element()
is_nth_power(n)[source]

Return whether this element is an n-th power in the function field.

INPUT:

  • n – integer

ALGORITHM:

If n is a power of the characteristic of the field and the constant base field is perfect, then this uses the algorithm described in Proposition 12 of [GiTr1996].

See also

nth_root()

EXAMPLES:

sage: # needs sage.rings.finite_rings
sage: K.<x> = FunctionField(GF(4))
sage: R.<y> = K[]
sage: L.<y> = K.extension(y^2 - x)
sage: y.is_nth_power(2)
False
sage: L(x).is_nth_power(2)
True
>>> from sage.all import *
>>> # needs sage.rings.finite_rings
>>> K = FunctionField(GF(Integer(4)), 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)
>>> y.is_nth_power(Integer(2))
False
>>> L(x).is_nth_power(Integer(2))
True
# needs sage.rings.finite_rings
K.<x> = FunctionField(GF(4))
R.<y> = K[]
L.<y> = K.extension(y^2 - x)
y.is_nth_power(2)
L(x).is_nth_power(2)
list()[source]

Return the list of the coefficients representing the element.

If the function field is \(K[y]/(f(y))\), then return the coefficients of the reduced presentation of the element as a polynomial in \(K[y]\).

EXAMPLES:

sage: K.<x> = FunctionField(QQ); R.<y> = K[]
sage: L.<y> = K.extension(y^2 - x*y + 4*x^3)
sage: a = ~(2*y + 1/x); a
(-1/8*x^2/(x^5 + 1/8*x^2 + 1/16))*y + (1/8*x^3 + 1/16*x)/(x^5 + 1/8*x^2 + 1/16)
sage: a.list()
[(1/8*x^3 + 1/16*x)/(x^5 + 1/8*x^2 + 1/16), -1/8*x^2/(x^5 + 1/8*x^2 + 1/16)]
sage: (x*y).list()
[0, x]
>>> 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*y + Integer(4)*x**Integer(3), names=('y',)); (y,) = L._first_ngens(1)
>>> a = ~(Integer(2)*y + Integer(1)/x); a
(-1/8*x^2/(x^5 + 1/8*x^2 + 1/16))*y + (1/8*x^3 + 1/16*x)/(x^5 + 1/8*x^2 + 1/16)
>>> a.list()
[(1/8*x^3 + 1/16*x)/(x^5 + 1/8*x^2 + 1/16), -1/8*x^2/(x^5 + 1/8*x^2 + 1/16)]
>>> (x*y).list()
[0, x]
K.<x> = FunctionField(QQ); R.<y> = K[]
L.<y> = K.extension(y^2 - x*y + 4*x^3)
a = ~(2*y + 1/x); a
a.list()
(x*y).list()
nth_root(n)[source]

Return an n-th root of this element in the function field.

INPUT:

  • n – integer

OUTPUT:

Returns an element a in the function field such that this element equals \(a^n\). Raises an error if no such element exists.

ALGORITHM:

If n is a power of the characteristic of the field and the constant base field is perfect, then this uses the algorithm described in Proposition 12 of [GiTr1996].

See also

is_nth_power()

EXAMPLES:

sage: K.<x> = FunctionField(GF(3))
sage: R.<y> = K[]
sage: L.<y> = K.extension(y^2 - x)
sage: L(y^3).nth_root(3)
y
sage: L(y^9).nth_root(-9)
1/x*y
>>> from sage.all import *
>>> K = FunctionField(GF(Integer(3)), 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(y**Integer(3)).nth_root(Integer(3))
y
>>> L(y**Integer(9)).nth_root(-Integer(9))
1/x*y
K.<x> = FunctionField(GF(3))
R.<y> = K[]
L.<y> = K.extension(y^2 - x)
L(y^3).nth_root(3)
L(y^9).nth_root(-9)

This also works for inseparable extensions:

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