Elements of function fields: rational

class sage.rings.function_field.element_rational.FunctionFieldElement_rational[source]

Bases: FunctionFieldElement

Elements of a rational function field.

EXAMPLES:

sage: K.<t> = FunctionField(QQ); K
Rational function field in t over Rational Field
sage: t^2 + 3/2*t
t^2 + 3/2*t
sage: FunctionField(QQ,'t').gen()^3
t^3
>>> from sage.all import *
>>> K = FunctionField(QQ, names=('t',)); (t,) = K._first_ngens(1); K
Rational function field in t over Rational Field
>>> t**Integer(2) + Integer(3)/Integer(2)*t
t^2 + 3/2*t
>>> FunctionField(QQ,'t').gen()**Integer(3)
t^3
K.<t> = FunctionField(QQ); K
t^2 + 3/2*t
FunctionField(QQ,'t').gen()^3
denominator()[source]

Return the denominator of the rational function.

EXAMPLES:

sage: K.<t> = FunctionField(QQ)
sage: f = (t+1) / (t^2 - 1/3); f
(t + 1)/(t^2 - 1/3)
sage: f.denominator()
t^2 - 1/3
>>> from sage.all import *
>>> K = FunctionField(QQ, names=('t',)); (t,) = K._first_ngens(1)
>>> f = (t+Integer(1)) / (t**Integer(2) - Integer(1)/Integer(3)); f
(t + 1)/(t^2 - 1/3)
>>> f.denominator()
t^2 - 1/3
K.<t> = FunctionField(QQ)
f = (t+1) / (t^2 - 1/3); f
f.denominator()
element()[source]

Return the underlying fraction field element that represents the element.

EXAMPLES:

sage: K.<t> = FunctionField(GF(7))
sage: t.element()
t
sage: type(t.element())                                                     # needs sage.libs.ntl
<... 'sage.rings.fraction_field_FpT.FpTElement'>

sage: # needs sage.rings.finite_rings
sage: K.<t> = FunctionField(GF(131101))
sage: t.element()
t
sage: type(t.element())
<... 'sage.rings.fraction_field_element.FractionFieldElement_1poly_field'>
>>> from sage.all import *
>>> K = FunctionField(GF(Integer(7)), names=('t',)); (t,) = K._first_ngens(1)
>>> t.element()
t
>>> type(t.element())                                                     # needs sage.libs.ntl
<... 'sage.rings.fraction_field_FpT.FpTElement'>

>>> # needs sage.rings.finite_rings
>>> K = FunctionField(GF(Integer(131101)), names=('t',)); (t,) = K._first_ngens(1)
>>> t.element()
t
>>> type(t.element())
<... 'sage.rings.fraction_field_element.FractionFieldElement_1poly_field'>
K.<t> = FunctionField(GF(7))
t.element()
type(t.element())                                                     # needs sage.libs.ntl
# needs sage.rings.finite_rings
K.<t> = FunctionField(GF(131101))
t.element()
type(t.element())
factor()[source]

Factor the rational function.

EXAMPLES:

sage: # needs sage.libs.pari
sage: K.<t> = FunctionField(QQ)
sage: f = (t+1) / (t^2 - 1/3)
sage: f.factor()
(t + 1) * (t^2 - 1/3)^-1
sage: (7*f).factor()
(7) * (t + 1) * (t^2 - 1/3)^-1
sage: ((7*f).factor()).unit()
7
sage: (f^3).factor()
(t + 1)^3 * (t^2 - 1/3)^-3
>>> from sage.all import *
>>> # needs sage.libs.pari
>>> K = FunctionField(QQ, names=('t',)); (t,) = K._first_ngens(1)
>>> f = (t+Integer(1)) / (t**Integer(2) - Integer(1)/Integer(3))
>>> f.factor()
(t + 1) * (t^2 - 1/3)^-1
>>> (Integer(7)*f).factor()
(7) * (t + 1) * (t^2 - 1/3)^-1
>>> ((Integer(7)*f).factor()).unit()
7
>>> (f**Integer(3)).factor()
(t + 1)^3 * (t^2 - 1/3)^-3
# needs sage.libs.pari
K.<t> = FunctionField(QQ)
f = (t+1) / (t^2 - 1/3)
f.factor()
(7*f).factor()
((7*f).factor()).unit()
(f^3).factor()
inverse_mod(I)[source]

Return an inverse of the element modulo the integral ideal \(I\), if \(I\) and the element together generate the unit ideal.

EXAMPLES:

