PG000A

prime_field_polynomial_convolution_shift_right_nonempty

For actual nonempty factors, the shifted product is exactly a trailing-zero extension of the original decoded product, at its proved successor length.

Alpha v34 checked-use · first admitted v34 · independently kernel and Lean verified; not Stable

Current library: Alpha v34, 4,223 checked-use theorems; Stable remains 432. Historical first admissions, original proof editions, and non-admitted aliases are preserved.

All products and sums use actual beta-coded coefficients; equality is formal coefficient equivalence, not equality of evaluations or raw codes. The zero gcd is included. Uniqueness is up to formal equivalence, not unique Bézout coefficients. This proves the polynomial gcd component, not G091 irreducible-polynomial existence or arbitrary prime-power-field construction.

Exact theorem in conservative defined notation

∀ p. ∀ ab. ∀ ac. ∀ L. ∀ bb. ∀ bc. ∀ M. ∀ cb. ∀ cc. ∀ N. ∀ BB. ∀ BC. ∀ db. ∀ dc. ∀ K. ¬p = 0 → ¬L = 0 → ¬M = 0 → PolynomialShift(bb,bc,M,BB,BC)FpPolyProduct(p,ab,ac,L,bb,bc,M,cb,cc,N)FpPolyProduct(p,ab,ac,L,BB,BC,S M,db,dc,K) → K = S N ∧ PolynomialShift(cb,cc,N,db,dc)

Every linked abbreviation expands hygienically to the identical original native formula.

Definition DAG

Actual proof prerequisites

