PG001E

prime_field_polynomial_convolution_right_append_equivalent

An actual right-factor append satisfies A*append(C,c) formally equivalent to X*(A*C)+c*A through genuine products and arbitrary actual aligned sum outputs. Lengths are not falsely equated in empty cases, and no finite-field evaluation agreement replaces all formal coefficients.

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. ∀ c. ∀ db. ∀ dc. ∀ pb. ∀ pc. ∀ N. ∀ qb. ∀ qc. ∀ K. ∀ ub. ∀ uc. ∀ vb. ∀ vc. ∀ UB. ∀ UC. ∀ VB. ∀ VC. ∀ rb. ∀ rc. Prime(p)BetaPrefixEqual(bb,bc,db,dc,M)BetaAt(db,dc,M,c)FpPolyProduct(p,ab,ac,L,bb,bc,M,pb,pc,N)FpPolyProduct(p,ab,ac,L,db,dc,S M,qb,qc,K)PolynomialShift(pb,pc,N,ub,uc)FpPolyScale(p,c,ab,ac,vb,vc,L)PolynomialLeftPad(ub,uc,S N,L,UB,UC)PolynomialLeftPad(vb,vc,L,S N,VB,VC)FpPolyAdd(p,UB,UC,VB,VC,rb,rc,L + S N)PolynomialEquivalent(qb,qc,K,rb,rc,L + S N)

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 c db dc pb pc N qb qc K ub uc vb vc UB UC VB VC rb rc. (~((p) = 1) /\ forall pfa_factor_left_append_recurrence_prime pfa_factor_right_append_recurrence_prime. (p) = pfa_factor_left_append_recurrence_prime * pfa_factor_right_append_recurrence_prime -> pfa_factor_left_append_recurrence_prime = 1 \/ pfa_factor_right_append_recurrence_prime = 1) -> (forall mdr_i_pfp_append_recurrence_preserve mdr_a_pfp_append_recurrence_preserve. (exists mdr_gap_pfp_append_recurrence_preserveb. mdr_gap_pfp_append_recurrence_preserveb + S (mdr_i_pfp_append_recurrence_preserve) = (M)) -> (((exists ff_h_mdr_pfp_append_recurrence_preserveo. ff_h_mdr_pfp_append_recurrence_preserveo + S (mdr_a_pfp_append_recurrence_preserve) = S ((S (mdr_i_pfp_append_recurrence_preserve)) * bc)) /\ exists ff_q_mdr_pfp_append_recurrence_preserveo. bb = ff_q_mdr_pfp_append_recurrence_preserveo * S ((S (mdr_i_pfp_append_recurrence_preserve)) * bc) + (mdr_a_pfp_append_recurrence_preserve))) -> (((exists ff_h_mdr_pfp_append_recurrence_preserven. ff_h_mdr_pfp_append_recurrence_preserven + S (mdr_a_pfp_append_recurrence_preserve) = S ((S (mdr_i_pfp_append_recurrence_preserve)) * dc)) /\ exists ff_q_mdr_pfp_append_recurrence_preserven. db = ff_q_mdr_pfp_append_recurrence_preserven * S ((S (mdr_i_pfp_append_recurrence_preserve)) * dc) + (mdr_a_pfp_append_recurrence_preserve)))) -> (((exists ff_h_pfp_append_recurrence_last. ff_h_pfp_append_recurrence_last + S (c) = S ((S (M)) * dc)) /\ exists ff_q_pfp_append_recurrence_last. db = ff_q_pfp_append_recurrence_last * S ((S (M)) * dc) + (c))) -> (((forall fom_index_pfp_append_recurrence_oldleft. (exists fom_gap_pfp_append_recurrence_oldleft_index_bound. fom_gap_pfp_append_recurrence_oldleft_index_bound + S (fom_index_pfp_append_recurrence_oldleft) = L) -> exists fom_value_pfp_append_recurrence_oldleft. ((((exists fom_beta_height_pfp_append_recurrence_oldleft_entry. fom_beta_height_pfp_append_recurrence_oldleft_entry + S (fom_value_pfp_append_recurrence_oldleft) = S ((S (fom_index_pfp_append_recurrence_oldleft)) * ac)) /\ exists fom_beta_quotient_pfp_append_recurrence_oldleft_entry. ab = fom_beta_quotient_pfp_append_recurrence_oldleft_entry * S ((S (fom_index_pfp_append_recurrence_oldleft)) * ac) + (fom_value_pfp_append_recurrence_oldleft))) /\ (exists fom_gap_pfp_append_recurrence_oldleft_value_bound. fom_gap_pfp_append_recurrence_oldleft_value_bound + S (fom_value_pfp_append_recurrence_oldleft) = p))) /\ (((forall fom_index_pfp_append_recurrence_oldright. (exists fom_gap_pfp_append_recurrence_oldright_index_bound. fom_gap_pfp_append_recurrence_oldright_index_bound + S (fom_index_pfp_append_recurrence_oldright) = M) -> exists fom_value_pfp_append_recurrence_oldright. ((((exists fom_beta_height_pfp_append_recurrence_oldright_entry. fom_beta_height_pfp_append_recurrence_oldright_entry + S (fom_value_pfp_append_recurrence_oldright) = S ((S (fom_index_pfp_append_recurrence_oldright)) * bc)) /\ exists fom_beta_quotient_pfp_append_recurrence_oldright_entry. bb = fom_beta_quotient_pfp_append_recurrence_oldright_entry * S ((S (fom_index_pfp_append_recurrence_oldright)) * bc) + (fom_value_pfp_append_recurrence_oldright))) /\ (exists fom_gap_pfp_append_recurrence_oldright_value_bound. fom_gap_pfp_append_recurrence_oldright_value_bound + S (fom_value_pfp_append_recurrence_oldright) = p))) /\ (((((((L)=0 \/ (M)=0) /\ (((N)=0)))) \/ (((~((L)=0)) /\ (((~((M)=0)) /\ (((L)+(M)=S (N)))))))) /\ ((forall pfc_index_append_recurrence_oldcoefficients. (exists pfa_gap_append_recurrence_oldcoefficientsbound. pfa_gap_append_recurrence_oldcoefficientsbound + S (pfc_index_append_recurrence_oldcoefficients) = (N)) -> exists pfc_value_append_recurrence_oldcoefficients. ((((exists ff_h_pfp_append_recurrence_oldcoefficientsentry. ff_h_pfp_append_recurrence_oldcoefficientsentry + S (pfc_value_append_recurrence_oldcoefficients) = S ((S (pfc_index_append_recurrence_oldcoefficients)) * pc)) /\ exists ff_q_pfp_append_recurrence_oldcoefficientsentry. pb = ff_q_pfp_append_recurrence_oldcoefficientsentry * S ((S (pfc_index_append_recurrence_oldcoefficients)) * pc) + (pfc_value_append_recurrence_oldcoefficients))) /\ ((exists pfc_terms_code_append_recurrence_oldcoefficientscoefficient pfc_terms_scale_append_recurrence_oldcoefficientscoefficient pfc_natural_sum_append_recurrence_oldcoefficientscoefficient. ((forall pfc_index_append_recurrence_oldcoefficientscoefficientdiagonal. (exists pfa_gap_append_recurrence_oldcoefficientscoefficientdiagonalbound. pfa_gap_append_recurrence_oldcoefficientscoefficientdiagonalbound + S (pfc_index_append_recurrence_oldcoefficientscoefficientdiagonal) = (S (pfc_index_append_recurrence_oldcoefficients))) -> exists pfc_value_append_recurrence_oldcoefficientscoefficientdiagonal. ((((exists ff_h_pfp_append_recurrence_oldcoefficientscoefficientdiagonalentry. ff_h_pfp_append_recurrence_oldcoefficientscoefficientdiagonalentry + S (pfc_value_append_recurrence_oldcoefficientscoefficientdiagonal) = S ((S (pfc_index_append_recurrence_oldcoefficientscoefficientdiagonal)) * pfc_terms_scale_append_recurrence_oldcoefficientscoefficient)) /\ exists ff_q_pfp_append_recurrence_oldcoefficientscoefficientdiagonalentry. pfc_terms_code_append_recurrence_oldcoefficientscoefficient = ff_q_pfp_append_recurrence_oldcoefficientscoefficientdiagonalentry * S ((S (pfc_index_append_recurrence_oldcoefficientscoefficientdiagonal)) * pfc_terms_scale_append_recurrence_oldcoefficientscoefficient) + (pfc_value_append_recurrence_oldcoefficientscoefficientdiagonal))) /\ ((exists pfc_complement_append_recurrence_oldcoefficientscoefficientdiagonalterm pfc_left_append_recurrence_oldcoefficientscoefficientdiagonalterm pfc_right_append_recurrence_oldcoefficientscoefficientdiagonalterm. (((pfc_index_append_recurrence_oldcoefficientscoefficientdiagonal)+pfc_complement_append_recurrence_oldcoefficientscoefficientdiagonalterm=(pfc_index_append_recurrence_oldcoefficients)) /\ ((((((exists pfa_gap_append_recurrence_oldcoefficientscoefficientdiagonaltermleftinside. pfa_gap_append_recurrence_oldcoefficientscoefficientdiagonaltermleftinside + S (pfc_index_append_recurrence_oldcoefficientscoefficientdiagonal) = (L)) /\ ((((exists ff_h_pfp_append_recurrence_oldcoefficientscoefficientdiagonaltermleftentry. ff_h_pfp_append_recurrence_oldcoefficientscoefficientdiagonaltermleftentry + S (pfc_left_append_recurrence_oldcoefficientscoefficientdiagonalterm) = S ((S (pfc_index_append_recurrence_oldcoefficientscoefficientdiagonal)) * ac)) /\ exists ff_q_pfp_append_recurrence_oldcoefficientscoefficientdiagonaltermleftentry. ab = ff_q_pfp_append_recurrence_oldcoefficientscoefficientdiagonaltermleftentry * S ((S (pfc_index_append_recurrence_oldcoefficientscoefficientdiagonal)) * ac) + (pfc_left_append_recurrence_oldcoefficientscoefficientdiagonalterm)))))) \/ (((exists pfc_gap_append_recurrence_oldcoefficientscoefficientdiagonaltermleftoutside. pfc_gap_append_recurrence_oldcoefficientscoefficientdiagonaltermleftoutside+(L)=(pfc_index_append_recurrence_oldcoefficientscoefficientdiagonal)) /\ (((pfc_left_append_recurrence_oldcoefficientscoefficientdiagonalterm)=0))))) /\ ((((((exists pfa_gap_append_recurrence_oldcoefficientscoefficientdiagonaltermrightinside. pfa_gap_append_recurrence_oldcoefficientscoefficientdiagonaltermrightinside + S (pfc_complement_append_recurrence_oldcoefficientscoefficientdiagonalterm) = (M)) /\ ((((exists ff_h_pfp_append_recurrence_oldcoefficientscoefficientdiagonaltermrightentry. ff_h_pfp_append_recurrence_oldcoefficientscoefficientdiagonaltermrightentry + S (pfc_right_append_recurrence_oldcoefficientscoefficientdiagonalterm) = S ((S (pfc_complement_append_recurrence_oldcoefficientscoefficientdiagonalterm)) * bc)) /\ exists ff_q_pfp_append_recurrence_oldcoefficientscoefficientdiagonaltermrightentry. bb = ff_q_pfp_append_recurrence_oldcoefficientscoefficientdiagonaltermrightentry * S ((S (pfc_complement_append_recurrence_oldcoefficientscoefficientdiagonalterm)) * bc) + (pfc_right_append_recurrence_oldcoefficientscoefficientdiagonalterm)))))) \/ (((exists pfc_gap_append_recurrence_oldcoefficientscoefficientdiagonaltermrightoutside. pfc_gap_append_recurrence_oldcoefficientscoefficientdiagonaltermrightoutside+(M)=(pfc_complement_append_recurrence_oldcoefficientscoefficientdiagonalterm)) /\ (((pfc_right_append_recurrence_oldcoefficientscoefficientdiagonalterm)=0))))) /\ (((pfc_value_append_recurrence_oldcoefficientscoefficientdiagonal)=pfc_left_append_recurrence_oldcoefficientscoefficientdiagonalterm*pfc_right_append_recurrence_oldcoefficientscoefficientdiagonalterm))))))))))) /\ (((exists fs_u_pfc_append_recurrence_oldcoefficientscoefficientsum fs_v_pfc_append_recurrence_oldcoefficientscoefficientsum. ((((exists fs_h_pfc_append_recurrence_oldcoefficientscoefficientsum_body_start. fs_h_pfc_append_recurrence_oldcoefficientscoefficientsum_body_start + S (0) = S ((S (0)) * fs_v_pfc_append_recurrence_oldcoefficientscoefficientsum)) /\ exists fs_q_pfc_append_recurrence_oldcoefficientscoefficientsum_body_start. fs_u_pfc_append_recurrence_oldcoefficientscoefficientsum = fs_q_pfc_append_recurrence_oldcoefficientscoefficientsum_body_start * S ((S (0)) * fs_v_pfc_append_recurrence_oldcoefficientscoefficientsum) + (0))) /\ ((((exists fs_h_pfc_append_recurrence_oldcoefficientscoefficientsum_body_terminal. fs_h_pfc_append_recurrence_oldcoefficientscoefficientsum_body_terminal + S (pfc_natural_sum_append_recurrence_oldcoefficientscoefficient) = S ((S (S (pfc_index_append_recurrence_oldcoefficients))) * fs_v_pfc_append_recurrence_oldcoefficientscoefficientsum)) /\ exists fs_q_pfc_append_recurrence_oldcoefficientscoefficientsum_body_terminal. fs_u_pfc_append_recurrence_oldcoefficientscoefficientsum = fs_q_pfc_append_recurrence_oldcoefficientscoefficientsum_body_terminal * S ((S (S (pfc_index_append_recurrence_oldcoefficients))) * fs_v_pfc_append_recurrence_oldcoefficientscoefficientsum) + (pfc_natural_sum_append_recurrence_oldcoefficientscoefficient))) /\ forall fs_i_pfc_append_recurrence_oldcoefficientscoefficientsum_body_steps. (exists fs_lt_pfc_append_recurrence_oldcoefficientscoefficientsum_body_steps_bound. fs_lt_pfc_append_recurrence_oldcoefficientscoefficientsum_body_steps_bound + S fs_i_pfc_append_recurrence_oldcoefficientscoefficientsum_body_steps = S (pfc_index_append_recurrence_oldcoefficients)) -> exists fs_a_pfc_append_recurrence_oldcoefficientscoefficientsum_body_steps fs_r_pfc_append_recurrence_oldcoefficientscoefficientsum_body_steps fs_s_pfc_append_recurrence_oldcoefficientscoefficientsum_body_steps. ((((exists fs_h_pfc_append_recurrence_oldcoefficientscoefficientsum_body_steps_summand. fs_h_pfc_append_recurrence_oldcoefficientscoefficientsum_body_steps_summand + S (fs_a_pfc_append_recurrence_oldcoefficientscoefficientsum_body_steps) = S ((S (fs_i_pfc_append_recurrence_oldcoefficientscoefficientsum_body_steps)) * pfc_terms_scale_append_recurrence_oldcoefficientscoefficient)) /\ exists fs_q_pfc_append_recurrence_oldcoefficientscoefficientsum_body_steps_summand. pfc_terms_code_append_recurrence_oldcoefficientscoefficient = fs_q_pfc_append_recurrence_oldcoefficientscoefficientsum_body_steps_summand * S ((S (fs_i_pfc_append_recurrence_oldcoefficientscoefficientsum_body_steps)) * pfc_terms_scale_append_recurrence_oldcoefficientscoefficient) + (fs_a_pfc_append_recurrence_oldcoefficientscoefficientsum_body_steps))) /\ ((((exists fs_h_pfc_append_recurrence_oldcoefficientscoefficientsum_body_steps_partial. fs_h_pfc_append_recurrence_oldcoefficientscoefficientsum_body_steps_partial + S (fs_r_pfc_append_recurrence_oldcoefficientscoefficientsum_body_steps) = S ((S (fs_i_pfc_append_recurrence_oldcoefficientscoefficientsum_body_steps)) * fs_v_pfc_append_recurrence_oldcoefficientscoefficientsum)) /\ exists fs_q_pfc_append_recurrence_oldcoefficientscoefficientsum_body_steps_partial. fs_u_pfc_append_recurrence_oldcoefficientscoefficientsum = fs_q_pfc_append_recurrence_oldcoefficientscoefficientsum_body_steps_partial * S ((S (fs_i_pfc_append_recurrence_oldcoefficientscoefficientsum_body_steps)) * fs_v_pfc_append_recurrence_oldcoefficientscoefficientsum) + (fs_r_pfc_append_recurrence_oldcoefficientscoefficientsum_body_steps))) /\ ((((exists fs_h_pfc_append_recurrence_oldcoefficientscoefficientsum_body_steps_successor. fs_h_pfc_append_recurrence_oldcoefficientscoefficientsum_body_steps_successor + S (fs_s_pfc_append_recurrence_oldcoefficientscoefficientsum_body_steps) = S ((S (S fs_i_pfc_append_recurrence_oldcoefficientscoefficientsum_body_steps)) * fs_v_pfc_append_recurrence_oldcoefficientscoefficientsum)) /\ exists fs_q_pfc_append_recurrence_oldcoefficientscoefficientsum_body_steps_successor. fs_u_pfc_append_recurrence_oldcoefficientscoefficientsum = fs_q_pfc_append_recurrence_oldcoefficientscoefficientsum_body_steps_successor * S ((S (S fs_i_pfc_append_recurrence_oldcoefficientscoefficientsum_body_steps)) * fs_v_pfc_append_recurrence_oldcoefficientscoefficientsum) + (fs_s_pfc_append_recurrence_oldcoefficientscoefficientsum_body_steps))) /\ fs_s_pfc_append_recurrence_oldcoefficientscoefficientsum_body_steps = fs_r_pfc_append_recurrence_oldcoefficientscoefficientsum_body_steps + fs_a_pfc_append_recurrence_oldcoefficientscoefficientsum_body_steps)))))) /\ ((((exists pfa_gap_append_recurrence_oldcoefficientscoefficientresiduebound. pfa_gap_append_recurrence_oldcoefficientscoefficientresiduebound + S (pfc_value_append_recurrence_oldcoefficients) = (p)) /\ ((exists pfa_offset_left_append_recurrence_oldcoefficientscoefficientresiduecongruence pfa_offset_right_append_recurrence_oldcoefficientscoefficientresiduecongruence. (pfc_natural_sum_append_recurrence_oldcoefficientscoefficient) + (p) * pfa_offset_left_append_recurrence_oldcoefficientscoefficientresiduecongruence = (pfc_value_append_recurrence_oldcoefficients) + (p) * pfa_offset_right_append_recurrence_oldcoefficientscoefficientresiduecongruence))))))))))))))))))) -> (((forall fom_index_pfp_append_recurrence_newleft. (exists fom_gap_pfp_append_recurrence_newleft_index_bound. fom_gap_pfp_append_recurrence_newleft_index_bound + S (fom_index_pfp_append_recurrence_newleft) = L) -> exists fom_value_pfp_append_recurrence_newleft. ((((exists fom_beta_height_pfp_append_recurrence_newleft_entry. fom_beta_height_pfp_append_recurrence_newleft_entry + S (fom_value_pfp_append_recurrence_newleft) = S ((S (fom_index_pfp_append_recurrence_newleft)) * ac)) /\ exists fom_beta_quotient_pfp_append_recurrence_newleft_entry. ab = fom_beta_quotient_pfp_append_recurrence_newleft_entry * S ((S (fom_index_pfp_append_recurrence_newleft)) * ac) + (fom_value_pfp_append_recurrence_newleft))) /\ (exists fom_gap_pfp_append_recurrence_newleft_value_bound. fom_gap_pfp_append_recurrence_newleft_value_bound + S (fom_value_pfp_append_recurrence_newleft) = p))) /\ (((forall fom_index_pfp_append_recurrence_newright. (exists fom_gap_pfp_append_recurrence_newright_index_bound. fom_gap_pfp_append_recurrence_newright_index_bound + S (fom_index_pfp_append_recurrence_newright) = S M) -> exists fom_value_pfp_append_recurrence_newright. ((((exists fom_beta_height_pfp_append_recurrence_newright_entry. fom_beta_height_pfp_append_recurrence_newright_entry + S (fom_value_pfp_append_recurrence_newright) = S ((S (fom_index_pfp_append_recurrence_newright)) * dc)) /\ exists fom_beta_quotient_pfp_append_recurrence_newright_entry. db = fom_beta_quotient_pfp_append_recurrence_newright_entry * S ((S (fom_index_pfp_append_recurrence_newright)) * dc) + (fom_value_pfp_append_recurrence_newright))) /\ (exists fom_gap_pfp_append_recurrence_newright_value_bound. fom_gap_pfp_append_recurrence_newright_value_bound + S (fom_value_pfp_append_recurrence_newright) = p))) /\ (((((((L)=0 \/ (S M)=0) /\ (((K)=0)))) \/ (((~((L)=0)) /\ (((~((S M)=0)) /\ (((L)+(S M)=S (K)))))))) /\ ((forall pfc_index_append_recurrence_newcoefficients. (exists pfa_gap_append_recurrence_newcoefficientsbound. pfa_gap_append_recurrence_newcoefficientsbound + S (pfc_index_append_recurrence_newcoefficients) = (K)) -> exists pfc_value_append_recurrence_newcoefficients. ((((exists ff_h_pfp_append_recurrence_newcoefficientsentry. ff_h_pfp_append_recurrence_newcoefficientsentry + S (pfc_value_append_recurrence_newcoefficients) = S ((S (pfc_index_append_recurrence_newcoefficients)) * qc)) /\ exists ff_q_pfp_append_recurrence_newcoefficientsentry. qb = ff_q_pfp_append_recurrence_newcoefficientsentry * S ((S (pfc_index_append_recurrence_newcoefficients)) * qc) + (pfc_value_append_recurrence_newcoefficients))) /\ ((exists pfc_terms_code_append_recurrence_newcoefficientscoefficient pfc_terms_scale_append_recurrence_newcoefficientscoefficient pfc_natural_sum_append_recurrence_newcoefficientscoefficient. ((forall pfc_index_append_recurrence_newcoefficientscoefficientdiagonal. (exists pfa_gap_append_recurrence_newcoefficientscoefficientdiagonalbound. pfa_gap_append_recurrence_newcoefficientscoefficientdiagonalbound + S (pfc_index_append_recurrence_newcoefficientscoefficientdiagonal) = (S (pfc_index_append_recurrence_newcoefficients))) -> exists pfc_value_append_recurrence_newcoefficientscoefficientdiagonal. ((((exists ff_h_pfp_append_recurrence_newcoefficientscoefficientdiagonalentry. ff_h_pfp_append_recurrence_newcoefficientscoefficientdiagonalentry + S (pfc_value_append_recurrence_newcoefficientscoefficientdiagonal) = S ((S (pfc_index_append_recurrence_newcoefficientscoefficientdiagonal)) * pfc_terms_scale_append_recurrence_newcoefficientscoefficient)) /\ exists ff_q_pfp_append_recurrence_newcoefficientscoefficientdiagonalentry. pfc_terms_code_append_recurrence_newcoefficientscoefficient = ff_q_pfp_append_recurrence_newcoefficientscoefficientdiagonalentry * S ((S (pfc_index_append_recurrence_newcoefficientscoefficientdiagonal)) * pfc_terms_scale_append_recurrence_newcoefficientscoefficient) + (pfc_value_append_recurrence_newcoefficientscoefficientdiagonal))) /\ ((exists pfc_complement_append_recurrence_newcoefficientscoefficientdiagonalterm pfc_left_append_recurrence_newcoefficientscoefficientdiagonalterm pfc_right_append_recurrence_newcoefficientscoefficientdiagonalterm. (((pfc_index_append_recurrence_newcoefficientscoefficientdiagonal)+pfc_complement_append_recurrence_newcoefficientscoefficientdiagonalterm=(pfc_index_append_recurrence_newcoefficients)) /\ ((((((exists pfa_gap_append_recurrence_newcoefficientscoefficientdiagonaltermleftinside. pfa_gap_append_recurrence_newcoefficientscoefficientdiagonaltermleftinside + S (pfc_index_append_recurrence_newcoefficientscoefficientdiagonal) = (L)) /\ ((((exists ff_h_pfp_append_recurrence_newcoefficientscoefficientdiagonaltermleftentry. ff_h_pfp_append_recurrence_newcoefficientscoefficientdiagonaltermleftentry + S (pfc_left_append_recurrence_newcoefficientscoefficientdiagonalterm) = S ((S (pfc_index_append_recurrence_newcoefficientscoefficientdiagonal)) * ac)) /\ exists ff_q_pfp_append_recurrence_newcoefficientscoefficientdiagonaltermleftentry. ab = ff_q_pfp_append_recurrence_newcoefficientscoefficientdiagonaltermleftentry * S ((S (pfc_index_append_recurrence_newcoefficientscoefficientdiagonal)) * ac) + (pfc_left_append_recurrence_newcoefficientscoefficientdiagonalterm)))))) \/ (((exists pfc_gap_append_recurrence_newcoefficientscoefficientdiagonaltermleftoutside. pfc_gap_append_recurrence_newcoefficientscoefficientdiagonaltermleftoutside+(L)=(pfc_index_append_recurrence_newcoefficientscoefficientdiagonal)) /\ (((pfc_left_append_recurrence_newcoefficientscoefficientdiagonalterm)=0))))) /\ ((((((exists pfa_gap_append_recurrence_newcoefficientscoefficientdiagonaltermrightinside. pfa_gap_append_recurrence_newcoefficientscoefficientdiagonaltermrightinside + S (pfc_complement_append_recurrence_newcoefficientscoefficientdiagonalterm) = (S M)) /\ ((((exists ff_h_pfp_append_recurrence_newcoefficientscoefficientdiagonaltermrightentry. ff_h_pfp_append_recurrence_newcoefficientscoefficientdiagonaltermrightentry + S (pfc_right_append_recurrence_newcoefficientscoefficientdiagonalterm) = S ((S (pfc_complement_append_recurrence_newcoefficientscoefficientdiagonalterm)) * dc)) /\ exists ff_q_pfp_append_recurrence_newcoefficientscoefficientdiagonaltermrightentry. db = ff_q_pfp_append_recurrence_newcoefficientscoefficientdiagonaltermrightentry * S ((S (pfc_complement_append_recurrence_newcoefficientscoefficientdiagonalterm)) * dc) + (pfc_right_append_recurrence_newcoefficientscoefficientdiagonalterm)))))) \/ (((exists pfc_gap_append_recurrence_newcoefficientscoefficientdiagonaltermrightoutside. pfc_gap_append_recurrence_newcoefficientscoefficientdiagonaltermrightoutside+(S M)=(pfc_complement_append_recurrence_newcoefficientscoefficientdiagonalterm)) /\ (((pfc_right_append_recurrence_newcoefficientscoefficientdiagonalterm)=0))))) /\ (((pfc_value_append_recurrence_newcoefficientscoefficientdiagonal)=pfc_left_append_recurrence_newcoefficientscoefficientdiagonalterm*pfc_right_append_recurrence_newcoefficientscoefficientdiagonalterm))))))))))) /\ (((exists fs_u_pfc_append_recurrence_newcoefficientscoefficientsum fs_v_pfc_append_recurrence_newcoefficientscoefficientsum. ((((exists fs_h_pfc_append_recurrence_newcoefficientscoefficientsum_body_start. fs_h_pfc_append_recurrence_newcoefficientscoefficientsum_body_start + S (0) = S ((S (0)) * fs_v_pfc_append_recurrence_newcoefficientscoefficientsum)) /\ exists fs_q_pfc_append_recurrence_newcoefficientscoefficientsum_body_start. fs_u_pfc_append_recurrence_newcoefficientscoefficientsum = fs_q_pfc_append_recurrence_newcoefficientscoefficientsum_body_start * S ((S (0)) * fs_v_pfc_append_recurrence_newcoefficientscoefficientsum) + (0))) /\ ((((exists fs_h_pfc_append_recurrence_newcoefficientscoefficientsum_body_terminal. fs_h_pfc_append_recurrence_newcoefficientscoefficientsum_body_terminal + S (pfc_natural_sum_append_recurrence_newcoefficientscoefficient) = S ((S (S (pfc_index_append_recurrence_newcoefficients))) * fs_v_pfc_append_recurrence_newcoefficientscoefficientsum)) /\ exists fs_q_pfc_append_recurrence_newcoefficientscoefficientsum_body_terminal. fs_u_pfc_append_recurrence_newcoefficientscoefficientsum = fs_q_pfc_append_recurrence_newcoefficientscoefficientsum_body_terminal * S ((S (S (pfc_index_append_recurrence_newcoefficients))) * fs_v_pfc_append_recurrence_newcoefficientscoefficientsum) + (pfc_natural_sum_append_recurrence_newcoefficientscoefficient))) /\ forall fs_i_pfc_append_recurrence_newcoefficientscoefficientsum_body_steps. (exists fs_lt_pfc_append_recurrence_newcoefficientscoefficientsum_body_steps_bound. fs_lt_pfc_append_recurrence_newcoefficientscoefficientsum_body_steps_bound + S fs_i_pfc_append_recurrence_newcoefficientscoefficientsum_body_steps = S (pfc_index_append_recurrence_newcoefficients)) -> exists fs_a_pfc_append_recurrence_newcoefficientscoefficientsum_body_steps fs_r_pfc_append_recurrence_newcoefficientscoefficientsum_body_steps fs_s_pfc_append_recurrence_newcoefficientscoefficientsum_body_steps. ((((exists fs_h_pfc_append_recurrence_newcoefficientscoefficientsum_body_steps_summand. fs_h_pfc_append_recurrence_newcoefficientscoefficientsum_body_steps_summand + S (fs_a_pfc_append_recurrence_newcoefficientscoefficientsum_body_steps) = S ((S (fs_i_pfc_append_recurrence_newcoefficientscoefficientsum_body_steps)) * pfc_terms_scale_append_recurrence_newcoefficientscoefficient)) /\ exists fs_q_pfc_append_recurrence_newcoefficientscoefficientsum_body_steps_summand. pfc_terms_code_append_recurrence_newcoefficientscoefficient = fs_q_pfc_append_recurrence_newcoefficientscoefficientsum_body_steps_summand * S ((S (fs_i_pfc_append_recurrence_newcoefficientscoefficientsum_body_steps)) * pfc_terms_scale_append_recurrence_newcoefficientscoefficient) + (fs_a_pfc_append_recurrence_newcoefficientscoefficientsum_body_steps))) /\ ((((exists fs_h_pfc_append_recurrence_newcoefficientscoefficientsum_body_steps_partial. fs_h_pfc_append_recurrence_newcoefficientscoefficientsum_body_steps_partial + S (fs_r_pfc_append_recurrence_newcoefficientscoefficientsum_body_steps) = S ((S (fs_i_pfc_append_recurrence_newcoefficientscoefficientsum_body_steps)) * fs_v_pfc_append_recurrence_newcoefficientscoefficientsum)) /\ exists fs_q_pfc_append_recurrence_newcoefficientscoefficientsum_body_steps_partial. fs_u_pfc_append_recurrence_newcoefficientscoefficientsum = fs_q_pfc_append_recurrence_newcoefficientscoefficientsum_body_steps_partial * S ((S (fs_i_pfc_append_recurrence_newcoefficientscoefficientsum_body_steps)) * fs_v_pfc_append_recurrence_newcoefficientscoefficientsum) + (fs_r_pfc_append_recurrence_newcoefficientscoefficientsum_body_steps))) /\ ((((exists fs_h_pfc_append_recurrence_newcoefficientscoefficientsum_body_steps_successor. fs_h_pfc_append_recurrence_newcoefficientscoefficientsum_body_steps_successor + S (fs_s_pfc_append_recurrence_newcoefficientscoefficientsum_body_steps) = S ((S (S fs_i_pfc_append_recurrence_newcoefficientscoefficientsum_body_steps)) * fs_v_pfc_append_recurrence_newcoefficientscoefficientsum)) /\ exists fs_q_pfc_append_recurrence_newcoefficientscoefficientsum_body_steps_successor. fs_u_pfc_append_recurrence_newcoefficientscoefficientsum = fs_q_pfc_append_recurrence_newcoefficientscoefficientsum_body_steps_successor * S ((S (S fs_i_pfc_append_recurrence_newcoefficientscoefficientsum_body_steps)) * fs_v_pfc_append_recurrence_newcoefficientscoefficientsum) + (fs_s_pfc_append_recurrence_newcoefficientscoefficientsum_body_steps))) /\ fs_s_pfc_append_recurrence_newcoefficientscoefficientsum_body_steps = fs_r_pfc_append_recurrence_newcoefficientscoefficientsum_body_steps + fs_a_pfc_append_recurrence_newcoefficientscoefficientsum_body_steps)))))) /\ ((((exists pfa_gap_append_recurrence_newcoefficientscoefficientresiduebound. pfa_gap_append_recurrence_newcoefficientscoefficientresiduebound + S (pfc_value_append_recurrence_newcoefficients) = (p)) /\ ((exists pfa_offset_left_append_recurrence_newcoefficientscoefficientresiduecongruence pfa_offset_right_append_recurrence_newcoefficientscoefficientresiduecongruence. (pfc_natural_sum_append_recurrence_newcoefficientscoefficient) + (p) * pfa_offset_left_append_recurrence_newcoefficientscoefficientresiduecongruence = (pfc_value_append_recurrence_newcoefficients) + (p) * pfa_offset_right_append_recurrence_newcoefficientscoefficientresiduecongruence))))))))))))))))))) -> (((forall mdr_i_pfp_append_recurrence_shiftprefix mdr_a_pfp_append_recurrence_shiftprefix. (exists mdr_gap_pfp_append_recurrence_shiftprefixb. mdr_gap_pfp_append_recurrence_shiftprefixb + S (mdr_i_pfp_append_recurrence_shiftprefix) = (N)) -> (((exists ff_h_mdr_pfp_append_recurrence_shiftprefixo. ff_h_mdr_pfp_append_recurrence_shiftprefixo + S (mdr_a_pfp_append_recurrence_shiftprefix) = S ((S (mdr_i_pfp_append_recurrence_shiftprefix)) * pc)) /\ exists ff_q_mdr_pfp_append_recurrence_shiftprefixo. pb = ff_q_mdr_pfp_append_recurrence_shiftprefixo * S ((S (mdr_i_pfp_append_recurrence_shiftprefix)) * pc) + (mdr_a_pfp_append_recurrence_shiftprefix))) -> (((exists ff_h_mdr_pfp_append_recurrence_shiftprefixn. ff_h_mdr_pfp_append_recurrence_shiftprefixn + S (mdr_a_pfp_append_recurrence_shiftprefix) = S ((S (mdr_i_pfp_append_recurrence_shiftprefix)) * uc)) /\ exists ff_q_mdr_pfp_append_recurrence_shiftprefixn. ub = ff_q_mdr_pfp_append_recurrence_shiftprefixn * S ((S (mdr_i_pfp_append_recurrence_shiftprefix)) * uc) + (mdr_a_pfp_append_recurrence_shiftprefix)))) /\ ((((exists ff_h_pfp_append_recurrence_shiftlast. ff_h_pfp_append_recurrence_shiftlast + S (0) = S ((S (N)) * uc)) /\ exists ff_q_pfp_append_recurrence_shiftlast. ub = ff_q_pfp_append_recurrence_shiftlast * S ((S (N)) * uc) + (0)))))) -> (((exists pfa_gap_append_recurrence_scalescalar. pfa_gap_append_recurrence_scalescalar + S (c) = (p)) /\ ((forall pfp_index_append_recurrence_scale. (exists pfa_gap_append_recurrence_scaleindex. pfa_gap_append_recurrence_scaleindex + S (pfp_index_append_recurrence_scale) = (L)) -> exists pfp_source_append_recurrence_scale pfp_value_append_recurrence_scale. ((((exists ff_h_pfp_append_recurrence_scalesource. ff_h_pfp_append_recurrence_scalesource + S (pfp_source_append_recurrence_scale) = S ((S (pfp_index_append_recurrence_scale)) * ac)) /\ exists ff_q_pfp_append_recurrence_scalesource. ab = ff_q_pfp_append_recurrence_scalesource * S ((S (pfp_index_append_recurrence_scale)) * ac) + (pfp_source_append_recurrence_scale))) /\ (((((exists ff_h_pfp_append_recurrence_scaletarget. ff_h_pfp_append_recurrence_scaletarget + S (pfp_value_append_recurrence_scale) = S ((S (pfp_index_append_recurrence_scale)) * vc)) /\ exists ff_q_pfp_append_recurrence_scaletarget. vb = ff_q_pfp_append_recurrence_scaletarget * S ((S (pfp_index_append_recurrence_scale)) * vc) + (pfp_value_append_recurrence_scale))) /\ ((((exists pfa_gap_append_recurrence_scaleoperationleft. pfa_gap_append_recurrence_scaleoperationleft + S (c) = (p)) /\ (((exists pfa_gap_append_recurrence_scaleoperationright. pfa_gap_append_recurrence_scaleoperationright + S (pfp_source_append_recurrence_scale) = (p)) /\ ((((exists pfa_gap_append_recurrence_scaleoperationresultbound. pfa_gap_append_recurrence_scaleoperationresultbound + S (pfp_value_append_recurrence_scale) = (p)) /\ ((exists pfa_offset_left_append_recurrence_scaleoperationresultcongruence pfa_offset_right_append_recurrence_scaleoperationresultcongruence. ((c) * (pfp_source_append_recurrence_scale)) + (p) * pfa_offset_left_append_recurrence_scaleoperationresultcongruence = (pfp_value_append_recurrence_scale) + (p) * pfa_offset_right_append_recurrence_scaleoperationresultcongruence))))))))))))))))) -> (((forall pfp_repeat_index_append_recurrence_leftzeros. (exists pfa_gap_append_recurrence_leftzerosindex. pfa_gap_append_recurrence_leftzerosindex + S (pfp_repeat_index_append_recurrence_leftzeros) = (L)) -> (((exists ff_h_pfp_append_recurrence_leftzerosentry. ff_h_pfp_append_recurrence_leftzerosentry + S (0) = S ((S (pfp_repeat_index_append_recurrence_leftzeros)) * UC)) /\ exists ff_q_pfp_append_recurrence_leftzerosentry. UB = ff_q_pfp_append_recurrence_leftzerosentry * S ((S (pfp_repeat_index_append_recurrence_leftzeros)) * UC) + (0)))) /\ ((forall pfrep_index_append_recurrence_left pfrep_value_append_recurrence_left. (exists pfa_gap_append_recurrence_leftbound. pfa_gap_append_recurrence_leftbound + S (pfrep_index_append_recurrence_left) = (S N)) -> (((exists ff_h_pfp_append_recurrence_leftinput. ff_h_pfp_append_recurrence_leftinput + S (pfrep_value_append_recurrence_left) = S ((S (pfrep_index_append_recurrence_left)) * uc)) /\ exists ff_q_pfp_append_recurrence_leftinput. ub = ff_q_pfp_append_recurrence_leftinput * S ((S (pfrep_index_append_recurrence_left)) * uc) + (pfrep_value_append_recurrence_left))) -> (((exists ff_h_pfp_append_recurrence_leftoutput. ff_h_pfp_append_recurrence_leftoutput + S (pfrep_value_append_recurrence_left) = S ((S ((L)+pfrep_index_append_recurrence_left)) * UC)) /\ exists ff_q_pfp_append_recurrence_leftoutput. UB = ff_q_pfp_append_recurrence_leftoutput * S ((S ((L)+pfrep_index_append_recurrence_left)) * UC) + (pfrep_value_append_recurrence_left))))))) -> (((forall pfp_repeat_index_append_recurrence_rightzeros. (exists pfa_gap_append_recurrence_rightzerosindex. pfa_gap_append_recurrence_rightzerosindex + S (pfp_repeat_index_append_recurrence_rightzeros) = (S N)) -> (((exists ff_h_pfp_append_recurrence_rightzerosentry. ff_h_pfp_append_recurrence_rightzerosentry + S (0) = S ((S (pfp_repeat_index_append_recurrence_rightzeros)) * VC)) /\ exists ff_q_pfp_append_recurrence_rightzerosentry. VB = ff_q_pfp_append_recurrence_rightzerosentry * S ((S (pfp_repeat_index_append_recurrence_rightzeros)) * VC) + (0)))) /\ ((forall pfrep_index_append_recurrence_right pfrep_value_append_recurrence_right. (exists pfa_gap_append_recurrence_rightbound. pfa_gap_append_recurrence_rightbound + S (pfrep_index_append_recurrence_right) = (L)) -> (((exists ff_h_pfp_append_recurrence_rightinput. ff_h_pfp_append_recurrence_rightinput + S (pfrep_value_append_recurrence_right) = S ((S (pfrep_index_append_recurrence_right)) * vc)) /\ exists ff_q_pfp_append_recurrence_rightinput. vb = ff_q_pfp_append_recurrence_rightinput * S ((S (pfrep_index_append_recurrence_right)) * vc) + (pfrep_value_append_recurrence_right))) -> (((exists ff_h_pfp_append_recurrence_rightoutput. ff_h_pfp_append_recurrence_rightoutput + S (pfrep_value_append_recurrence_right) = S ((S ((S N)+pfrep_index_append_recurrence_right)) * VC)) /\ exists ff_q_pfp_append_recurrence_rightoutput. VB = ff_q_pfp_append_recurrence_rightoutput * S ((S ((S N)+pfrep_index_append_recurrence_right)) * VC) + (pfrep_value_append_recurrence_right))))))) -> (forall pfp_index_append_recurrence_sum. (exists pfa_gap_append_recurrence_sumindex. pfa_gap_append_recurrence_sumindex + S (pfp_index_append_recurrence_sum) = (L+S N)) -> exists pfp_left_append_recurrence_sum pfp_right_append_recurrence_sum pfp_value_append_recurrence_sum. ((((exists ff_h_pfp_append_recurrence_sumleft. ff_h_pfp_append_recurrence_sumleft + S (pfp_left_append_recurrence_sum) = S ((S (pfp_index_append_recurrence_sum)) * UC)) /\ exists ff_q_pfp_append_recurrence_sumleft. UB = ff_q_pfp_append_recurrence_sumleft * S ((S (pfp_index_append_recurrence_sum)) * UC) + (pfp_left_append_recurrence_sum))) /\ (((((exists ff_h_pfp_append_recurrence_sumright. ff_h_pfp_append_recurrence_sumright + S (pfp_right_append_recurrence_sum) = S ((S (pfp_index_append_recurrence_sum)) * VC)) /\ exists ff_q_pfp_append_recurrence_sumright. VB = ff_q_pfp_append_recurrence_sumright * S ((S (pfp_index_append_recurrence_sum)) * VC) + (pfp_right_append_recurrence_sum))) /\ (((((exists ff_h_pfp_append_recurrence_sumtarget. ff_h_pfp_append_recurrence_sumtarget + S (pfp_value_append_recurrence_sum) = S ((S (pfp_index_append_recurrence_sum)) * rc)) /\ exists ff_q_pfp_append_recurrence_sumtarget. rb = ff_q_pfp_append_recurrence_sumtarget * S ((S (pfp_index_append_recurrence_sum)) * rc) + (pfp_value_append_recurrence_sum))) /\ ((((exists pfa_gap_append_recurrence_sumoperationleft. pfa_gap_append_recurrence_sumoperationleft + S (pfp_left_append_recurrence_sum) = (p)) /\ (((exists pfa_gap_append_recurrence_sumoperationright. pfa_gap_append_recurrence_sumoperationright + S (pfp_right_append_recurrence_sum) = (p)) /\ ((((exists pfa_gap_append_recurrence_sumoperationresultbound. pfa_gap_append_recurrence_sumoperationresultbound + S (pfp_value_append_recurrence_sum) = (p)) /\ ((exists pfa_offset_left_append_recurrence_sumoperationresultcongruence pfa_offset_right_append_recurrence_sumoperationresultcongruence. ((pfp_left_append_recurrence_sum) + (pfp_right_append_recurrence_sum)) + (p) * pfa_offset_left_append_recurrence_sumoperationresultcongruence = (pfp_value_append_recurrence_sum) + (p) * pfa_offset_right_append_recurrence_sumoperationresultcongruence)))))))))))))))) -> (forall pfrep_power_append_recurrence_result pfrep_left_append_recurrence_result pfrep_right_append_recurrence_result. ((exists pfrep_position_append_recurrence_resultfirst. ((pfrep_position_append_recurrence_resultfirst+S (pfrep_power_append_recurrence_result)=(K)) /\ ((((exists ff_h_pfp_append_recurrence_resultfirstentry. ff_h_pfp_append_recurrence_resultfirstentry + S (pfrep_left_append_recurrence_result) = S ((S (pfrep_position_append_recurrence_resultfirst)) * qc)) /\ exists ff_q_pfp_append_recurrence_resultfirstentry. qb = ff_q_pfp_append_recurrence_resultfirstentry * S ((S (pfrep_position_append_recurrence_resultfirst)) * qc) + (pfrep_left_append_recurrence_result)))))) \/ (((exists pfrep_gap_append_recurrence_resultfirstoutside. pfrep_gap_append_recurrence_resultfirstoutside+(K)=(pfrep_power_append_recurrence_result)) /\ (((pfrep_left_append_recurrence_result)=0))))) -> ((exists pfrep_position_append_recurrence_resultsecond. ((pfrep_position_append_recurrence_resultsecond+S (pfrep_power_append_recurrence_result)=(L+S N)) /\ ((((exists ff_h_pfp_append_recurrence_resultsecondentry. ff_h_pfp_append_recurrence_resultsecondentry + S (pfrep_right_append_recurrence_result) = S ((S (pfrep_position_append_recurrence_resultsecond)) * rc)) /\ exists ff_q_pfp_append_recurrence_resultsecondentry. rb = ff_q_pfp_append_recurrence_resultsecondentry * S ((S (pfrep_position_append_recurrence_resultsecond)) * rc) + (pfrep_right_append_recurrence_result)))))) \/ (((exists pfrep_gap_append_recurrence_resultsecondoutside. pfrep_gap_append_recurrence_resultsecondoutside+(L+S N)=(pfrep_power_append_recurrence_result)) /\ (((pfrep_right_append_recurrence_result)=0))))) -> pfrep_left_append_recurrence_result=pfrep_right_append_recurrence_result)

