Fraction Field of Integral Domains¶
AUTHORS:
William Stein (with input from David Joyner, David Kohel, and Joe Wetherell)
Burcin Erocal
Julian Rüth (2017-06-27): embedding into the field of fractions and its section
EXAMPLES:
Quotienting is a constructor for an element of the fraction field:
sage: R.<x> = QQ[]
sage: (x^2-1)/(x+1)
x - 1
sage: parent((x^2-1)/(x+1))
Fraction Field of Univariate Polynomial Ring in x over Rational Field
>>> from sage.all import *
>>> R = QQ['x']; (x,) = R._first_ngens(1)
>>> (x**Integer(2)-Integer(1))/(x+Integer(1))
x - 1
>>> parent((x**Integer(2)-Integer(1))/(x+Integer(1)))
Fraction Field of Univariate Polynomial Ring in x over Rational Field
R.<x> = QQ[] (x^2-1)/(x+1) parent((x^2-1)/(x+1))
The GCD is not taken (since it doesn’t converge sometimes) in the inexact case:
sage: # needs sage.rings.real_mpfr
sage: Z.<z> = CC[]
sage: I = CC.gen()
sage: (1+I+z)/(z+0.1*I)
(z + 1.00000000000000 + I)/(z + 0.100000000000000*I)
sage: (1+I*z)/(z+1.1)
(I*z + 1.00000000000000)/(z + 1.10000000000000)
>>> from sage.all import *
>>> # needs sage.rings.real_mpfr
>>> Z = CC['z']; (z,) = Z._first_ngens(1)
>>> I = CC.gen()
>>> (Integer(1)+I+z)/(z+RealNumber('0.1')*I)
(z + 1.00000000000000 + I)/(z + 0.100000000000000*I)
>>> (Integer(1)+I*z)/(z+RealNumber('1.1'))
(I*z + 1.00000000000000)/(z + 1.10000000000000)
# needs sage.rings.real_mpfr Z.<z> = CC[] I = CC.gen() (1+I+z)/(z+0.1*I) (1+I*z)/(z+1.1)
- sage.rings.fraction_field.FractionField(R, names=None)[source]¶
Create the fraction field of the integral domain
R
.INPUT:
R
– an integral domainnames
– ignored
EXAMPLES:
We create some example fraction fields:
sage: FractionField(IntegerRing()) Rational Field sage: FractionField(PolynomialRing(RationalField(),'x')) Fraction Field of Univariate Polynomial Ring in x over Rational Field sage: FractionField(PolynomialRing(IntegerRing(),'x')) Fraction Field of Univariate Polynomial Ring in x over Integer Ring sage: FractionField(PolynomialRing(RationalField(),2,'x')) Fraction Field of Multivariate Polynomial Ring in x0, x1 over Rational Field
>>> from sage.all import * >>> FractionField(IntegerRing()) Rational Field >>> FractionField(PolynomialRing(RationalField(),'x')) Fraction Field of Univariate Polynomial Ring in x over Rational Field >>> FractionField(PolynomialRing(IntegerRing(),'x')) Fraction Field of Univariate Polynomial Ring in x over Integer Ring >>> FractionField(PolynomialRing(RationalField(),Integer(2),'x')) Fraction Field of Multivariate Polynomial Ring in x0, x1 over Rational Field
FractionField(IntegerRing()) FractionField(PolynomialRing(RationalField(),'x')) FractionField(PolynomialRing(IntegerRing(),'x')) FractionField(PolynomialRing(RationalField(),2,'x'))
Dividing elements often implicitly creates elements of the fraction field:
sage: x = PolynomialRing(RationalField(), 'x').gen() sage: f = x/(x+1) sage: g = x**3/(x+1) sage: f/g 1/x^2 sage: g/f x^2
>>> from sage.all import * >>> x = PolynomialRing(RationalField(), 'x').gen() >>> f = x/(x+Integer(1)) >>> g = x**Integer(3)/(x+Integer(1)) >>> f/g 1/x^2 >>> g/f x^2
x = PolynomialRing(RationalField(), 'x').gen() f = x/(x+1) g = x**3/(x+1) f/g g/f
The input must be an integral domain:
sage: Frac(Integers(4)) Traceback (most recent call last): ... TypeError: R must be an integral domain
>>> from sage.all import * >>> Frac(Integers(Integer(4))) Traceback (most recent call last): ... TypeError: R must be an integral domain
Frac(Integers(4))
- class sage.rings.fraction_field.FractionFieldEmbedding[source]¶
Bases:
DefaultConvertMap_unique
The embedding of an integral domain into its field of fractions.
EXAMPLES:
sage: R.<x> = QQ[] sage: f = R.fraction_field().coerce_map_from(R); f Coercion map: From: Univariate Polynomial Ring in x over Rational Field To: Fraction Field of Univariate Polynomial Ring in x over Rational Field
>>> from sage.all import * >>> R = QQ['x']; (x,) = R._first_ngens(1) >>> f = R.fraction_field().coerce_map_from(R); f Coercion map: From: Univariate Polynomial Ring in x over Rational Field To: Fraction Field of Univariate Polynomial Ring in x over Rational Field
R.<x> = QQ[] f = R.fraction_field().coerce_map_from(R); f
- is_injective()[source]¶
Return whether this map is injective.
EXAMPLES:
The map from an integral domain to its fraction field is always injective:
sage: R.<x> = QQ[] sage: R.fraction_field().coerce_map_from(R).is_injective() True
>>> from sage.all import * >>> R = QQ['x']; (x,) = R._first_ngens(1) >>> R.fraction_field().coerce_map_from(R).is_injective() True
R.<x> = QQ[] R.fraction_field().coerce_map_from(R).is_injective()
- is_surjective()[source]¶
Return whether this map is surjective.
EXAMPLES:
sage: R.<x> = QQ[] sage: R.fraction_field().coerce_map_from(R).is_surjective() False
>>> from sage.all import * >>> R = QQ['x']; (x,) = R._first_ngens(1) >>> R.fraction_field().coerce_map_from(R).is_surjective() False
R.<x> = QQ[] R.fraction_field().coerce_map_from(R).is_surjective()
- section()[source]¶
Return a section of this map.
EXAMPLES:
sage: R.<x> = QQ[] sage: R.fraction_field().coerce_map_from(R).section() Section map: From: Fraction Field of Univariate Polynomial Ring in x over Rational Field To: Univariate Polynomial Ring in x over Rational Field
>>> from sage.all import * >>> R = QQ['x']; (x,) = R._first_ngens(1) >>> R.fraction_field().coerce_map_from(R).section() Section map: From: Fraction Field of Univariate Polynomial Ring in x over Rational Field To: Univariate Polynomial Ring in x over Rational Field
R.<x> = QQ[] R.fraction_field().coerce_map_from(R).section()
- class sage.rings.fraction_field.FractionFieldEmbeddingSection[source]¶
Bases:
Section
The section of the embedding of an integral domain into its field of fractions.
EXAMPLES:
sage: R.<x> = QQ[] sage: f = R.fraction_field().coerce_map_from(R).section(); f Section map: From: Fraction Field of Univariate Polynomial Ring in x over Rational Field To: Univariate Polynomial Ring in x over Rational Field
>>> from sage.all import * >>> R = QQ['x']; (x,) = R._first_ngens(1) >>> f = R.fraction_field().coerce_map_from(R).section(); f Section map: From: Fraction Field of Univariate Polynomial Ring in x over Rational Field To: Univariate Polynomial Ring in x over Rational Field
R.<x> = QQ[] f = R.fraction_field().coerce_map_from(R).section(); f
- class sage.rings.fraction_field.FractionField_1poly_field(R, element_class=<class 'sage.rings.fraction_field_element.FractionFieldElement_1poly_field'>)[source]¶
Bases:
FractionField_generic
The fraction field of a univariate polynomial ring over a field.
Many of the functions here are included for coherence with number fields.
- class_number()[source]¶
Here for compatibility with number fields and function fields.
EXAMPLES:
sage: R.<t> = GF(5)[]; K = R.fraction_field() sage: K.class_number() 1
>>> from sage.all import * >>> R = GF(Integer(5))['t']; (t,) = R._first_ngens(1); K = R.fraction_field() >>> K.class_number() 1
R.<t> = GF(5)[]; K = R.fraction_field() K.class_number()
- function_field()[source]¶
Return the isomorphic function field.
EXAMPLES:
sage: R.<t> = GF(5)[] sage: K = R.fraction_field() sage: K.function_field() Rational function field in t over Finite Field of size 5
>>> from sage.all import * >>> R = GF(Integer(5))['t']; (t,) = R._first_ngens(1) >>> K = R.fraction_field() >>> K.function_field() Rational function field in t over Finite Field of size 5
R.<t> = GF(5)[] K = R.fraction_field() K.function_field()
See also
sage.rings.function_field.RationalFunctionField.field()
- maximal_order()[source]¶
Return the maximal order in this fraction field.
EXAMPLES:
sage: K = FractionField(GF(5)['t']) sage: K.maximal_order() Univariate Polynomial Ring in t over Finite Field of size 5
>>> from sage.all import * >>> K = FractionField(GF(Integer(5))['t']) >>> K.maximal_order() Univariate Polynomial Ring in t over Finite Field of size 5
K = FractionField(GF(5)['t']) K.maximal_order()
- ring_of_integers()[source]¶
Return the ring of integers in this fraction field.
EXAMPLES:
sage: K = FractionField(GF(5)['t']) sage: K.ring_of_integers() Univariate Polynomial Ring in t over Finite Field of size 5
>>> from sage.all import * >>> K = FractionField(GF(Integer(5))['t']) >>> K.ring_of_integers() Univariate Polynomial Ring in t over Finite Field of size 5
K = FractionField(GF(5)['t']) K.ring_of_integers()
- class sage.rings.fraction_field.FractionField_generic(R, element_class=<class 'sage.rings.fraction_field_element.FractionFieldElement'>, category=Category of quotient fields)[source]¶
Bases:
Field
The fraction field of an integral domain.
- base_ring()[source]¶
Return the base ring of
self
.This is the base ring of the ring which this fraction field is the fraction field of.
EXAMPLES:
sage: R = Frac(ZZ['t']) sage: R.base_ring() Integer Ring
>>> from sage.all import * >>> R = Frac(ZZ['t']) >>> R.base_ring() Integer Ring
R = Frac(ZZ['t']) R.base_ring()
- characteristic()[source]¶
Return the characteristic of this fraction field.
EXAMPLES:
sage: R = Frac(ZZ['t']) sage: R.base_ring() Integer Ring sage: R = Frac(ZZ['t']); R.characteristic() 0 sage: R = Frac(GF(5)['w']); R.characteristic() 5
>>> from sage.all import * >>> R = Frac(ZZ['t']) >>> R.base_ring() Integer Ring >>> R = Frac(ZZ['t']); R.characteristic() 0 >>> R = Frac(GF(Integer(5))['w']); R.characteristic() 5
R = Frac(ZZ['t']) R.base_ring() R = Frac(ZZ['t']); R.characteristic() R = Frac(GF(5)['w']); R.characteristic()
- construction()[source]¶
EXAMPLES:
sage: Frac(ZZ['x']).construction() (FractionField, Univariate Polynomial Ring in x over Integer Ring) sage: K = Frac(GF(3)['t']) sage: f, R = K.construction() sage: f(R) Fraction Field of Univariate Polynomial Ring in t over Finite Field of size 3 sage: f(R) == K True
>>> from sage.all import * >>> Frac(ZZ['x']).construction() (FractionField, Univariate Polynomial Ring in x over Integer Ring) >>> K = Frac(GF(Integer(3))['t']) >>> f, R = K.construction() >>> f(R) Fraction Field of Univariate Polynomial Ring in t over Finite Field of size 3 >>> f(R) == K True
Frac(ZZ['x']).construction() K = Frac(GF(3)['t']) f, R = K.construction() f(R) f(R) == K
- gen(i=0)[source]¶
Return the
i
-th generator ofself
.EXAMPLES:
sage: R = Frac(PolynomialRing(QQ,'z',10)); R Fraction Field of Multivariate Polynomial Ring in z0, z1, z2, z3, z4, z5, z6, z7, z8, z9 over Rational Field sage: R.0 z0 sage: R.gen(3) z3 sage: R.3 z3
>>> from sage.all import * >>> R = Frac(PolynomialRing(QQ,'z',Integer(10))); R Fraction Field of Multivariate Polynomial Ring in z0, z1, z2, z3, z4, z5, z6, z7, z8, z9 over Rational Field >>> R.gen(0) z0 >>> R.gen(Integer(3)) z3 >>> R.gen(3) z3
R = Frac(PolynomialRing(QQ,'z',10)); R R.0 R.gen(3) R.3
- is_exact()[source]¶
Return if
self
is exact which is if the underlying ring is exact.EXAMPLES:
sage: Frac(ZZ['x']).is_exact() True sage: Frac(CDF['x']).is_exact() # needs sage.rings.complex_double False
>>> from sage.all import * >>> Frac(ZZ['x']).is_exact() True >>> Frac(CDF['x']).is_exact() # needs sage.rings.complex_double False
Frac(ZZ['x']).is_exact() Frac(CDF['x']).is_exact() # needs sage.rings.complex_double
- is_field(proof=True)[source]¶
Return
True
, since the fraction field is a field.EXAMPLES:
sage: Frac(ZZ).is_field() True
>>> from sage.all import * >>> Frac(ZZ).is_field() True
Frac(ZZ).is_field()
- is_finite()[source]¶
Tells whether this fraction field is finite.
Note
A fraction field is finite if and only if the associated integral domain is finite.
EXAMPLES:
sage: Frac(QQ['a','b','c']).is_finite() False
>>> from sage.all import * >>> Frac(QQ['a','b','c']).is_finite() False
Frac(QQ['a','b','c']).is_finite()
- ngens()[source]¶
This is the same as for the parent object.
EXAMPLES:
sage: R = Frac(PolynomialRing(QQ,'z',10)); R Fraction Field of Multivariate Polynomial Ring in z0, z1, z2, z3, z4, z5, z6, z7, z8, z9 over Rational Field sage: R.ngens() 10
>>> from sage.all import * >>> R = Frac(PolynomialRing(QQ,'z',Integer(10))); R Fraction Field of Multivariate Polynomial Ring in z0, z1, z2, z3, z4, z5, z6, z7, z8, z9 over Rational Field >>> R.ngens() 10
R = Frac(PolynomialRing(QQ,'z',10)); R R.ngens()
- random_element(*args, **kwds)[source]¶
Return a random element in this fraction field.
The arguments are passed to the random generator of the underlying ring.
EXAMPLES:
sage: F = ZZ['x'].fraction_field() sage: F.random_element() # random (2*x - 8)/(-x^2 + x)
>>> from sage.all import * >>> F = ZZ['x'].fraction_field() >>> F.random_element() # random (2*x - 8)/(-x^2 + x)
F = ZZ['x'].fraction_field() F.random_element() # random
sage: f = F.random_element(degree=5) sage: f.numerator().degree() == f.denominator().degree() True sage: f.denominator().degree() <= 5 True sage: while f.numerator().degree() != 5: ....: f = F.random_element(degree=5)
>>> from sage.all import * >>> f = F.random_element(degree=Integer(5)) >>> f.numerator().degree() == f.denominator().degree() True >>> f.denominator().degree() <= Integer(5) True >>> while f.numerator().degree() != Integer(5): ... f = F.random_element(degree=Integer(5))
f = F.random_element(degree=5) f.numerator().degree() == f.denominator().degree() f.denominator().degree() <= 5 while f.numerator().degree() != 5: f = F.random_element(degree=5)
>>> from sage.all import * >>> f = F.random_element(degree=Integer(5)) >>> f.numerator().degree() == f.denominator().degree() True >>> f.denominator().degree() <= Integer(5) True >>> while f.numerator().degree() != Integer(5): ... f = F.random_element(degree=Integer(5))
f = F.random_element(degree=5) f.numerator().degree() == f.denominator().degree() f.denominator().degree() <= 5 while f.numerator().degree() != 5: f = F.random_element(degree=5)
- ring()[source]¶
Return the ring that this is the fraction field of.
EXAMPLES:
sage: R = Frac(QQ['x,y']) sage: R Fraction Field of Multivariate Polynomial Ring in x, y over Rational Field sage: R.ring() Multivariate Polynomial Ring in x, y over Rational Field
>>> from sage.all import * >>> R = Frac(QQ['x,y']) >>> R Fraction Field of Multivariate Polynomial Ring in x, y over Rational Field >>> R.ring() Multivariate Polynomial Ring in x, y over Rational Field
R = Frac(QQ['x,y']) R R.ring()
- some_elements()[source]¶
Return some elements in this field.
EXAMPLES:
sage: R.<x> = QQ[] sage: R.fraction_field().some_elements() [0, 1, x, 2*x, x/(x^2 + 2*x + 1), 1/x^2, ... (2*x^2 + 2)/(x^2 + 2*x + 1), (2*x^2 + 2)/x^3, (2*x^2 + 2)/(x^2 - 1), 2]
>>> from sage.all import * >>> R = QQ['x']; (x,) = R._first_ngens(1) >>> R.fraction_field().some_elements() [0, 1, x, 2*x, x/(x^2 + 2*x + 1), 1/x^2, ... (2*x^2 + 2)/(x^2 + 2*x + 1), (2*x^2 + 2)/x^3, (2*x^2 + 2)/(x^2 - 1), 2]
R.<x> = QQ[] R.fraction_field().some_elements()
- sage.rings.fraction_field.is_FractionField(x)[source]¶
Test whether or not
x
inherits fromFractionField_generic
.EXAMPLES:
sage: from sage.rings.fraction_field import is_FractionField sage: is_FractionField(Frac(ZZ['x'])) doctest:warning... DeprecationWarning: The function is_FractionField is deprecated; use 'isinstance(..., FractionField_generic)' instead. See https://github.com/sagemath/sage/issues/38128 for details. True sage: is_FractionField(QQ) False
>>> from sage.all import * >>> from sage.rings.fraction_field import is_FractionField >>> is_FractionField(Frac(ZZ['x'])) doctest:warning... DeprecationWarning: The function is_FractionField is deprecated; use 'isinstance(..., FractionField_generic)' instead. See https://github.com/sagemath/sage/issues/38128 for details. True >>> is_FractionField(QQ) False
from sage.rings.fraction_field import is_FractionField is_FractionField(Frac(ZZ['x'])) is_FractionField(QQ)