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 Jrow 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 Homfunctor and kontra_hom does the
same with the second argument.
Next we will test Jrowminimality and possibly find a rowreduction
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 Jrowminimal,
break= FALSE if there is no unique Jrowminimal.

 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 Jrowminimal presentation matrix is iterated or
we obtain the answer, according to Proposition 13, that there is no Jrowsplitting
of the module.
INPUT: as above
OUTPUT: Q  a matrix being Jrowminimal if bool = TRUE
or Q does not have a unique Jrowminimal 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 Jsplitting. Otherwise we shall take the
next subset J.
INPUT: as above
OUTPUT: Q_{0}  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 Q_{0},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 