Original expanded first-order statement
forall p ab ac L bb bc M cb cc N BB BC db dc K. (~(p=0)) -> (~(L=0)) -> (~(M=0)) -> (((forall mdr_i_pfp_shift_product_factorprefix mdr_a_pfp_shift_product_factorprefix. (exists mdr_gap_pfp_shift_product_factorprefixb. mdr_gap_pfp_shift_product_factorprefixb + S (mdr_i_pfp_shift_product_factorprefix) = (M)) -> (((exists ff_h_mdr_pfp_shift_product_factorprefixo. ff_h_mdr_pfp_shift_product_factorprefixo + S (mdr_a_pfp_shift_product_factorprefix) = S ((S (mdr_i_pfp_shift_product_factorprefix)) * bc)) /\ exists ff_q_mdr_pfp_shift_product_factorprefixo. bb = ff_q_mdr_pfp_shift_product_factorprefixo * S ((S (mdr_i_pfp_shift_product_factorprefix)) * bc) + (mdr_a_pfp_shift_product_factorprefix))) -> (((exists ff_h_mdr_pfp_shift_product_factorprefixn. ff_h_mdr_pfp_shift_product_factorprefixn + S (mdr_a_pfp_shift_product_factorprefix) = S ((S (mdr_i_pfp_shift_product_factorprefix)) * BC)) /\ exists ff_q_mdr_pfp_shift_product_factorprefixn. BB = ff_q_mdr_pfp_shift_product_factorprefixn * S ((S (mdr_i_pfp_shift_product_factorprefix)) * BC) + (mdr_a_pfp_shift_product_factorprefix)))) /\ ((((exists ff_h_pfp_shift_product_factorlast. ff_h_pfp_shift_product_factorlast + S (0) = S ((S (M)) * BC)) /\ exists ff_q_pfp_shift_product_factorlast. BB = ff_q_pfp_shift_product_factorlast * S ((S (M)) * BC) + (0)))))) -> (((forall fom_index_pfp_shift_product_oldleft. (exists fom_gap_pfp_shift_product_oldleft_index_bound. fom_gap_pfp_shift_product_oldleft_index_bound + S (fom_index_pfp_shift_product_oldleft) = L) -> exists fom_value_pfp_shift_product_oldleft. ((((exists fom_beta_height_pfp_shift_product_oldleft_entry. fom_beta_height_pfp_shift_product_oldleft_entry + S (fom_value_pfp_shift_product_oldleft) = S ((S (fom_index_pfp_shift_product_oldleft)) * ac)) /\ exists fom_beta_quotient_pfp_shift_product_oldleft_entry. ab = fom_beta_quotient_pfp_shift_product_oldleft_entry * S ((S (fom_index_pfp_shift_product_oldleft)) * ac) + (fom_value_pfp_shift_product_oldleft))) /\ (exists fom_gap_pfp_shift_product_oldleft_value_bound. fom_gap_pfp_shift_product_oldleft_value_bound + S (fom_value_pfp_shift_product_oldleft) = p))) /\ (((forall fom_index_pfp_shift_product_oldright. (exists fom_gap_pfp_shift_product_oldright_index_bound. fom_gap_pfp_shift_product_oldright_index_bound + S (fom_index_pfp_shift_product_oldright) = M) -> exists fom_value_pfp_shift_product_oldright. ((((exists fom_beta_height_pfp_shift_product_oldright_entry. fom_beta_height_pfp_shift_product_oldright_entry + S (fom_value_pfp_shift_product_oldright) = S ((S (fom_index_pfp_shift_product_oldright)) * bc)) /\ exists fom_beta_quotient_pfp_shift_product_oldright_entry. bb = fom_beta_quotient_pfp_shift_product_oldright_entry * S ((S (fom_index_pfp_shift_product_oldright)) * bc) + (fom_value_pfp_shift_product_oldright))) /\ (exists fom_gap_pfp_shift_product_oldright_value_bound. fom_gap_pfp_shift_product_oldright_value_bound + S (fom_value_pfp_shift_product_oldright) = p))) /\ (((((((L)=0 \/ (M)=0) /\ (((N)=0)))) \/ (((~((L)=0)) /\ (((~((M)=0)) /\ (((L)+(M)=S (N)))))))) /\ ((forall pfc_index_shift_product_oldcoefficients. (exists pfa_gap_shift_product_oldcoefficientsbound. pfa_gap_shift_product_oldcoefficientsbound + S (pfc_index_shift_product_oldcoefficients) = (N)) -> exists pfc_value_shift_product_oldcoefficients. ((((exists ff_h_pfp_shift_product_oldcoefficientsentry. ff_h_pfp_shift_product_oldcoefficientsentry + S (pfc_value_shift_product_oldcoefficients) = S ((S (pfc_index_shift_product_oldcoefficients)) * cc)) /\ exists ff_q_pfp_shift_product_oldcoefficientsentry. cb = ff_q_pfp_shift_product_oldcoefficientsentry * S ((S (pfc_index_shift_product_oldcoefficients)) * cc) + (pfc_value_shift_product_oldcoefficients))) /\ ((exists pfc_terms_code_shift_product_oldcoefficientscoefficient pfc_terms_scale_shift_product_oldcoefficientscoefficient pfc_natural_sum_shift_product_oldcoefficientscoefficient. ((forall pfc_index_shift_product_oldcoefficientscoefficientdiagonal. (exists pfa_gap_shift_product_oldcoefficientscoefficientdiagonalbound. pfa_gap_shift_product_oldcoefficientscoefficientdiagonalbound + S (pfc_index_shift_product_oldcoefficientscoefficientdiagonal) = (S (pfc_index_shift_product_oldcoefficients))) -> exists pfc_value_shift_product_oldcoefficientscoefficientdiagonal. ((((exists ff_h_pfp_shift_product_oldcoefficientscoefficientdiagonalentry. ff_h_pfp_shift_product_oldcoefficientscoefficientdiagonalentry + S (pfc_value_shift_product_oldcoefficientscoefficientdiagonal) = S ((S (pfc_index_shift_product_oldcoefficientscoefficientdiagonal)) * pfc_terms_scale_shift_product_oldcoefficientscoefficient)) /\ exists ff_q_pfp_shift_product_oldcoefficientscoefficientdiagonalentry. pfc_terms_code_shift_product_oldcoefficientscoefficient = ff_q_pfp_shift_product_oldcoefficientscoefficientdiagonalentry * S ((S (pfc_index_shift_product_oldcoefficientscoefficientdiagonal)) * pfc_terms_scale_shift_product_oldcoefficientscoefficient) + (pfc_value_shift_product_oldcoefficientscoefficientdiagonal))) /\ ((exists pfc_complement_shift_product_oldcoefficientscoefficientdiagonalterm pfc_left_shift_product_oldcoefficientscoefficientdiagonalterm pfc_right_shift_product_oldcoefficientscoefficientdiagonalterm. (((pfc_index_shift_product_oldcoefficientscoefficientdiagonal)+pfc_complement_shift_product_oldcoefficientscoefficientdiagonalterm=(pfc_index_shift_product_oldcoefficients)) /\ ((((((exists pfa_gap_shift_product_oldcoefficientscoefficientdiagonaltermleftinside. pfa_gap_shift_product_oldcoefficientscoefficientdiagonaltermleftinside + S (pfc_index_shift_product_oldcoefficientscoefficientdiagonal) = (L)) /\ ((((exists ff_h_pfp_shift_product_oldcoefficientscoefficientdiagonaltermleftentry. ff_h_pfp_shift_product_oldcoefficientscoefficientdiagonaltermleftentry + S (pfc_left_shift_product_oldcoefficientscoefficientdiagonalterm) = S ((S (pfc_index_shift_product_oldcoefficientscoefficientdiagonal)) * ac)) /\ exists ff_q_pfp_shift_product_oldcoefficientscoefficientdiagonaltermleftentry. ab = ff_q_pfp_shift_product_oldcoefficientscoefficientdiagonaltermleftentry * S ((S (pfc_index_shift_product_oldcoefficientscoefficientdiagonal)) * ac) + (pfc_left_shift_product_oldcoefficientscoefficientdiagonalterm)))))) \/ (((exists pfc_gap_shift_product_oldcoefficientscoefficientdiagonaltermleftoutside. pfc_gap_shift_product_oldcoefficientscoefficientdiagonaltermleftoutside+(L)=(pfc_index_shift_product_oldcoefficientscoefficientdiagonal)) /\ (((pfc_left_shift_product_oldcoefficientscoefficientdiagonalterm)=0))))) /\ ((((((exists pfa_gap_shift_product_oldcoefficientscoefficientdiagonaltermrightinside. pfa_gap_shift_product_oldcoefficientscoefficientdiagonaltermrightinside + S (pfc_complement_shift_product_oldcoefficientscoefficientdiagonalterm) = (M)) /\ ((((exists ff_h_pfp_shift_product_oldcoefficientscoefficientdiagonaltermrightentry. ff_h_pfp_shift_product_oldcoefficientscoefficientdiagonaltermrightentry + S (pfc_right_shift_product_oldcoefficientscoefficientdiagonalterm) = S ((S (pfc_complement_shift_product_oldcoefficientscoefficientdiagonalterm)) * bc)) /\ exists ff_q_pfp_shift_product_oldcoefficientscoefficientdiagonaltermrightentry. bb = ff_q_pfp_shift_product_oldcoefficientscoefficientdiagonaltermrightentry * S ((S (pfc_complement_shift_product_oldcoefficientscoefficientdiagonalterm)) * bc) + (pfc_right_shift_product_oldcoefficientscoefficientdiagonalterm)))))) \/ (((exists pfc_gap_shift_product_oldcoefficientscoefficientdiagonaltermrightoutside. pfc_gap_shift_product_oldcoefficientscoefficientdiagonaltermrightoutside+(M)=(pfc_complement_shift_product_oldcoefficientscoefficientdiagonalterm)) /\ (((pfc_right_shift_product_oldcoefficientscoefficientdiagonalterm)=0))))) /\ (((pfc_value_shift_product_oldcoefficientscoefficientdiagonal)=pfc_left_shift_product_oldcoefficientscoefficientdiagonalterm*pfc_right_shift_product_oldcoefficientscoefficientdiagonalterm))))))))))) /\ (((exists fs_u_pfc_shift_product_oldcoefficientscoefficientsum fs_v_pfc_shift_product_oldcoefficientscoefficientsum. ((((exists fs_h_pfc_shift_product_oldcoefficientscoefficientsum_body_start. fs_h_pfc_shift_product_oldcoefficientscoefficientsum_body_start + S (0) = S ((S (0)) * fs_v_pfc_shift_product_oldcoefficientscoefficientsum)) /\ exists fs_q_pfc_shift_product_oldcoefficientscoefficientsum_body_start. fs_u_pfc_shift_product_oldcoefficientscoefficientsum = fs_q_pfc_shift_product_oldcoefficientscoefficientsum_body_start * S ((S (0)) * fs_v_pfc_shift_product_oldcoefficientscoefficientsum) + (0))) /\ ((((exists fs_h_pfc_shift_product_oldcoefficientscoefficientsum_body_terminal. fs_h_pfc_shift_product_oldcoefficientscoefficientsum_body_terminal + S (pfc_natural_sum_shift_product_oldcoefficientscoefficient) = S ((S (S (pfc_index_shift_product_oldcoefficients))) * fs_v_pfc_shift_product_oldcoefficientscoefficientsum)) /\ exists fs_q_pfc_shift_product_oldcoefficientscoefficientsum_body_terminal. fs_u_pfc_shift_product_oldcoefficientscoefficientsum = fs_q_pfc_shift_product_oldcoefficientscoefficientsum_body_terminal * S ((S (S (pfc_index_shift_product_oldcoefficients))) * fs_v_pfc_shift_product_oldcoefficientscoefficientsum) + (pfc_natural_sum_shift_product_oldcoefficientscoefficient))) /\ forall fs_i_pfc_shift_product_oldcoefficientscoefficientsum_body_steps. (exists fs_lt_pfc_shift_product_oldcoefficientscoefficientsum_body_steps_bound. fs_lt_pfc_shift_product_oldcoefficientscoefficientsum_body_steps_bound + S fs_i_pfc_shift_product_oldcoefficientscoefficientsum_body_steps = S (pfc_index_shift_product_oldcoefficients)) -> exists fs_a_pfc_shift_product_oldcoefficientscoefficientsum_body_steps fs_r_pfc_shift_product_oldcoefficientscoefficientsum_body_steps fs_s_pfc_shift_product_oldcoefficientscoefficientsum_body_steps. ((((exists fs_h_pfc_shift_product_oldcoefficientscoefficientsum_body_steps_summand. fs_h_pfc_shift_product_oldcoefficientscoefficientsum_body_steps_summand + S (fs_a_pfc_shift_product_oldcoefficientscoefficientsum_body_steps) = S ((S (fs_i_pfc_shift_product_oldcoefficientscoefficientsum_body_steps)) * pfc_terms_scale_shift_product_oldcoefficientscoefficient)) /\ exists fs_q_pfc_shift_product_oldcoefficientscoefficientsum_body_steps_summand. pfc_terms_code_shift_product_oldcoefficientscoefficient = fs_q_pfc_shift_product_oldcoefficientscoefficientsum_body_steps_summand * S ((S (fs_i_pfc_shift_product_oldcoefficientscoefficientsum_body_steps)) * pfc_terms_scale_shift_product_oldcoefficientscoefficient) + (fs_a_pfc_shift_product_oldcoefficientscoefficientsum_body_steps))) /\ ((((exists fs_h_pfc_shift_product_oldcoefficientscoefficientsum_body_steps_partial. fs_h_pfc_shift_product_oldcoefficientscoefficientsum_body_steps_partial + S (fs_r_pfc_shift_product_oldcoefficientscoefficientsum_body_steps) = S ((S (fs_i_pfc_shift_product_oldcoefficientscoefficientsum_body_steps)) * fs_v_pfc_shift_product_oldcoefficientscoefficientsum)) /\ exists fs_q_pfc_shift_product_oldcoefficientscoefficientsum_body_steps_partial. fs_u_pfc_shift_product_oldcoefficientscoefficientsum = fs_q_pfc_shift_product_oldcoefficientscoefficientsum_body_steps_partial * S ((S (fs_i_pfc_shift_product_oldcoefficientscoefficientsum_body_steps)) * fs_v_pfc_shift_product_oldcoefficientscoefficientsum) + (fs_r_pfc_shift_product_oldcoefficientscoefficientsum_body_steps))) /\ ((((exists fs_h_pfc_shift_product_oldcoefficientscoefficientsum_body_steps_successor. fs_h_pfc_shift_product_oldcoefficientscoefficientsum_body_steps_successor + S (fs_s_pfc_shift_product_oldcoefficientscoefficientsum_body_steps) = S ((S (S fs_i_pfc_shift_product_oldcoefficientscoefficientsum_body_steps)) * fs_v_pfc_shift_product_oldcoefficientscoefficientsum)) /\ exists fs_q_pfc_shift_product_oldcoefficientscoefficientsum_body_steps_successor. fs_u_pfc_shift_product_oldcoefficientscoefficientsum = fs_q_pfc_shift_product_oldcoefficientscoefficientsum_body_steps_successor * S ((S (S fs_i_pfc_shift_product_oldcoefficientscoefficientsum_body_steps)) * fs_v_pfc_shift_product_oldcoefficientscoefficientsum) + (fs_s_pfc_shift_product_oldcoefficientscoefficientsum_body_steps))) /\ fs_s_pfc_shift_product_oldcoefficientscoefficientsum_body_steps = fs_r_pfc_shift_product_oldcoefficientscoefficientsum_body_steps + fs_a_pfc_shift_product_oldcoefficientscoefficientsum_body_steps)))))) /\ ((((exists pfa_gap_shift_product_oldcoefficientscoefficientresiduebound. pfa_gap_shift_product_oldcoefficientscoefficientresiduebound + S (pfc_value_shift_product_oldcoefficients) = (p)) /\ ((exists pfa_offset_left_shift_product_oldcoefficientscoefficientresiduecongruence pfa_offset_right_shift_product_oldcoefficientscoefficientresiduecongruence. (pfc_natural_sum_shift_product_oldcoefficientscoefficient) + (p) * pfa_offset_left_shift_product_oldcoefficientscoefficientresiduecongruence = (pfc_value_shift_product_oldcoefficients) + (p) * pfa_offset_right_shift_product_oldcoefficientscoefficientresiduecongruence))))))))))))))))))) -> (((forall fom_index_pfp_shift_product_newleft. (exists fom_gap_pfp_shift_product_newleft_index_bound. fom_gap_pfp_shift_product_newleft_index_bound + S (fom_index_pfp_shift_product_newleft) = L) -> exists fom_value_pfp_shift_product_newleft. ((((exists fom_beta_height_pfp_shift_product_newleft_entry. fom_beta_height_pfp_shift_product_newleft_entry + S (fom_value_pfp_shift_product_newleft) = S ((S (fom_index_pfp_shift_product_newleft)) * ac)) /\ exists fom_beta_quotient_pfp_shift_product_newleft_entry. ab = fom_beta_quotient_pfp_shift_product_newleft_entry * S ((S (fom_index_pfp_shift_product_newleft)) * ac) + (fom_value_pfp_shift_product_newleft))) /\ (exists fom_gap_pfp_shift_product_newleft_value_bound. fom_gap_pfp_shift_product_newleft_value_bound + S (fom_value_pfp_shift_product_newleft) = p))) /\ (((forall fom_index_pfp_shift_product_newright. (exists fom_gap_pfp_shift_product_newright_index_bound. fom_gap_pfp_shift_product_newright_index_bound + S (fom_index_pfp_shift_product_newright) = S M) -> exists fom_value_pfp_shift_product_newright. ((((exists fom_beta_height_pfp_shift_product_newright_entry. fom_beta_height_pfp_shift_product_newright_entry + S (fom_value_pfp_shift_product_newright) = S ((S (fom_index_pfp_shift_product_newright)) * BC)) /\ exists fom_beta_quotient_pfp_shift_product_newright_entry. BB = fom_beta_quotient_pfp_shift_product_newright_entry * S ((S (fom_index_pfp_shift_product_newright)) * BC) + (fom_value_pfp_shift_product_newright))) /\ (exists fom_gap_pfp_shift_product_newright_value_bound. fom_gap_pfp_shift_product_newright_value_bound + S (fom_value_pfp_shift_product_newright) = p))) /\ (((((((L)=0 \/ (S M)=0) /\ (((K)=0)))) \/ (((~((L)=0)) /\ (((~((S M)=0)) /\ (((L)+(S M)=S (K)))))))) /\ ((forall pfc_index_shift_product_newcoefficients. (exists pfa_gap_shift_product_newcoefficientsbound. pfa_gap_shift_product_newcoefficientsbound + S (pfc_index_shift_product_newcoefficients) = (K)) -> exists pfc_value_shift_product_newcoefficients. ((((exists ff_h_pfp_shift_product_newcoefficientsentry. ff_h_pfp_shift_product_newcoefficientsentry + S (pfc_value_shift_product_newcoefficients) = S ((S (pfc_index_shift_product_newcoefficients)) * dc)) /\ exists ff_q_pfp_shift_product_newcoefficientsentry. db = ff_q_pfp_shift_product_newcoefficientsentry * S ((S (pfc_index_shift_product_newcoefficients)) * dc) + (pfc_value_shift_product_newcoefficients))) /\ ((exists pfc_terms_code_shift_product_newcoefficientscoefficient pfc_terms_scale_shift_product_newcoefficientscoefficient pfc_natural_sum_shift_product_newcoefficientscoefficient. ((forall pfc_index_shift_product_newcoefficientscoefficientdiagonal. (exists pfa_gap_shift_product_newcoefficientscoefficientdiagonalbound. pfa_gap_shift_product_newcoefficientscoefficientdiagonalbound + S (pfc_index_shift_product_newcoefficientscoefficientdiagonal) = (S (pfc_index_shift_product_newcoefficients))) -> exists pfc_value_shift_product_newcoefficientscoefficientdiagonal. ((((exists ff_h_pfp_shift_product_newcoefficientscoefficientdiagonalentry. ff_h_pfp_shift_product_newcoefficientscoefficientdiagonalentry + S (pfc_value_shift_product_newcoefficientscoefficientdiagonal) = S ((S (pfc_index_shift_product_newcoefficientscoefficientdiagonal)) * pfc_terms_scale_shift_product_newcoefficientscoefficient)) /\ exists ff_q_pfp_shift_product_newcoefficientscoefficientdiagonalentry. pfc_terms_code_shift_product_newcoefficientscoefficient = ff_q_pfp_shift_product_newcoefficientscoefficientdiagonalentry * S ((S (pfc_index_shift_product_newcoefficientscoefficientdiagonal)) * pfc_terms_scale_shift_product_newcoefficientscoefficient) + (pfc_value_shift_product_newcoefficientscoefficientdiagonal))) /\ ((exists pfc_complement_shift_product_newcoefficientscoefficientdiagonalterm pfc_left_shift_product_newcoefficientscoefficientdiagonalterm pfc_right_shift_product_newcoefficientscoefficientdiagonalterm. (((pfc_index_shift_product_newcoefficientscoefficientdiagonal)+pfc_complement_shift_product_newcoefficientscoefficientdiagonalterm=(pfc_index_shift_product_newcoefficients)) /\ ((((((exists pfa_gap_shift_product_newcoefficientscoefficientdiagonaltermleftinside. pfa_gap_shift_product_newcoefficientscoefficientdiagonaltermleftinside + S (pfc_index_shift_product_newcoefficientscoefficientdiagonal) = (L)) /\ ((((exists ff_h_pfp_shift_product_newcoefficientscoefficientdiagonaltermleftentry. ff_h_pfp_shift_product_newcoefficientscoefficientdiagonaltermleftentry + S (pfc_left_shift_product_newcoefficientscoefficientdiagonalterm) = S ((S (pfc_index_shift_product_newcoefficientscoefficientdiagonal)) * ac)) /\ exists ff_q_pfp_shift_product_newcoefficientscoefficientdiagonaltermleftentry. ab = ff_q_pfp_shift_product_newcoefficientscoefficientdiagonaltermleftentry * S ((S (pfc_index_shift_product_newcoefficientscoefficientdiagonal)) * ac) + (pfc_left_shift_product_newcoefficientscoefficientdiagonalterm)))))) \/ (((exists pfc_gap_shift_product_newcoefficientscoefficientdiagonaltermleftoutside. pfc_gap_shift_product_newcoefficientscoefficientdiagonaltermleftoutside+(L)=(pfc_index_shift_product_newcoefficientscoefficientdiagonal)) /\ (((pfc_left_shift_product_newcoefficientscoefficientdiagonalterm)=0))))) /\ ((((((exists pfa_gap_shift_product_newcoefficientscoefficientdiagonaltermrightinside. pfa_gap_shift_product_newcoefficientscoefficientdiagonaltermrightinside + S (pfc_complement_shift_product_newcoefficientscoefficientdiagonalterm) = (S M)) /\ ((((exists ff_h_pfp_shift_product_newcoefficientscoefficientdiagonaltermrightentry. ff_h_pfp_shift_product_newcoefficientscoefficientdiagonaltermrightentry + S (pfc_right_shift_product_newcoefficientscoefficientdiagonalterm) = S ((S (pfc_complement_shift_product_newcoefficientscoefficientdiagonalterm)) * BC)) /\ exists ff_q_pfp_shift_product_newcoefficientscoefficientdiagonaltermrightentry. BB = ff_q_pfp_shift_product_newcoefficientscoefficientdiagonaltermrightentry * S ((S (pfc_complement_shift_product_newcoefficientscoefficientdiagonalterm)) * BC) + (pfc_right_shift_product_newcoefficientscoefficientdiagonalterm)))))) \/ (((exists pfc_gap_shift_product_newcoefficientscoefficientdiagonaltermrightoutside. pfc_gap_shift_product_newcoefficientscoefficientdiagonaltermrightoutside+(S M)=(pfc_complement_shift_product_newcoefficientscoefficientdiagonalterm)) /\ (((pfc_right_shift_product_newcoefficientscoefficientdiagonalterm)=0))))) /\ (((pfc_value_shift_product_newcoefficientscoefficientdiagonal)=pfc_left_shift_product_newcoefficientscoefficientdiagonalterm*pfc_right_shift_product_newcoefficientscoefficientdiagonalterm))))))))))) /\ (((exists fs_u_pfc_shift_product_newcoefficientscoefficientsum fs_v_pfc_shift_product_newcoefficientscoefficientsum. ((((exists fs_h_pfc_shift_product_newcoefficientscoefficientsum_body_start. fs_h_pfc_shift_product_newcoefficientscoefficientsum_body_start + S (0) = S ((S (0)) * fs_v_pfc_shift_product_newcoefficientscoefficientsum)) /\ exists fs_q_pfc_shift_product_newcoefficientscoefficientsum_body_start. fs_u_pfc_shift_product_newcoefficientscoefficientsum = fs_q_pfc_shift_product_newcoefficientscoefficientsum_body_start * S ((S (0)) * fs_v_pfc_shift_product_newcoefficientscoefficientsum) + (0))) /\ ((((exists fs_h_pfc_shift_product_newcoefficientscoefficientsum_body_terminal. fs_h_pfc_shift_product_newcoefficientscoefficientsum_body_terminal + S (pfc_natural_sum_shift_product_newcoefficientscoefficient) = S ((S (S (pfc_index_shift_product_newcoefficients))) * fs_v_pfc_shift_product_newcoefficientscoefficientsum)) /\ exists fs_q_pfc_shift_product_newcoefficientscoefficientsum_body_terminal. fs_u_pfc_shift_product_newcoefficientscoefficientsum = fs_q_pfc_shift_product_newcoefficientscoefficientsum_body_terminal * S ((S (S (pfc_index_shift_product_newcoefficients))) * fs_v_pfc_shift_product_newcoefficientscoefficientsum) + (pfc_natural_sum_shift_product_newcoefficientscoefficient))) /\ forall fs_i_pfc_shift_product_newcoefficientscoefficientsum_body_steps. (exists fs_lt_pfc_shift_product_newcoefficientscoefficientsum_body_steps_bound. fs_lt_pfc_shift_product_newcoefficientscoefficientsum_body_steps_bound + S fs_i_pfc_shift_product_newcoefficientscoefficientsum_body_steps = S (pfc_index_shift_product_newcoefficients)) -> exists fs_a_pfc_shift_product_newcoefficientscoefficientsum_body_steps fs_r_pfc_shift_product_newcoefficientscoefficientsum_body_steps fs_s_pfc_shift_product_newcoefficientscoefficientsum_body_steps. ((((exists fs_h_pfc_shift_product_newcoefficientscoefficientsum_body_steps_summand. fs_h_pfc_shift_product_newcoefficientscoefficientsum_body_steps_summand + S (fs_a_pfc_shift_product_newcoefficientscoefficientsum_body_steps) = S ((S (fs_i_pfc_shift_product_newcoefficientscoefficientsum_body_steps)) * pfc_terms_scale_shift_product_newcoefficientscoefficient)) /\ exists fs_q_pfc_shift_product_newcoefficientscoefficientsum_body_steps_summand. pfc_terms_code_shift_product_newcoefficientscoefficient = fs_q_pfc_shift_product_newcoefficientscoefficientsum_body_steps_summand * S ((S (fs_i_pfc_shift_product_newcoefficientscoefficientsum_body_steps)) * pfc_terms_scale_shift_product_newcoefficientscoefficient) + (fs_a_pfc_shift_product_newcoefficientscoefficientsum_body_steps))) /\ ((((exists fs_h_pfc_shift_product_newcoefficientscoefficientsum_body_steps_partial. fs_h_pfc_shift_product_newcoefficientscoefficientsum_body_steps_partial + S (fs_r_pfc_shift_product_newcoefficientscoefficientsum_body_steps) = S ((S (fs_i_pfc_shift_product_newcoefficientscoefficientsum_body_steps)) * fs_v_pfc_shift_product_newcoefficientscoefficientsum)) /\ exists fs_q_pfc_shift_product_newcoefficientscoefficientsum_body_steps_partial. fs_u_pfc_shift_product_newcoefficientscoefficientsum = fs_q_pfc_shift_product_newcoefficientscoefficientsum_body_steps_partial * S ((S (fs_i_pfc_shift_product_newcoefficientscoefficientsum_body_steps)) * fs_v_pfc_shift_product_newcoefficientscoefficientsum) + (fs_r_pfc_shift_product_newcoefficientscoefficientsum_body_steps))) /\ ((((exists fs_h_pfc_shift_product_newcoefficientscoefficientsum_body_steps_successor. fs_h_pfc_shift_product_newcoefficientscoefficientsum_body_steps_successor + S (fs_s_pfc_shift_product_newcoefficientscoefficientsum_body_steps) = S ((S (S fs_i_pfc_shift_product_newcoefficientscoefficientsum_body_steps)) * fs_v_pfc_shift_product_newcoefficientscoefficientsum)) /\ exists fs_q_pfc_shift_product_newcoefficientscoefficientsum_body_steps_successor. fs_u_pfc_shift_product_newcoefficientscoefficientsum = fs_q_pfc_shift_product_newcoefficientscoefficientsum_body_steps_successor * S ((S (S fs_i_pfc_shift_product_newcoefficientscoefficientsum_body_steps)) * fs_v_pfc_shift_product_newcoefficientscoefficientsum) + (fs_s_pfc_shift_product_newcoefficientscoefficientsum_body_steps))) /\ fs_s_pfc_shift_product_newcoefficientscoefficientsum_body_steps = fs_r_pfc_shift_product_newcoefficientscoefficientsum_body_steps + fs_a_pfc_shift_product_newcoefficientscoefficientsum_body_steps)))))) /\ ((((exists pfa_gap_shift_product_newcoefficientscoefficientresiduebound. pfa_gap_shift_product_newcoefficientscoefficientresiduebound + S (pfc_value_shift_product_newcoefficients) = (p)) /\ ((exists pfa_offset_left_shift_product_newcoefficientscoefficientresiduecongruence pfa_offset_right_shift_product_newcoefficientscoefficientresiduecongruence. (pfc_natural_sum_shift_product_newcoefficientscoefficient) + (p) * pfa_offset_left_shift_product_newcoefficientscoefficientresiduecongruence = (pfc_value_shift_product_newcoefficients) + (p) * pfa_offset_right_shift_product_newcoefficientscoefficientresiduecongruence))))))))))))))))))) -> (((K=S N) /\ ((((forall mdr_i_pfp_shift_product_resultprefix mdr_a_pfp_shift_product_resultprefix. (exists mdr_gap_pfp_shift_product_resultprefixb. mdr_gap_pfp_shift_product_resultprefixb + S (mdr_i_pfp_shift_product_resultprefix) = (N)) -> (((exists ff_h_mdr_pfp_shift_product_resultprefixo. ff_h_mdr_pfp_shift_product_resultprefixo + S (mdr_a_pfp_shift_product_resultprefix) = S ((S (mdr_i_pfp_shift_product_resultprefix)) * cc)) /\ exists ff_q_mdr_pfp_shift_product_resultprefixo. cb = ff_q_mdr_pfp_shift_product_resultprefixo * S ((S (mdr_i_pfp_shift_product_resultprefix)) * cc) + (mdr_a_pfp_shift_product_resultprefix))) -> (((exists ff_h_mdr_pfp_shift_product_resultprefixn. ff_h_mdr_pfp_shift_product_resultprefixn + S (mdr_a_pfp_shift_product_resultprefix) = S ((S (mdr_i_pfp_shift_product_resultprefix)) * dc)) /\ exists ff_q_mdr_pfp_shift_product_resultprefixn. db = ff_q_mdr_pfp_shift_product_resultprefixn * S ((S (mdr_i_pfp_shift_product_resultprefix)) * dc) + (mdr_a_pfp_shift_product_resultprefix)))) /\ ((((exists ff_h_pfp_shift_product_resultlast. ff_h_pfp_shift_product_resultlast + S (0) = S ((S (N)) * dc)) /\ exists ff_q_pfp_shift_product_resultlast. db = ff_q_pfp_shift_product_resultlast * S ((S (N)) * dc) + (0)))))))))

