Recently some bugs were reported in the implementation of the Pernet-Stein 
algorithm implemented in Flint (not a released version, so not in Sage).

I've been trying to fix these bugs, but don't seem to be able to. I wonder 
if someone familiar with the Sage implementation can help me understand 
this algorithm better.

* In the paper [1] it states that "In the rest of this paper, we mainly 
address computation of the HNF of a square nonsingular matrix A". So I 
assume that this algorithm requires a non-singular matrix as input. Does 
Sage deal with this, and if so, how?

* In section 7 of the paper they suggest dealing with the non-square case 
by picking a random prime and computing the rank profile modulo that prime. 
So this algorithm may return the wrong answer then? If so, how does Sage 
deal with this?

* What are the precise conditions (see the first point above) for the input 
matrix if it is non-square?

* In the Sage implementation, which is in 
sage/src/sage/matrix/matrix_integer_dense_hnf.py, the algorithm seems to be 
run until the result is in HNF (note the zero matrix is in HNF), but 
without passing the original matrix to the is_in_hnf_form function. How can 
you check the result was correct, if you don't refer to the original 
matrix? The output could be the HNF of another matrix, which just happens 
to have the same pivot behaviour. Where can I find a proof that this is 
sufficient to check the output of the algorithm in the proof=true case? I 
wasn't able to find a reference for it.

Bill.

[1] 
http://www.wstein.org/papers/hnf/pernet-stein-fast_computation_of_hnf_of_random_integer_matrices.pdf

-- 
You received this message because you are subscribed to the Google Groups 
"sage-devel" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sage-devel+unsubscr...@googlegroups.com.
To post to this group, send email to sage-devel@googlegroups.com.
Visit this group at http://groups.google.com/group/sage-devel.
For more options, visit https://groups.google.com/d/optout.

Reply via email to