Skew Univariate Polynomial Rings¶
This module provides the
SkewPolynomialRing_general
,
which constructs a general dense univariate skew polynomials over commutative
base rings with automorphisms over the base rings. This is usual accessed only
indirectly through the constructor
sage.rings.polynomial.skew_polynomial_constructor.SkewPolynomialRing()
.
See SkewPolynomialRing_general
for a definition of a univariate skew
polynomial ring.
AUTHOR:
- Xavier Caruso (2012-06-29): initial version
- Arpit Merchant (2016-08-04): improved docstrings, fixed doctests and refactored classes and methods
- Johan Rosenkilde (2016-08-03): changes for bug fixes, docstring and doctest errors
-
sage.rings.polynomial.skew_polynomial_ring.
SkewPolynomialRing_general
¶ A general implementation of univariate skew polynomialring over a commutative ring.
Let \(R\) be a commutative ring, and let \(\sigma\) be an automorphism of \(R\). The ring of skew polynomials \(R[X, \sigma]\) is the polynomial ring \(R[X]\), where the addition is the usual polynomial addition, but the multiplication operation is defined by the modified rule
\[X*a = \sigma(a) X.\]This means that \(R[X, \sigma]\) is a non-commutative ring. Skew polynomials were first introduced by Ore [Ore33].
EXAMPLES:
sage: R.<t> = ZZ[] sage: sigma = R.hom([t+1]) sage: S.<x> = SkewPolynomialRing(R,sigma); S Skew Polynomial Ring in x over Univariate Polynomial Ring in t over Integer Ring twisted by t |--> t + 1
One can also use a shorter syntax:
sage: S.<x> = R['x',sigma]; S Skew Polynomial Ring in x over Univariate Polynomial Ring in t over Integer Ring twisted by t |--> t + 1
If we omit the diamond notation, the variable holding the indeterminate is not assigned:
sage: Sy = R['y',sigma] sage: y Traceback (most recent call last): ... NameError: name 'y' is not defined sage: Sy.gen() y
Note however that contrary to usual polynomial rings, we cannot omit the variable name on the RHS, since this collides with the notation for creating polynomial rings:
sage: Sz.<z> = R[sigma] Traceback (most recent call last): ... ValueError: variable name 'Ring endomorphism of Univariate Polynomial Ring in t over Integer Ring\n Defn: t |--> t + 1' is not alphanumeric
Of course, skew polynomial rings with different twist maps are not equal either:
sage: R['x',sigma] == R['x',sigma^2] False
Saving and loading of polynomial rings works:
sage: loads(dumps(R['x',sigma])) == R['x',sigma] True
There is a coercion map from the base ring of the skew polynomial rings:
sage: S.has_coerce_map_from(R) True sage: x.parent() Skew Polynomial Ring in x over Univariate Polynomial Ring in t over Integer Ring twisted by t |--> t + 1 sage: t.parent() Univariate Polynomial Ring in t over Integer Ring sage: y = x+t; y x + t sage: y.parent() is S True
See also
sage.rings.polynomial.skew_polynomial_ring_constructor.SkewPolynomialRing()
sage.rings.polynomial.skew_polynomial_element
REFERENCES:
[Ore33] Oystein Ore. Theory of Non-Commutative Polynomials Annals of Mathematics, Second Series, Volume 34, Issue 3 (Jul., 1933), 480-508.