Complete tactic proof in conservative notation

All 156 original proof lines are preserved. Only local proposition formulas are abbreviated; every abbreviation has an exact binder-safe expansion check. The linked exact edition contains the unchanged replay script.

Read the argument

Proof checkpoints

156 script commands · 34 reading checkpoints · 11 local claims

This is a reading aid, not a new proof or a proof-tree certificate. Checkpoint groups are consecutive commands, not inferred branch boundaries. Every step links to the preserved script.

Definition notation is shown below. Open the paired exact edition for the original native formulas. Source pairing is not a new equivalence certificate.

Named ingredients (2)
01Fix variables and assumptionsL1–10

Work with arbitrary variables or the premises of the current implication.

  1. L1
    intro p
  2. L2
    intro ab
  3. L3
    intro ac
  4. L4
    intro L
  5. L5
    intro bb
  6. L6
    intro bc
  7. L7
    intro M
  8. L8
    intro cb
  9. L9
    intro cc
  10. L10
    intro N
02Fix variables and assumptionsL11–20

Work with arbitrary variables or the premises of the current implication.

  1. L11
    intro BB
  2. L12
    intro BC
  3. L13
    intro db
  4. L14
    intro dc
  5. L15
    intro K
  6. L16
    intro hp
  7. L17
    intro hL
  8. L18
    intro hM
  9. L19
    intro hs
  10. L20
    intro hc