Complete tactic proof in conservative notation

All 293 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

293 script commands · 43 reading checkpoints · 17 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 c
  9. L9
    intro db
  10. L10
    intro dc
02Fix variables and assumptionsL11–20

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

  1. L11
    intro pb
  2. L12
    intro pc
  3. L13
    intro N
  4. L14
    intro qb
  5. L15
    intro qc
  6. L16
    intro K
  7. L17
    intro ub
  8. L18
    intro uc
  9. L19
    intro vb
  10. L20
    intro vc
03Fix variables and assumptionsL21–30

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

  1. L21
    intro UB
  2. L22
    intro UC
  3. L23
    intro VB
  4. L24
    intro VC
  5. L25
    intro rb
  6. L26
    intro rc
  7. L27
    intro hp
  8. L28
    intro he
  9. L29
    intro hlast
  10. L30
    intro hP
04Fix variables and assumptionsL31–36

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

  1. L31
    intro hQ
  2. L32
    intro hU
  3. L33
    intro hV
  4. L34
    intro hUP
  5. L35
    intro hVP
  6. L36
    intro hR
05Establish hp0L37–42

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

  1. L37
    have hp0 : ~(p=0)
  2. L38
    intro hz
  3. L39
    specialize prime_nonzero (p)
  4. L40
    apply prime_nonzero
  5. L41
    exact hp
  6. L42
    exact hz
