Orders of function fields: basis

class sage.rings.function_field.order_basis.FunctionFieldOrderInfinite_basis(basis, check=True)[source]

Bases: FunctionFieldOrderInfinite

Order given by a basis over the infinite maximal order of the base field.

INPUT:

  • basis – elements of the function field

  • check – boolean (default: True); if True, check the basis generates an order

EXAMPLES:

sage: K.<x> = FunctionField(GF(7)); R.<y> = K[]
sage: L.<y> = K.extension(y^4 + x*y + 4*x + 1)                                  # needs sage.rings.function_field
sage: O = L.equation_order_infinite(); O                                        # needs sage.rings.function_field
Infinite order in Function field in y defined by y^4 + x*y + 4*x + 1
>>> from sage.all import *
>>> K = FunctionField(GF(Integer(7)), names=('x',)); (x,) = K._first_ngens(1); R = K['y']; (y,) = R._first_ngens(1)
>>> L = K.extension(y**Integer(4) + x*y + Integer(4)*x + Integer(1), names=('y',)); (y,) = L._first_ngens(1)# needs sage.rings.function_field
>>> O = L.equation_order_infinite(); O                                        # needs sage.rings.function_field
Infinite order in Function field in y defined by y^4 + x*y + 4*x + 1
K.<x> = FunctionField(GF(7)); R.<y> = K[]
L.<y> = K.extension(y^4 + x*y + 4*x + 1)                                  # needs sage.rings.function_field
O = L.equation_order_infinite(); O                                        # needs sage.rings.function_field

The basis only defines an order if the module it generates is closed under multiplication and contains the identity element (only checked when check is True):

sage: O = L.order_infinite_with_basis([1, y, 1/x^2*y^2, y^3]); O                # needs sage.rings.function_field
Traceback (most recent call last):
...
ValueError: the module generated by basis (1, y, 1/x^2*y^2, y^3)
must be closed under multiplication
>>> from sage.all import *
>>> O = L.order_infinite_with_basis([Integer(1), y, Integer(1)/x**Integer(2)*y**Integer(2), y**Integer(3)]); O                # needs sage.rings.function_field
Traceback (most recent call last):
...
ValueError: the module generated by basis (1, y, 1/x^2*y^2, y^3)
must be closed under multiplication
O = L.order_infinite_with_basis([1, y, 1/x^2*y^2, y^3]); O                # needs sage.rings.function_field

The basis also has to be linearly independent and of the same rank as the degree of the function field of its elements (only checked when check is True):

sage: O = L.order_infinite_with_basis([1, y, 1/x^2*y^2, 1 + y]); O              # needs sage.rings.function_field
Traceback (most recent call last):
...
ValueError: The given basis vectors must be linearly independent.
>>> from sage.all import *
>>> O = L.order_infinite_with_basis([Integer(1), y, Integer(1)/x**Integer(2)*y**Integer(2), Integer(1) + y]); O              # needs sage.rings.function_field
Traceback (most recent call last):
...
ValueError: The given basis vectors must be linearly independent.
O = L.order_infinite_with_basis([1, y, 1/x^2*y^2, 1 + y]); O              # needs sage.rings.function_field

Note that 1 does not need to be an element of the basis, as long as it is in the module spanned by it:

sage: # needs sage.rings.function_field
sage: O = L.order_infinite_with_basis([1 + 1/x*y, 1/x*y, 1/x^2*y^2, 1/x^3*y^3]); O
Infinite order in Function field in y defined by y^4 + x*y + 4*x + 1
sage: O.basis()
(1/x*y + 1, 1/x*y, 1/x^2*y^2, 1/x^3*y^3)
>>> from sage.all import *
>>> # needs sage.rings.function_field
>>> O = L.order_infinite_with_basis([Integer(1) + Integer(1)/x*y, Integer(1)/x*y, Integer(1)/x**Integer(2)*y**Integer(2), Integer(1)/x**Integer(3)*y**Integer(3)]); O
Infinite order in Function field in y defined by y^4 + x*y + 4*x + 1
>>> O.basis()
(1/x*y + 1, 1/x*y, 1/x^2*y^2, 1/x^3*y^3)
# needs sage.rings.function_field
O = L.order_infinite_with_basis([1 + 1/x*y, 1/x*y, 1/x^2*y^2, 1/x^3*y^3]); O
O.basis()
basis()[source]