sage: K.<x> = FunctionField(QQ)
sage: O = K.maximal_order(); I = O.ideal(x^2 + 1)
sage: t = O(x + 1).inverse_mod(I); t
-1/2*x + 1/2
sage: (t*(x+1) - 1) in I
True
>>> from sage.all import *
>>> K = FunctionField(QQ, names=('x',)); (x,) = K._first_ngens(1)
>>> O = K.maximal_order(); I = O.ideal(x**Integer(2) + Integer(1))
>>> t = O(x + Integer(1)).inverse_mod(I); t
-1/2*x + 1/2
>>> (t*(x+Integer(1)) - Integer(1)) in I
True
K.<x> = FunctionField(QQ)
O = K.maximal_order(); I = O.ideal(x^2 + 1)
t = O(x + 1).inverse_mod(I); t
(t*(x+1) - 1) in I
is_nth_power(n)[source]

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

INPUT:

  • n – integer

OUTPUT:

Returns True if there is an element \(a\) in the function field such that this element equals \(a^n\).

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 Lemma 3 of [GiTr1996].

See also

nth_root()

EXAMPLES:

sage: # needs sage.rings.finite_rings
sage: K.<x> = FunctionField(GF(3))
sage: f = (x+1)/(x-1)
sage: f.is_nth_power(1)
True
sage: f.is_nth_power(3)                                                     # needs sage.modules
False
sage: (f^3).is_nth_power(3)                                                 # needs sage.modules
True
sage: (f^9).is_nth_power(-9)                                                # needs sage.modules
True
>>> from sage.all import *
>>> # needs sage.rings.finite_rings
>>> K = FunctionField(GF(Integer(3)), names=('x',)); (x,) = K._first_ngens(1)
>>> f = (x+Integer(1))/(x-Integer(1))
>>> f.is_nth_power(Integer(1))
True
>>> f.is_nth_power(Integer(3))                                                     # needs sage.modules
False
>>> (f**Integer(3)).is_nth_power(Integer(3))                                                 # needs sage.modules
True
>>> (f**Integer(9)).is_nth_power(-Integer(9))                                                # needs sage.modules
True
# needs sage.rings.finite_rings
K.<x> = FunctionField(GF(3))
f = (x+1)/(x-1)
f.is_nth_power(1)
f.is_nth_power(3)                                                     # needs sage.modules
(f^3).is_nth_power(3)                                                 # needs sage.modules
(f^9).is_nth_power(-9)                                                # needs sage.modules
is_square()[source]

Return whether the element is a square.

EXAMPLES:

sage: K.<t> = FunctionField(QQ)
sage: t.is_square()
False
sage: (t^2/4).is_square()
True
sage: f = 9 * (t+1)^6 / (t^2 - 2*t + 1); f.is_square()
True

sage: K.<t> = FunctionField(GF(5))
sage: (-t^2).is_square()                                                    # needs sage.libs.pari
True
sage: (-t^2).sqrt()                                                         # needs sage.libs.pari
2*t
>>> from sage.all import *
>>> K = FunctionField(QQ, names=('t',)); (t,) = K._first_ngens(1)
>>> t.is_square()
False
>>> (t**Integer(2)/Integer(4)).is_square()
True
>>> f = Integer(9) * (t+Integer(1))**Integer(6) / (t**Integer(2) - Integer(2)*t + Integer(1)); f.is_square()
True

>>> K = FunctionField(GF(Integer(5)), names=('t',)); (t,) = K._first_ngens(1)
>>> (-t**Integer(2)).is_square()                                                    # needs sage.libs.pari
True
>>> (-t**Integer(2)).sqrt()                                                         # needs sage.libs.pari
2*t
K.<t> = FunctionField(QQ)
t.is_square()
(t^2/4).is_square()
f = 9 * (t+1)^6 / (t^2 - 2*t + 1); f.is_square()
K.<t> = FunctionField(GF(5))
(-t^2).is_square()                                                    # needs sage.libs.pari
(-t^2).sqrt()                                                         # needs sage.libs.pari
list()[source]

Return a list with just the element.

The list represents the element when the rational function field is viewed as a (one-dimensional) vector space over itself.

EXAMPLES:

sage: K.<t> = FunctionField(QQ)
sage: t.list()
[t]
>>> from sage.all import *
>>> K = FunctionField(QQ, names=('t',)); (t,) = K._first_ngens(1)
>>> t.list()
[t]
K.<t> = FunctionField(QQ)
t.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 rational 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 Corollary 3 of [GiTr1996].

See also

is_nth_power()

EXAMPLES:

