|
2.3.5 Modules and their annihilator
Now we shall give three more advanced examples.
SINGULAR is able to handle modules over all the rings,
which can be defined as a basering. A free module of rank n
is defined as follows:
| ring rr;
int n = 4;
freemodule(4);
==> _[1]=gen(1)
==> _[2]=gen(2)
==> _[3]=gen(3)
==> _[4]=gen(4)
typeof(_);
==> module
print(freemodule(4));
==> 1,0,0,0,
==> 0,1,0,0,
==> 0,0,1,0,
==> 0,0,0,1
|
To define a module, we provide a list of vectors generating a submodule of
a free module. Then this set of vectors may be identified with the
columns of a matrix. For that reason in SINGULAR matrices and
modules may be interchanged. However, the representation is different
(modules may be considered as sparse matrices).
| ring r =0,(x,y,z),dp;
module MD = [x,0,x],[y,z,-y],[0,z,-2y];
matrix MM = MD;
print(MM);
==> x,y,0,
==> 0,z,z,
==> x,-y,-2y
|
However the submodule
may also be considered as the module
of relations of the factor module
.In this way, SINGULAR can treat arbitrary finitely generated modules
over the
basering (see Representation of mathematical objects).
In order to get the module of relations of
,
we use the command syz .
| syz(MD);
==> _[1]=x*gen(3)-x*gen(2)+y*gen(1)
|
We want to calculate, as an application, the annihilator of a given module.
Let
,where U is our defining module of relations for the module
.
| module U = [z3,xy2,x3],[yz2,1,xy5z+z3],[y2z,0,x3],[xyz+x2,y2,0],[xyz,x2y,1];
|
Then, by definition, the annihilator of M is the ideal
which is, by definition of M, the same as
.Hence we have to calculate the quotient
.The rank of the free module is determined by the choice of U and is the
number of rows of the corresponding matrix. This may be retrieved by
the function nrows . All we have to do now is the following:
| quotient(U,freemodule(nrows(U)));
|
The result is too big to be shown here.
|