03Fix variables and assumptionsL21–21

Work with arbitrary variables or the premises of the current implication.

  1. L21
    intro hd
04Establish hwholeL22–23

Establish this local claim before using it. It is not an additional assumption.

  1. L22
    have hwhole : FpPolyProduct(p,ab,ac,L,bb,bc,M,cb,cc,N)Definitions: FpPolyProduct(p,ab,ac,L,bb,bc,M,cb,cc,N)Original native command in the exact edition
  2. L23
    exact hc
05Separate the logical casesL24–29

Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.

  1. L24
    cases hc
  2. L25
    cases hc_right
  3. L26
    cases hc_right_right
  4. L27
    cases hd
  5. L28
    cases hd_right
  6. L29
    cases hd_right_right
06Establish hkL30–39

Establish this local claim before using it. It is not an additional assumption. The following proof commands apply polynomial product length shift right nonempty.

  1. L30
    have hk : K=S N
  2. L31
    specialize polynomial_product_length_shift_right_nonempty (L)
  3. L32
    specialize polynomial_product_length_shift_right_nonempty (M)
  4. L33
    specialize polynomial_product_length_shift_right_nonempty (N)
  5. L34
    specialize polynomial_product_length_shift_right_nonempty (K)
  6. L35
    apply polynomial_product_length_shift_right_nonempty
  7. L36
    exact hc_right_right_left
  8. L37
    exact hL
  9. L38
    exact hM
  10. L39
    exact hd_right_right_left