Return a basis of this order over the maximal order of the base field.

EXAMPLES:

sage: K.<x> = FunctionField(GF(7)); R.<y> = K[]
sage: L.<y> = K.extension(y^4 + x*y + 4*x + 1)                              # needs sage.rings.function_field
sage: O = L.equation_order()                                                # needs sage.rings.function_field
sage: O.basis()                                                             # needs sage.rings.function_field
(1, y, y^2, y^3)
>>> from sage.all import *
>>> K = FunctionField(GF(Integer(7)), names=('x',)); (x,) = K._first_ngens(1); R = K['y']; (y,) = R._first_ngens(1)
>>> L = K.extension(y**Integer(4) + x*y + Integer(4)*x + Integer(1), names=('y',)); (y,) = L._first_ngens(1)# needs sage.rings.function_field
>>> O = L.equation_order()                                                # needs sage.rings.function_field
>>> O.basis()                                                             # needs sage.rings.function_field
(1, y, y^2, y^3)
K.<x> = FunctionField(GF(7)); R.<y> = K[]
L.<y> = K.extension(y^4 + x*y + 4*x + 1)                              # needs sage.rings.function_field
O = L.equation_order()                                                # needs sage.rings.function_field
O.basis()                                                             # needs sage.rings.function_field
free_module()[source]

Return the free module formed by the basis over the maximal order of the base field.

EXAMPLES:

sage: K.<x> = FunctionField(GF(7)); R.<y> = K[]
sage: L.<y> = K.extension(y^4 + x*y + 4*x + 1)                              # needs sage.rings.function_field
sage: O = L.equation_order()                                                # needs sage.rings.function_field
sage: O.free_module()                                                       # needs sage.rings.function_field
Free module of degree 4 and rank 4 over Maximal order of Rational
function field in x over Finite Field of size 7
Echelon basis matrix:
[1 0 0 0]
[0 1 0 0]
[0 0 1 0]
[0 0 0 1]
>>> from sage.all import *
>>> K = FunctionField(GF(Integer(7)), names=('x',)); (x,) = K._first_ngens(1); R = K['y']; (y,) = R._first_ngens(1)
>>> L = K.extension(y**Integer(4) + x*y + Integer(4)*x + Integer(1), names=('y',)); (y,) = L._first_ngens(1)# needs sage.rings.function_field
>>> O = L.equation_order()                                                # needs sage.rings.function_field
>>> O.free_module()                                                       # needs sage.rings.function_field
Free module of degree 4 and rank 4 over Maximal order of Rational
function field in x over Finite Field of size 7
Echelon basis matrix:
[1 0 0 0]
[0 1 0 0]
[0 0 1 0]
[0 0 0 1]
K.<x> = FunctionField(GF(7)); R.<y> = K[]
L.<y> = K.extension(y^4 + x*y + 4*x + 1)                              # needs sage.rings.function_field
O = L.equation_order()                                                # needs sage.rings.function_field
O.free_module()                                                       # needs sage.rings.function_field
ideal(*gens)[source]

Return the fractional ideal generated by the elements in gens.

INPUT:

  • gens – list of generators or an ideal in a ring which coerces to this order

EXAMPLES:

sage: K.<y> = FunctionField(QQ)
sage: O = K.maximal_order()
sage: O.ideal(y)
Ideal (y) of Maximal order of Rational function field in y over Rational Field
sage: O.ideal([y,1/y]) == O.ideal(y,1/y) # multiple generators may be given as a list
True
>>> from sage.all import *
>>> K = FunctionField(QQ, names=('y',)); (y,) = K._first_ngens(1)
>>> O = K.maximal_order()
>>> O.ideal(y)
Ideal (y) of Maximal order of Rational function field in y over Rational Field
>>> O.ideal([y,Integer(1)/y]) == O.ideal(y,Integer(1)/y) # multiple generators may be given as a list
True
K.<y> = FunctionField(QQ)
O = K.maximal_order()
O.ideal(y)
O.ideal([y,1/y]) == O.ideal(y,1/y) # multiple generators may be given as a list

A fractional ideal of a nontrivial extension:

sage: K.<x> = FunctionField(QQ); R.<y> = K[]
sage: O = K.maximal_order_infinite()
sage: I = O.ideal(x^2 - 4)
sage: L.<y> = K.extension(y^2 - x^3 - 1)                                    # needs sage.rings.function_field
sage: S = L.order_infinite_with_basis([1, 1/x^2*y])                         # needs sage.rings.function_field
>>> from sage.all import *
>>> K = FunctionField(QQ, names=('x',)); (x,) = K._first_ngens(1); R = K['y']; (y,) = R._first_ngens(1)
>>> O = K.maximal_order_infinite()
>>> I = O.ideal(x**Integer(2) - Integer(4))
>>> L = K.extension(y**Integer(2) - x**Integer(3) - Integer(1), names=('y',)); (y,) = L._first_ngens(1)# needs sage.rings.function_field
>>> S = L.order_infinite_with_basis([Integer(1), Integer(1)/x**Integer(2)*y])                         # needs sage.rings.function_field
K.<x> = FunctionField(QQ); R.<y> = K[]
O = K.maximal_order_infinite()
I = O.ideal(x^2 - 4)
L.<y> = K.extension(y^2 - x^3 - 1)                                    # needs sage.rings.function_field
S = L.order_infinite_with_basis([1, 1/x^2*y])                         # needs sage.rings.function_field
ideal_with_gens_over_base(gens)[source]

Return the fractional ideal with basis gens over the maximal order of the base field.

It is not checked that gens really generates an ideal.

INPUT:

  • gens – list of elements that are a basis for the ideal over the maximal order of the base field

EXAMPLES:

We construct an ideal in a rational function field:

sage: K.<y> = FunctionField(QQ)
sage: O = K.maximal_order()
sage: I = O.ideal([y]); I
Ideal (y) of Maximal order of Rational function field in y over Rational Field
sage: I*I
Ideal (y^2) of Maximal order of Rational function field in y over Rational Field
>>> from sage.all import *
>>> K = FunctionField(QQ, names=('y',)); (y,) = K._first_ngens(1)
>>> O = K.maximal_order()
>>> I = O.ideal([y]); I
Ideal (y) of Maximal order of Rational function field in y over Rational Field
>>> I*I
Ideal (y^2) of Maximal order of Rational function field in y over Rational Field
K.<y> = FunctionField(QQ)
O = K.maximal_order()
I = O.ideal([y]); I
I*I

We construct some ideals in a nontrivial function field:

sage: # needs sage.rings.function_field
sage: K.<x> = FunctionField(GF(7)); R.<y> = K[]
sage: L.<y> = K.extension(y^2 - x^3 - 1)
sage: O = L.equation_order(); O
Order in Function field in y defined by y^2 + 6*x^3 + 6
sage: I = O.ideal_with_gens_over_base([1, y]);  I
Ideal (1) of Order in Function field in y defined by y^2 + 6*x^3 + 6
sage: I.module()
Free module of degree 2 and rank 2 over
 Maximal order of Rational function field in x over Finite Field of size 7
Echelon basis matrix:
[1 0]
[0 1]
>>> from sage.all import *
>>> # needs sage.rings.function_field
>>> K = FunctionField(GF(Integer(7)), names=('x',)); (x,) = K._first_ngens(1); R = K['y']; (y,) = R._first_ngens(1)
>>> L = K.extension(y**Integer(2) - x**Integer(3) - Integer(1), names=('y',)); (y,) = L._first_ngens(1)
>>> O = L.equation_order(); O
Order in Function field in y defined by y^2 + 6*x^3 + 6
>>> I = O.ideal_with_gens_over_base([Integer(1), y]);  I
Ideal (1) of Order in Function field in y defined by y^2 + 6*x^3 + 6
>>> I.module()
Free module of degree 2 and rank 2 over
 Maximal order of Rational function field in x over Finite Field of size 7
