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)