Henselizations of rings

AUTHORS:

  • Julian Rüth (2016-11-15): initial version
class henselization.sage.rings.padics.henselization.henselization.ExtensionFactory(name)

Bases: UniqueFactory

Return the algebraic extension which adjoins to base a root of polynomial.

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_base

Abstract base class for the extension of a Henselization by adjunction of a root of polynomial to the complete ring base_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.HenselizationExtension

Extension of a Henselization whose 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_Field

Extension of a field Henselization whose 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.HenselizationExtensionAbsolute

Extension of a HenselizationExtension 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: 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_Field

Extension of a HenselizationExtension field 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 valuation

TESTS:

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_Ring

Extension of a HenselizationExtension that 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.HenselizationExtension

Extension of a HenselizationExtensionAbsolute 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: 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_Field

Extension of a HenselizationExtensionAbsolute 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: 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_Ring

Extension of a HenselizationExtensionAbsolute domain 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.HenselizationExtensionAbsolute

Simple 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_Field

Simple extension of a Henselization_Field that 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_Ring

Simple extension of a Henselization_Ring that 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_Field

A HenselizationExtension that 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_Ring

A HenselizationExtension that 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: UniqueFactory

Return the Henselization of R with respect to v.

INPUT:

  • R – a field or an excellent integral domain whose localization at the maximal ideal of v is the discrete valuation ring of v. (Most of these conditions are not verified by this factory.)
  • v – a non-trivial discrete valuation on R.

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, Field

The Henselization of the field base with respect to base_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_base

The Henselization of base with respect to base_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: CommutativeRing

Abstract base class for the Henselization of base with respect to base_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 the base_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 ideal which 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