Echelon basis matrix:
[1 0]
[0 1]
# needs sage.rings.function_field
K.<x> = FunctionField(GF(7)); R.<y> = K[]
L.<y> = K.extension(y^2 - x^3 - 1)
O = L.equation_order(); O
I = O.ideal_with_gens_over_base([1, y]);  I
I.module()

There is no check if the resulting object is really an ideal:

sage: # needs sage.rings.function_field
sage: K.<x> = FunctionField(GF(7)); R.<y> = K[]
sage: L.<y> = K.extension(y^2 - x^3 - 1)
sage: O = L.equation_order()
sage: I = O.ideal_with_gens_over_base([y]); I
Ideal (y) of Order in Function field in y defined by y^2 + 6*x^3 + 6
sage: y in I
True
sage: y^2 in I
False
>>> from sage.all import *
>>> # needs sage.rings.function_field
>>> K = FunctionField(GF(Integer(7)), names=('x',)); (x,) = K._first_ngens(1); R = K['y']; (y,) = R._first_ngens(1)
>>> L = K.extension(y**Integer(2) - x**Integer(3) - Integer(1), names=('y',)); (y,) = L._first_ngens(1)
>>> O = L.equation_order()
>>> I = O.ideal_with_gens_over_base([y]); I
Ideal (y) of Order in Function field in y defined by y^2 + 6*x^3 + 6
>>> y in I
True
>>> y**Integer(2) in I
False
# needs sage.rings.function_field
K.<x> = FunctionField(GF(7)); R.<y> = K[]
L.<y> = K.extension(y^2 - x^3 - 1)
O = L.equation_order()
I = O.ideal_with_gens_over_base([y]); I
y in I
y^2 in I
polynomial()[source]

Return the defining polynomial of the function field of which this is an order.

EXAMPLES:

sage: K.<x> = FunctionField(GF(7)); R.<y> = K[]
sage: L.<y> = K.extension(y^4 + x*y + 4*x + 1)                              # needs sage.rings.function_field
sage: O = L.equation_order()                                                # needs sage.rings.function_field
sage: O.polynomial()                                                        # needs sage.rings.function_field
y^4 + x*y + 4*x + 1
>>> from sage.all import *
>>> K = FunctionField(GF(Integer(7)), names=('x',)); (x,) = K._first_ngens(1); R = K['y']; (y,) = R._first_ngens(1)
>>> L = K.extension(y**Integer(4) + x*y + Integer(4)*x + Integer(1), names=('y',)); (y,) = L._first_ngens(1)# needs sage.rings.function_field
>>> O = L.equation_order()                                                # needs sage.rings.function_field
>>> O.polynomial()                                                        # needs sage.rings.function_field
y^4 + x*y + 4*x + 1
K.<x> = FunctionField(GF(7)); R.<y> = K[]
L.<y> = K.extension(y^4 + x*y + 4*x + 1)                              # needs sage.rings.function_field
O = L.equation_order()                                                # needs sage.rings.function_field
O.polynomial()                                                        # needs sage.rings.function_field
class sage.rings.function_field.order_basis.FunctionFieldOrder_basis(basis, check=True)[source]

Bases: FunctionFieldOrder

Order given by a basis over the maximal order of the base field.

INPUT:

  • basis – list of elements of the function field

  • check – boolean (default: True); if True, check whether the module that basis generates forms an order

EXAMPLES:

sage: K.<x> = FunctionField(GF(7)); R.<y> = K[]
sage: L.<y> = K.extension(y^4 + x*y + 4*x + 1)                                  # needs sage.rings.function_field
sage: O = L.equation_order(); O                                                 # needs sage.rings.function_field
Order in Function field in y defined by y^4 + x*y + 4*x + 1
>>> from sage.all import *
>>> K = FunctionField(GF(Integer(7)), names=('x',)); (x,) = K._first_ngens(1); R = K['y']; (y,) = R._first_ngens(1)
>>> L = K.extension(y**Integer(4) + x*y + Integer(4)*x + Integer(1), names=('y',)); (y,) = L._first_ngens(1)# needs sage.rings.function_field
>>> O = L.equation_order(); O                                                 # needs sage.rings.function_field
Order in Function field in y defined by y^4 + x*y + 4*x + 1
K.<x> = FunctionField(GF(7)); R.<y> = K[]
L.<y> = K.extension(y^4 + x*y + 4*x + 1)                                  # needs sage.rings.function_field
O = L.equation_order(); O                                                 # needs sage.rings.function_field

The basis only defines an order if the module it generates is closed under multiplication and contains the identity element:

sage: K.<x> = FunctionField(QQ)
sage: R.<y> = K[]
sage: L.<y> = K.extension(y^5 - (x^3 + 2*x*y + 1/x))                            # needs sage.rings.function_field
sage: y.is_integral()                                                           # needs sage.rings.function_field
False
sage: L.order(y)                                                                # needs sage.rings.function_field
Traceback (most recent call last):
...
ValueError: the module generated by basis (1, y, y^2, y^3, y^4)
must be closed under multiplication
>>> 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(5) - (x**Integer(3) + Integer(2)*x*y + Integer(1)/x), names=('y',)); (y,) = L._first_ngens(1)# needs sage.rings.function_field
>>> y.is_integral()                                                           # needs sage.rings.function_field
False
>>> L.order(y)                                                                # needs sage.rings.function_field
Traceback (most recent call last):
...
ValueError: the module generated by basis (1, y, y^2, y^3, y^4)
must be closed under multiplication
K.<x> = FunctionField(QQ)
R.<y> = K[]
L.<y> = K.extension(y^5 - (x^3 + 2*x*y + 1/x))                            # needs sage.rings.function_field
y.is_integral()                                                           # needs sage.rings.function_field
L.order(y)                                                                # needs sage.rings.function_field

The basis also has to be linearly independent and of the same rank as the degree of the function field of its elements (only checked when check is True):

sage: # needs sage.rings.function_field
sage: L.order(L(x))
Traceback (most recent call last):
...
ValueError: basis (1, x, x^2, x^3, x^4) is not linearly independent
sage: from sage.rings.function_field.order_basis import FunctionFieldOrder_basis
sage: FunctionFieldOrder_basis((y,y,y^3,y^4,y^5))
Traceback (most recent call last):
...
ValueError: basis (y, y, y^3, y^4, 2*x*y + (x^4 + 1)/x) is not linearly independent
>>> from sage.all import *
>>> # needs sage.rings.function_field
>>> L.order(L(x))
Traceback (most recent call last):
...
ValueError: basis (1, x, x^2, x^3, x^4) is not linearly independent
>>> from sage.rings.function_field.order_basis import FunctionFieldOrder_basis
>>> FunctionFieldOrder_basis((y,y,y**Integer(3),y**Integer(4),y**Integer(5)))
Traceback (most recent call last):
...
ValueError: basis (y, y, y^3, y^4, 2*x*y + (x^4 + 1)/x) is not linearly independent
# needs sage.rings.function_field
L.order(L(x))
from sage.rings.function_field.order_basis import FunctionFieldOrder_basis
FunctionFieldOrder_basis((y,y,y^3,y^4,y^5))
basis()[source]

Return a basis of the order over the maximal order of the base field.

EXAMPLES:

