# Singular

#### D.2.8.12 ringtensor

Procedure from library `ring.lib` (see ring_lib).

Usage:
ringtensor(r1,r2,...); r1,r2,...=rings

Return:
ring R whose variables are the variables from all rings r1,r2,... and whose monomial ordering is the block (product) ordering of the respective monomial orderings of r1,r2,... . Hence, R is the tensor product of the rings r1,r2,... with ordering matrix equal to the direct sum of the ordering matrices of r1,r2,...

Note:
The characteristic of the new ring will be p if one ring has characteristic p. The names of variables in the rings r1,r2,... must differ.
The procedure works also for quotient rings ri, if the characteristic of ri is compatible with the characteristic of the result (i.e. if imap from ri to the result is implemented)

Example:
 ```LIB "ring.lib"; ring r=32003,(x,y,u,v),dp; ring s=0,(a,b,c),wp(1,2,3); ring t=0,x(1..5),(c,ls); def R=ringtensor(r,s,t); type R; ==> // R ring ==> // characteristic : 32003 ==> // number of vars : 12 ==> // block 1 : ordering dp ==> // : names x y u v ==> // block 2 : ordering wp ==> // : names a b c ==> // : weights 1 2 3 ==> // block 3 : ordering ls ==> // : names x(1) x(2) x(3) x(4) x(5) ==> // block 4 : ordering C setring s; ideal i = a2+b3+c5; def S=changevar("x,y,z"); //change vars of s setring S; qring qS =std(fetch(s,i)); //create qring of S mod i (mapped to S) def T=changevar("d,e,f,g,h",t); //change vars of t setring T; qring qT=std(d2+e2-f3); //create qring of T mod d2+e2-f3 def Q=ringtensor(s,qS,t,qT); setring Q; type Q; ==> // Q ring ==> // characteristic : 0 ==> // number of vars : 16 ==> // block 1 : ordering wp ==> // : names a b c ==> // : weights 1 2 3 ==> // block 2 : ordering wp ==> // : names x y z ==> // : weights 1 2 3 ==> // block 3 : ordering ls ==> // : names x(1) x(2) x(3) x(4) x(5) ==> // block 4 : ordering ls ==> // : names d e f g h ==> // block 5 : ordering C ==> // quotient ring from ideal ==> _[1]=z5+y3+x2 ==> _[2]=f3-e2-d2 kill R,S,T,Q; ```