|
D.2.6.12 ringtensor
Procedure from library ring.lib (see ring_lib).
- Usage:
ringtensor(s,r1,r2,...); s=string, r1,r2,...=rings
- Create:
A new base ring with name ‘s‘ if r1,r2,... are existing rings.
If, say, s = "R" and the rings r1,r2,... exist, the new ring will
have name R, variables from all rings r1,r2,... and as monomial
ordering the block (product) ordering 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,...
- Return:
no return value
- Note:
The characteristic of the new ring will be that of r1. The names of
variables in the rings r1,r2,... should differ (if a name, say x,
occurs in r1 and r2, then, in the new ring r, x always refers to the
variable with name x in r1, there is no access to x in r2).
The procedure works also for quotient rings ri, if the characteristic
of ri is compatible with the characteristic of r1 (i.e. if imap from
ri to r1 is implemented)
This proc uses ’execute’ or calls a procedure using ’execute’.
If you use it in your own proc, let the local names of your proc
start with @ (see the file HelpForProc)
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);
ringtensor("R",r,s,t);
→ // basering is now R
type R;
→ // R [0] *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;
changevar("S","x,y,z"); //change vars of sand make S the basering
→ // basering is now S
qring qS =std(fetch(s,i)); //create qring of S mod i (mapped to S)
changevar("T","d,e,f,g,h",t); //change vars of t and make T the basering
→ // basering is now T
qring qT=std(d2+e2-f3); //create qring of T mod d2+e2-f3
ringtensor("Q",s,qS,t,qT);
→ // basering is now Q
type Q;
→ // Q [0] *qring
→ // 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]=f3-e2-d2
→ _[2]=z5+y3+x2
kill R,Q,S,T;
if(system("with","Namespaces")) {
if( nameof(Current) == "Ring" ) {
kill Top::R,Top::Q,Top::S,Top::T;
} else {
kill Ring::R,Ring::Q,Ring::S,Ring::T;
}
}
|
|