Certificate construction for the Bareiss decomposition #
certifyDecomposition constructs a proof of Echelon.Decomposition A L σ pivot from the given
decomposition data.
It proves that L * A_σ has the given pivots (through the product L * A_σ = U), and that L
is lower triangular with nonzero diagonal entries.
The certify* functions assemble these proofs from facts about single entries, including the
arithmetic equalities for the product and the non-zeroness for the diagonal entries of L and
the pivots of U, which are established by the model's certifier (or the kernel).
Main definitions #
certifyDecomposition: builds theEchelon.Decompositioncertificate from decomposition data.DecompositionCert: the internal certificate structure that includes the decomposition data,Uand the product equation for downstream tactics.ListMatrixLit: anofListsmatrix together with its list literal and its rows of entries.
Implementation notes #
The elimination records its echelon form U, making the product L * A_σ = U a certificate
obligation of its own.
The product is proved on the list representation which the kernel checks more cheaply.
Three forms of one list-based matrix literal. This makes the argument list more succinct when a cert construction function needs to use multiple representations.
Instances For
The ListMatrixLit of the matrix with rows rows.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Build the permutation σ = swap a₀ b₀ * swap a₁ b₁ * ⋯ from the recorded swaps.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The certifier that leaves each fact to the kernel's decide.
Equations
- Mathlib.Tactic.Echelon.decideCertifier α = { eq := fun (a b : Q(«$α»)) => Qq.mkDecideProofQ q(«$a» = «$b»), neZero := fun (_zα : Q(Zero «$α»)) (a : Q(«$α»)) => Qq.mkDecideProofQ q(«$a» ≠ 0) }
Instances For
Construct the list-based IsLowerTriangularDiagList k c rows cert.
Equations
- One or more equations did not get rendered due to their size.
- Mathlib.Tactic.Echelon.certifyLowerTriangularDiagList certifier zα k 0 kQ cQ rows = pure q(⋯)
Instances For
Prove that L is lower triangular with a nonzero diagonal.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Construct the list-based IsPivotedList pivots rows cert.
Equations
- One or more equations did not get rendered due to their size.
- Mathlib.Tactic.Echelon.certifyPivotedList certifier zα [] pivots rows = pure q(⋯)
Instances For
Prove that U is pivoted by pivotOfList pivots from the rows of U, with certifier
proving the pivot entries nonzero.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Prove the row arrangement A.submatrix σ id = Aσ.
Equations
- Mathlib.Tactic.Echelon.certifyPermEq A Aσ σ = Lean.Meta.mkExpectedPropHint q(⋯) q(«$A».submatrix (⇑«$σ») id = «$Aσ»)
Instances For
Prove the row literals of rows₁ and rows₂ equal from the entrywise equations a = b,
each proved by certifier.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Prove the product L * Aσ = U from the expansion mulEq of the product of the row lists of
L and Aσ, whose literals are mulEq.A and mulEq.B.
Equations
- One or more equations did not get rendered due to their size.
Instances For
An internal structure recording the Echelon.Decomposition certificate of A with its data,
together with the intermediate certificates that downstream tactics reuse (the echelon form U
and the product equation stated on it).
- L : ListMatrixLit α m m
The transformation matrix.
- σ : Q(Equiv.Perm (Fin «$m»))
The row permutation on the rows of
A. The pivot of the resulting echelon form.
- decomp : let a := self.L.matrix; Q(Echelon.Decomposition «$A» unknown_1 unknown_2 unknown_3)
The decomposition certificate from the theory.
- U : ListMatrixLit α m n
The echelon form.
- mul_eq : let a := self.U.matrix; let a_1 := self.L.matrix; Q(unknown_1 * «$A».submatrix (⇑unknown_2) id = unknown_3)
The product equation.
Instances For
Build the DecompositionCert of A from the decomposition data and the parsed entries
of A.
Equations
- One or more equations did not get rendered due to their size.