## 4.4 def

Objects may be defined without a specific type: they inherit their type from the first assignment to them. E.g., `ideal i=x,y,z; def j=i^2;` defines the ideal `i^2` with the name `j`.

Note: Unlike other assignments a ring as an untyped object is not a copy but another reference to the same (possibly unnamed) ring. This means that entries in one of these rings appear also in the other ones. The following defines a ring `s` which is just another reference (or name) for the basering `r`. The name `basering` is an alias for the current ring.

 ``` ring r=32003,(x,y,z),dp; poly f = x; def s=basering; setring s; nameof(basering); ==> s listvar(); ==> // s [0] *ring ==> // f [0] poly ==> // r [0] ring(*) poly g = y; kill f; listvar(r); ==> // r [0] ring(*) ==> // g [0] poly ring t=32003,(u,w),dp; def rt=r+t; rt; ==> // coefficients: ZZ/32003 ==> // number of vars : 5 ==> // block 1 : ordering dp ==> // : names x y z ==> // block 2 : ordering dp ==> // : names u w ==> // block 3 : ordering C ```

This reference to a ring with def is useful if the basering is not local to the procedure (so it cannot be accessed by its name) but one needs a name for it (e.g., for a use with `setring` or `map`). `setring r;` does not work in this case, because `r` may not be local to the procedure.

User manual for Singular version 4.3.1, 2022, generated by texi2html.