06Establish holdL43–44

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

  1. L43
    have hold : FpPolyProduct(p,ab,ac,L,bb,bc,M,pb,pc,N)Definitions: FpPolyProduct(p,ab,ac,L,bb,bc,M,pb,pc,N)Original native command in the exact edition
  2. L44
    exact hP
07Separate the logical casesL45–47

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

  1. L45
    cases hold
  2. L46
    cases hold_right
  3. L47
    cases hold_right_right
08Establish hnewL48–49

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

  1. L48
    have hnew : FpPolyProduct(p,ab,ac,L,db,dc,S M,qb,qc,K)Definitions: FpPolyProduct(p,ab,ac,L,db,dc,S M,qb,qc,K)Original native command in the exact edition
  2. L49
    exact hQ
09Separate the logical casesL50–52

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

  1. L50
    cases hnew
  2. L51
    cases hnew_right
  3. L52
    cases hnew_right_right
10Establish hv_copyL53–54

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

  1. L53
    have hv_copy : FpPolyScale(p,c,ab,ac,vb,vc,L)Definitions: FpPolyScale(p,c,ab,ac,vb,vc,L)Original native command in the exact edition
  2. L54
    exact hV
11Separate the logical casesL55–55

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

  1. L55
    cases hv_copy
12Establish hdecompL56–65

Establish this local claim before using it. It is not an additional assumption. The following proof commands apply prime field polynomial append shift constant decomposition exists.

  1. L56
    have hdecomp : ∃ sb. ∃ sc. ∃ kb. ∃ kc. ∃ tb. ∃ tc. PolynomialShift(bb,bc,M,sb,sc) ∧ (BetaPrefixInto(kb,kc,1,p) ∧ (BetaAt(kb,kc,0,c) ∧ (PolynomialLeftPad(kb,kc,1,M,tb,tc) ∧ FpPolyAdd(p,sb,sc,tb,tc,db,dc,S M))))Definitions: PolynomialShift(bb,bc,M,sb,sc)BetaPrefixInto(kb,kc,1,p)BetaAt(kb,kc,0,c)PolynomialLeftPad(kb,kc,1,M,tb,tc)FpPolyAdd(p,sb,sc,tb,tc,db,dc,S M)Original native command in the exact edition
  2. L57
    specialize prime_field_polynomial_append_shift_constant_decomposition_exists (p)
  3. L58
    specialize prime_field_polynomial_append_shift_constant_decomposition_exists (bb)
  4. L59
    specialize prime_field_polynomial_append_shift_constant_decomposition_exists (bc)
  5. L60
    specialize prime_field_polynomial_append_shift_constant_decomposition_exists (M)
  6. L61
    specialize prime_field_polynomial_append_shift_constant_decomposition_exists (c)
  7. L62
    specialize prime_field_polynomial_append_shift_constant_decomposition_exists (db)
  8. L63
    specialize prime_field_polynomial_append_shift_constant_decomposition_exists (dc)
  9. L64
    apply prime_field_polynomial_append_shift_constant_decomposition_exists
  10. L65
    exact hp
