Suppose we have a module that is represented as an image of a matrix, and we want to represent it as a cokernel of a matrix. This task may be accomplished with
prune.
i1 : R = QQ[x,y];
|
i2 : I = ideal vars R
o2 = ideal (x, y)
o2 : Ideal of R
|
i3 : M = image vars R
o3 = image | x y |
1
o3 : R-module, submodule of R
|
i4 : N = prune M
o4 = cokernel {1} | -y |
{1} | x |
2
o4 : R-module, quotient of R
|
The isomorphism between them may be found under the key
pruningMap.
i5 : f = N.cache.pruningMap
o5 = {1} | 1 0 |
{1} | 0 1 |
o5 : Matrix M <-- N
|
i6 : isIsomorphism f
o6 = true
|
i7 : f^-1
o7 = {1} | 1 0 |
{1} | 0 1 |
o7 : Matrix N <-- M
|
The matrix form of
f looks nondescript, but the map knows its source and target
i8 : source f
o8 = cokernel {1} | -y |
{1} | x |
2
o8 : R-module, quotient of R
|
i9 : target f
o9 = image | x y |
1
o9 : R-module, submodule of R
|
It's a 2 by 2 matrix because
M and
N are both represented as modules with two generators.
Functions for finding related modules:
-
ambient -- ambient free module of a subquotient, or ambient ring
-
cover -- get the covering free module
-
super -- get the ambient module
i10 : super M
1
o10 = R
o10 : R-module, free
|
i11 : cover N
2
o11 = R
o11 : R-module, free, degrees {2:1}
|
Some simple operations on modules:
i12 : M ++ N
o12 = subquotient ({0} | x y 0 0 |, {0} | 0 |)
{1} | 0 0 1 0 | {1} | -y |
{1} | 0 0 0 1 | {1} | x |
3
o12 : R-module, subquotient of R
|
i13 : M ** N
o13 = cokernel {2} | -y 0 -y 0 |
{2} | x 0 0 -y |
{2} | 0 -y x 0 |
{2} | 0 x 0 x |
4
o13 : R-module, quotient of R
|
Ideals and modules behave differently when making powers:
i14 : M^3
o14 = image | x y 0 0 0 0 |
| 0 0 x y 0 0 |
| 0 0 0 0 x y |
3
o14 : R-module, submodule of R
|
i15 : I^3
3 2 2 3
o15 = ideal (x , x y, x*y , y )
o15 : Ideal of R
|