07Separate the logical casesL40–40

Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.

  1. L40
    split
08Use earlier factsL41–41

Instantiate or apply named facts and discharge the corresponding proof obligations.

  1. L41
    exact hk
09Separate the logical casesL42–42

Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.

  1. L42
    split
10Fix variables and assumptionsL43–46

Work with arbitrary variables or the premises of the current implication.

  1. L43
    intro i
  2. L44
    intro a
  3. L45
    intro hi
  4. L46
    intro ha
11Establish hcaL47–56

Establish this local claim before using it. It is not an additional assumption.

  1. L47
    have hca : FpConvolutionCoefficient(p,ab,ac,L,bb,bc,M,i,a)Definitions: FpConvolutionCoefficient(p,ab,ac,L,bb,bc,M,i,a)Original native command in the exact edition
  2. L48
    specialize prime_field_convolution_prefix_entry (p)
  3. L49
    specialize prime_field_convolution_prefix_entry (ab)
  4. L50
    specialize prime_field_convolution_prefix_entry (ac)
  5. L51
    specialize prime_field_convolution_prefix_entry (L)
  6. L52
    specialize prime_field_convolution_prefix_entry (bb)
  7. L53
    specialize prime_field_convolution_prefix_entry (bc)
  8. L54
    specialize prime_field_convolution_prefix_entry (M)
  9. L55
    specialize prime_field_convolution_prefix_entry (cb)
  10. L56
    specialize prime_field_convolution_prefix_entry (cc)