13Use earlier factsL66–69

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

  1. L66
    exact hold_right_left
  2. L67
    exact hv_copy_left
  3. L68
    exact he
  4. L69
    exact hlast
14Separate the logical casesL70–79

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

  1. L70
    cases hdecomp
  2. L71
    cases hdecomp_witness
  3. L72
    cases hdecomp_witness_witness
  4. L73
    cases hdecomp_witness_witness_witness
  5. L74
    cases hdecomp_witness_witness_witness_witness
  6. L75
    cases hdecomp_witness_witness_witness_witness_witness
  7. L76
    cases hdecomp_witness_witness_witness_witness_witness_witness
  8. L77
    cases hdecomp_witness_witness_witness_witness_witness_witness_right
  9. L78
    cases hdecomp_witness_witness_witness_witness_witness_witness_right_right
  10. L79
    cases hdecomp_witness_witness_witness_witness_witness_witness_right_right_right
15Establish hboundsL80–89

Establish this local claim before using it. It is not an additional assumption. The following proof commands apply prime field polynomial add bounded.

  1. L80
    have hbounds : BetaPrefixInto(x,x1,S M,p) ∧ (BetaPrefixInto(x4,x5,S M,p) ∧ BetaPrefixInto(db,dc,S M,p))Definitions: BetaPrefixInto(x,x1,S M,p)BetaPrefixInto(x4,x5,S M,p)BetaPrefixInto(db,dc,S M,p)Original native command in the exact edition
  2. L81
    specialize prime_field_polynomial_add_bounded (p)
  3. L82
    specialize prime_field_polynomial_add_bounded (x)
  4. L83
    specialize prime_field_polynomial_add_bounded (x1)
  5. L84
    specialize prime_field_polynomial_add_bounded (x4)
  6. L85
    specialize prime_field_polynomial_add_bounded (x5)
  7. L86
    specialize prime_field_polynomial_add_bounded (db)
  8. L87
    specialize prime_field_polynomial_add_bounded (dc)
  9. L88
    specialize prime_field_polynomial_add_bounded (S M)
  10. L89
    apply prime_field_polynomial_add_bounded
16Use earlier factsL90–90

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

  1. L90
    exact hdecomp_witness_witness_witness_witness_witness_witness_right_right_right_right
17Separate the logical casesL91–92

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

  1. L91
    cases hbounds
  2. L92
    cases hbounds_right
18Establish hfirstL93–102

Establish this local claim before using it. It is not an additional assumption. The following proof commands apply prime field polynomial convolution at length exists.

  1. L93
    have hfirst : ∃ fb. ∃ fc. FpPolyProduct(p,ab,ac,L,x,x1,S M,fb,fc,K)Definitions: FpPolyProduct(p,ab,ac,L,x,x1,S M,fb,fc,K)Original native command in the exact edition
  2. L94
    specialize prime_field_polynomial_convolution_at_length_exists (p)
  3. L95
    specialize prime_field_polynomial_convolution_at_length_exists (ab)
  4. L96
    specialize prime_field_polynomial_convolution_at_length_exists (ac)
  5. L97
    specialize prime_field_polynomial_convolution_at_length_exists (L)
  6. L98
    specialize prime_field_polynomial_convolution_at_length_exists (x)
  7. L99
    specialize prime_field_polynomial_convolution_at_length_exists (x1)
  8. L100
    specialize prime_field_polynomial_convolution_at_length_exists (S M)
  9. L101
    specialize prime_field_polynomial_convolution_at_length_exists (K)
  10. L102
    apply prime_field_polynomial_convolution_at_length_exists
19Use earlier factsL103–106

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

  1. L103
    exact hp0
  2. L104
    exact hold_left
  3. L105
    exact hbounds_left
  4. L106
    exact hnew_right_right_left
20Separate the logical casesL107–108

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

  1. L107
    cases hfirst
  2. L108
    cases hfirst_witness
21Establish hsecondL109–118

Establish this local claim before using it. It is not an additional assumption. The following proof commands apply prime field polynomial convolution at length exists.

  1. L109
    have hsecond : ∃ fb. ∃ fc. FpPolyProduct(p,ab,ac,L,x4,x5,S M,fb,fc,K)Definitions: FpPolyProduct(p,ab,ac,L,x4,x5,S M,fb,fc,K)Original native command in the exact edition
  2. L110
    specialize prime_field_polynomial_convolution_at_length_exists (p)
  3. L111
    specialize prime_field_polynomial_convolution_at_length_exists (ab)
  4. L112
    specialize prime_field_polynomial_convolution_at_length_exists (ac)
  5. L113
    specialize prime_field_polynomial_convolution_at_length_exists (L)
  6. L114
    specialize prime_field_polynomial_convolution_at_length_exists (x4)
  7. L115
    specialize prime_field_polynomial_convolution_at_length_exists (x5)
  8. L116
    specialize prime_field_polynomial_convolution_at_length_exists (S M)
  9. L117
    specialize prime_field_polynomial_convolution_at_length_exists (K)
  10. L118
    apply prime_field_polynomial_convolution_at_length_exists
22Use earlier factsL119–122

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

  1. L119
    exact hp0
  2. L120
    exact hold_left
  3. L121
    exact hbounds_right_left
  4. L122
    exact hnew_right_right_left
23Separate the logical casesL123–124

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

  1. L123
    cases hsecond
  2. L124
    cases hsecond_witness
