Henselizations of rings¶
AUTHORS:
- Julian Rüth (2016-11-15): initial version
-
class
henselization.sage.rings.padics.henselization.henselization.ExtensionFactory(name)¶ Bases:
UniqueFactoryReturn the algebraic extension which adjoins to
basea root ofpolynomial.Do not call this factory directly, but call
base.extension()instead.EXAMPLES:
sage: from henselization import * sage: K = QQ.henselization(5) sage: R.<x> = K[] sage: K.extension(x^2 - 5) # indirect doctest Extension defined by x^2 - 5 of Henselization of Rational Field with respect to 5-adic valuation
-
create_key(base, polynomial, name, check=True)¶ Return a key that uniquely defines this extension.
TESTS:
sage: from henselization import * sage: K = QQ.henselization(5) sage: R.<x> = K[] sage: K.extension(x^2 - 5) is K.extension(x^2 - 5) # indirect doctest True
-
create_object(version, key)¶ Return the extension defined by
key.TESTS:
sage: from henselization import * sage: K = QQ.henselization(5) sage: R.<x> = K[] sage: K.extension(x^2 - 5) # indirect doctest Extension defined by x^2 - 5 of Henselization of Rational Field with respect to 5-adic valuation
-
-
class
henselization.sage.rings.padics.henselization.henselization.HenselizationExtension(base_ring, polynomial, model, model_valuation, category=None)¶ Bases:
henselization.sage.rings.padics.henselization.henselization.Henselization_baseAbstract base class for the extension of a Henselization by adjunction of a root of
polynomialto the complete ringbase_ring.EXAMPLES:
sage: from henselization import * sage: K = QQ.henselization(2) sage: R.<x> = K[] sage: L.<a> = K.extension(x^2 + x + 1); L Extension defined by a^2 + a + 1 of Henselization of Rational Field with respect to 2-adic valuation sage: R.<x> = L[] sage: M.<b> = L.extension(x^12 - 4*x^11 + 2*x^10 + 13*x^8 - 16*x^7 - 36*x^6 + 168*x^5 - 209*x^4 + 52*x^3 + 26*x^2 + 8*x - 13); M Extension defined by b^12 - 4*b^11 + 2*b^10 + 13*b^8 - 16*b^7 - 36*b^6 + 168*b^5 - 209*b^4 + 52*b^3 + 26*b^2 + 8*b - 13 of Extension defined by a^2 + a + 1 of Henselization of Rational Field with respect to 2-adic valuation
-
base_ring()¶ Return the base ring of this ring, i.e., the ring from which this algebraic extension has been created.
TESTS:
sage: from henselization import * sage: K = QQ.henselization(2) sage: R.<x> = K[] sage: L = K.extension(x^2 + x + 1) sage: L.base_ring() is K True
-
degree()¶ Return the degree of this extension over its base.
EXAMPLES:
sage: from henselization import * sage: K = QQ.henselization(2) sage: R.<x> = K[] sage: L = K.extension(x^2 + x + 1) sage: L.degree() 2 sage: R.<y> = L[] sage: M = L.extension(y^2 + y + L.gen()) sage: M.degree() 2
-
ngens()¶ Return the number of generators of this ring.
EXAMPLES:
This extension is generated by a root of its defining polynomial:
sage: from henselization import * sage: K = QQ.henselization(2) sage: R.<a> = K[] sage: L = K.extension(a^2 + a + 1) sage: L.ngens() 1 sage: L.gens() (a,)
-
-
class
henselization.sage.rings.padics.henselization.henselization.HenselizationExtensionAbsolute(base_ring, polynomial, model, model_valuation, category=None)¶ Bases:
henselization.sage.rings.padics.henselization.henselization.HenselizationExtensionExtension of a
Henselizationwhose model is an absolute extension.EXAMPLES:
sage: from henselization import * sage: K = QQ.henselization(2) sage: L.<x> = K[] sage: K.extension(x^2 + x + 1) Extension defined by x^2 + x + 1 of Henselization of Rational Field with respect to 2-adic valuation
-
class
henselization.sage.rings.padics.henselization.henselization.HenselizationExtensionAbsolute_Field(base_ring, polynomial, model, model_valuation, category=None)¶ Bases:
henselization.sage.rings.padics.henselization.henselization.HenselizationExtensionAbsolute,henselization.sage.rings.padics.henselization.henselization.HenselizationExtension_FieldExtension of a field
Henselizationwhose model is an absolute extension.EXAMPLES:
sage: from henselization import * sage: K = QQ.henselization(2) sage: L.<x> = K[] sage: L = K.extension(x^2 + 2); L Extension defined by x^2 + 2 of Henselization of Rational Field with respect to 2-adic valuation
TESTS:
sage: from sage.rings.padics.henselization.henselization import HenselizationExtensionAbsolute_Field sage: isinstance(L, HenselizationExtensionAbsolute_Field) True sage: TestSuite(L).run() # long time
-
class
henselization.sage.rings.padics.henselization.henselization.HenselizationExtensionIteratedAbsolute(base_ring, polynomial, model, model_valuation, category=None)¶ Bases:
henselization.sage.rings.padics.henselization.henselization.HenselizationExtensionAbsoluteExtension of a
HenselizationExtensionthat is realized as an absolute extension.EXAMPLES:
sage: from henselization import * sage: K = QQ.henselization(2) sage: R.<x> = K[] sage: L = K.extension(x^2 + x + 1) sage: R.<y> = L[] sage: L.extension(y^2 - 2) Extension defined by y^2 - 2 of Extension defined by x^2 + x + 1 of Henselization of Rational Field with respect to 2-adic valuation
-
class
henselization.sage.rings.padics.henselization.henselization.HenselizationExtensionIteratedAbsolute_Field(base_ring, polynomial, model, model_valuation, category=None)¶ Bases:
henselization.sage.rings.padics.henselization.henselization.HenselizationExtensionIteratedAbsolute,henselization.sage.rings.padics.henselization.henselization.HenselizationExtensionAbsolute_FieldExtension of a
HenselizationExtensionfield that is realized as an absolute extension.EXAMPLES:
sage: from henselization import * sage: K = QQ.henselization(2) sage: R.<x> = K[] sage: L = K.extension(x^2 + x + 1) sage: R.<y> = L[] sage: M = L.extension(y^4 - 2); M Extension defined by y^4 - 2 of Extension defined by x^2 + x + 1 of Henselization of Rational Field with respect to 2-adic valuationTESTS:
sage: from sage.rings.padics.henselization.henselization import HenselizationExtensionIteratedAbsolute_Field sage: isinstance(M, HenselizationExtensionIteratedAbsolute_Field) True sage: TestSuite(M).run() # long time
-
class
henselization.sage.rings.padics.henselization.henselization.HenselizationExtensionIteratedAbsolute_Ring(base_ring, polynomial, model, model_valuation, category=None)¶ Bases:
henselization.sage.rings.padics.henselization.henselization.HenselizationExtensionIteratedAbsolute,henselization.sage.rings.padics.henselization.henselization.HenselizationExtension_RingExtension of a
HenselizationExtensionthat is not a field and realized as an absolute extension.EXAMPLES:
sage: from henselization import * sage: S = ZZ.henselization(2) sage: R.<x> = S[] sage: T = S.extension(x^2 + x + 1) sage: R.<y> = T[] sage: U = T.extension(y^4 - 2); U # known bug, see https://github.com/MCLF/henselization/issues/15 Extension defined by y^4 - 2 of Extension defined by x^2 + x + 1 of Henselization of Integer Ring with respect to 2-adic valuation
TESTS:
sage: from sage.rings.padics.henselization.henselization import HenselizationExtensionIteratedAbsolute_Ring sage: isinstance(U, HenselizationExtensionIteratedAbsolute_Ring) # known bug, see https://github.com/MCLF/henselization/issues/15 True sage: TestSuite(U).run() # long time, known bug, see https://github.com/MCLF/henselization/issues/15
-
class
henselization.sage.rings.padics.henselization.henselization.HenselizationExtensionIteratedQuotient(base_ring, polynomial, model, model_valuation, category=None)¶ Bases:
henselization.sage.rings.padics.henselization.henselization.HenselizationExtensionExtension of a
HenselizationExtensionAbsolutethat is realized as a quotient over its model.EXAMPLES:
Instances of this class are not exposed through public methods but only exist internally when building iterated extensions:
sage: K = QQ.henselization(2) sage: R.<x> = K[] sage: L = K.extension(x^2 + x + 1) sage: R.<y> = L[] sage: from sage.rings.padics.henselization.henselization import Extension sage: Extension._create_extension(L, y^2 - 2) Extension defined by y^2 - 2 of Extension defined by x^2 + x + 1 of Henselization of Rational Field with respect to 2-adic valuation
-
gen(i=0)¶ Return the
i-th generator of this ring.EXAMPLES:
sage: from henselization import * sage: K = QQ.henselization(2) sage: R.<x> = K[] sage: L = K.extension(x^2 + x + 1) sage: R.<y> = L[] sage: from sage.rings.padics.henselization.henselization import Extension sage: M = Extension._create_extension(L, y^2 - 2) sage: M.gen(0) ybar sage: M.gen(1) Traceback (most recent call last): ... ValueError: ring has only one generator
-
-
class
henselization.sage.rings.padics.henselization.henselization.HenselizationExtensionIteratedQuotient_Field(base_ring, polynomial, model, model_valuation, category=None)¶ Bases:
henselization.sage.rings.padics.henselization.henselization.HenselizationExtensionIteratedQuotient,henselization.sage.rings.padics.henselization.henselization.HenselizationExtension_FieldExtension of a
HenselizationExtensionAbsolutefield that is realized as a quotient over its model.EXAMPLES:
Instances of this class are not exposed through public methods but only exist internally when building iterated extensions:
sage: from henselization import * sage: K = QQ.henselization(2) sage: R.<x> = K[] sage: L = K.extension(x^2 + x + 1) sage: R.<y> = L[] sage: from sage.rings.padics.henselization.henselization import Extension sage: M = Extension._create_extension(L, y^4 - 2); M Extension defined by y^4 - 2 of Extension defined by x^2 + x + 1 of Henselization of Rational Field with respect to 2-adic valuation
TESTS:
sage: from sage.rings.padics.henselization.henselization import HenselizationExtensionIteratedQuotient_Field sage: isinstance(M, HenselizationExtensionIteratedQuotient_Field) True sage: TestSuite(M).run() # long time
-
class
henselization.sage.rings.padics.henselization.henselization.HenselizationExtensionIteratedQuotient_Ring(base_ring, polynomial, model, model_valuation, category=None)¶ Bases:
henselization.sage.rings.padics.henselization.henselization.HenselizationExtensionIteratedQuotient,henselization.sage.rings.padics.henselization.henselization.HenselizationExtension_RingExtension of a
HenselizationExtensionAbsolutedomain that is not a field that is realized as a quotient over its model.EXAMPLES:
Instances of this class are not exposed through public methods but only exist internally when building iterated extensions:
sage: from henselization import * sage: S = ZZ.henselization(2) sage: R.<x> = S[] sage: T = S.extension(x^2 + x + 1) sage: R.<y> = T[] sage: U.<y> = T.extension(y^4 - 2); U # known bug, see https://github.com/MCLF/henselization/issues/15 Extension defined by y^4 - 2 of Extension defined by x^2 + x + 1 of Henselization of Integer Ring with respect to 2-adic valuation
-
fraction_field()¶ Return the fraction field of this ring.
EXAMPLES:
sage: from henselization import * sage: S = ZZ.henselization(2) sage: R.<x> = S[] sage: T = S.extension(x^2 + x + 1) sage: R.<y> = T[] sage: U.<y> = T.extension(y^4 - 2) # known bug, see https://github.com/MCLF/henselization/issues/15 sage: U.fraction_field() # known bug, see https://github.com/MCLF/henselization/issues/15 Extension defined by y^4 - 2 of Extension defined by x^2 + x + 1 of Henselization of Rational Field with respect to 2-adic valuation
-
-
class
henselization.sage.rings.padics.henselization.henselization.HenselizationExtensionSimple(base_ring, polynomial, model, model_valuation, category=None)¶ Bases:
henselization.sage.rings.padics.henselization.henselization.HenselizationExtensionAbsoluteSimple extension of a
Henselization.EXAMPLES:
sage: from henselization import * sage: S = ZZ.henselization(2) sage: R.<x> = S[] sage: S.extension(x^2 + x + 1) Extension defined by x^2 + x + 1 of Henselization of Integer Ring with respect to 2-adic valuation
-
gen(i=0)¶ Return the
i-th generator of this ring.EXAMPLES:
sage: from henselization import * sage: K = QQ.henselization(2) sage: R.<a> = K[] sage: L = K.extension(a^2 + a + 1) sage: L.gen(0) a sage: L.gen(1) Traceback (most recent call last): ... ValueError: ring has only one generator
-
-
class
henselization.sage.rings.padics.henselization.henselization.HenselizationExtensionSimple_Field(base_ring, polynomial, model, model_valuation, category=None)¶ Bases:
henselization.sage.rings.padics.henselization.henselization.HenselizationExtensionSimple,henselization.sage.rings.padics.henselization.henselization.HenselizationExtensionAbsolute_FieldSimple extension of a
Henselization_Fieldthat is not an extension.EXAMPLES:
sage: from henselization import * sage: K = QQ.henselization(2) sage: R.<x> = K[] sage: L = K.extension(x^2 + x + 1); L Extension defined by x^2 + x + 1 of Henselization of Rational Field with respect to 2-adic valuation
TESTS:
sage: from sage.rings.padics.henselization.henselization import HenselizationExtensionSimple_Field sage: isinstance(L, HenselizationExtensionSimple_Field) True sage: TestSuite(L).run() # long time
-
class
henselization.sage.rings.padics.henselization.henselization.HenselizationExtensionSimple_Ring(base_ring, polynomial, model, model_valuation, category=None)¶ Bases:
henselization.sage.rings.padics.henselization.henselization.HenselizationExtensionSimple,henselization.sage.rings.padics.henselization.henselization.HenselizationExtension_RingSimple extension of a
Henselization_Ringthat is not an extension.EXAMPLES:
sage: from henselization import * sage: S = ZZ.henselization(2) sage: R.<x> = S[] sage: T = S.extension(x^2 + x + 1); T Extension defined by x^2 + x + 1 of Henselization of Integer Ring with respect to 2-adic valuation
TESTS:
sage: from sage.rings.padics.henselization.henselization import HenselizationExtensionSimple_Ring sage: isinstance(T, HenselizationExtensionSimple_Ring) True sage: TestSuite(T).run() # long time
-
class
henselization.sage.rings.padics.henselization.henselization.HenselizationExtension_Field(base_ring, polynomial, model, model_valuation, category=None)¶ Bases:
henselization.sage.rings.padics.henselization.henselization.HenselizationExtension,henselization.sage.rings.padics.henselization.henselization.Henselization_FieldA
HenselizationExtensionthat is a field.EXAMPLES:
sage: from henselization import * sage: K = QQ.henselization(3) sage: R.<x> = K[] sage: K.extension(x^2 + 3) Extension defined by x^2 + 3 of Henselization of Rational Field with respect to 3-adic valuation
-
class
henselization.sage.rings.padics.henselization.henselization.HenselizationExtension_Ring(base_ring, polynomial, model, model_valuation, category=None)¶ Bases:
henselization.sage.rings.padics.henselization.henselization.HenselizationExtension,henselization.sage.rings.padics.henselization.henselization.Henselization_RingA
HenselizationExtensionthat is not a field.EXAMPLES:
sage: from henselization import * sage: S = ZZ.henselization(3) sage: R.<x> = S[] sage: T = S.extension(x^2 + 3); T Extension defined by x^2 + 3 of Henselization of Integer Ring with respect to 3-adic valuation
TESTS:
sage: from sage.rings.padics.henselization.henselization import HenselizationExtension_Ring sage: isinstance(T, HenselizationExtension_Ring) True sage: TestSuite(T).run() # long time
-
fraction_field()¶ Return the fraction field of this ring.
EXAMPLES:
sage: from henselization import * sage: S = ZZ.henselization(3) sage: R.<x> = S[] sage: T = S.extension(x^2 + 3) sage: T.fraction_field() Extension defined by x^2 + 3 of Henselization of Rational Field with respect to 3-adic valuation
-
-
class
henselization.sage.rings.padics.henselization.henselization.HenselizationFactory(name)¶ Bases:
UniqueFactoryReturn the Henselization of
Rwith respect tov.INPUT:
R– a field or an excellent integral domain whose localization at the maximal ideal ofvis the discrete valuation ring ofv. (Most of these conditions are not verified by this factory.)v– a non-trivial discrete valuation onR.
EXAMPLES:
sage: from henselization import * sage: QQ.henselization(5) # indirect doctest Henselization of Rational Field with respect to 5-adic valuation
-
create_key(R, v)¶ Create a key which uniquely identifies this Henselization.
TESTS:
sage: from henselization import * sage: QQ.henselization(5) is QQ.henselization(5) # indirect doctest True
-
create_object(version, key)¶ Create the Henselization identified by
key.TESTS:
sage: from henselization import * sage: Henselization(QQ, QQ.valuation(5)) # indirect doctest Henselization of Rational Field with respect to 5-adic valuation
-
class
henselization.sage.rings.padics.henselization.henselization.Henselization_Field(base, base_valuation, category=None)¶ Bases:
henselization.sage.rings.padics.henselization.henselization.Henselization_base,FieldThe Henselization of the field
basewith respect tobase_valuation.EXAMPLES:
sage: from henselization import * sage: Henselization(QQ, QQ.valuation(2)) Henselization of Rational Field with respect to 2-adic valuation
-
class
henselization.sage.rings.padics.henselization.henselization.Henselization_Ring(base, base_valuation, category=None)¶ Bases:
henselization.sage.rings.padics.henselization.henselization.Henselization_baseThe Henselization of
basewith respect tobase_valuation.EXAMPLES:
sage: from henselization import * sage: Henselization(ZZ, ZZ.valuation(2)) Henselization of Integer Ring with respect to 2-adic valuation
-
fraction_field()¶ Return the fraction field of this ring.
EXAMPLES:
sage: from henselization import * sage: R = ZZ.henselization(2) sage: R.fraction_field() Henselization of Rational Field with respect to 2-adic valuation
-
is_field(*args, **kwargs)¶ Return whether this ring is a field.
EXAMPLES:
sage: from henselization import * sage: R = ZZ.henselization(2) sage: R.is_field() False
-
-
class
henselization.sage.rings.padics.henselization.henselization.Henselization_base(base, base_valuation, category)¶ Bases:
CommutativeRingAbstract base class for the Henselization of
basewith respect tobase_valuation.EXAMPLES:
sage: from henselization import * sage: Henselization(ZZ, ZZ.valuation(2)) Henselization of Integer Ring with respect to 2-adic valuation
-
base_ring()¶ Return the base ring of this ring.
There are two different base rings for Henselizations. The
base()which is the ring that the Henselization completes and thebase_ring()which is the ring from which the Henselization has been constructed.EXAMPLES:
For Henselizations that are not algebraical extensions of another Henselization, these two concepts coincide:
sage: from henselization import * sage: K = QQ.henselization(2) sage: K.base_ring() is K.base() is QQ True
-
characteristic()¶ Return the characteristic of this ring.
EXAMPLES:
sage: from henselization import * sage: K = QQ.henselization(2) sage: K.characteristic() 0
-
extension(f, names=None, name=None, check=True)¶ Return the algebraic extension of this ring obtained by adjoining a root of the irreducible polynomial
f.EXAMPLES:
sage: from henselization import * sage: K = QQ.henselization(2) sage: R.<x> = K[] sage: K.extension(x^2 + x + 1) Extension defined by x^2 + x + 1 of Henselization of Rational Field with respect to 2-adic valuation
-
gen(i=0)¶ Return the
i-th generator of this ring.EXAMPLES:
This ring is generated by its one element:
sage: from henselization import * sage: K = QQ.henselization(2) sage: K.gen(0) 1 sage: K.gen(1) Traceback (most recent call last): ... ValueError: ring has only one generator
-
ideal(*args, **kwds)¶ Essentially a monkey-patched version of
idealwhich only reduces the generators through gcd if the ring is a PrincipalIdealDomain (i.e., it has that type). We are a principal ideal domain (by category) but do not inherit from that deprecated type.EXAMPLES:
sage: from henselization import * sage: R = ZZ.henselization(2) sage: R.ideal(1, 1) Principal ideal (1) of Henselization of Integer Ring with respect to 2-adic valuation
-
is_finite()¶ Return whether this ring is finite.
EXAMPLES:
sage: from henselization import * sage: K = QQ.henselization(2) sage: K.is_finite() False
-
module(base=None)¶ Return a free
base-module isomorphic to this ring together with isomorphisms to and from this module.INPUT:
base– a ring of which this ring is a finite extension (default: the ring itself)
EXAMPLES:
sage: from henselization import * sage: K = QQ.henselization(2) sage: R.<x> = K[] sage: L = K.extension(x^2 + x + 1) sage: L.module(base=L) (Vector space of dimension 1 over Extension defined by x^2 + x + 1 of Henselization of Rational Field with respect to 2-adic valuation, Isomorphism morphism: From: Vector space of dimension 1 over Extension defined by x^2 + x + 1 of Henselization of Rational Field with respect to 2-adic valuation To: Extension defined by x^2 + x + 1 of Henselization of Rational Field with respect to 2-adic valuation, Isomorphism morphism: From: Extension defined by x^2 + x + 1 of Henselization of Rational Field with respect to 2-adic valuation To: Vector space of dimension 1 over Extension defined by x^2 + x + 1 of Henselization of Rational Field with respect to 2-adic valuation) sage: L.module(base=K) (Vector space of dimension 2 over Henselization of Rational Field with respect to 2-adic valuation, Isomorphism morphism: From: Vector space of dimension 2 over Henselization of Rational Field with respect to 2-adic valuation To: Extension defined by x^2 + x + 1 of Henselization of Rational Field with respect to 2-adic valuation, Isomorphism morphism: From: Extension defined by x^2 + x + 1 of Henselization of Rational Field with respect to 2-adic valuation To: Vector space of dimension 2 over Henselization of Rational Field with respect to 2-adic valuation)
-
ngens()¶ Return the number of generators of this ring.
EXAMPLES:
This ring is generated by its one element:
sage: from henselization import * sage: K = QQ.henselization(2) sage: K.ngens() 1 sage: K.gens() (1,)
-
residue_field()¶ Return the residue field, i.e., the elements of non-negative valuation module elements of positive valuation.
EXAMPLES:
sage: from henselization import * sage: K = QQ.henselization(2) sage: K.residue_field() Finite Field of size 2
-
some_elements()¶ Return some typical elements of this ring.
EXAMPLES:
sage: from henselization import * sage: K = QQ.henselization(2) sage: len(K.some_elements()) 100
-
uniformizer()¶ Return a uniformizing element for
valuation().EXAMPLES:
sage: from henselization import * sage: K = QQ.henselization(2) sage: K.uniformizer() 2
-
valuation()¶ Return the valuation on this complete ring.
EXAMPLES:
sage: from henselization import * sage: K = QQ.henselization(2) sage: K.valuation() 2-adic valuation
-