12Use earlier factsL57–63

Instantiate or apply named facts and discharge the corresponding proof obligations.

  1. L57
    specialize prime_field_convolution_prefix_entry (N)
  2. L58
    specialize prime_field_convolution_prefix_entry (i)
  3. L59
    specialize prime_field_convolution_prefix_entry (a)
  4. L60
    apply prime_field_convolution_prefix_entry
  5. L61
    exact hc_right_right_right
  6. L62
    exact hi
  7. L63
    exact ha
13Establish hdaL64–64

Establish this local claim before using it. It is not an additional assumption.

  1. L64
    have hda : FpConvolutionCoefficient(p,ab,ac,L,BB,BC,S M,i,a)Definitions: FpConvolutionCoefficient(p,ab,ac,L,BB,BC,S M,i,a)Original native command in the exact edition
14Establish hiffL65–74

Establish this local claim before using it. It is not an additional assumption.

  1. L65
    have hiff : (FpConvolutionCoefficient(p,ab,ac,L,bb,bc,M,i,a) → FpConvolutionCoefficient(p,ab,ac,L,BB,BC,S M,i,a)) ∧ (FpConvolutionCoefficient(p,ab,ac,L,BB,BC,S M,i,a) → FpConvolutionCoefficient(p,ab,ac,L,bb,bc,M,i,a))Definitions: FpConvolutionCoefficient(p,ab,ac,L,bb,bc,M,i,a)FpConvolutionCoefficient(p,ab,ac,L,BB,BC,S M,i,a)Original native command in the exact edition
  2. L66
    specialize prime_field_convolution_coefficient_shift_right_iff (p)
  3. L67
    specialize prime_field_convolution_coefficient_shift_right_iff (ab)
  4. L68
    specialize prime_field_convolution_coefficient_shift_right_iff (ac)
  5. L69
    specialize prime_field_convolution_coefficient_shift_right_iff (L)
  6. L70
    specialize prime_field_convolution_coefficient_shift_right_iff (bb)
  7. L71
    specialize prime_field_convolution_coefficient_shift_right_iff (bc)
  8. L72
    specialize prime_field_convolution_coefficient_shift_right_iff (M)
  9. L73
    specialize prime_field_convolution_coefficient_shift_right_iff (BB)
  10. L74
    specialize prime_field_convolution_coefficient_shift_right_iff (BC)
15Use earlier factsL75–78

Instantiate or apply named facts and discharge the corresponding proof obligations.

  1. L75
    specialize prime_field_convolution_coefficient_shift_right_iff (i)
  2. L76
    specialize prime_field_convolution_coefficient_shift_right_iff (a)
  3. L77
    apply prime_field_convolution_coefficient_shift_right_iff
  4. L78
    exact hs
16Separate the logical casesL79–79

Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.

  1. L79
    cases hiff
17Use earlier factsL80–81

Instantiate or apply named facts and discharge the corresponding proof obligations.

  1. L80
    apply hiff_left
  2. L81
    exact hca
18Establish hvL82–89

Establish this local claim before using it. It is not an additional assumption. The following proof commands apply hd right right right.

  1. L82
    have hv : ∃ r. BetaAt(db,dc,i,r) ∧ FpConvolutionCoefficient(p,ab,ac,L,BB,BC,S M,i,r)Definitions: BetaAt(db,dc,i,r)FpConvolutionCoefficient(p,ab,ac,L,BB,BC,S M,i,r)Original native command in the exact edition
  2. L83
    specialize hd_right_right_right (i)
  3. L84
    apply hd_right_right_right
  4. L85
    rewrite hk
  5. L86
    specialize le_succ (S i)
  6. L87
    specialize le_succ (N)
  7. L88
    apply le_succ
  8. L89
    exact hi
19Separate the logical casesL90–91

Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.

  1. L90
    cases hv
  2. L91
    cases hv_witness
20Establish heqL92–101

Establish this local claim before using it. It is not an additional assumption.

  1. L92
    have heq : a=x
  2. L93
    specialize prime_field_convolution_coefficient_functional (p)
  3. L94
    specialize prime_field_convolution_coefficient_functional (ab)
  4. L95
    specialize prime_field_convolution_coefficient_functional (ac)
  5. L96
    specialize prime_field_convolution_coefficient_functional (L)
  6. L97
    specialize prime_field_convolution_coefficient_functional (BB)
  7. L98
    specialize prime_field_convolution_coefficient_functional (BC)
  8. L99
    specialize prime_field_convolution_coefficient_functional (S M)
  9. L100
    specialize prime_field_convolution_coefficient_functional (i)
  10. L101
    specialize prime_field_convolution_coefficient_functional (a)
21Use earlier factsL102–105

Instantiate or apply named facts and discharge the corresponding proof obligations.

  1. L102
    specialize prime_field_convolution_coefficient_functional (x)
  2. L103
    apply prime_field_convolution_coefficient_functional
  3. L104
    exact hda
  4. L105
    exact hv_witness_right
22Calculate and transport equalitiesL106–107

Carry out the recorded arithmetic or equality steps; inspect the exact commands for their direction and premises.

  1. L106
    rewrite heq
  2. L107
    rewrite heq
23Use earlier factsL108–108