24Establish hdistributedL125–134

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

  1. L125
    have hdistributed : FpPolyAdd(p,x6,x7,x8,x9,qb,qc,K)Definitions: FpPolyAdd(p,x6,x7,x8,x9,qb,qc,K)Original native command in the exact edition
  2. L126
    specialize prime_field_polynomial_convolution_left_add (p)
  3. L127
    specialize prime_field_polynomial_convolution_left_add (x)
  4. L128
    specialize prime_field_polynomial_convolution_left_add (x1)
  5. L129
    specialize prime_field_polynomial_convolution_left_add (x4)
  6. L130
    specialize prime_field_polynomial_convolution_left_add (x5)
  7. L131
    specialize prime_field_polynomial_convolution_left_add (db)
  8. L132
    specialize prime_field_polynomial_convolution_left_add (dc)
  9. L133
    specialize prime_field_polynomial_convolution_left_add (S M)
  10. L134
    specialize prime_field_polynomial_convolution_left_add (ab)
25Use earlier factsL135–144

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

  1. L135
    specialize prime_field_polynomial_convolution_left_add (ac)
  2. L136
    specialize prime_field_polynomial_convolution_left_add (L)
  3. L137
    specialize prime_field_polynomial_convolution_left_add (x6)
  4. L138
    specialize prime_field_polynomial_convolution_left_add (x7)
  5. L139
    specialize prime_field_polynomial_convolution_left_add (x8)
  6. L140
    specialize prime_field_polynomial_convolution_left_add (x9)
  7. L141
    specialize prime_field_polynomial_convolution_left_add (qb)
  8. L142
    specialize prime_field_polynomial_convolution_left_add (qc)
  9. L143
    specialize prime_field_polynomial_convolution_left_add (K)
  10. L144
    apply prime_field_polynomial_convolution_left_add
26Use earlier factsL145–148

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

  1. L145
    exact hdecomp_witness_witness_witness_witness_witness_witness_right_right_right_right
  2. L146
    exact hfirst_witness_witness
  3. L147
    exact hsecond_witness_witness
  4. L148
    exact hQ
27Establish hshifted_equalL149–158

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

  1. L149
    have hshifted_equal : PolynomialEquivalent(x6,x7,K,ub,uc,S N)Definitions: PolynomialEquivalent(x6,x7,K,ub,uc,S N)Original native command in the exact edition
  2. L150
    specialize prime_field_polynomial_convolution_shift_right_equivalent (p)
  3. L151
    specialize prime_field_polynomial_convolution_shift_right_equivalent (ab)
  4. L152
    specialize prime_field_polynomial_convolution_shift_right_equivalent (ac)
  5. L153
    specialize prime_field_polynomial_convolution_shift_right_equivalent (L)
  6. L154
    specialize prime_field_polynomial_convolution_shift_right_equivalent (bb)
  7. L155
    specialize prime_field_polynomial_convolution_shift_right_equivalent (bc)
  8. L156
    specialize prime_field_polynomial_convolution_shift_right_equivalent (M)
  9. L157
    specialize prime_field_polynomial_convolution_shift_right_equivalent (pb)
  10. L158
    specialize prime_field_polynomial_convolution_shift_right_equivalent (pc)
28Use earlier factsL159–168

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

  1. L159
    specialize prime_field_polynomial_convolution_shift_right_equivalent (N)
  2. L160
    specialize prime_field_polynomial_convolution_shift_right_equivalent (x)
  3. L161
    specialize prime_field_polynomial_convolution_shift_right_equivalent (x1)
  4. L162
    specialize prime_field_polynomial_convolution_shift_right_equivalent (x6)
  5. L163
    specialize prime_field_polynomial_convolution_shift_right_equivalent (x7)
  6. L164
    specialize prime_field_polynomial_convolution_shift_right_equivalent (K)
  7. L165
    specialize prime_field_polynomial_convolution_shift_right_equivalent (ub)
  8. L166
    specialize prime_field_polynomial_convolution_shift_right_equivalent (uc)
  9. L167
    apply prime_field_polynomial_convolution_shift_right_equivalent
  10. L168
    exact hp0
29Use earlier factsL169–172

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

  1. L169
    exact hdecomp_witness_witness_witness_witness_witness_witness_left
  2. L170
    exact hP
  3. L171
    exact hfirst_witness_witness
  4. L172
    exact hU
30Establish hfirst_equalL173–182

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

  1. L173
    have hfirst_equal : PolynomialEquivalent(x6,x7,K,UB,UC,L + S N)Definitions: PolynomialEquivalent(x6,x7,K,UB,UC,L + S N)Original native command in the exact edition
  2. L174
    specialize prime_field_polynomial_equivalent_transitive (x6)
  3. L175
    specialize prime_field_polynomial_equivalent_transitive (x7)
  4. L176
    specialize prime_field_polynomial_equivalent_transitive (K)
  5. L177
    specialize prime_field_polynomial_equivalent_transitive (ub)
  6. L178
    specialize prime_field_polynomial_equivalent_transitive (uc)
  7. L179
    specialize prime_field_polynomial_equivalent_transitive (S N)
  8. L180
    specialize prime_field_polynomial_equivalent_transitive (UB)
  9. L181
    specialize prime_field_polynomial_equivalent_transitive (UC)
  10. L182
    specialize prime_field_polynomial_equivalent_transitive (L+S N)
31Use earlier factsL183–192

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

  1. L183
    apply prime_field_polynomial_equivalent_transitive
  2. L184
    exact hshifted_equal
  3. L185
    specialize prime_field_polynomial_left_pad_equivalent (ub)
  4. L186
    specialize prime_field_polynomial_left_pad_equivalent (uc)
  5. L187
    specialize prime_field_polynomial_left_pad_equivalent (S N)
  6. L188
    specialize prime_field_polynomial_left_pad_equivalent (L)
  7. L189
    specialize prime_field_polynomial_left_pad_equivalent (UB)
  8. L190
    specialize prime_field_polynomial_left_pad_equivalent (UC)
  9. L191
    apply prime_field_polynomial_left_pad_equivalent
  10. L192
    exact hUP
32Establish hconstant_productL193–202

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

  1. L193
    have hconstant_product : FpPolyProduct(p,ab,ac,L,x2,x3,1,vb,vc,L)Definitions: FpPolyProduct(p,ab,ac,L,x2,x3,1,vb,vc,L)Original native command in the exact edition
  2. L194
    specialize prime_field_polynomial_scale_to_constant_product (p)
  3. L195
    specialize prime_field_polynomial_scale_to_constant_product (c)
  4. L196
    specialize prime_field_polynomial_scale_to_constant_product (ab)
  5. L197
    specialize prime_field_polynomial_scale_to_constant_product (ac)
  6. L198
    specialize prime_field_polynomial_scale_to_constant_product (x2)
  7. L199
    specialize prime_field_polynomial_scale_to_constant_product (x3)
  8. L200
    specialize prime_field_polynomial_scale_to_constant_product (vb)
  9. L201
    specialize prime_field_polynomial_scale_to_constant_product (vc)
  10. L202
    specialize prime_field_polynomial_scale_to_constant_product (L)
33Use earlier factsL203–207

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

  1. L203
    apply prime_field_polynomial_scale_to_constant_product
  2. L204
    exact hp
  3. L205
    exact hdecomp_witness_witness_witness_witness_witness_witness_right_left
  4. L206
    exact hdecomp_witness_witness_witness_witness_witness_witness_right_right_left
  5. L207
    exact hV
34Establish hreverse_equalL208–217

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

  1. L208
    have hreverse_equal : PolynomialEquivalent(vb,vc,L,x8,x9,K)Definitions: PolynomialEquivalent(vb,vc,L,x8,x9,K)Original native command in the exact edition
  2. L209
    specialize prime_field_polynomial_convolution_left_padding_equivalent_right (p)
  3. L210
    specialize prime_field_polynomial_convolution_left_padding_equivalent_right (ab)
  4. L211
    specialize prime_field_polynomial_convolution_left_padding_equivalent_right (ac)
  5. L212
    specialize prime_field_polynomial_convolution_left_padding_equivalent_right (L)
  6. L213
    specialize prime_field_polynomial_convolution_left_padding_equivalent_right (x2)
  7. L214
    specialize prime_field_polynomial_convolution_left_padding_equivalent_right (x3)
  8. L215
    specialize prime_field_polynomial_convolution_left_padding_equivalent_right (1)
  9. L216
    specialize prime_field_polynomial_convolution_left_padding_equivalent_right (vb)
  10. L217
    specialize prime_field_polynomial_convolution_left_padding_equivalent_right (vc)
35Use earlier factsL218–227

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

  1. L218
    specialize prime_field_polynomial_convolution_left_padding_equivalent_right (L)
  2. L219
    specialize prime_field_polynomial_convolution_left_padding_equivalent_right (x4)
  3. L220
    specialize prime_field_polynomial_convolution_left_padding_equivalent_right (x5)
  4. L221
    specialize prime_field_polynomial_convolution_left_padding_equivalent_right (M)
  5. L222
    specialize prime_field_polynomial_convolution_left_padding_equivalent_right (x8)
  6. L223
    specialize prime_field_polynomial_convolution_left_padding_equivalent_right (x9)
  7. L224
    specialize prime_field_polynomial_convolution_left_padding_equivalent_right (K)
  8. L225
    apply prime_field_polynomial_convolution_left_padding_equivalent_right
  9. L226
    exact hp0
  10. L227
    exact hdecomp_witness_witness_witness_witness_witness_witness_right_right_right_left
36Use earlier factsL228–228

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

  1. L228
    exact hconstant_product
37Establish hlengthL229–237

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

  1. L229
    have hlength : M+1=S M
  2. L230
    simp
  3. L231
    rewrite hlength
  4. L232
    rewrite hlength
  5. L233
    rewrite hlength
  6. L234
    rewrite hlength
  7. L235
    rewrite hlength
  8. L236
    rewrite hlength
  9. L237
    exact hsecond_witness_witness
38Establish hsecond_equalL238–247

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

  1. L238
    have hsecond_equal : PolynomialEquivalent(x8,x9,K,VB,VC,L + S N)Definitions: PolynomialEquivalent(x8,x9,K,VB,VC,L + S N)Original native command in the exact edition
  2. L239
    specialize prime_field_polynomial_equivalent_transitive (x8)
  3. L240
    specialize prime_field_polynomial_equivalent_transitive (x9)
  4. L241
    specialize prime_field_polynomial_equivalent_transitive (K)
  5. L242
    specialize prime_field_polynomial_equivalent_transitive (vb)
  6. L243
    specialize prime_field_polynomial_equivalent_transitive (vc)
  7. L244
    specialize prime_field_polynomial_equivalent_transitive (L)
  8. L245
    specialize prime_field_polynomial_equivalent_transitive (VB)
  9. L246
    specialize prime_field_polynomial_equivalent_transitive (VC)
  10. L247
    specialize prime_field_polynomial_equivalent_transitive (L+S N)
39Use earlier factsL248–256

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

  1. L248
    apply prime_field_polynomial_equivalent_transitive
  2. L249
    specialize prime_field_polynomial_equivalent_symmetric (vb)
  3. L250
    specialize prime_field_polynomial_equivalent_symmetric (vc)
  4. L251
    specialize prime_field_polynomial_equivalent_symmetric (L)
  5. L252
    specialize prime_field_polynomial_equivalent_symmetric (x8)
  6. L253
    specialize prime_field_polynomial_equivalent_symmetric (x9)
  7. L254
    specialize prime_field_polynomial_equivalent_symmetric (K)
  8. L255
    apply prime_field_polynomial_equivalent_symmetric
  9. L256
    exact hreverse_equal
