Constructor for skew polynomial rings¶
This module provides the function SkewPolynomialRing()
, which constructs
rings of univariate skew polynomials, and implements caching to prevent the
same ring being created in memory multiple times (which is wasteful and breaks
the general assumption in Sage that parents are unique).
AUTHOR:
 Xavier Caruso (20120629): initial version
 Arpit Merchant (20160804): improved docstrings, added doctests and refactored method
 Johan Rosenkilde (20160803): changes to import format

sage.rings.polynomial.skew_polynomial_ring_constructor.
SkewPolynomialRing
(base_ring, base_ring_automorphism=None, names=None, sparse=False)¶ Return the globally unique skew polynomial ring with the given properties and variable names.
Given a ring \(R\) and a ring automorphism \(\sigma\) of \(R\), the ring of skew polynomials \(R[X, \sigma]\) is the usual abelian group polynomial \(R[X]\) equipped with the modification multiplication deduced from the rule \(X a = \sigma(a) X\).
See also
INPUT:
base_ring
– a commutative ringbase_ring_automorphism
– an automorphism of the base ring (also called twisting map)names
– a string or a list of stringssparse
– a boolean (default:False
). Currently not supported.
Note
The current implementation of skew polynomial rings does not support derivations. Sparse skew polynomials and multivariate skew polynomials are also not implemented.
OUTPUT:
A univariate skew polynomial ring over
base_ring
twisted bybase_ring_automorphism
whennames
is a string with no commas (,
) or a list of length 1. Otherwise we raise aNotImplementedError
as multivariate skew polynomial rings are not yet implemented.UNIQUENESS and IMMUTABILITY:
In Sage, there is exactly one skew polynomial ring for each triple (base ring, twisting map, name of the variable).
EXAMPLES of VARIABLE NAME CONTEXT:
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
The names of the variables defined above cannot be arbitrarily modified because each skew polynomial ring is unique in Sage and other objects in Sage could have pointers to that skew polynomial ring.
However, the variable can be changed within the scope of a
with
block using the localvars context:sage: with localvars(S, ['y']): ....: print(S) Skew Polynomial Ring in y over Univariate Polynomial Ring in t over Integer Ring twisted by t > t + 1
SQUARE BRACKETS NOTATION:
You can alternatively create a skew polynomial ring over \(R\) twisted by
base_ring_automorphism
by writingR['varname', base_ring_automorphism]
.EXAMPLES:
We first define the base ring:
sage: R.<t> = ZZ[]; R Univariate Polynomial Ring in t over Integer Ring
and the twisting map:
sage: base_ring_automorphism = R.hom([t+1]); base_ring_automorphism Ring endomorphism of Univariate Polynomial Ring in t over Integer Ring Defn: t > t + 1
Now, we are ready to define the skew polynomial ring:
sage: S = SkewPolynomialRing(R, base_ring_automorphism, names='x'); S Skew Polynomial Ring in x over Univariate Polynomial Ring in t over Integer Ring twisted by t > t + 1
Use the diamond brackets notation to make the variable ready for use after you define the ring:
sage: S.<x> = SkewPolynomialRing(R, base_ring_automorphism) sage: (x + t)^2 x^2 + (2*t + 1)*x + t^2
Here is an example with the square bracket notations:
sage: S.<x> = R['x', base_ring_automorphism]; S Skew Polynomial Ring in x over Univariate Polynomial Ring in t over Integer Ring twisted by t > t + 1
Rings with different variables names are different:
sage: R['x', base_ring_automorphism] == R['y', base_ring_automorphism] False
Todo
 Sparse Skew Polynomial Ring
 Multivariate Skew Polynomial Ring
 Add derivations.