Instantiate or apply named facts and discharge the corresponding proof obligations.

  1. L108
    exact hv_witness_left
24Establish hvL109–114

Establish this local claim before using it. It is not an additional assumption. The following proof commands apply hd right right right.

  1. L109
    have hv : ∃ r. BetaAt(db,dc,N,r) ∧ FpConvolutionCoefficient(p,ab,ac,L,BB,BC,S M,N,r)Definitions: BetaAt(db,dc,N,r)FpConvolutionCoefficient(p,ab,ac,L,BB,BC,S M,N,r)Original native command in the exact edition
  2. L110
    specialize hd_right_right_right (N)
  3. L111
    apply hd_right_right_right
  4. L112
    rewrite hk
  5. L113
    specialize le_refl (S N)
  6. L114
    apply le_refl
25Separate the logical casesL115–116

Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.

  1. L115
    cases hv
  2. L116
    cases hv_witness
26Establish hcoL117–117

Establish this local claim before using it. It is not an additional assumption.

  1. L117
    have hco : FpConvolutionCoefficient(p,ab,ac,L,bb,bc,M,N,x)Definitions: FpConvolutionCoefficient(p,ab,ac,L,bb,bc,M,N,x)Original native command in the exact edition
27Establish hiffL118–127

Establish this local claim before using it. It is not an additional assumption.

  1. L118
    have hiff : (FpConvolutionCoefficient(p,ab,ac,L,bb,bc,M,N,x) → FpConvolutionCoefficient(p,ab,ac,L,BB,BC,S M,N,x)) ∧ (FpConvolutionCoefficient(p,ab,ac,L,BB,BC,S M,N,x) → FpConvolutionCoefficient(p,ab,ac,L,bb,bc,M,N,x))Definitions: FpConvolutionCoefficient(p,ab,ac,L,bb,bc,M,N,x)FpConvolutionCoefficient(p,ab,ac,L,BB,BC,S M,N,x)Original native command in the exact edition
  2. L119
    specialize prime_field_convolution_coefficient_shift_right_iff (p)
  3. L120
    specialize prime_field_convolution_coefficient_shift_right_iff (ab)
  4. L121
    specialize prime_field_convolution_coefficient_shift_right_iff (ac)
  5. L122
    specialize prime_field_convolution_coefficient_shift_right_iff (L)
  6. L123
    specialize prime_field_convolution_coefficient_shift_right_iff (bb)
  7. L124
    specialize prime_field_convolution_coefficient_shift_right_iff (bc)
  8. L125
    specialize prime_field_convolution_coefficient_shift_right_iff (M)
  9. L126
    specialize prime_field_convolution_coefficient_shift_right_iff (BB)
  10. L127
    specialize prime_field_convolution_coefficient_shift_right_iff (BC)
28Use earlier factsL128–131

Instantiate or apply named facts and discharge the corresponding proof obligations.

  1. L128
    specialize prime_field_convolution_coefficient_shift_right_iff (N)
  2. L129
    specialize prime_field_convolution_coefficient_shift_right_iff (x)
  3. L130
    apply prime_field_convolution_coefficient_shift_right_iff
  4. L131
    exact hs
29Separate the logical casesL132–132

Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.

  1. L132
    cases hiff
30Use earlier factsL133–134

Instantiate or apply named facts and discharge the corresponding proof obligations.

  1. L133
    apply hiff_right
  2. L134
    exact hv_witness_right
31Establish hzL135–144

Establish this local claim before using it. It is not an additional assumption.

  1. L135
    have hz : x=0
  2. L136
    specialize prime_field_polynomial_convolution_outside_zero (p)
  3. L137
    specialize prime_field_polynomial_convolution_outside_zero (ab)
  4. L138
    specialize prime_field_polynomial_convolution_outside_zero (ac)
  5. L139
    specialize prime_field_polynomial_convolution_outside_zero (L)
  6. L140
    specialize prime_field_polynomial_convolution_outside_zero (bb)
  7. L141
    specialize prime_field_polynomial_convolution_outside_zero (bc)
  8. L142
    specialize prime_field_polynomial_convolution_outside_zero (M)
  9. L143
    specialize prime_field_polynomial_convolution_outside_zero (cb)
  10. L144
    specialize prime_field_polynomial_convolution_outside_zero (cc)
32Use earlier factsL145–153

Instantiate or apply named facts and discharge the corresponding proof obligations.

  1. L145
    specialize prime_field_polynomial_convolution_outside_zero (N)
  2. L146
    specialize prime_field_polynomial_convolution_outside_zero (N)
  3. L147
    specialize prime_field_polynomial_convolution_outside_zero (x)
  4. L148
    apply prime_field_polynomial_convolution_outside_zero
  5. L149
    exact hp
  6. L150
    exact hwhole
  7. L151
    specialize le_refl (N)
  8. L152
    apply le_refl
  9. L153
    exact hco
33Calculate and transport equalitiesL154–155

Carry out the recorded arithmetic or equality steps; inspect the exact commands for their direction and premises.

  1. L154
    rewrite hz at hv_witness_left
  2. L155
    rewrite hz at hv_witness_left
34Use earlier factsL156–156

Instantiate or apply named facts and discharge the corresponding proof obligations.

  1. L156
    exact hv_witness_left

Library-wide reading audit