40Establish hpad_equalL257–265

Establish this local claim before using it. It is not an additional assumption. The following proof commands apply prime field polynomial left pad equivalent.

  1. L257
    have hpad_equal : PolynomialEquivalent(vb,vc,L,VB,VC,S N + L)Definitions: PolynomialEquivalent(vb,vc,L,VB,VC,S N + L)Original native command in the exact edition
  2. L258
    specialize prime_field_polynomial_left_pad_equivalent (vb)
  3. L259
    specialize prime_field_polynomial_left_pad_equivalent (vc)
  4. L260
    specialize prime_field_polynomial_left_pad_equivalent (L)
  5. L261
    specialize prime_field_polynomial_left_pad_equivalent (S N)
  6. L262
    specialize prime_field_polynomial_left_pad_equivalent (VB)
  7. L263
    specialize prime_field_polynomial_left_pad_equivalent (VC)
  8. L264
    apply prime_field_polynomial_left_pad_equivalent
  9. L265
    exact hVP
41Establish hcommL266–275

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

  1. L266
    have hcomm : S N+L=L+S N
  2. L267
    specialize add_comm (S N)
  3. L268
    specialize add_comm (L)
  4. L269
    apply add_comm
  5. L270
    rewrite hcomm at hpad_equal
  6. L271
    rewrite hcomm at hpad_equal
  7. L272
    exact hpad_equal
  8. L273
    specialize prime_field_polynomial_add_equivalent_congruent (p)
  9. L274
    specialize prime_field_polynomial_add_equivalent_congruent (x6)
  10. L275
    specialize prime_field_polynomial_add_equivalent_congruent (x7)
42Use earlier factsL276–285

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

  1. L276
    specialize prime_field_polynomial_add_equivalent_congruent (x8)
  2. L277
    specialize prime_field_polynomial_add_equivalent_congruent (x9)
  3. L278
    specialize prime_field_polynomial_add_equivalent_congruent (qb)
  4. L279
    specialize prime_field_polynomial_add_equivalent_congruent (qc)
  5. L280
    specialize prime_field_polynomial_add_equivalent_congruent (K)
  6. L281
    specialize prime_field_polynomial_add_equivalent_congruent (UB)
  7. L282
    specialize prime_field_polynomial_add_equivalent_congruent (UC)
  8. L283
    specialize prime_field_polynomial_add_equivalent_congruent (VB)
  9. L284
    specialize prime_field_polynomial_add_equivalent_congruent (VC)
  10. L285
    specialize prime_field_polynomial_add_equivalent_congruent (rb)
43Use earlier factsL286–293

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

  1. L286
    specialize prime_field_polynomial_add_equivalent_congruent (rc)
  2. L287
    specialize prime_field_polynomial_add_equivalent_congruent (L+S N)
  3. L288
    apply prime_field_polynomial_add_equivalent_congruent
  4. L289
    exact hp
  5. L290
    exact hfirst_equal
  6. L291
    exact hsecond_equal
  7. L292
    exact hdistributed
  8. L293
    exact hR

Library-wide reading audit

