Documentation

CompPoly.LinearAlgebra.PolynomialMatrix.MuldersStorjohannCorrectness.RowOps

Mulders-Storjohann Correctness Row and Row-Span Helpers #

Row operation and row-span lemmas used by the Mulders-Storjohann correctness proof.

theorem CompPoly.PolynomialMatrix.rowGet_rowAdd {F : Type u_1} [Field F] [BEq F] [LawfulBEq F] (a b : PolynomialRow F) (j : ) :
rowGet (rowAdd a b) j = rowGet a j + rowGet b j
theorem CompPoly.PolynomialMatrix.rowGet_rowNeg {F : Type u_1} [Field F] [BEq F] [LawfulBEq F] (row : PolynomialRow F) (j : ) :
rowGet (rowNeg row) j = -rowGet row j
theorem CompPoly.PolynomialMatrix.rowGet_rowSub {F : Type u_1} [Field F] [BEq F] [LawfulBEq F] (a b : PolynomialRow F) (j : ) :
rowGet (rowSub a b) j = rowGet a j - rowGet b j
theorem CompPoly.PolynomialMatrix.rowGet_zeroRow {F : Type u_1} [Field F] (width j : ) :
rowGet (zeroRow width) j = 0
theorem CompPoly.PolynomialMatrix.rowAdd_zeroRow_zeroRow {F : Type u_1} [Field F] [BEq F] [LawfulBEq F] (width : ) :
rowAdd (zeroRow width) (zeroRow width) = zeroRow width
theorem CompPoly.PolynomialMatrix.rowAdd_zeroRow_right {F : Type u_1} [Field F] [BEq F] [LawfulBEq F] {width : } (row : PolynomialRow F) (hsize : Array.size row = width) :
rowAdd row (zeroRow width) = row
theorem CompPoly.PolynomialMatrix.rowAdd_assoc {F : Type u_1} [Field F] [BEq F] [LawfulBEq F] (a b c : PolynomialRow F) :
rowAdd (rowAdd a b) c = rowAdd a (rowAdd b c)
theorem CompPoly.PolynomialMatrix.rowAdd_medial {F : Type u_1} [Field F] [BEq F] [LawfulBEq F] (a b c d : PolynomialRow F) :
rowAdd (rowAdd a b) (rowAdd c d) = rowAdd (rowAdd a c) (rowAdd b d)
theorem CompPoly.PolynomialMatrix.getD_map_mul {F : Type u_1} [Field F] [BEq F] [LawfulBEq F] (coeffs : Array (CPolynomial F)) (c : CPolynomial F) (i : ) :
(Array.map (fun (q : CPolynomial F) => c * q) coeffs).getD i 0 = c * coeffs.getD i 0
theorem CompPoly.PolynomialMatrix.getD_ofFn_add {F : Type u_1} [Field F] [BEq F] [LawfulBEq F] (n : ) (coeffsA coeffsB : Array (CPolynomial F)) {i : } (hi : i < n) :
(Array.ofFn fun (k : Fin n) => coeffsA.getD (↑k) 0 + coeffsB.getD (↑k) 0).getD i 0 = coeffsA.getD i 0 + coeffsB.getD i 0
theorem CompPoly.PolynomialMatrix.rowAdd_rowLinearCombination_range {F : Type u_1} [Field F] [BEq F] [LawfulBEq F] {M : PolynomialMatrix F} (coeffsA coeffsB : Array (CPolynomial F)) (n : ) :
n Array.size MrowAdd (List.foldl (fun (acc : PolynomialRow F) (i : ) => rowAdd acc (rowScalePolynomial (coeffsA.getD i 0) (Array.getD M i #[]))) (zeroRow M.MatrixWidth) (List.range n)) (List.foldl (fun (acc : PolynomialRow F) (i : ) => rowAdd acc (rowScalePolynomial (coeffsB.getD i 0) (Array.getD M i #[]))) (zeroRow M.MatrixWidth) (List.range n)) = List.foldl (fun (acc : PolynomialRow F) (i : ) => rowAdd acc (rowScalePolynomial ((Array.ofFn fun (k : Fin (Array.size M)) => coeffsA.getD (↑k) 0 + coeffsB.getD (↑k) 0).getD i 0) (Array.getD M i #[]))) (zeroRow M.MatrixWidth) (List.range n)
theorem CompPoly.PolynomialMatrix.rowAdd_rowLinearCombination {F : Type u_1} [Field F] [BEq F] [LawfulBEq F] {M : PolynomialMatrix F} (coeffsA coeffsB : Array (CPolynomial F)) :
rowAdd (rowLinearCombination coeffsA M) (rowLinearCombination coeffsB M) = rowLinearCombination (Array.ofFn fun (k : Fin (Array.size M)) => coeffsA.getD (↑k) 0 + coeffsB.getD (↑k) 0) M
theorem CompPoly.PolynomialMatrix.cancelShiftedLeadingTerm_mem_rowSpan {F : Type u_1} [Field F] [BEq F] [LawfulBEq F] [DecidableEq F] {M : PolynomialMatrix F} {target reducer : PolynomialRow F} {shift : Array } (htarget : target M.RowSpan) (hreducer : reducer M.RowSpan) :
cancelShiftedLeadingTerm target reducer shift M.RowSpan
theorem CompPoly.PolynomialMatrix.cancelShiftedLeadingTerm_target_mem_rowSpan {F : Type u_1} [Field F] [BEq F] [LawfulBEq F] [DecidableEq F] {M : PolynomialMatrix F} {target reducer : PolynomialRow F} {shift : Array } (hcancel : cancelShiftedLeadingTerm target reducer shift M.RowSpan) (hreducer : reducer M.RowSpan) (hsize : Array.size reducer = Array.size target) :
target M.RowSpan
theorem CompPoly.PolynomialMatrix.cancelShiftedLeadingTerm_size {F : Type u_1} [Field F] [BEq F] [LawfulBEq F] [DecidableEq F] {target reducer : PolynomialRow F} {shift : Array } (hsize : Array.size reducer = Array.size target) :
Array.size (cancelShiftedLeadingTerm target reducer shift) = Array.size target