Next: Bibliography
Up: Splitting algorithm for vector
Previous: 7. Finiteness
For any strict subset J of
,
we have to apply the following sequence of procedures. Again, we assume for simplicity
.
If J allows no splitting, we can omit the test for its
complement J'.
First prepare the input matrix Q according to (5.2):
INPUT: Q - a representation matrix of the module, k - an integer.
OUTPUT: L=A,B,C,D - a list of matrices presenting the blocks of a good
presentation matrix (B is a zero matrix).
-
- Q := std_base(Q)
Q := min_base(Q,k)
L := find_blocks(Q,k)
return L
The next procedure computes generators of the module of J-row reductions of Q:
INPUT: L=A,B,C,D - a list of matrices.
OUTPUT:
- a list of constant
matrices corresponding to generators of
.
-
-
ko_hom(A,cols(C)+cols(D))
kontra_hom(concat(C,D),rows(A))
syz(concat(
))
sub_matrix(
cols
cols
)
i := 1
WHILE i<=cols()
DO
-
-
matrix_of_column
,cols(A),cols(C))
modulo maxideal
IF
next i
END
return
Here ko_hom computes the matrix of the map defined by inserting
the matrix in the first place of the Hom-functor and kontra_hom does the
same with the second argument.
Next we will test J-row-minimality and possibly find a row-reduction
of Q:
INPUT: L=A,B,C,D - a list of block matrices of Q,
- a list of constant matrices
OUTPUT: Q - a presentation matrix,
bool= FALSE if Q was J-row-minimal,
break= FALSE if there is no unique J-row-minimal.
-
- bool := FALSE
break := TRUE
N* := unit_matrix(rows(
i := 1
WHILE i<=cols()
DO
-
- minor := minor_of_first_rows(N*,i)
minor := std_base(minor)
IF (
TRUE; EXIT}
next i
END
IF (bool) minor := radical(minor)
IF (is_not_linear(minor)) break:= FALSE
IF (break) z:= find_zero(minor)
N := N*(z)
A,B := A*N
return
Q,bool,break
In the main loop a J-row-minimal presentation matrix is iterated or
we obtain the answer, according to Proposition 13, that there is no J-row-splitting
of the module.
INPUT: as above
OUTPUT: Q - a matrix being J-row-minimal if bool = TRUE
or Q does not have a unique J-row-minimal presenatation matrix otherwise.
-
- bool := TRUE
break := TRUE
WHILE bool and break DO
-
- L := prepare(Q,k)
:= list_of_reductions(L)
Q,bool,break := find_reduction(
)
END
return Q,break
If break = TRUE, a final test, which uses Corollary 8,
must be preformed to determine whether
the presentation matrix allows a J-splitting. Otherwise we shall take the
next subset J.
INPUT: as above
OUTPUT: Q0 - a block diagonal presentation matrix if bool =
TRUE
-
- L := prepare(Q,k)
:= kontra_hom(A,rows(D))
:= ko_hom(D,cols(A))
:= concat(
)
:= matrix_to_vector(C)
bool := is_liftable(
)
return Q0,bool
Remarks:
- 1.
- It may happen that the procedure find_reduction
will not give a result in a reasonable amount of time for J, but for
the complement J'.
Therefore, it is worth finding good strategies for the algorithm.
- 2.
- The procedures and algorithms described here are implemented in
the library module.lib of the Computer Algebra system SINGULAR [GPS97]. See the accompanying documentation for more
details. module.lib will be included in a forthcoming new release
of SINGULAR and, in the meantime, may be obtained directly
from the authors.
Next: Bibliography
Up: Splitting algorithm for vector
Previous: 7. Finiteness
| ZCA Home |
Reports |