LAProof: accuracy and correctness of linear algebra programs

LAProof is a modular, portable proof layer between the verification of application software and the verification of programs implementing operations defined by the basic linear algebra subprograms (BLAS) specification.

See also:

LAProof provides formal machine-checked proofs of the accuracy of basic linear algebra operations: inner product using conventional multiply and add, inner product using fused multiply-add (each with independent error bound proofs), scaled matrix-vector and matrix-matrix multiplication, and scaled vector and matrix addition. LAProof error bounds are backward error bounds and mixed backward-forward error bounds that account for underflow, proved subject to no assumptions except a low- level formal model of IEEE-754 arithmetic. We treat low-order error terms concretely, not approximating as O(u2).

The LAProof repository contains a machine-checked correctness proof of a C function implementing compressed sparse row matrix-vector multiplication as an example of connecting LAProof to concrete programs.

LAProof 2.0beta1 is based more directly on MathComp (compared to LAProof 1.0 which used a list-of-list representation for matrices). That is, matrix and vector operations use definitions in mathcomp.algebra.matrix.

Documentation

C programs

Algorithm Accuracy Proofs

See also the specs-and-proofs table of contents.

Most of the definitions and lemmas listed here are parameterized by a floating-point format not shown in this summary: that is, implicit parameters {_: FPCore.Nans}{t: FPStdLib.type}.

Floating-point operation definitions (mv_mathcomp)

Summation (sum_acc)

Dot product, non-FMA (dot_acc)

Dot product, FMA (fma_dot_acc)

Vector norms (vecnorm_acc)

Scalar and componentwise matrix operations (vec_op_acc)

Matrix-vector multiplication, GEMV (gemv_acc)

Matrix-matrix multiplication, GEMM (gemm_acc)

Cholesky solve (libvalidsdp)

C Program Correctness Proofs

See also the specs-and-proofs table of contents.

Generally these prove that the C programs correctly implement the algorithms. These theorems may be composed with the algorithm accuracy proofs.

Functional models: matrix model definitions and lemmas.

Dense Matrices: densemat.c
Band Matrices: bandmat.c
Sparse Matrices: sparse.c (CSR matrix-vector multiply)