The operator
** or the function
tensor can be used to construct tensor products of rings.
i1 : ZZ/101[x,y]/(x^2-y^2) ** ZZ/101[a,b]/(a^3+b^3)
ZZ
---[x..y, a..b]
101
o1 = ------------------
2 2 3 3
(x - y , a + b )
o1 : QuotientRing
|
Other monomial orderings can be specified.
i2 : T = tensor(ZZ/101[x,y], ZZ/101[a,b], MonomialOrder => Eliminate 2)
o2 = T
o2 : PolynomialRing
|
The options to
tensor can be discovered with
options.
Given two (quotients of) polynomial rings, say, R = A[x1, ..., xn]/I, S = A[y1,...,yn]/J, then R ** S = A[x1,...,xn,y1, ..., yn]/(I + J). The variables in the two rings are always considered as different. If they have name conflicts, you may still use the variables with indexing, but the display will be confusing:
i4 : R = QQ[x,y]/(x^3-y^2);
|
i5 : T = R ** R
warning: clearing value of symbol x to allow access to subscripted variables based on it
: debug with expression debug 9868 or with command line option --debug 9868
warning: clearing value of symbol y to allow access to subscripted variables based on it
: debug with expression debug 9371 or with command line option --debug 9371
o5 = T
o5 : QuotientRing
|
i6 : generators T
o6 = {x , y , x , y }
0 0 1 1
o6 : List
|
i7 : {T_0 + T_1, T_0 + T_2}
o7 = {x + y , x + x }
0 0 0 1
o7 : List
|
We can change the variable names with the
Variables option.
i8 : U = tensor(R,R,Variables => {x,y,x',y'})
o8 = U
o8 : QuotientRing
|
i9 : x + y + x' + y'
o9 = x + y + x' + y'
o9 : U
|