-*- M2 -*-

Date: Sat, 8 Jul 2006 13:32:22 -0500 (CDT)
From: Dan Grayson <dan@math.uiuc.edu>
To: mike@math.cornell.edu
CC: dan@math.uiuc.edu
In-reply-to: <200607081825.k68IPr312799@u00.math.uiuc.edu> (message from Dan
	Grayson on Sat, 8 Jul 2006 13:25:53 -0500 (CDT))
Subject: Re: prune over ZZ
Reply-to: dan@math.uiuc.edu


Pruning is an example where to get the pruning map, I needed to invert the
change matrix provided by the gb routine.  Perhaps it is time for gb to return
the inverse of the change matrix, too.  Same for the syzygy matrix.

Actually, they may not be square, so what we really mean is that the four
matrices form a direct sum diagram, or that

	 chg | syz  is the inverse of chg' || syz'

It was an accident that the other algorithm we have for pruning made the
pruning map go the direction it does, but we can't predict which direction the
user will need the map.

In fact, it would be a good idea to return the map as a Matrix with the
pre-computed inverse cached inside.  Then they can treat it as a matrix, but
invert it at zero cost.

> Date: Sat, 8 Jul 2006 13:25:53 -0500 (CDT)
> From: Dan Grayson <dan@math.uiuc.edu>
> To: mike@math.cornell.edu
> CC: dan@math.uiuc.edu
> Subject: prune over ZZ
> Reply-to: dan@math.uiuc.edu
> 
> 
> prune over ZZ works:
> 
>     i19 : N = prune (M = coker ( random (ZZ^6, ZZ^3) * matrix "2,,;,3,;,,7" ) )
> 
>     o19 = cokernel | -14 0 0 |
> 		   | 0   3 0 |
> 		   | 0   0 1 |
> 		   | 0   0 0 |
> 		   | 0   0 0 |
> 		   | 0   0 0 |
> 
> 				   6
>     o19 : ZZ-module, quotient of ZZ
> 
>     i20 : (target N.cache.pruningMap , source N.cache.pruningMap )
> 
>     o20 = (cokernel | -14 -12 28  |, cokernel | -14 0 0 |)
> 		    | 10  -21 -35 |           | 0   3 0 |
> 		    | 2   -6  28  |           | 0   0 1 |
> 		    | -6  -9  -21 |           | 0   0 0 |
> 		    | 10  0   35  |           | 0   0 0 |
> 		    | 14  15  -14 |           | 0   0 0 |
> 
>     o20 : Sequence
> 
>     i21 : isIsomorphism N.cache.pruningMap 
> 
>     o21 = true
> 

