previous  next
3.8.11. Accessing Other Rings
There are a variety of ways of interacting with a ring outside of the
current ring.  First of all, unlike CoCoA 3.4, starting with CoCoA
3.5, variables are usually assigned to a "working memory" accessible
from all rings. (The only exceptions are variables prefixed by
'MEMORY'.  See the chapter entitled "Memory Management" for further
information.)  If a variable contains an object which does not depend
on a user-defined ring---for example an integer---that object can be
immediately accessed and used within any ring.  If a variable contains
a ring-dependent object such as a polynomial, an ideal, or a module,
the variable becomes labeled by the ring in which it was defined.
Built-in CoCoA functions should be smart enough to take into account
the rings on which their arguments depend (if you find an exception,
please send a message to cocoa@dima.unige.it).

To access rings outside of the current ring, one may of course use the
command 'Use' to change the current ring.  Some other ways of
interacting with outside rings:

1. The '::' construction.  This construction can be used to define
variables or perform operations in rings ouside of the current ring.

Example

Use R ::= Q[x,y,z];
I := Ideal(x,y,z)^3;
I;
Ideal(x^3, x^2y, x^2z, xy^2, xyz, xz^2, y^3, y^2z, yz^2, z^3)
-------------------------------
Use S ::= Z/(5)[a,b];
I;  -- I is labeled by its ring, R
R :: Ideal(x^3, x^2y, x^2z, xy^2, xyz, xz^2, y^3, y^2z, yz^2, z^3)
-------------------------------
RingEnv(I);  -- the name of the ring on which I is dependent
R
-------------------------------
R:: Poincare(R/I);  -- To be sure, one may prefix any operation 
                    -- on I by 'R::'  although this should not 
                    -- be necessary
(1 + 3a + 6a^2)
-------------------------------
R:: (x+y)^2;  -- S is still the active ring, but we can perform
              -- operations in R
R :: x^2 + 2xy + y^2
-------------------------------
J := R :: Ideal(x^2-y);  -- while S is active, one may define an
                         -- object dependent on R.  This variable
                         -- becomes part of the working memory.
J;
R :: Ideal(x^2 - y)
-------------------------------
Use R;
J;  -- the label is not used if R is active
Ideal(x^2 - y)
-------------------------------

2. Using.  From within the current ring one may temporarily perform
commands in an another ring using the command 'Using'.  A brief
example appears below.  For more information, see the online help
entry for 'Using'.

Example

Use R ::= Q[x,y];
S ::= Z/(5)[a,b]; -- the current ring is still R
Using S Do  
  X := (a+b)^5;  -- assign a value to a variable in another ring  
EndUsing;
X;
S :: a^5 + b^5
-------------------------------
Use S;
X;
a^5 + b^5
-------------------------------

3. Image.  To map objects from one ring to another, one may use the
command 'Image.'  An introduction to this command appears in the
following section and more details can be found in the online help
entry, 'Image'.

4. QZP, ZPQ.  The commands 'QZP' and 'ZPQ' can sometimes be used to
quickly map a polynomial or ideal from an outside ring into the
current ring.  See the online help entry, 'QZP, ZPQ', for details.
See also: