Base class of number fields¶
AUTHORS:
- William Stein (2007-09-04): initial version 
- class sage.rings.number_field.number_field_base.NumberField[source]¶
- Bases: - Field- Base class for all number fields. - OK(*args, **kwds)[source]¶
- Synonym for - maximal_order().- EXAMPLES: - sage: x = polygen(ZZ) sage: NumberField(x^3 - 2,'a').OK() Maximal Order generated by a in Number Field in a with defining polynomial x^3 - 2 - >>> from sage.all import * >>> x = polygen(ZZ) >>> NumberField(x**Integer(3) - Integer(2),'a').OK() Maximal Order generated by a in Number Field in a with defining polynomial x^3 - 2 
 - bach_bound()[source]¶
- Return the Bach bound associated to this number field. - Assuming the General Riemann Hypothesis, this is a bound \(B\) so that every integral ideal is equivalent modulo principal fractional ideals to an integral ideal of norm at most \(B\). - See also - OUTPUT: symbolic expression or the Integer 1 - EXAMPLES: - We compute both the Minkowski and Bach bounds for a quadratic field, where the Minkowski bound is much better: - sage: # needs sage.symbolic sage: K = QQ[sqrt(5)] sage: K.minkowski_bound() 1/2*sqrt(5) sage: K.minkowski_bound().n() 1.11803398874989 sage: K.bach_bound() 12*log(5)^2 sage: K.bach_bound().n() 31.0834847277628 - >>> from sage.all import * >>> # needs sage.symbolic >>> K = QQ[sqrt(Integer(5))] >>> K.minkowski_bound() 1/2*sqrt(5) >>> K.minkowski_bound().n() 1.11803398874989 >>> K.bach_bound() 12*log(5)^2 >>> K.bach_bound().n() 31.0834847277628 - We compute both the Minkowski and Bach bounds for a bigger degree field, where the Bach bound is much better: - sage: # needs sage.symbolic sage: K = CyclotomicField(37) sage: K.minkowski_bound().n() 7.50857335698544e14 sage: K.bach_bound().n() 191669.304126267 - >>> from sage.all import * >>> # needs sage.symbolic >>> K = CyclotomicField(Integer(37)) >>> K.minkowski_bound().n() 7.50857335698544e14 >>> K.bach_bound().n() 191669.304126267 - The bound of course also works for the rational numbers: - sage: QQ.bach_bound() # needs sage.symbolic 1 - >>> from sage.all import * >>> QQ.bach_bound() # needs sage.symbolic 1 
 - degree()[source]¶
- Return the degree of this number field. - EXAMPLES: - sage: x = polygen(ZZ) sage: NumberField(x^3 + 9, 'a').degree() 3 - >>> from sage.all import * >>> x = polygen(ZZ) >>> NumberField(x**Integer(3) + Integer(9), 'a').degree() 3 
 - discriminant()[source]¶
- Return the discriminant of this number field. - EXAMPLES: - sage: x = polygen(ZZ) sage: NumberField(x^3 + 9, 'a').discriminant() -243 - >>> from sage.all import * >>> x = polygen(ZZ) >>> NumberField(x**Integer(3) + Integer(9), 'a').discriminant() -243 
 - is_absolute()[source]¶
- Return - Trueif- selfis viewed as a single extension over \(\QQ\).- EXAMPLES: - sage: x = polygen(ZZ) sage: K.<a> = NumberField(x^3 + 2) sage: K.is_absolute() True sage: y = polygen(K) sage: L.<b> = NumberField(y^2 + 1) sage: L.is_absolute() False sage: QQ.is_absolute() True - >>> from sage.all import * >>> x = polygen(ZZ) >>> K = NumberField(x**Integer(3) + Integer(2), names=('a',)); (a,) = K._first_ngens(1) >>> K.is_absolute() True >>> y = polygen(K) >>> L = NumberField(y**Integer(2) + Integer(1), names=('b',)); (b,) = L._first_ngens(1) >>> L.is_absolute() False >>> QQ.is_absolute() True 
 - maximal_order()[source]¶
- Return the maximal order, i.e., the ring of integers of this number field. - EXAMPLES: - sage: x = polygen(ZZ) sage: NumberField(x^3 - 2,'b').maximal_order() Maximal Order generated by b in Number Field in b with defining polynomial x^3 - 2 - >>> from sage.all import * >>> x = polygen(ZZ) >>> NumberField(x**Integer(3) - Integer(2),'b').maximal_order() Maximal Order generated by b in Number Field in b with defining polynomial x^3 - 2 
 - minkowski_bound()[source]¶