Original defined command ledger · 293 lines
  1. 0001intro p
  2. 0002intro ab
  3. 0003intro ac
  4. 0004intro L
  5. 0005intro bb
  6. 0006intro bc
  7. 0007intro M
  8. 0008intro c
  9. 0009intro db
  10. 0010intro dc
  11. 0011intro pb
  12. 0012intro pc
  13. 0013intro N
  14. 0014intro qb
  15. 0015intro qc
  16. 0016intro K
  17. 0017intro ub
  18. 0018intro uc
  19. 0019intro vb
  20. 0020intro vc
  21. 0021intro UB
  22. 0022intro UC
  23. 0023intro VB
  24. 0024intro VC
  25. 0025intro rb
  26. 0026intro rc
  27. 0027intro hp
  28. 0028intro he
  29. 0029intro hlast
  30. 0030intro hP
  31. 0031intro hQ
  32. 0032intro hU
  33. 0033intro hV
  34. 0034intro hUP
  35. 0035intro hVP
  36. 0036intro hR
  37. 0037have hp0 : ~(p=0)
  38. 0038intro hz
  39. 0039specialize prime_nonzero (p)
  40. 0040apply prime_nonzero
  41. 0041exact hp
  42. 0042exact hz
  43. 0043have hold : FpPolyProduct(p,ab,ac,L,bb,bc,M,pb,pc,N)
  44. 0044exact hP
  45. 0045cases hold
  46. 0046cases hold_right
  47. 0047cases hold_right_right
  48. 0048have hnew : FpPolyProduct(p,ab,ac,L,db,dc,S M,qb,qc,K)
  49. 0049exact hQ
  50. 0050cases hnew
  51. 0051cases hnew_right
  52. 0052cases hnew_right_right
  53. 0053have hv_copy : FpPolyScale(p,c,ab,ac,vb,vc,L)
  54. 0054exact hV
  55. 0055cases hv_copy
  56. 0056have hdecomp : ∃ sb. ∃ sc. ∃ kb. ∃ kc. ∃ tb. ∃ tc. PolynomialShift(bb,bc,M,sb,sc) ∧ (BetaPrefixInto(kb,kc,1,p) ∧ (BetaAt(kb,kc,0,c) ∧ (PolynomialLeftPad(kb,kc,1,M,tb,tc)FpPolyAdd(p,sb,sc,tb,tc,db,dc,S M))))
  57. 0057specialize prime_field_polynomial_append_shift_constant_decomposition_exists (p)
  58. 0058specialize prime_field_polynomial_append_shift_constant_decomposition_exists (bb)
  59. 0059specialize prime_field_polynomial_append_shift_constant_decomposition_exists (bc)
  60. 0060specialize prime_field_polynomial_append_shift_constant_decomposition_exists (M)
  61. 0061specialize prime_field_polynomial_append_shift_constant_decomposition_exists (c)
  62. 0062specialize prime_field_polynomial_append_shift_constant_decomposition_exists (db)
  63. 0063specialize prime_field_polynomial_append_shift_constant_decomposition_exists (dc)
  64. 0064apply prime_field_polynomial_append_shift_constant_decomposition_exists
  65. 0065exact hp
  66. 0066exact hold_right_left
  67. 0067exact hv_copy_left
  68. 0068exact he
  69. 0069exact hlast
  70. 0070cases hdecomp
  71. 0071cases hdecomp_witness
  72. 0072cases hdecomp_witness_witness
  73. 0073cases hdecomp_witness_witness_witness
  74. 0074cases hdecomp_witness_witness_witness_witness
  75. 0075cases hdecomp_witness_witness_witness_witness_witness
  76. 0076cases hdecomp_witness_witness_witness_witness_witness_witness
  77. 0077cases hdecomp_witness_witness_witness_witness_witness_witness_right
  78. 0078cases hdecomp_witness_witness_witness_witness_witness_witness_right_right
  79. 0079cases hdecomp_witness_witness_witness_witness_witness_witness_right_right_right
  80. 0080have hbounds : BetaPrefixInto(x,x1,S M,p) ∧ (BetaPrefixInto(x4,x5,S M,p)BetaPrefixInto(db,dc,S M,p))
  81. 0081specialize prime_field_polynomial_add_bounded (p)
  82. 0082specialize prime_field_polynomial_add_bounded (x)
  83. 0083specialize prime_field_polynomial_add_bounded (x1)
  84. 0084specialize prime_field_polynomial_add_bounded (x4)
  85. 0085specialize prime_field_polynomial_add_bounded (x5)
  86. 0086specialize prime_field_polynomial_add_bounded (db)
  87. 0087specialize prime_field_polynomial_add_bounded (dc)
  88. 0088specialize prime_field_polynomial_add_bounded (S M)
  89. 0089apply prime_field_polynomial_add_bounded
  90. 0090exact hdecomp_witness_witness_witness_witness_witness_witness_right_right_right_right
  91. 0091cases hbounds
  92. 0092cases hbounds_right
  93. 0093have hfirst : ∃ fb. ∃ fc. FpPolyProduct(p,ab,ac,L,x,x1,S M,fb,fc,K)
  94. 0094specialize prime_field_polynomial_convolution_at_length_exists (p)
  95. 0095specialize prime_field_polynomial_convolution_at_length_exists (ab)
  96. 0096specialize prime_field_polynomial_convolution_at_length_exists (ac)
  97. 0097specialize prime_field_polynomial_convolution_at_length_exists (L)
  98. 0098specialize prime_field_polynomial_convolution_at_length_exists (x)
  99. 0099specialize prime_field_polynomial_convolution_at_length_exists (x1)
  100. 0100specialize prime_field_polynomial_convolution_at_length_exists (S M)
  101. 0101specialize prime_field_polynomial_convolution_at_length_exists (K)
  102. 0102apply prime_field_polynomial_convolution_at_length_exists
  103. 0103exact hp0
  104. 0104exact hold_left
  105. 0105exact hbounds_left
  106. 0106exact hnew_right_right_left
  107. 0107cases hfirst
  108. 0108cases hfirst_witness
  109. 0109have hsecond : ∃ fb. ∃ fc. FpPolyProduct(p,ab,ac,L,x4,x5,S M,fb,fc,K)
  110. 0110specialize prime_field_polynomial_convolution_at_length_exists (p)
  111. 0111specialize prime_field_polynomial_convolution_at_length_exists (ab)
  112. 0112specialize prime_field_polynomial_convolution_at_length_exists (ac)
  113. 0113specialize prime_field_polynomial_convolution_at_length_exists (L)
  114. 0114specialize prime_field_polynomial_convolution_at_length_exists (x4)
  115. 0115specialize prime_field_polynomial_convolution_at_length_exists (x5)
  116. 0116specialize prime_field_polynomial_convolution_at_length_exists (S M)
  117. 0117specialize prime_field_polynomial_convolution_at_length_exists (K)
  118. 0118apply prime_field_polynomial_convolution_at_length_exists
  119. 0119exact hp0
  120. 0120exact hold_left
  121. 0121exact hbounds_right_left
  122. 0122exact hnew_right_right_left
  123. 0123cases hsecond
  124. 0124cases hsecond_witness
  125. 0125have hdistributed : FpPolyAdd(p,x6,x7,x8,x9,qb,qc,K)
  126. 0126specialize prime_field_polynomial_convolution_left_add (p)
  127. 0127specialize prime_field_polynomial_convolution_left_add (x)
  128. 0128specialize prime_field_polynomial_convolution_left_add (x1)
  129. 0129specialize prime_field_polynomial_convolution_left_add (x4)
  130. 0130specialize prime_field_polynomial_convolution_left_add (x5)
  131. 0131specialize prime_field_polynomial_convolution_left_add (db)
  132. 0132specialize prime_field_polynomial_convolution_left_add (dc)
  133. 0133specialize prime_field_polynomial_convolution_left_add (S M)
  134. 0134specialize prime_field_polynomial_convolution_left_add (ab)
  135. 0135specialize prime_field_polynomial_convolution_left_add (ac)
  136. 0136specialize prime_field_polynomial_convolution_left_add (L)
  137. 0137specialize prime_field_polynomial_convolution_left_add (x6)
  138. 0138specialize prime_field_polynomial_convolution_left_add (x7)
  139. 0139specialize prime_field_polynomial_convolution_left_add (x8)
  140. 0140specialize prime_field_polynomial_convolution_left_add (x9)
  141. 0141specialize prime_field_polynomial_convolution_left_add (qb)
  142. 0142specialize prime_field_polynomial_convolution_left_add (qc)
  143. 0143specialize prime_field_polynomial_convolution_left_add (K)
  144. 0144apply prime_field_polynomial_convolution_left_add
  145. 0145exact hdecomp_witness_witness_witness_witness_witness_witness_right_right_right_right
  146. 0146exact hfirst_witness_witness
  147. 0147exact hsecond_witness_witness
  148. 0148exact hQ
  149. 0149have hshifted_equal : PolynomialEquivalent(x6,x7,K,ub,uc,S N)
  150. 0150specialize prime_field_polynomial_convolution_shift_right_equivalent (p)
  151. 0151specialize prime_field_polynomial_convolution_shift_right_equivalent (ab)
  152. 0152specialize prime_field_polynomial_convolution_shift_right_equivalent (ac)
  153. 0153specialize prime_field_polynomial_convolution_shift_right_equivalent (L)
  154. 0154specialize prime_field_polynomial_convolution_shift_right_equivalent (bb)
  155. 0155specialize prime_field_polynomial_convolution_shift_right_equivalent (bc)
  156. 0156specialize prime_field_polynomial_convolution_shift_right_equivalent (M)
  157. 0157specialize prime_field_polynomial_convolution_shift_right_equivalent (pb)
  158. 0158specialize prime_field_polynomial_convolution_shift_right_equivalent (pc)
  159. 0159specialize prime_field_polynomial_convolution_shift_right_equivalent (N)
  160. 0160specialize prime_field_polynomial_convolution_shift_right_equivalent (x)
  161. 0161specialize prime_field_polynomial_convolution_shift_right_equivalent (x1)
  162. 0162specialize prime_field_polynomial_convolution_shift_right_equivalent (x6)
  163. 0163specialize prime_field_polynomial_convolution_shift_right_equivalent (x7)
  164. 0164specialize prime_field_polynomial_convolution_shift_right_equivalent (K)
  165. 0165specialize prime_field_polynomial_convolution_shift_right_equivalent (ub)
  166. 0166specialize prime_field_polynomial_convolution_shift_right_equivalent (uc)
  167. 0167apply prime_field_polynomial_convolution_shift_right_equivalent
  168. 0168exact hp0
  169. 0169exact hdecomp_witness_witness_witness_witness_witness_witness_left
  170. 0170exact hP
  171. 0171exact hfirst_witness_witness
  172. 0172exact hU
  173. 0173have hfirst_equal : PolynomialEquivalent(x6,x7,K,UB,UC,L + S N)
  174. 0174specialize prime_field_polynomial_equivalent_transitive (x6)
  175. 0175specialize prime_field_polynomial_equivalent_transitive (x7)
  176. 0176specialize prime_field_polynomial_equivalent_transitive (K)
  177. 0177specialize prime_field_polynomial_equivalent_transitive (ub)
  178. 0178specialize prime_field_polynomial_equivalent_transitive (uc)
  179. 0179specialize prime_field_polynomial_equivalent_transitive (S N)
  180. 0180specialize prime_field_polynomial_equivalent_transitive (UB)
  181. 0181specialize prime_field_polynomial_equivalent_transitive (UC)
  182. 0182specialize prime_field_polynomial_equivalent_transitive (L+S N)
  183. 0183apply prime_field_polynomial_equivalent_transitive
  184. 0184exact hshifted_equal
  185. 0185specialize prime_field_polynomial_left_pad_equivalent (ub)
  186. 0186specialize prime_field_polynomial_left_pad_equivalent (uc)
  187. 0187specialize prime_field_polynomial_left_pad_equivalent (S N)
  188. 0188specialize prime_field_polynomial_left_pad_equivalent (L)
  189. 0189specialize prime_field_polynomial_left_pad_equivalent (UB)
  190. 0190specialize prime_field_polynomial_left_pad_equivalent (UC)
  191. 0191apply prime_field_polynomial_left_pad_equivalent
  192. 0192exact hUP
  193. 0193have hconstant_product : FpPolyProduct(p,ab,ac,L,x2,x3,1,vb,vc,L)
  194. 0194specialize prime_field_polynomial_scale_to_constant_product (p)
  195. 0195specialize prime_field_polynomial_scale_to_constant_product (c)
  196. 0196specialize prime_field_polynomial_scale_to_constant_product (ab)
  197. 0197specialize prime_field_polynomial_scale_to_constant_product (ac)
  198. 0198specialize prime_field_polynomial_scale_to_constant_product (x2)
  199. 0199specialize prime_field_polynomial_scale_to_constant_product (x3)
  200. 0200specialize prime_field_polynomial_scale_to_constant_product (vb)
  201. 0201specialize prime_field_polynomial_scale_to_constant_product (vc)
  202. 0202specialize prime_field_polynomial_scale_to_constant_product (L)
  203. 0203apply prime_field_polynomial_scale_to_constant_product
  204. 0204exact hp
  205. 0205exact hdecomp_witness_witness_witness_witness_witness_witness_right_left
  206. 0206exact hdecomp_witness_witness_witness_witness_witness_witness_right_right_left
  207. 0207exact hV
  208. 0208have hreverse_equal : PolynomialEquivalent(vb,vc,L,x8,x9,K)
  209. 0209specialize prime_field_polynomial_convolution_left_padding_equivalent_right (p)
  210. 0210specialize prime_field_polynomial_convolution_left_padding_equivalent_right (ab)
  211. 0211specialize prime_field_polynomial_convolution_left_padding_equivalent_right (ac)
  212. 0212specialize prime_field_polynomial_convolution_left_padding_equivalent_right (L)
  213. 0213specialize prime_field_polynomial_convolution_left_padding_equivalent_right (x2)
  214. 0214specialize prime_field_polynomial_convolution_left_padding_equivalent_right (x3)
  215. 0215specialize prime_field_polynomial_convolution_left_padding_equivalent_right (1)
  216. 0216specialize prime_field_polynomial_convolution_left_padding_equivalent_right (vb)
  217. 0217specialize prime_field_polynomial_convolution_left_padding_equivalent_right (vc)
  218. 0218specialize prime_field_polynomial_convolution_left_padding_equivalent_right (L)
  219. 0219specialize prime_field_polynomial_convolution_left_padding_equivalent_right (x4)
  220. 0220specialize prime_field_polynomial_convolution_left_padding_equivalent_right (x5)
  221. 0221specialize prime_field_polynomial_convolution_left_padding_equivalent_right (M)
  222. 0222specialize prime_field_polynomial_convolution_left_padding_equivalent_right (x8)
  223. 0223specialize prime_field_polynomial_convolution_left_padding_equivalent_right (x9)
  224. 0224specialize prime_field_polynomial_convolution_left_padding_equivalent_right (K)
  225. 0225apply prime_field_polynomial_convolution_left_padding_equivalent_right
  226. 0226exact hp0
  227. 0227exact hdecomp_witness_witness_witness_witness_witness_witness_right_right_right_left
  228. 0228exact hconstant_product
  229. 0229have hlength : M+1=S M
  230. 0230simp
  231. 0231rewrite hlength
  232. 0232rewrite hlength
  233. 0233rewrite hlength
  234. 0234rewrite hlength
  235. 0235rewrite hlength
  236. 0236rewrite hlength
  237. 0237exact hsecond_witness_witness
  238. 0238have hsecond_equal : PolynomialEquivalent(x8,x9,K,VB,VC,L + S N)
  239. 0239specialize prime_field_polynomial_equivalent_transitive (x8)
  240. 0240specialize prime_field_polynomial_equivalent_transitive (x9)
  241. 0241specialize prime_field_polynomial_equivalent_transitive (K)
  242. 0242specialize prime_field_polynomial_equivalent_transitive (vb)
  243. 0243specialize prime_field_polynomial_equivalent_transitive (vc)
  244. 0244specialize prime_field_polynomial_equivalent_transitive (L)
  245. 0245specialize prime_field_polynomial_equivalent_transitive (VB)
  246. 0246specialize prime_field_polynomial_equivalent_transitive (VC)
  247. 0247specialize prime_field_polynomial_equivalent_transitive (L+S N)
  248. 0248apply prime_field_polynomial_equivalent_transitive
  249. 0249specialize prime_field_polynomial_equivalent_symmetric (vb)
  250. 0250specialize prime_field_polynomial_equivalent_symmetric (vc)
  251. 0251specialize prime_field_polynomial_equivalent_symmetric (L)
  252. 0252specialize prime_field_polynomial_equivalent_symmetric (x8)
  253. 0253specialize prime_field_polynomial_equivalent_symmetric (x9)
  254. 0254specialize prime_field_polynomial_equivalent_symmetric (K)
  255. 0255apply prime_field_polynomial_equivalent_symmetric
  256. 0256exact hreverse_equal
  257. 0257have hpad_equal : PolynomialEquivalent(vb,vc,L,VB,VC,S N + L)
  258. 0258specialize prime_field_polynomial_left_pad_equivalent (vb)
  259. 0259specialize prime_field_polynomial_left_pad_equivalent (vc)
  260. 0260specialize prime_field_polynomial_left_pad_equivalent (L)
  261. 0261specialize prime_field_polynomial_left_pad_equivalent (S N)
  262. 0262specialize prime_field_polynomial_left_pad_equivalent (VB)
  263. 0263specialize prime_field_polynomial_left_pad_equivalent (VC)
  264. 0264apply prime_field_polynomial_left_pad_equivalent
  265. 0265exact hVP
  266. 0266have hcomm : S N+L=L+S N
  267. 0267specialize add_comm (S N)
  268. 0268specialize add_comm (L)
  269. 0269apply add_comm
  270. 0270rewrite hcomm at hpad_equal
  271. 0271rewrite hcomm at hpad_equal
  272. 0272exact hpad_equal
  273. 0273specialize prime_field_polynomial_add_equivalent_congruent (p)
  274. 0274specialize prime_field_polynomial_add_equivalent_congruent (x6)
  275. 0275specialize prime_field_polynomial_add_equivalent_congruent (x7)
  276. 0276specialize prime_field_polynomial_add_equivalent_congruent (x8)
  277. 0277specialize prime_field_polynomial_add_equivalent_congruent (x9)
  278. 0278specialize prime_field_polynomial_add_equivalent_congruent (qb)
  279. 0279specialize prime_field_polynomial_add_equivalent_congruent (qc)
  280. 0280specialize prime_field_polynomial_add_equivalent_congruent (K)
  281. 0281specialize prime_field_polynomial_add_equivalent_congruent (UB)
  282. 0282specialize prime_field_polynomial_add_equivalent_congruent (UC)
  283. 0283specialize prime_field_polynomial_add_equivalent_congruent (VB)
  284. 0284specialize prime_field_polynomial_add_equivalent_congruent (VC)
  285. 0285specialize prime_field_polynomial_add_equivalent_congruent (rb)
  286. 0286specialize prime_field_polynomial_add_equivalent_congruent (rc)
  287. 0287specialize prime_field_polynomial_add_equivalent_congruent (L+S N)
  288. 0288apply prime_field_polynomial_add_equivalent_congruent
  289. 0289exact hp
  290. 0290exact hfirst_equal
  291. 0291exact hsecond_equal
  292. 0292exact hdistributed
  293. 0293exact hR