Documentation

CompPoly.Bivariate.GuruswamiSudan.Root.RothRuckenstein.Lemmas

Roth-Ruckenstein Correctness Support #

Coefficient, composition, and root-filter lemmas used by the Roth-Ruckenstein correctness proofs.

theorem CompPoly.GuruswamiSudan.cpoly_val_coeff_ofArray {R : Type u_1} [Zero R] [BEq R] [LawfulBEq R] (coeffs : Array R) (i : ) :
(↑(CPolynomial.ofArray coeffs)).coeff i = coeffs.getD i 0
theorem CompPoly.GuruswamiSudan.cpoly_coeff_dropXPower {R : Type u_1} [Zero R] (p : CPolynomial R) (n i : ) :
(p.dropXPower n).coeff i = p.coeff (i + n)
theorem CompPoly.GuruswamiSudan.cbivar_coeff_divXPower {R : Type u_1} [Zero R] [BEq R] [LawfulBEq R] (Q : CBivariate R) (n i j : ) :
(Q.divXPower n).coeff i j = Q.coeff (i + n) j
theorem CompPoly.GuruswamiSudan.cbivar_coeffY_divXPower {R : Type u_1} [Zero R] [BEq R] [LawfulBEq R] (Q : CBivariate R) (n j : ) :
(↑(Q.divXPower n)).coeff j = ((↑Q).coeff j).dropXPower n
theorem CompPoly.GuruswamiSudan.cbivar_coeff_eq_zero_of_y_size_le {R : Type u_1} [Zero R] (Q : CBivariate R) {i j : } (hj : Array.size Q j) :
Q.coeff i j = 0
theorem CompPoly.GuruswamiSudan.initialCoefficientPolynomial_coeff_fold {F : Type u_1} [Field F] [BEq F] [LawfulBEq F] [DecidableEq F] (Q : CBivariate F) (j : ) (ys : List ) (out : CPolynomial F) :
ys.Nodup(List.foldl (fun (out : CPolynomial F) (y : ) => out + CPolynomial.monomial y (Q.coeff 0 y)) out ys).coeff j = out.coeff j + if j ys then Q.coeff 0 j else 0
theorem CompPoly.GuruswamiSudan.cpoly_xAdicOrder?_some_coeff_eq_zero_of_lt {R : Type u_1} [Zero R] [BEq R] [LawfulBEq R] {p : CPolynomial R} {order i : } (h : p.xAdicOrder? = some order) (hi : i < order) :
p.coeff i = 0
def CompPoly.GuruswamiSudan.xAdicStep {R : Type u_1} [Zero R] [BEq R] (Q : CBivariate R) (best : Option ) (y : ) :
Instances For
    Instances For
      theorem CompPoly.GuruswamiSudan.cbivar_xAdicOrder?_step_witness {R : Type u_1} [Zero R] [BEq R] [LawfulBEq R] (Q : CBivariate R) (best : Option ) {y : } (hw : xAdicWitness Q best) (hy : y < Array.size Q) :
      xAdicWitness Q (xAdicStep Q best y)
      theorem CompPoly.GuruswamiSudan.cbivar_xAdicOrder?_fold_witness {R : Type u_1} [Zero R] [BEq R] [LawfulBEq R] (Q : CBivariate R) (ys : List ) (best : Option ) :
      xAdicWitness Q best(∀ yys, y < Array.size Q)xAdicWitness Q (List.foldl (xAdicStep Q) best ys)
      theorem CompPoly.GuruswamiSudan.cbivar_xAdicOrder?_some_exists {R : Type u_1} [Zero R] [BEq R] [LawfulBEq R] {Q : CBivariate R} {order : } (h : Q.xAdicOrder? = some order) :
      y < Array.size Q, Q.coeff order y 0
      theorem CompPoly.GuruswamiSudan.cbivar_xAdicOrder?_step_some_le_best {R : Type u_1} [Zero R] [BEq R] (Q : CBivariate R) {best : Option } {current result y : } (hbest : best = some current) (hstep : xAdicStep Q best y = some result) :
      result current
      theorem CompPoly.GuruswamiSudan.cbivar_xAdicOrder?_step_some_le_row {R : Type u_1} [Zero R] [BEq R] (Q : CBivariate R) {best : Option } {rowOrder result y : } (hrow : ((↑Q).coeff y).xAdicOrder? = some rowOrder) (hstep : xAdicStep Q best y = some result) :
      result rowOrder
      theorem CompPoly.GuruswamiSudan.cbivar_xAdicOrder?_fold_some_le_best {R : Type u_1} [Zero R] [BEq R] (Q : CBivariate R) (ys : List ) (best : Option ) (current result : ) :
      best = some currentList.foldl (xAdicStep Q) best ys = some resultresult current
      theorem CompPoly.GuruswamiSudan.cbivar_xAdicOrder?_fold_some_le_row {R : Type u_1} [Zero R] [BEq R] (Q : CBivariate R) (ys : List ) (best : Option ) (result y rowOrder : ) :
      List.foldl (xAdicStep Q) best ys = some resulty ys((↑Q).coeff y).xAdicOrder? = some rowOrderresult rowOrder
      theorem CompPoly.GuruswamiSudan.cbivar_xAdicOrder?_some_coeff_eq_zero_of_lt {R : Type u_1} [Zero R] [BEq R] [LawfulBEq R] {Q : CBivariate R} {order i y : } (h : Q.xAdicOrder? = some order) (hi : i < order) :
      Q.coeff i y = 0
      theorem CompPoly.GuruswamiSudan.cbivar_xAdicOrder?_fold_none {R : Type u_1} [Zero R] [BEq R] (Q : CBivariate R) (ys : List ) (best : Option ) :
      List.foldl (xAdicStep Q) best ys = nonebest = none yys, ((↑Q).coeff y).xAdicOrder? = none
      theorem CompPoly.GuruswamiSudan.polynomial_monomial_substitution_term {F : Type u_1} [Field F] (a coeff : F) (p : Polynomial F) (x y t : ) :
      (Polynomial.monomial x) coeff * ((Polynomial.X * p) ^ t * Polynomial.C a ^ (y - t) * Polynomial.C (y.choose t)) = (Polynomial.monomial (x + t)) (coeff * (y.choose t) * a ^ (y - t)) * p ^ t
      theorem CompPoly.GuruswamiSudan.polynomial_monomial_substitution_sum {F : Type u_1} [Field F] (a coeff : F) (p : Polynomial F) (x y : ) :
      tFinset.range (y + 1), (Polynomial.monomial (x + t)) (coeff * (y.choose t) * a ^ (y - t)) * p ^ t = (Polynomial.monomial x) coeff * (Polynomial.C a + Polynomial.X * p) ^ y
      theorem CompPoly.GuruswamiSudan.foldl_cpoly_toPoly_add {F : Type u_1} [Field F] [BEq F] [LawfulBEq F] (f : CPolynomial F) (xs : List ) (acc : CPolynomial F) (accPoly : Polynomial F) :
      acc.toPoly = accPoly(List.foldl (fun (acc : CPolynomial F) (x : ) => acc + f x) acc xs).toPoly = List.foldl (fun (acc : Polynomial F) (x : ) => acc + (f x).toPoly) accPoly xs
      theorem CompPoly.GuruswamiSudan.cpoly_monomial_substitution_sum {F : Type u_1} [Field F] [BEq F] [LawfulBEq F] [DecidableEq F] (a coeff : F) (p : CPolynomial F) (x y : ) :
      List.foldl (fun (acc : CPolynomial F) (t : ) => acc + CPolynomial.monomial (x + t) (coeff * (y.choose t) * a ^ (y - t)) * p ^ t) 0 (List.range' 0 (y + 1)) = CPolynomial.monomial x coeff * (CPolynomial.C a + CPolynomial.X * p) ^ y