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) |
Other monomial orderings can be specified.
i2 : T = tensor(ZZ/101[x,y], ZZ/101[a,b], MonomialOrder => Eliminate 2) |
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 |
i6 : generators T |
i7 : {T_0 + T_1, T_0 + T_2} |
We can change the variable names with the Variables option.
i8 : U = tensor(R,R,Variables => {x,y,x',y'}) |
i9 : x + y + x' + y' |