Original defined command ledger · 156 lines
  1. 0001intro p
  2. 0002intro ab
  3. 0003intro ac
  4. 0004intro L
  5. 0005intro bb
  6. 0006intro bc
  7. 0007intro M
  8. 0008intro cb
  9. 0009intro cc
  10. 0010intro N
  11. 0011intro BB
  12. 0012intro BC
  13. 0013intro db
  14. 0014intro dc
  15. 0015intro K
  16. 0016intro hp
  17. 0017intro hL
  18. 0018intro hM
  19. 0019intro hs
  20. 0020intro hc
  21. 0021intro hd
  22. 0022have hwhole : FpPolyProduct(p,ab,ac,L,bb,bc,M,cb,cc,N)
  23. 0023exact hc
  24. 0024cases hc
  25. 0025cases hc_right
  26. 0026cases hc_right_right
  27. 0027cases hd
  28. 0028cases hd_right
  29. 0029cases hd_right_right
  30. 0030have hk : K=S N
  31. 0031specialize polynomial_product_length_shift_right_nonempty (L)
  32. 0032specialize polynomial_product_length_shift_right_nonempty (M)
  33. 0033specialize polynomial_product_length_shift_right_nonempty (N)
  34. 0034specialize polynomial_product_length_shift_right_nonempty (K)
  35. 0035apply polynomial_product_length_shift_right_nonempty
  36. 0036exact hc_right_right_left
  37. 0037exact hL
  38. 0038exact hM
  39. 0039exact hd_right_right_left
  40. 0040split
  41. 0041exact hk
  42. 0042split
  43. 0043intro i
  44. 0044intro a
  45. 0045intro hi
  46. 0046intro ha
  47. 0047have hca : FpConvolutionCoefficient(p,ab,ac,L,bb,bc,M,i,a)
  48. 0048specialize prime_field_convolution_prefix_entry (p)
  49. 0049specialize prime_field_convolution_prefix_entry (ab)
  50. 0050specialize prime_field_convolution_prefix_entry (ac)
  51. 0051specialize prime_field_convolution_prefix_entry (L)
  52. 0052specialize prime_field_convolution_prefix_entry (bb)
  53. 0053specialize prime_field_convolution_prefix_entry (bc)
  54. 0054specialize prime_field_convolution_prefix_entry (M)
  55. 0055specialize prime_field_convolution_prefix_entry (cb)
  56. 0056specialize prime_field_convolution_prefix_entry (cc)
  57. 0057specialize prime_field_convolution_prefix_entry (N)
  58. 0058specialize prime_field_convolution_prefix_entry (i)
  59. 0059specialize prime_field_convolution_prefix_entry (a)
  60. 0060apply prime_field_convolution_prefix_entry
  61. 0061exact hc_right_right_right
  62. 0062exact hi
  63. 0063exact ha
  64. 0064have hda : FpConvolutionCoefficient(p,ab,ac,L,BB,BC,S M,i,a)
  65. 0065have hiff : (FpConvolutionCoefficient(p,ab,ac,L,bb,bc,M,i,a)FpConvolutionCoefficient(p,ab,ac,L,BB,BC,S M,i,a)) ∧ (FpConvolutionCoefficient(p,ab,ac,L,BB,BC,S M,i,a)FpConvolutionCoefficient(p,ab,ac,L,bb,bc,M,i,a))
  66. 0066specialize prime_field_convolution_coefficient_shift_right_iff (p)
  67. 0067specialize prime_field_convolution_coefficient_shift_right_iff (ab)
  68. 0068specialize prime_field_convolution_coefficient_shift_right_iff (ac)
  69. 0069specialize prime_field_convolution_coefficient_shift_right_iff (L)
  70. 0070specialize prime_field_convolution_coefficient_shift_right_iff (bb)
  71. 0071specialize prime_field_convolution_coefficient_shift_right_iff (bc)
  72. 0072specialize prime_field_convolution_coefficient_shift_right_iff (M)
  73. 0073specialize prime_field_convolution_coefficient_shift_right_iff (BB)
  74. 0074specialize prime_field_convolution_coefficient_shift_right_iff (BC)
  75. 0075specialize prime_field_convolution_coefficient_shift_right_iff (i)
  76. 0076specialize prime_field_convolution_coefficient_shift_right_iff (a)
  77. 0077apply prime_field_convolution_coefficient_shift_right_iff
  78. 0078exact hs
  79. 0079cases hiff
  80. 0080apply hiff_left
  81. 0081exact hca
  82. 0082have hv : ∃ r. BetaAt(db,dc,i,r)FpConvolutionCoefficient(p,ab,ac,L,BB,BC,S M,i,r)
  83. 0083specialize hd_right_right_right (i)
  84. 0084apply hd_right_right_right
  85. 0085rewrite hk
  86. 0086specialize le_succ (S i)
  87. 0087specialize le_succ (N)
  88. 0088apply le_succ
  89. 0089exact hi
  90. 0090cases hv
  91. 0091cases hv_witness
  92. 0092have heq : a=x
  93. 0093specialize prime_field_convolution_coefficient_functional (p)
  94. 0094specialize prime_field_convolution_coefficient_functional (ab)
  95. 0095specialize prime_field_convolution_coefficient_functional (ac)
  96. 0096specialize prime_field_convolution_coefficient_functional (L)
  97. 0097specialize prime_field_convolution_coefficient_functional (BB)
  98. 0098specialize prime_field_convolution_coefficient_functional (BC)
  99. 0099specialize prime_field_convolution_coefficient_functional (S M)
  100. 0100specialize prime_field_convolution_coefficient_functional (i)
  101. 0101specialize prime_field_convolution_coefficient_functional (a)
  102. 0102specialize prime_field_convolution_coefficient_functional (x)
  103. 0103apply prime_field_convolution_coefficient_functional
  104. 0104exact hda
  105. 0105exact hv_witness_right
  106. 0106rewrite heq
  107. 0107rewrite heq
  108. 0108exact hv_witness_left
  109. 0109have hv : ∃ r. BetaAt(db,dc,N,r)FpConvolutionCoefficient(p,ab,ac,L,BB,BC,S M,N,r)
  110. 0110specialize hd_right_right_right (N)
  111. 0111apply hd_right_right_right
  112. 0112rewrite hk
  113. 0113specialize le_refl (S N)
  114. 0114apply le_refl
  115. 0115cases hv
  116. 0116cases hv_witness
  117. 0117have hco : FpConvolutionCoefficient(p,ab,ac,L,bb,bc,M,N,x)
  118. 0118have hiff : (FpConvolutionCoefficient(p,ab,ac,L,bb,bc,M,N,x)FpConvolutionCoefficient(p,ab,ac,L,BB,BC,S M,N,x)) ∧ (FpConvolutionCoefficient(p,ab,ac,L,BB,BC,S M,N,x)FpConvolutionCoefficient(p,ab,ac,L,bb,bc,M,N,x))
  119. 0119specialize prime_field_convolution_coefficient_shift_right_iff (p)
  120. 0120specialize prime_field_convolution_coefficient_shift_right_iff (ab)
  121. 0121specialize prime_field_convolution_coefficient_shift_right_iff (ac)
  122. 0122specialize prime_field_convolution_coefficient_shift_right_iff (L)
  123. 0123specialize prime_field_convolution_coefficient_shift_right_iff (bb)
  124. 0124specialize prime_field_convolution_coefficient_shift_right_iff (bc)
  125. 0125specialize prime_field_convolution_coefficient_shift_right_iff (M)
  126. 0126specialize prime_field_convolution_coefficient_shift_right_iff (BB)
  127. 0127specialize prime_field_convolution_coefficient_shift_right_iff (BC)
  128. 0128specialize prime_field_convolution_coefficient_shift_right_iff (N)
  129. 0129specialize prime_field_convolution_coefficient_shift_right_iff (x)
  130. 0130apply prime_field_convolution_coefficient_shift_right_iff
  131. 0131exact hs
  132. 0132cases hiff
  133. 0133apply hiff_right
  134. 0134exact hv_witness_right
  135. 0135have hz : x=0
  136. 0136specialize prime_field_polynomial_convolution_outside_zero (p)
  137. 0137specialize prime_field_polynomial_convolution_outside_zero (ab)
  138. 0138specialize prime_field_polynomial_convolution_outside_zero (ac)
  139. 0139specialize prime_field_polynomial_convolution_outside_zero (L)
  140. 0140specialize prime_field_polynomial_convolution_outside_zero (bb)
  141. 0141specialize prime_field_polynomial_convolution_outside_zero (bc)
  142. 0142specialize prime_field_polynomial_convolution_outside_zero (M)
  143. 0143specialize prime_field_polynomial_convolution_outside_zero (cb)
  144. 0144specialize prime_field_polynomial_convolution_outside_zero (cc)
  145. 0145specialize prime_field_polynomial_convolution_outside_zero (N)
  146. 0146specialize prime_field_polynomial_convolution_outside_zero (N)
  147. 0147specialize prime_field_polynomial_convolution_outside_zero (x)
  148. 0148apply prime_field_polynomial_convolution_outside_zero
  149. 0149exact hp
  150. 0150exact hwhole
  151. 0151specialize le_refl (N)
  152. 0152apply le_refl
  153. 0153exact hco
  154. 0154rewrite hz at hv_witness_left
  155. 0155rewrite hz at hv_witness_left
  156. 0156exact hv_witness_left