MeatAxe
2.4

zqt [Options] [i] Subsp Matrix Quot
This program reads in a subspace and applies the canonical map to its quotient on a matrix. The result is written out to Quot. Subsp should be a matrix in semiechelon form, and the two input matrices must have the same field parameter and the same number of columns. If this is not the case the program stops with an error message.
Otherwise the program reads in Subsp, builds a table of pivot columns and then proceeds, row by row, through Matrix. For each row, the significant entries are zeroized by adding the correct multiple of rows of Subsp. The insignificant columns are then extracted and written out to Quot. Hence
zqt i spc z1 q1"q1" contains the action of "z1" on the quotient by "spc".
Another, less obvious use of zqt is to condense a matrix representation. First, find an element E of the group algebra with stable rank, i.e., rank(E*E) = rank(E). This can be done by taking any element F of the group algebra and raising it to higher powers until the rank stabilizes. We may then condense onto the kernel of E as follows
zef E X X is the echelon form of Image(E) znu E Y Y is the kernel of E zqt X Y Z calculate the canonical projection of Y ... ziv Z T ... and adjust Y so that the canonical ... zmu T Y Y1 ... projection of Y1 is the identity zmu Y1 Z1 T1 calculate KZ1 = condensed Z1 zqt X T1 KZ1 zmu Y1 Z2 T1 calculate KZ2 = condensed Z2 zqt X T1 KZ2
It is not completely checked that Subsp is in echelon form.
The Subspace and one row of both Matrix and Subsp must fit into memory.