up previous next
4.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 at 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 outside of the current ring.

Example
  Use R ::= QQ[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 ::= ZZ/(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 ::= QQ[x,y];
  S ::= ZZ/(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.

(5) BringIn . This is the easiest function, but may be slow, to map objects from one ring to another.