Applications of the Gauss-Jordan algorithm, done right
  Computer Algebra systems are widely spread because of some of their remarkable features such as their ease of use and performance. Nonetheless, this focus on performance sometimes leads to unwanted consequences: algorithms and computations are implemented and carried out in a way which is sometimes not transparent to the users, and that can lead to unexpected failures. In this paper we present a formalisation in a proof assistant system of a \emph{naive} version of the Gauss-Jordan algorithm, with explicit proofs of some of its applications, and additionally a process to obtain versions of this algorithm in two different functional languages (SML and Haskell) by means of code generation techniques from the verified algorithm. The obtained programs are then applied to test cases, which, despite the simplicity of the original algorithm, have shown remarkable features in comparison to some Computer Algebra systems, such as Mathematica\textsuperscript{\textregistered} (where some of these computations are even incorrect), or Sage (in comparison to which the generated programs show a compelling performance). The aim of the paper is to show that, with the current technology in Theorem Proving, formalising Linear Algebra procedures is a challenging but rewarding task, which provides programs that can be compared in some aspects to \emph{state of the art} procedures in Computer Algebra systems, and whose correctness is formally proved. 
Jes\'us Aransay and Jose Divas\'on
cs.LO cs.SC