Row-span API over the echelon contracts.
The IsEchelonForm section transports row combinations across the echelon
transform and builds the decidable row-span tests spanCoeffs/spanContains
with their soundness lemmas. The IsRowReduced section adds the helper theory
(pivot-column structure, single-row combinations) and proves the tests complete
(spanCoeffs_complete, spanContains_iff).
Row combinations transport forward along the echelon transform.
Converse row-combination transport: an M-row-combination witness c
yields a D.echelon-row-combination witness Matrix.transpose Tinv * c,
where Tinv is any left inverse of D.transform. The proof reuses the
forward transport at the candidate witness.
Existential converse transport: any v in the row span of M is also in
the row span of D.echelon, with an explicit witness produced from a left
inverse of D.transform.
The echelon-side coefficients selected by pivot coordinates.
Equations
Instances For
Coefficients for expressing v in the row span, if the echelon rows solve it.
Equations
- E.spanCoeffs v = if Hex.Matrix.vecMul (D.transform.transpose * E.echelonCoeffs v) M = v then some (D.transform.transpose * E.echelonCoeffs v) else none
Instances For
Decidable row-span membership test derived from spanCoeffs.
Equations
- E.spanContains v = (E.spanCoeffs v).isSome
Instances For
spanContains is the Boolean isSome view of spanCoeffs.
spanCoeffs returns coefficients whose row combination equals v.
If spanContains succeeds, the vector is in the row span.
RREF data has nonzero pivots because every pivot is normalized to one.
A row-combination vector with a single coefficient 1 at row i
and zero elsewhere selects exactly row i of the matrix. This packages
the singleton-row case used by span and RREF arguments.
Any vector in the row span produces coefficients via the RREF-backed
spanCoeffs API.
For RREF data, spanContains is exactly row-span membership.