Documentation

CompPoly.LinearAlgebra.PolynomialMatrix.MuldersStorjohannCorrectness.Leading

Mulders-Storjohann Correctness Shifted Leading Term Helpers #

Shifted leading-position data and cancellation degree bounds.

theorem CompPoly.PolynomialMatrix.rowShiftedLeadingPosition?_lt {F : Type u_1} [Field F] [BEq F] {row : PolynomialRow F} {shift : Array } {pos : } (hpos : rowShiftedLeadingPosition? row shift = some pos) :
pos < Array.size row
theorem CompPoly.PolynomialMatrix.rowShiftedLeadingPosition?_no_larger_tie {F : Type u_1} [Field F] [BEq F] {row : PolynomialRow F} {shift : Array } {degree pos k : } (hdeg : rowShiftedDegree? row shift = some degree) (hpos : rowShiftedLeadingPosition? row shift = some pos) (hk : k < Array.size row) (hposk : pos < k) :
shiftedEntryDegree? row shift k some degree
theorem CompPoly.PolynomialMatrix.list_find?_some_of_exists {α : Type u_2} (xs : List α) (pred : αBool) (hexists : xxs, pred x = true) :
∃ (x : α), List.find? pred xs = some x
theorem CompPoly.PolynomialMatrix.rowShiftedLeadingPosition?_some_of_degree {F : Type u_1} [Field F] [BEq F] {row : PolynomialRow F} {shift : Array } {degree : } (hdeg : rowShiftedDegree? row shift = some degree) :
∃ (pos : ), rowShiftedLeadingPosition? row shift = some pos
theorem CompPoly.PolynomialMatrix.rowShiftedLeadingPosition?_le_of_entry_eq_degree {F : Type u_1} [Field F] [BEq F] {row : PolynomialRow F} {shift : Array } {degree pos k : } (hdeg : rowShiftedDegree? row shift = some degree) (hpos : rowShiftedLeadingPosition? row shift = some pos) (hk : k < Array.size row) (hentry : shiftedEntryDegree? row shift k = some degree) :
k pos
theorem CompPoly.PolynomialMatrix.shiftedEntryDegree?_eq_some_of_rowGet_ne_zero {F : Type u_1} [Field F] [BEq F] [LawfulBEq F] {row : PolynomialRow F} {shift : Array } {j : } (hne : rowGet row j 0) :
shiftedEntryDegree? row shift j = some ((rowGet row j).natDegree + shift.getD j 0)
theorem CompPoly.PolynomialMatrix.shiftedEntryDegree?_eq_some_iff_data {F : Type u_1} [Field F] [BEq F] [LawfulBEq F] {row : PolynomialRow F} {shift : Array } {j d : } :
shiftedEntryDegree? row shift j = some d rowGet row j 0 (rowGet row j).natDegree + shift.getD j 0 = d
theorem CompPoly.PolynomialMatrix.rowShiftedDegree?_entry_bound {F : Type u_1} [Field F] [BEq F] [LawfulBEq F] {row : PolynomialRow F} {shift : Array } {degree j : } (hdeg : rowShiftedDegree? row shift = some degree) (hj : j < Array.size row) (hne : rowGet row j 0) :
(rowGet row j).natDegree + shift.getD j 0 degree
theorem CompPoly.PolynomialMatrix.rowShiftedLeadingPosition?_entry_eq {F : Type u_1} [Field F] [BEq F] {row : PolynomialRow F} {shift : Array } {degree pos : } (hdeg : rowShiftedDegree? row shift = some degree) (hpos : rowShiftedLeadingPosition? row shift = some pos) :
shiftedEntryDegree? row shift pos = some degree
theorem CompPoly.PolynomialMatrix.rowShiftedLeadingTerm?_some_of_position {F : Type u_1} [Field F] [BEq F] [LawfulBEq F] {row : PolynomialRow F} {shift : Array } {pos : } (hpos : rowShiftedLeadingPosition? row shift = some pos) :
∃ (term : ShiftedLeadingTerm F), rowShiftedLeadingTerm? row shift = some term term.position = pos
theorem CompPoly.PolynomialMatrix.cpoly_natDegree_mul {F : Type u_1} [Field F] [BEq F] [LawfulBEq F] {P Q : CPolynomial F} (hP : P 0) (hQ : Q 0) :
theorem CompPoly.PolynomialMatrix.cpoly_coeff_mul_natDegree_add_ne_zero {F : Type u_1} [Field F] [BEq F] [LawfulBEq F] {P Q : CPolynomial F} (hP : P 0) (hQ : Q 0) :
(P * Q).coeff (P.natDegree + Q.natDegree) 0
theorem CompPoly.PolynomialMatrix.cpoly_coeff_monomial_mul {F : Type u_1} [Field F] [BEq F] [LawfulBEq F] [DecidableEq F] (n d : ) (c : F) (P : CPolynomial F) :
(CPolynomial.monomial n c * P).coeff (d + n) = c * P.coeff d
theorem CompPoly.PolynomialMatrix.cpoly_natDegree_sub_shift_le {F : Type u_1} [Field F] [BEq F] [LawfulBEq F] {P Q : CPolynomial F} {shiftDegree bound : } (hP : P 0P.natDegree + shiftDegree bound) (hQ : Q 0Q.natDegree + shiftDegree bound) (hne : P - Q 0) :
(P - Q).natDegree + shiftDegree bound
theorem CompPoly.PolynomialMatrix.cpoly_natDegree_sub_shift_lt {F : Type u_1} [Field F] [BEq F] [LawfulBEq F] {P Q : CPolynomial F} {shiftDegree bound : } (hP : P 0P.natDegree + shiftDegree < bound) (hQ : Q 0Q.natDegree + shiftDegree < bound) (hne : P - Q 0) :
(P - Q).natDegree + shiftDegree < bound
theorem CompPoly.PolynomialMatrix.rowShiftedDegree?_le_of_entry_bound {F : Type u_1} [Field F] [BEq F] [LawfulBEq F] {row : PolynomialRow F} {shift : Array } {degree bound : } (hbound : k < Array.size row, rowGet row k 0(rowGet row k).natDegree + shift.getD k 0 bound) (hdeg : rowShiftedDegree? row shift = some degree) :
degree bound
theorem CompPoly.PolynomialMatrix.rowShiftedLeadingTerm?_entry_bound {F : Type u_1} [Field F] [BEq F] [LawfulBEq F] {row : PolynomialRow F} {shift : Array } {term : ShiftedLeadingTerm F} (hterm : rowShiftedLeadingTerm? row shift = some term) {k : } (hk : k < Array.size row) (hne : rowGet row k 0) :
(rowGet row k).natDegree + shift.getD k 0 term.shiftedDegree
theorem CompPoly.PolynomialMatrix.rowShiftedLeadingTerm?_entry_strict_of_pos_lt {F : Type u_1} [Field F] [BEq F] [LawfulBEq F] {row : PolynomialRow F} {shift : Array } {term : ShiftedLeadingTerm F} (hterm : rowShiftedLeadingTerm? row shift = some term) {k : } (hk : k < Array.size row) (hposlt : term.position < k) (hne : rowGet row k 0) :
(rowGet row k).natDegree + shift.getD k 0 < term.shiftedDegree
theorem CompPoly.PolynomialMatrix.rowScaleMonomial_entry_bound_of_leading_terms {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) {k : } (hk : k < Array.size reducer) (hne : rowGet (rowScaleMonomial (t.coeff / r.coeff) (t.degree - r.degree) reducer) k 0) :
theorem CompPoly.PolynomialMatrix.rowScaleMonomial_entry_strict_of_pos_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) {k : } (hk : k < Array.size reducer) (hposlt : t.position < k) (hne : rowGet (rowScaleMonomial (t.coeff / r.coeff) (t.degree - r.degree) reducer) k 0) :
(rowGet (rowScaleMonomial (t.coeff / r.coeff) (t.degree - r.degree) reducer) k).natDegree + shift.getD k 0 < t.shiftedDegree
theorem CompPoly.PolynomialMatrix.cancelShiftedLeadingTerm_coeff_cancel {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) (hrcoeff : r.coeff 0) :
(rowGet (cancelShiftedLeadingTerm target reducer shift) t.position).coeff t.degree = 0
theorem CompPoly.PolynomialMatrix.cancelShiftedLeadingTerm_entry_bound {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) {k : } (hk : k < Array.size target) (hne : rowGet (cancelShiftedLeadingTerm target reducer shift) k 0) :
(rowGet (cancelShiftedLeadingTerm target reducer shift) k).natDegree + shift.getD k 0 t.shiftedDegree
theorem CompPoly.PolynomialMatrix.cancelShiftedLeadingTerm_entry_strict_of_pos_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) {k : } (hk : k < Array.size target) (hposlt : t.position < k) (hne : rowGet (cancelShiftedLeadingTerm target reducer shift) k 0) :
(rowGet (cancelShiftedLeadingTerm target reducer shift) k).natDegree + shift.getD k 0 < t.shiftedDegree