# tensor products of rings

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.
 i3 : options tensor
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 o5 = T o5 : QuotientRing i6 : generators T o6 = {x, y, x, y} o6 : List i7 : {T_0 + T_1, T_0 + T_2} o7 = {x + y, x + x} 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