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 fieldcheck
– boolean (default:True
); ifTrue
, 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
The basis only defines an order if the module it generates is closed under multiplication and contains the identity element (only checked when
check
isTrue
):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
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
isTrue
):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.
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)
- 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)
- 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]
- 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
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
- 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
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]
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
- 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
- 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 fieldcheck
– boolean (default:True
); ifTrue
, check whether the module thatbasis
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
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
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
isTrue
):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
- 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)
- 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)
- 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]
- 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
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
- 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
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]
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
- 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