- Return the Minkowski bound associated to this number field. - This is a bound \(B\) so that every integral ideal is equivalent modulo principal fractional ideals to an integral ideal of norm at most \(B\). - See also - OUTPUT: symbolic expression or Rational - EXAMPLES: - The Minkowski bound for \(\QQ[i]\) tells us that the class number is 1: - sage: # needs sage.symbolic sage: K = QQ[I] sage: B = K.minkowski_bound(); B 4/pi sage: B.n() 1.27323954473516 - >>> from sage.all import * >>> # needs sage.symbolic >>> K = QQ[I] >>> B = K.minkowski_bound(); B 4/pi >>> B.n() 1.27323954473516 - We compute the Minkowski bound for \(\QQ[\sqrt[3]{2}]\): - sage: # needs sage.symbolic sage: K = QQ[2^(1/3)] sage: B = K.minkowski_bound(); B 16/3*sqrt(3)/pi sage: B.n() 2.94042077558289 sage: int(B) 2 - >>> from sage.all import * >>> # needs sage.symbolic >>> K = QQ[Integer(2)**(Integer(1)/Integer(3))] >>> B = K.minkowski_bound(); B 16/3*sqrt(3)/pi >>> B.n() 2.94042077558289 >>> int(B) 2 - We compute the Minkowski bound for \(\QQ[\sqrt{10}]\), which has class number 2: - sage: # needs sage.symbolic sage: K = QQ[sqrt(10)] sage: B = K.minkowski_bound(); B sqrt(10) sage: int(B) 3 sage: K.class_number() 2 - >>> from sage.all import * >>> # needs sage.symbolic >>> K = QQ[sqrt(Integer(10))] >>> B = K.minkowski_bound(); B sqrt(10) >>> int(B) 3 >>> K.class_number() 2 - We compute the Minkowski bound for \(\QQ[\sqrt{2}+\sqrt{3}]\): - sage: # needs sage.symbolic sage: x = polygen(ZZ) sage: K.<y,z> = NumberField([x^2 - 2, x^2 - 3]) sage: L.<w> = QQ[sqrt(2) + sqrt(3)] sage: B = K.minkowski_bound(); B 9/2 sage: int(B) 4 sage: B == L.minkowski_bound() True sage: K.class_number() 1 - >>> from sage.all import * >>> # needs sage.symbolic >>> x = polygen(ZZ) >>> K = NumberField([x**Integer(2) - Integer(2), x**Integer(2) - Integer(3)], names=('y', 'z',)); (y, z,) = K._first_ngens(2) >>> L = QQ[sqrt(Integer(2)) + sqrt(Integer(3))]; (w,) = L._first_ngens(1) >>> B = K.minkowski_bound(); B 9/2 >>> int(B) 4 >>> B == L.minkowski_bound() True >>> K.class_number() 1 - The bound of course also works for the rational numbers: - sage: QQ.minkowski_bound() 1 - >>> from sage.all import * >>> QQ.minkowski_bound() 1 
 - ring_of_integers(*args, **kwds)[source]¶
- Synonym for - maximal_order().- EXAMPLES: - sage: x = polygen(ZZ) sage: K.<a> = NumberField(x^2 + 1) sage: K.ring_of_integers() Gaussian Integers generated by a in Number Field in a with defining polynomial x^2 + 1 - >>> from sage.all import * >>> x = polygen(ZZ) >>> K = NumberField(x**Integer(2) + Integer(1), names=('a',)); (a,) = K._first_ngens(1) >>> K.ring_of_integers() Gaussian Integers generated by a in Number Field in a with defining polynomial x^2 + 1 
 - signature()[source]¶
- Return \((r_1, r_2)\), where \(r_1\) and \(r_2\) are the number of real embeddings and pairs of complex embeddings of this field, respectively. - EXAMPLES: - sage: x = polygen(ZZ) sage: NumberField(x^3 - 2, 'a').signature() (1, 1) - >>> from sage.all import * >>> x = polygen(ZZ) >>> NumberField(x**Integer(3) - Integer(2), 'a').signature() (1, 1) 
 
- sage.rings.number_field.number_field_base.is_NumberField(x)[source]¶
- Return - Trueif- xis of number field type.- This function is deprecated. - EXAMPLES: - sage: from sage.rings.number_field.number_field_base import is_NumberField sage: x = polygen(ZZ) sage: is_NumberField(NumberField(x^2 + 1, 'a')) doctest:...: DeprecationWarning: the function is_NumberField is deprecated; use isinstance(x, sage.rings.number_field.number_field_base.NumberField) instead See https://github.com/sagemath/sage/issues/35283 for details. True sage: is_NumberField(QuadraticField(-97, 'theta')) True sage: is_NumberField(CyclotomicField(97)) True - >>> from sage.all import * >>> from sage.rings.number_field.number_field_base import is_NumberField >>> x = polygen(ZZ) >>> is_NumberField(NumberField(x**Integer(2) + Integer(1), 'a')) doctest:...: DeprecationWarning: the function is_NumberField is deprecated; use isinstance(x, sage.rings.number_field.number_field_base.NumberField) instead See https://github.com/sagemath/sage/issues/35283 for details. True >>> is_NumberField(QuadraticField(-Integer(97), 'theta')) True >>> is_NumberField(CyclotomicField(Integer(97))) True - Note that the rational numbers - QQare a number field.:- sage: is_NumberField(QQ) True sage: is_NumberField(ZZ) False - >>> from sage.all import * >>> is_NumberField(QQ) True >>> is_NumberField(ZZ) False