sage: # needs sage.rings.function_field
sage: K.<x> = FunctionField(GF(7)); R.<y> = K[]
sage: L.<y> = K.extension(y^4 + x*y + 4*x + 1)
sage: O = L.equation_order()
sage: O.basis()
(1, y, y^2, y^3)
>>> from sage.all import *
>>> # needs sage.rings.function_field
>>> K = FunctionField(GF(Integer(7)), names=('x',)); (x,) = K._first_ngens(1); R = K['y']; (y,) = R._first_ngens(1)
>>> L = K.extension(y**Integer(4) + x*y + Integer(4)*x + Integer(1), names=('y',)); (y,) = L._first_ngens(1)
>>> O = L.equation_order()
>>> O.basis()
(1, y, y^2, y^3)
# needs sage.rings.function_field
K.<x> = FunctionField(GF(7)); R.<y> = K[]
L.<y> = K.extension(y^4 + x*y + 4*x + 1)
O = L.equation_order()
O.basis()
coordinate_vector(e)[source]

Return the coordinates of e with respect to the basis of the order.

INPUT:

  • e – element of the order or the function field

EXAMPLES:

sage: # needs sage.rings.function_field
sage: K.<x> = FunctionField(GF(7)); R.<y> = K[]
sage: L.<y> = K.extension(y^4 + x*y + 4*x + 1)
sage: O = L.equation_order()
sage: f = (x + y)^3
sage: O.coordinate_vector(f)
(x^3, 3*x^2, 3*x, 1)
>>> from sage.all import *
>>> # needs sage.rings.function_field
>>> K = FunctionField(GF(Integer(7)), names=('x',)); (x,) = K._first_ngens(1); R = K['y']; (y,) = R._first_ngens(1)
>>> L = K.extension(y**Integer(4) + x*y + Integer(4)*x + Integer(1), names=('y',)); (y,) = L._first_ngens(1)
>>> O = L.equation_order()
>>> f = (x + y)**Integer(3)
>>> O.coordinate_vector(f)
(x^3, 3*x^2, 3*x, 1)
# needs sage.rings.function_field
K.<x> = FunctionField(GF(7)); R.<y> = K[]
L.<y> = K.extension(y^4 + x*y + 4*x + 1)
O = L.equation_order()
f = (x + y)^3
O.coordinate_vector(f)
free_module()[source]

Return the free module formed by the basis over the maximal order of the base function field.

EXAMPLES:

sage: # needs sage.rings.function_field
sage: K.<x> = FunctionField(GF(7)); R.<y> = K[]
sage: L.<y> = K.extension(y^4 + x*y + 4*x + 1)
sage: O = L.equation_order()
sage: O.free_module()
Free module of degree 4 and rank 4 over Maximal order of Rational
function field in x over Finite Field of size 7
Echelon basis matrix:
[1 0 0 0]
[0 1 0 0]
[0 0 1 0]
[0 0 0 1]
>>> from sage.all import *
>>> # needs sage.rings.function_field
>>> K = FunctionField(GF(Integer(7)), names=('x',)); (x,) = K._first_ngens(1); R = K['y']; (y,) = R._first_ngens(1)
>>> L = K.extension(y**Integer(4) + x*y + Integer(4)*x + Integer(1), names=('y',)); (y,) = L._first_ngens(1)
>>> O = L.equation_order()
>>> O.free_module()
Free module of degree 4 and rank 4 over Maximal order of Rational
function field in x over Finite Field of size 7
Echelon basis matrix:
[1 0 0 0]
[0 1 0 0]
[0 0 1 0]
[0 0 0 1]
# needs sage.rings.function_field
K.<x> = FunctionField(GF(7)); R.<y> = K[]
L.<y> = K.extension(y^4 + x*y + 4*x + 1)
O = L.equation_order()
O.free_module()
ideal(*gens)[source]

Return the fractional ideal generated by the elements in gens.

INPUT:

  • gens – list of generators or an ideal in a ring which coerces to this order

EXAMPLES:

sage: K.<y> = FunctionField(QQ)
sage: O = K.maximal_order()
sage: O.ideal(y)
Ideal (y) of Maximal order of Rational function field in y over Rational Field
sage: O.ideal([y,1/y]) == O.ideal(y,1/y) # multiple generators may be given as a list
True
>>> from sage.all import *
>>> K = FunctionField(QQ, names=('y',)); (y,) = K._first_ngens(1)
>>> O = K.maximal_order()
>>> O.ideal(y)
Ideal (y) of Maximal order of Rational function field in y over Rational Field
>>> O.ideal([y,Integer(1)/y]) == O.ideal(y,Integer(1)/y) # multiple generators may be given as a list
True
K.<y> = FunctionField(QQ)
O = K.maximal_order()
O.ideal(y)
O.ideal([y,1/y]) == O.ideal(y,1/y) # multiple generators may be given as a list

A fractional ideal of a nontrivial extension:

sage: K.<x> = FunctionField(GF(7)); R.<y> = K[]
sage: O = K.maximal_order()
sage: I = O.ideal(x^2 - 4)

sage: # needs sage.rings.function_field
sage: L.<y> = K.extension(y^2 - x^3 - 1)
sage: S = L.equation_order()
sage: S.ideal(1/y)
Ideal (1, (6/(x^3 + 1))*y) of
 Order in Function field in y defined by y^2 + 6*x^3 + 6
sage: I2 = S.ideal(x^2 - 4); I2
Ideal (x^2 + 3) of Order in Function field in y defined by y^2 + 6*x^3 + 6
sage: I2 == S.ideal(I)
True
>>> from sage.all import *
>>> K = FunctionField(GF(Integer(7)), names=('x',)); (x,) = K._first_ngens(1); R = K['y']; (y,) = R._first_ngens(1)
>>> O = K.maximal_order()
>>> I = O.ideal(x**Integer(2) - Integer(4))

>>> # needs sage.rings.function_field
>>> L = K.extension(y**Integer(2) - x**Integer(3) - Integer(1), names=('y',)); (y,) = L._first_ngens(1)
>>> S = L.equation_order()
>>> S.ideal(Integer(1)/y)
Ideal (1, (6/(x^3 + 1))*y) of
 Order in Function field in y defined by y^2 + 6*x^3 + 6
>>> I2 = S.ideal(x**Integer(2) - Integer(4)); I2
Ideal (x^2 + 3) of Order in Function field in y defined by y^2 + 6*x^3 + 6
>>> I2 == S.ideal(I)
True
K.<x> = FunctionField(GF(7)); R.<y> = K[]
O = K.maximal_order()
I = O.ideal(x^2 - 4)
# needs sage.rings.function_field
L.<y> = K.extension(y^2 - x^3 - 1)
S = L.equation_order()
S.ideal(1/y)
I2 = S.ideal(x^2 - 4); I2
I2 == S.ideal(I)
ideal_with_gens_over_base(gens)[source]

Return the fractional ideal with basis gens over the maximal order of the base field.

It is not checked that the gens really generates an ideal.

INPUT:

  • gens – list of elements of the function field

EXAMPLES:

We construct an ideal in a rational function field:

sage: K.<y> = FunctionField(QQ)
sage: O = K.maximal_order()
sage: I = O.ideal([y]); I
Ideal (y) of Maximal order of Rational function field in y over Rational Field
sage: I * I
Ideal (y^2) of Maximal order of Rational function field in y over Rational Field
>>> from sage.all import *
>>> K = FunctionField(QQ, names=('y',)); (y,) = K._first_ngens(1)
>>> O = K.maximal_order()
>>> I = O.ideal([y]); I
Ideal (y) of Maximal order of Rational function field in y over Rational Field
>>> I * I
Ideal (y^2) of Maximal order of Rational function field in y over Rational Field
K.<y> = FunctionField(QQ)
O = K.maximal_order()
I = O.ideal([y]); I
I * I

We construct some ideals in a nontrivial function field:

sage: # needs sage.rings.function_field
sage: K.<x> = FunctionField(GF(7)); R.<y> = K[]
sage: L.<y> = K.extension(y^2 - x^3 - 1)
sage: O = L.equation_order(); O
Order in Function field in y defined by y^2 + 6*x^3 + 6
sage: I = O.ideal_with_gens_over_base([1, y]);  I
Ideal (1) of Order in Function field in y defined by y^2 + 6*x^3 + 6
sage: I.module()
Free module of degree 2 and rank 2 over
 Maximal order of Rational function field in x over Finite Field of size 7
Echelon basis matrix:
[1 0]
[0 1]
>>> from sage.all import *
>>> # needs sage.rings.function_field
>>> K = FunctionField(GF(Integer(7)), names=('x',)); (x,) = K._first_ngens(1); R = K['y']; (y,) = R._first_ngens(1)
>>> L = K.extension(y**Integer(2) - x**Integer(3) - Integer(1), names=('y',)); (y,) = L._first_ngens(1)
>>> O = L.equation_order(); O
Order in Function field in y defined by y^2 + 6*x^3 + 6
>>> I = O.ideal_with_gens_over_base([Integer(1), y]);  I
Ideal (1) of Order in Function field in y defined by y^2 + 6*x^3 + 6
>>> I.module()
Free module of degree 2 and rank 2 over
 Maximal order of Rational function field in x over Finite Field of size 7
Echelon basis matrix:
[1 0]
[0 1]
# needs sage.rings.function_field
K.<x> = FunctionField(GF(7)); R.<y> = K[]
L.<y> = K.extension(y^2 - x^3 - 1)
O = L.equation_order(); O
I = O.ideal_with_gens_over_base([1, y]);  I
I.module()

There is no check if the resulting object is really an ideal:

sage: # needs sage.rings.function_field
sage: K.<x> = FunctionField(GF(7)); R.<y> = K[]
sage: L.<y> = K.extension(y^2 - x^3 - 1)
sage: O = L.equation_order()
sage: I = O.ideal_with_gens_over_base([y]); I
Ideal (y) of Order in Function field in y defined by y^2 + 6*x^3 + 6
sage: y in I
True
sage: y^2 in I
False
>>> from sage.all import *
>>> # needs sage.rings.function_field
>>> K = FunctionField(GF(Integer(7)), names=('x',)); (x,) = K._first_ngens(1); R = K['y']; (y,) = R._first_ngens(1)
>>> L = K.extension(y**Integer(2) - x**Integer(3) - Integer(1), names=('y',)); (y,) = L._first_ngens(1)
>>> O = L.equation_order()
>>> I = O.ideal_with_gens_over_base([y]); I
Ideal (y) of Order in Function field in y defined by y^2 + 6*x^3 + 6
>>> y in I
True
>>> y**Integer(2) in I
False
# needs sage.rings.function_field
K.<x> = FunctionField(GF(7)); R.<y> = K[]
L.<y> = K.extension(y^2 - x^3 - 1)
O = L.equation_order()
I = O.ideal_with_gens_over_base([y]); I
y in I
y^2 in I
polynomial()[source]

Return the defining polynomial of the function field of which this is an order.

EXAMPLES:

sage: # needs sage.rings.function_field
sage: K.<x> = FunctionField(GF(7)); R.<y> = K[]
sage: L.<y> = K.extension(y^4 + x*y + 4*x + 1)
sage: O = L.equation_order()
sage: O.polynomial()
y^4 + x*y + 4*x + 1
>>> from sage.all import *
>>> # needs sage.rings.function_field
>>> K = FunctionField(GF(Integer(7)), names=('x',)); (x,) = K._first_ngens(1); R = K['y']; (y,) = R._first_ngens(1)
>>> L = K.extension(y**Integer(4) + x*y + Integer(4)*x + Integer(1), names=('y',)); (y,) = L._first_ngens(1)
>>> O = L.equation_order()
>>> O.polynomial()
y^4 + x*y + 4*x + 1
# needs sage.rings.function_field
K.<x> = FunctionField(GF(7)); R.<y> = K[]
L.<y> = K.extension(y^4 + x*y + 4*x + 1)
O = L.equation_order()
O.polynomial()