sage: K.<x> = FunctionField(GF(3))
sage: f = (x+1)/(x+2)
sage: f.nth_root(1)
(x + 1)/(x + 2)
sage: f.nth_root(3)
Traceback (most recent call last):
...
ValueError: element is not an n-th power
sage: (f^3).nth_root(3)                                                     # needs sage.modules
(x + 1)/(x + 2)
sage: (f^9).nth_root(-9)                                                    # needs sage.modules
(x + 2)/(x + 1)
>>> from sage.all import *
>>> K = FunctionField(GF(Integer(3)), names=('x',)); (x,) = K._first_ngens(1)
>>> f = (x+Integer(1))/(x+Integer(2))
>>> f.nth_root(Integer(1))
(x + 1)/(x + 2)
>>> f.nth_root(Integer(3))
Traceback (most recent call last):
...
ValueError: element is not an n-th power
>>> (f**Integer(3)).nth_root(Integer(3))                                                     # needs sage.modules
(x + 1)/(x + 2)
>>> (f**Integer(9)).nth_root(-Integer(9))                                                    # needs sage.modules
(x + 2)/(x + 1)
K.<x> = FunctionField(GF(3))
f = (x+1)/(x+2)
f.nth_root(1)
f.nth_root(3)
(f^3).nth_root(3)                                                     # needs sage.modules
(f^9).nth_root(-9)                                                    # needs sage.modules
numerator()[source]

Return the numerator of the rational function.

EXAMPLES:

sage: K.<t> = FunctionField(QQ)
sage: f = (t+1) / (t^2 - 1/3); f
(t + 1)/(t^2 - 1/3)
sage: f.numerator()
t + 1
>>> from sage.all import *
>>> K = FunctionField(QQ, names=('t',)); (t,) = K._first_ngens(1)
>>> f = (t+Integer(1)) / (t**Integer(2) - Integer(1)/Integer(3)); f
(t + 1)/(t^2 - 1/3)
>>> f.numerator()
t + 1
K.<t> = FunctionField(QQ)
f = (t+1) / (t^2 - 1/3); f
f.numerator()
sqrt(all=False)[source]

Return the square root of the rational function.

EXAMPLES:

sage: K.<t> = FunctionField(QQ)
sage: f = t^2 - 2 + 1/t^2; f.sqrt()
(t^2 - 1)/t
sage: f = t^2; f.sqrt(all=True)
[t, -t]
>>> from sage.all import *
>>> K = FunctionField(QQ, names=('t',)); (t,) = K._first_ngens(1)
>>> f = t**Integer(2) - Integer(2) + Integer(1)/t**Integer(2); f.sqrt()
(t^2 - 1)/t
>>> f = t**Integer(2); f.sqrt(all=True)
[t, -t]
K.<t> = FunctionField(QQ)
f = t^2 - 2 + 1/t^2; f.sqrt()
f = t^2; f.sqrt(all=True)
valuation(place)[source]

Return the valuation of the rational function at the place.

Rational function field places are associated with irreducible polynomials.

INPUT:

  • place – a place or an irreducible polynomial

EXAMPLES:

sage: K.<t> = FunctionField(QQ)
sage: f = (t - 1)^2*(t + 1)/(t^2 - 1/3)^3
sage: f.valuation(t - 1)
2
sage: f.valuation(t)
0
sage: f.valuation(t^2 - 1/3)
-3

sage: K.<x> = FunctionField(GF(2))
sage: p = K.places_finite()[0]                                              # needs sage.libs.pari
sage: (1/x^2).valuation(p)                                                  # needs sage.libs.pari
-2
>>> from sage.all import *
>>> K = FunctionField(QQ, names=('t',)); (t,) = K._first_ngens(1)
>>> f = (t - Integer(1))**Integer(2)*(t + Integer(1))/(t**Integer(2) - Integer(1)/Integer(3))**Integer(3)
>>> f.valuation(t - Integer(1))
2
>>> f.valuation(t)
0
>>> f.valuation(t**Integer(2) - Integer(1)/Integer(3))
-3

>>> K = FunctionField(GF(Integer(2)), names=('x',)); (x,) = K._first_ngens(1)
>>> p = K.places_finite()[Integer(0)]                                              # needs sage.libs.pari
>>> (Integer(1)/x**Integer(2)).valuation(p)                                                  # needs sage.libs.pari
-2
K.<t> = FunctionField(QQ)
f = (t - 1)^2*(t + 1)/(t^2 - 1/3)^3
f.valuation(t - 1)
f.valuation(t)
f.valuation(t^2 - 1/3)
K.<x> = FunctionField(GF(2))
p = K.places_finite()[0]                                              # needs sage.libs.pari
(1/x^2).valuation(p)                                                  # needs sage.libs.pari