Orders of function fields: basis#

class sage.rings.function_field.order_basis.FunctionFieldOrderInfinite_basis(basis, check=True)#

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
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
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.
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)
# 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()#

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)
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()#

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]
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)#

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
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
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)#

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
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]
# 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
# 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()#

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
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)#

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 – (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
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
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
# 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()#

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)
# 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)#

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)
# 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()#

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]
# 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)#

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
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
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)#

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
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]
# 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
# 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()#

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
# 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()