Common Guruswami-Sudan Root Helper Lemmas #
Reusable proof facts for bounded bivariate root backends.
theorem
CompPoly.GuruswamiSudan.degreeLt_of_degreeLtBool
{F : Type u_1}
[Zero F]
{p : CPolynomial F}
{k : ℕ}
(h : degreeLtBool p k = true)
:
degreeLt p k
theorem
CompPoly.GuruswamiSudan.degreeLtBool_of_degreeLt
{F : Type u_1}
[Zero F]
{p : CPolynomial F}
{k : ℕ}
(h : degreeLt p k)
:
theorem
CompPoly.GuruswamiSudan.polynomialPrefix_zero
{R : Type u_1}
[Zero R]
[BEq R]
[LawfulBEq R]
(p : CPolynomial R)
:
theorem
CompPoly.GuruswamiSudan.polynomialPrefix_succ
{F : Type u_1}
[Field F]
[BEq F]
[LawfulBEq F]
[DecidableEq F]
(p : CPolynomial F)
(depth : ℕ)
:
theorem
CompPoly.GuruswamiSudan.polynomialPrefix_eq_self_of_degreeLt
{F : Type u_1}
[Zero F]
[BEq F]
[LawfulBEq F]
{p : CPolynomial F}
{k : ℕ}
(hdegree : degreeLt p k)
:
theorem
CompPoly.GuruswamiSudan.list_sum_map_range_eq_finset_sum
{R : Type u_1}
[AddCommMonoid R]
(f : ℕ → R)
(n : ℕ)
:
theorem
CompPoly.GuruswamiSudan.cpoly_eval_add
{R : Type u_1}
[Semiring R]
[BEq R]
[LawfulBEq R]
(p q : CPolynomial R)
(c : R)
:
theorem
CompPoly.GuruswamiSudan.cpoly_eval_monomial
{R : Type u_1}
[Semiring R]
[BEq R]
[LawfulBEq R]
[Nontrivial R]
[DecidableEq R]
(y : ℕ)
(a c : R)
:
theorem
CompPoly.GuruswamiSudan.composeY_add
{R : Type u_1}
[Semiring R]
[BEq R]
[LawfulBEq R]
[Nontrivial R]
(P Q : CBivariate R)
(p : CPolynomial R)
:
theorem
CompPoly.GuruswamiSudan.composeY_outer_monomial
{R : Type u_1}
[Semiring R]
[BEq R]
[LawfulBEq R]
[Nontrivial R]
[DecidableEq R]
(c p : CPolynomial R)
(y : ℕ)
:
theorem
CompPoly.GuruswamiSudan.cpoly_powCoeff_eq_coeff_pow
{R : Type u_1}
[Semiring R]
[BEq R]
[LawfulBEq R]
[Nontrivial R]
(p : CPolynomial R)
(k n : ℕ)
:
theorem
CompPoly.GuruswamiSudan.cpoly_mulPowCoeff_eq_coeff_mul_pow
{R : Type u_1}
[Semiring R]
[BEq R]
[LawfulBEq R]
[Nontrivial R]
(a p : CPolynomial R)
(k n : ℕ)
:
theorem
CompPoly.GuruswamiSudan.cpoly_coeff_zero_pow_monomial_zero
{F : Type u_1}
[Field F]
[BEq F]
[LawfulBEq F]
[DecidableEq F]
(c : F)
(n : ℕ)
:
theorem
CompPoly.GuruswamiSudan.cpoly_mulPowCoeff_monomial_zero_depth_zero
{F : Type u_1}
[Field F]
[BEq F]
[LawfulBEq F]
[DecidableEq F]
(a : CPolynomial F)
(c : F)
(y : ℕ)
:
theorem
CompPoly.GuruswamiSudan.composeY_coeff_zero_zipIdx_eq_range_aux
{F : Type u_1}
[Field F]
[BEq F]
[LawfulBEq F]
(xs : List (CPolynomial F))
(p accPoly : CPolynomial F)
(accCoeff : F)
(offset : ℕ)
(hacc : accPoly.coeff 0 = accCoeff)
:
List.foldl (fun (acc : F) (y : ℕ) => acc + (xs.getD (y - offset) 0).coeff 0 * p.coeff 0 ^ y) accCoeff
(List.range' offset xs.length) = (List.foldl (fun (acc : CPolynomial F) (x : CPolynomial F × ℕ) => acc + x.1 * p ^ x.2) accPoly
(xs.zipIdx offset)).coeff
0
theorem
CompPoly.GuruswamiSudan.composeY_coeff_zero_fold_eq
{F : Type u_1}
[Field F]
[BEq F]
[LawfulBEq F]
(coeffs : Array (CPolynomial F))
(p : CPolynomial F)
:
List.foldl (fun (acc : F) (y : ℕ) => acc + (coeffs.getD y 0).coeff 0 * p.coeff 0 ^ y) 0 (List.range' 0 coeffs.size) = (Array.foldl (fun (acc : CPolynomial F) (x : CPolynomial F × ℕ) => acc + x.1 * p ^ x.2) 0 coeffs.zipIdx).coeff 0
theorem
CompPoly.GuruswamiSudan.composeY_coeff_zipIdx_eq_range_aux
{R : Type u_1}
[Semiring R]
[BEq R]
[LawfulBEq R]
[Nontrivial R]
(xs : List (CPolynomial R))
(p accPoly : CPolynomial R)
(accCoeff : R)
(offset n : ℕ)
(hacc : accPoly.coeff n = accCoeff)
:
List.foldl (fun (acc : R) (y : ℕ) => acc + (xs.getD (y - offset) 0 * p ^ y).coeff n) accCoeff
(List.range' offset xs.length) = (List.foldl (fun (acc : CPolynomial R) (x : CPolynomial R × ℕ) => acc + x.1 * p ^ x.2) accPoly
(xs.zipIdx offset)).coeff
n
theorem
CompPoly.GuruswamiSudan.composeY_coeff_fold_eq
{R : Type u_1}
[Semiring R]
[BEq R]
[LawfulBEq R]
[Nontrivial R]
(coeffs : Array (CPolynomial R))
(p : CPolynomial R)
(n : ℕ)
:
List.foldl (fun (acc : R) (y : ℕ) => acc + (coeffs.getD y 0 * p ^ y).coeff n) 0 (List.range' 0 coeffs.size) = (Array.foldl (fun (acc : CPolynomial R) (x : CPolynomial R × ℕ) => acc + x.1 * p ^ x.2) 0 coeffs.zipIdx).coeff n
theorem
CompPoly.GuruswamiSudan.composeYCoeff_eq_composeY_coeff
{R : Type u_1}
[Semiring R]
[BEq R]
[LawfulBEq R]
[Nontrivial R]
(Q : CBivariate R)
(p : CPolynomial R)
(depth : ℕ)
:
theorem
CompPoly.GuruswamiSudan.fold_range_coeff_add_mul_pow
{R : Type u_1}
[Semiring R]
[BEq R]
[LawfulBEq R]
[Nontrivial R]
(coeffs : Array (CPolynomial R))
(p : CPolynomial R)
(ys : List ℕ)
(acc : CPolynomial R)
(accCoeff : R)
(n : ℕ)
:
theorem
CompPoly.GuruswamiSudan.composeY_eq_range_fold
{R : Type u_1}
[Semiring R]
[BEq R]
[LawfulBEq R]
[Nontrivial R]
(Q : CBivariate R)
(p : CPolynomial R)
:
Q.composeY p = List.foldl (fun (acc : CPolynomial R) (y : ℕ) => acc + (↑Q).coeff y * p ^ y) 0 (List.range' 0 (Array.size ↑Q))
theorem
CompPoly.GuruswamiSudan.composeY_zero
{R : Type u_1}
[Semiring R]
[BEq R]
[LawfulBEq R]
[Nontrivial R]
(p : CPolynomial R)
:
theorem
CompPoly.GuruswamiSudan.composeY_toPoly
{F : Type u_1}
[Field F]
[BEq F]
[LawfulBEq F]
[DecidableEq F]
(Q : CBivariate F)
(p : CPolynomial F)
:
theorem
CompPoly.GuruswamiSudan.initialCoefficientPolynomial_evalHorner_eq_composeYCoeff_monomial_zero
{F : Type u_1}
[Field F]
[BEq F]
[LawfulBEq F]
[DecidableEq F]
(Q : CBivariate F)
(c : F)
:
theorem
CompPoly.GuruswamiSudan.composeYCoeff_monomial_zero_eq_composeY_coeff_zero
{F : Type u_1}
[Field F]
[BEq F]
[LawfulBEq F]
[DecidableEq F]
(Q : CBivariate F)
(p : CPolynomial F)
:
theorem
CompPoly.GuruswamiSudan.initialCoefficientPolynomial_eval_eq_composeY_coeff_zero
{F : Type u_1}
[Field F]
[BEq F]
[LawfulBEq F]
[DecidableEq F]
(Q : CBivariate F)
(p : CPolynomial F)
:
theorem
CompPoly.GuruswamiSudan.rootsInFieldForNonzeroEquation_complete
{F : Type u_1}
[Field F]
[BEq F]
[LawfulBEq F]
(fieldRoots : FieldRootContext F)
{p : CPolynomial F}
{a : F}
(hp : p ≠ 0)
(ha : CPolynomial.eval a p = 0)
:
theorem
CompPoly.GuruswamiSudan.composeY_of_composeYHorner_eq_zero
{F : Type u_1}
[Field F]
[BEq F]
[LawfulBEq F]
{Q : CBivariate F}
{p : CPolynomial F}
(h : Q.composeYHorner p = 0)
:
theorem
CompPoly.GuruswamiSudan.composeYHorner_eq_zero_of_composeY
{F : Type u_1}
[Field F]
[BEq F]
[LawfulBEq F]
{Q : CBivariate F}
{p : CPolynomial F}
(h : Q.composeY p = 0)
:
theorem
CompPoly.GuruswamiSudan.isRootYDegreeLtBool_of_root
{F : Type u_1}
[Field F]
[BEq F]
[LawfulBEq F]
{Q : CBivariate F}
{p : CPolynomial F}
{k : ℕ}
(hdegree : degreeLt p k)
(hroot : Q.composeY p = 0)
:
theorem
CompPoly.GuruswamiSudan.rootsYDegreeLtFromCandidates_sound
{F : Type u_1}
[Field F]
[BEq F]
[LawfulBEq F]
{candidates : Array (CPolynomial F)}
{Q : CBivariate F}
{k : ℕ}
{p : CPolynomial F}
(h : p ∈ (rootsYDegreeLtFromCandidates candidates Q k).toList)
:
theorem
CompPoly.GuruswamiSudan.rootsYDegreeLtFromCandidates_eraseDups_sound
{F : Type u_1}
[Field F]
[BEq F]
[LawfulBEq F]
{candidates : Array (CPolynomial F)}
{Q : CBivariate F}
{k : ℕ}
{p : CPolynomial F}
(h : p ∈ (rootsYDegreeLtFromCandidates candidates Q k).eraseDups.toList)
:
theorem
CompPoly.GuruswamiSudan.rootsYDegreeLtFromCandidates_complete_of_mem
{F : Type u_1}
[Field F]
[BEq F]
[LawfulBEq F]
{candidates : Array (CPolynomial F)}
{Q : CBivariate F}
{k : ℕ}
{p : CPolynomial F}
(hmem : p ∈ candidates.toList)
(hdegree : degreeLt p k)
(hroot : Q.composeY p = 0)
:
theorem
CompPoly.GuruswamiSudan.rootsYDegreeLtFromCandidates_eraseDups_complete_of_mem
{F : Type u_1}
[Field F]
[BEq F]
[LawfulBEq F]
{candidates : Array (CPolynomial F)}
{Q : CBivariate F}
{k : ℕ}
{p : CPolynomial F}
(hmem : p ∈ candidates.toList)
(hdegree : degreeLt p k)
(hroot : Q.composeY p = 0)
: