Documentation

CompPoly.LinearAlgebra.PolynomialMatrix.MuldersStorjohannCorrectness.Measure

Mulders-Storjohann Correctness Termination Measure Helpers #

Measure-decrease and fuel-bound lemmas for Mulders-Storjohann reduction.

Instances For
    Instances For
      theorem CompPoly.PolynomialMatrix.cancelShiftedLeadingTerm_shiftedRowMeasure_lt {F : Type u_1} [Field F] [BEq F] [LawfulBEq F] [DecidableEq F] {target reducer : PolynomialRow F} {shift : Array } {t r : ShiftedLeadingTerm F} (ht : rowShiftedLeadingTerm? target shift = some t) (hr : rowShiftedLeadingTerm? reducer shift = some r) (hpos : t.position = r.position) (hle : r.shiftedDegree t.shiftedDegree) (hsize : Array.size reducer = Array.size target) :
      shiftedRowMeasure (cancelShiftedLeadingTerm target reducer shift) shift < shiftedRowMeasure target shift
      theorem CompPoly.PolynomialMatrix.foldRange_add_eq_of_pointwise (n : ) {f g : } (heq : k < n, f k = g k) :
      List.foldl (fun (acc k : ) => acc + f k) 0 (List.range n) = List.foldl (fun (acc k : ) => acc + g k) 0 (List.range n)
      theorem CompPoly.PolynomialMatrix.foldRange_add_lt_of_pointwise_lt (n : ) {f g : } {idx : } (hidx : idx < n) (hlt : f idx < g idx) (heq : k < n, k idxf k = g k) :
      List.foldl (fun (acc k : ) => acc + f k) 0 (List.range n) < List.foldl (fun (acc k : ) => acc + g k) 0 (List.range n)
      theorem CompPoly.PolynomialMatrix.shiftedMatrixMeasure_replaceRow_lt {F : Type u_1} [Field F] [BEq F] {M : PolynomialMatrix F} {shift : Array } {idx : } {newRow : PolynomialRow F} (hidx : idx < Array.size M) (hlt : shiftedRowMeasure newRow shift < shiftedRowMeasure (Array.getD M idx #[]) shift) :
      Instances For
        theorem CompPoly.PolynomialMatrix.matrixShiftedDegreeStep?_eq {F : Type u_1} [Field F] [BEq F] (M : PolynomialMatrix F) (shift : Array ) :
        M.matrixShiftedDegreeStep? shift = fun (acc : Option ) (i : ) => match rowShiftedDegree? (Array.getD M i #[]) shift with | none => acc | some d => maxOption acc d
        theorem CompPoly.PolynomialMatrix.matrixShiftedDegreeSpecFold_acc_le {F : Type u_1} [Field F] [BEq F] {M : PolynomialMatrix F} {shift : Array } (xs : List ) {acc : Option } {a D : } (hacc : acc = some a) (hfold : List.foldl (M.matrixShiftedDegreeStep? shift) acc xs = some D) :
        a D
        theorem CompPoly.PolynomialMatrix.matrixShiftedDegreeSpecFold_row_le {F : Type u_1} [Field F] [BEq F] {M : PolynomialMatrix F} {shift : Array } (xs : List ) {acc : Option } {D i rowDeg : } (hfold : List.foldl (M.matrixShiftedDegreeStep? shift) acc xs = some D) (hi : i xs) (hdeg : rowShiftedDegree? (Array.getD M i #[]) shift = some rowDeg) :
        rowDeg D
        theorem CompPoly.PolynomialMatrix.matrixShiftedDegreeSpec?_row_le {F : Type u_1} [Field F] [BEq F] {M : PolynomialMatrix F} {shift : Array } {D i rowDeg : } (hmat : M.matrixShiftedDegreeSpec? shift = some D) (hi : i < Array.size M) (hdeg : rowShiftedDegree? (Array.getD M i #[]) shift = some rowDeg) :
        rowDeg D
        theorem CompPoly.PolynomialMatrix.matrixShiftedDegree?_row_le {F : Type u_1} [Field F] [BEq F] {M : PolynomialMatrix F} {shift : Array } {D i rowDeg : } (hmat : M.matrixShiftedDegree? shift = some D) (hi : i < Array.size M) (hdeg : rowShiftedDegree? (Array.getD M i #[]) shift = some rowDeg) :
        rowDeg D
        theorem CompPoly.PolynomialMatrix.matrixShiftedDegreeSpecFold_some_of_acc_some {F : Type u_1} [Field F] [BEq F] {M : PolynomialMatrix F} {shift : Array } (xs : List ) {acc : Option } {a : } (hacc : acc = some a) :
        ∃ (D : ), List.foldl (M.matrixShiftedDegreeStep? shift) acc xs = some D
        theorem CompPoly.PolynomialMatrix.matrixShiftedDegreeSpecFold_exists_some_of_row {F : Type u_1} [Field F] [BEq F] {M : PolynomialMatrix F} {shift : Array } (xs : List ) {i rowDeg : } (hi : i xs) (hdeg : rowShiftedDegree? (Array.getD M i #[]) shift = some rowDeg) :
        ∃ (D : ), List.foldl (M.matrixShiftedDegreeStep? shift) none xs = some D
        theorem CompPoly.PolynomialMatrix.matrixShiftedDegree?_row_le_getD {F : Type u_1} [Field F] [BEq F] {M : PolynomialMatrix F} {shift : Array } {i rowDeg : } (hi : i < Array.size M) (hdeg : rowShiftedDegree? (Array.getD M i #[]) shift = some rowDeg) :
        rowDeg (M.matrixShiftedDegree? shift).getD 0
        theorem CompPoly.PolynomialMatrix.shiftedRowMeasure_le_of_degree_bound {F : Type u_1} [Field F] [BEq F] {row : PolynomialRow F} {shift : Array } {d : } (hbound : ∀ (rowDeg : ), rowShiftedDegree? row shift = some rowDegrowDeg d) :
        shiftedRowMeasure row shift (d + 1) * (Array.size row + 1)
        theorem CompPoly.PolynomialMatrix.shiftedMatrixMeasure_range_le_of_degree_bound {F : Type u_1} [Field F] [BEq F] {M : PolynomialMatrix F} {shift : Array } {d : } (hM : M.WellFormed) (hbound : ∀ (i rowDeg : ), i < Array.size MrowShiftedDegree? (Array.getD M i #[]) shift = some rowDegrowDeg d) (n : ) :
        n Array.size MList.foldl (fun (acc i : ) => acc + shiftedRowMeasure (Array.getD M i #[]) shift) 0 (List.range n) n * ((d + 1) * (M.MatrixWidth + 1))
        theorem CompPoly.PolynomialMatrix.shiftedMatrixMeasure_le_of_degree_bound {F : Type u_1} [Field F] [BEq F] {M : PolynomialMatrix F} {shift : Array } {d : } (hM : M.WellFormed) (hbound : ∀ (i rowDeg : ), i < Array.size MrowShiftedDegree? (Array.getD M i #[]) shift = some rowDegrowDeg d) :