Orders of function fields¶
An order of a function field is a subring that is, as a module over the base maximal order, finitely generated and of maximal rank \(n\), where \(n\) is the extension degree of the function field. All orders are subrings of maximal orders.
A rational function field has two maximal orders: maximal finite order \(o\) and maximal infinite order \(o_\infty\). The maximal order of a rational function field over constant field \(k\) is just the polynomial ring \(o=k[x]\). The maximal infinite order is the set of rational functions whose denominator has degree greater than or equal to that of the numerator.
EXAMPLES:
sage: K.<x> = FunctionField(QQ)
sage: O = K.maximal_order()
sage: I = O.ideal(1/x); I
Ideal (1/x) of Maximal order of Rational function field in x over Rational Field
sage: 1/x in O
False
sage: Oinf = K.maximal_order_infinite()
sage: 1/x in Oinf
True
>>> from sage.all import *
>>> K = FunctionField(QQ, names=('x',)); (x,) = K._first_ngens(1)
>>> O = K.maximal_order()
>>> I = O.ideal(Integer(1)/x); I
Ideal (1/x) of Maximal order of Rational function field in x over Rational Field
>>> Integer(1)/x in O
False
>>> Oinf = K.maximal_order_infinite()
>>> Integer(1)/x in Oinf
True
K.<x> = FunctionField(QQ) O = K.maximal_order() I = O.ideal(1/x); I 1/x in O Oinf = K.maximal_order_infinite() 1/x in Oinf
In an extension of a rational function field, an order over the maximal finite order is called a finite order while an order over the maximal infinite order is called an infinite order. Thus a function field has one maximal finite order \(O\) and one maximal infinite order \(O_\infty\). There are other non-maximal orders such as equation orders:
sage: # needs sage.rings.function_field
sage: K.<x> = FunctionField(GF(3)); R.<y> = K[]
sage: L.<y> = K.extension(y^3 - y - x)
sage: O = L.equation_order()
sage: 1/y in O
False
sage: x/y in O
True
>>> from sage.all import *
>>> # needs sage.rings.function_field
>>> 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) - y - x, names=('y',)); (y,) = L._first_ngens(1)
>>> O = L.equation_order()
>>> Integer(1)/y in O
False
>>> x/y in O
True
# needs sage.rings.function_field K.<x> = FunctionField(GF(3)); R.<y> = K[] L.<y> = K.extension(y^3 - y - x) O = L.equation_order() 1/y in O x/y in O
Sage provides an extensive functionality for computations in maximal orders of function fields. For example, you can decompose a prime ideal of a rational function field in an extension:
sage: K.<x> = FunctionField(GF(2)); _.<t> = K[]
sage: o = K.maximal_order()
sage: p = o.ideal(x + 1)
sage: p.is_prime() # needs sage.libs.pari
True
sage: # needs sage.rings.function_field
sage: F.<y> = K.extension(t^3 - x^2*(x^2 + x + 1)^2)
sage: O = F.maximal_order()
sage: O.decomposition(p)
[(Ideal (x + 1, y + 1) of Maximal order
of Function field in y defined by y^3 + x^6 + x^4 + x^2, 1, 1),
(Ideal (x + 1, (1/(x^3 + x^2 + x))*y^2 + y + 1) of Maximal order
of Function field in y defined by y^3 + x^6 + x^4 + x^2, 2, 1)]
sage: # needs sage.rings.function_field
sage: p1, relative_degree,ramification_index = O.decomposition(p)[1]
sage: p1.parent()
Monoid of ideals of Maximal order of Function field in y
defined by y^3 + x^6 + x^4 + x^2
sage: relative_degree
2
sage: ramification_index
1
>>> from sage.all import *
>>> K = FunctionField(GF(Integer(2)), names=('x',)); (x,) = K._first_ngens(1); _ = K['t']; (t,) = _._first_ngens(1)
>>> o = K.maximal_order()
>>> p = o.ideal(x + Integer(1))
>>> p.is_prime() # needs sage.libs.pari
True
>>> # needs sage.rings.function_field
>>> F = K.extension(t**Integer(3) - x**Integer(2)*(x**Integer(2) + x + Integer(1))**Integer(2), names=('y',)); (y,) = F._first_ngens(1)
>>> O = F.maximal_order()
>>> O.decomposition(p)
[(Ideal (x + 1, y + 1) of Maximal order
of Function field in y defined by y^3 + x^6 + x^4 + x^2, 1, 1),
(Ideal (x + 1, (1/(x^3 + x^2 + x))*y^2 + y + 1) of Maximal order
of Function field in y defined by y^3 + x^6 + x^4 + x^2, 2, 1)]
>>> # needs sage.rings.function_field
>>> p1, relative_degree,ramification_index = O.decomposition(p)[Integer(1)]
>>> p1.parent()
Monoid of ideals of Maximal order of Function field in y
defined by y^3 + x^6 + x^4 + x^2
>>> relative_degree
2
>>> ramification_index
1
K.<x> = FunctionField(GF(2)); _.<t> = K[] o = K.maximal_order() p = o.ideal(x + 1) p.is_prime() # needs sage.libs.pari # needs sage.rings.function_field F.<y> = K.extension(t^3 - x^2*(x^2 + x + 1)^2) O = F.maximal_order() O.decomposition(p) # needs sage.rings.function_field p1, relative_degree,ramification_index = O.decomposition(p)[1] p1.parent() relative_degree ramification_index
When the base constant field is the algebraic field \(\QQbar\), the only prime ideals of the maximal order of the rational function field are linear polynomials.
sage: # needs sage.rings.function_field sage.rings.number_field
sage: K.<x> = FunctionField(QQbar)
sage: R.<y> = K[]
sage: L.<y> = K.extension(y^2 - (x^3-x^2))
sage: p = K.maximal_order().ideal(x)
sage: L.maximal_order().decomposition(p)
[(Ideal (1/x*y - I) of Maximal order of Function field in y defined by y^2 - x^3 + x^2,
1,
1),
(Ideal (1/x*y + I) of Maximal order of Function field in y defined by y^2 - x^3 + x^2,
1,
1)]
>>> from sage.all import *
>>> # needs sage.rings.function_field sage.rings.number_field
>>> K = FunctionField(QQbar, names=('x',)); (x,) = K._first_ngens(1)
>>> R = K['y']; (y,) = R._first_ngens(1)
>>> L = K.extension(y**Integer(2) - (x**Integer(3)-x**Integer(2)), names=('y',)); (y,) = L._first_ngens(1)
>>> p = K.maximal_order().ideal(x)
>>> L.maximal_order().decomposition(p)
[(Ideal (1/x*y - I) of Maximal order of Function field in y defined by y^2 - x^3 + x^2,
1,
1),
(Ideal (1/x*y + I) of Maximal order of Function field in y defined by y^2 - x^3 + x^2,
1,
1)]
# needs sage.rings.function_field sage.rings.number_field K.<x> = FunctionField(QQbar) R.<y> = K[] L.<y> = K.extension(y^2 - (x^3-x^2)) p = K.maximal_order().ideal(x) L.maximal_order().decomposition(p)
AUTHORS:
William Stein (2010): initial version
Maarten Derickx (2011-09-14): fixed ideal_with_gens_over_base() for rational function fields
Julian Rueth (2011-09-14): added check in _element_constructor_
Kwankyu Lee (2017-04-30): added maximal orders of global function fields
Brent Baccala (2019-12-20): support orders in characteristic zero
- class sage.rings.function_field.order.FunctionFieldMaximalOrder(field, ideal_class=<class 'sage.rings.function_field.ideal.FunctionFieldIdeal'>, category=None)[source]¶
Bases:
UniqueRepresentation
,FunctionFieldOrder
Base class of maximal orders of function fields.
- class sage.rings.function_field.order.FunctionFieldMaximalOrderInfinite(field, ideal_class=<class 'sage.rings.function_field.ideal.FunctionFieldIdeal'>, category=None)[source]¶
Bases:
FunctionFieldMaximalOrder
,FunctionFieldOrderInfinite
Base class of maximal infinite orders of function fields.
- class sage.rings.function_field.order.FunctionFieldOrder(field, ideal_class=<class 'sage.rings.function_field.ideal.FunctionFieldIdeal'>, category=None)[source]¶
Bases:
FunctionFieldOrder_base
Base class for orders in function fields.
- class sage.rings.function_field.order.FunctionFieldOrderInfinite(field, ideal_class=<class 'sage.rings.function_field.ideal.FunctionFieldIdeal'>, category=None)[source]¶
Bases:
FunctionFieldOrder_base
Base class for infinite orders in function fields.
- class sage.rings.function_field.order.FunctionFieldOrder_base(field, ideal_class=<class 'sage.rings.function_field.ideal.FunctionFieldIdeal'>, category=None)[source]¶
Bases:
CachedRepresentation
,Parent
Base class for orders in function fields.
INPUT:
field
– function field
EXAMPLES:
sage: F = FunctionField(QQ,'y') sage: F.maximal_order() Maximal order of Rational function field in y over Rational Field
>>> from sage.all import * >>> F = FunctionField(QQ,'y') >>> F.maximal_order() Maximal order of Rational function field in y over Rational Field
F = FunctionField(QQ,'y') F.maximal_order()
- fraction_field()[source]¶
Return the function field to which the order belongs.
EXAMPLES:
sage: FunctionField(QQ,'y').maximal_order().function_field() Rational function field in y over Rational Field
>>> from sage.all import * >>> FunctionField(QQ,'y').maximal_order().function_field() Rational function field in y over Rational Field
FunctionField(QQ,'y').maximal_order().function_field()
- function_field()[source]¶
Return the function field to which the order belongs.
EXAMPLES:
sage: FunctionField(QQ,'y').maximal_order().function_field() Rational function field in y over Rational Field
>>> from sage.all import * >>> FunctionField(QQ,'y').maximal_order().function_field() Rational function field in y over Rational Field
FunctionField(QQ,'y').maximal_order().function_field()
- ideal_monoid()[source]¶
Return the monoid of ideals of the order.
EXAMPLES:
sage: FunctionField(QQ,'y').maximal_order().ideal_monoid() Monoid of ideals of Maximal order of Rational function field in y over Rational Field
>>> from sage.all import * >>> FunctionField(QQ,'y').maximal_order().ideal_monoid() Monoid of ideals of Maximal order of Rational function field in y over Rational Field
FunctionField(QQ,'y').maximal_order().ideal_monoid()
- is_field(proof=True)[source]¶
Return
False
since orders are never fields.EXAMPLES:
sage: FunctionField(QQ,'y').maximal_order().is_field() False
>>> from sage.all import * >>> FunctionField(QQ,'y').maximal_order().is_field() False
FunctionField(QQ,'y').maximal_order().is_field()
- is_noetherian()[source]¶
Return
True
since orders in function fields are Noetherian.EXAMPLES:
sage: FunctionField(QQ,'y').maximal_order().is_noetherian() True
>>> from sage.all import * >>> FunctionField(QQ,'y').maximal_order().is_noetherian() True
FunctionField(QQ,'y').maximal_order().is_noetherian()
- is_subring(other)[source]¶
Return
True
if the order is a subring of the other order.INPUT:
other
– order of the function field or the field itself
EXAMPLES:
sage: F = FunctionField(QQ,'y') sage: O = F.maximal_order() sage: O.is_subring(F) True
>>> from sage.all import * >>> F = FunctionField(QQ,'y') >>> O = F.maximal_order() >>> O.is_subring(F) True
F = FunctionField(QQ,'y') O = F.maximal_order() O.is_subring(F)