PG001F

prime_field_polynomial_convolution_right_append_exists

From an actual old product and a canonical next coefficient, construct the appended right factor, its proper product, the shift and scalar outputs, both aligned paddings and the actual sum, then prove the formal recurrence. No output existence or polynomial identity is assumed.

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. ∀ pb. ∀ pc. ∀ N. Prime(p)Lt(c,p)FpPolyProduct(p,ab,ac,L,bb,bc,M,pb,pc,N) → ∃ x. ∃ y. ∃ z. ∃ n. ∃ m. ∃ k. ∃ i. ∃ j. ∃ u. ∃ v. ∃ w. ∃ x0. ∃ x1. ∃ x2. ∃ x3. BetaPrefixEqual(bb,bc,x,y,M) ∧ (BetaAt(x,y,M,c) ∧ (FpPolyProduct(p,ab,ac,L,x,y,S M,n,m,z) ∧ (PolynomialShift(pb,pc,N,k,i) ∧ (FpPolyScale(p,c,ab,ac,j,u,L) ∧ (PolynomialLeftPad(k,i,S N,L,v,w) ∧ (PolynomialLeftPad(j,u,L,S N,x0,x1) ∧ (FpPolyAdd(p,v,w,x0,x1,x2,x3,L + S N)PolynomialEquivalent(n,m,z,x2,x3,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 pb pc N. (~((p) = 1) /\ forall pfa_factor_left_append_exists_prime pfa_factor_right_append_exists_prime. (p) = pfa_factor_left_append_exists_prime * pfa_factor_right_append_exists_prime -> pfa_factor_left_append_exists_prime = 1 \/ pfa_factor_right_append_exists_prime = 1) -> (exists pfa_gap_append_exists_scalar. pfa_gap_append_exists_scalar + S (c) = (p)) -> (((forall fom_index_pfp_append_exists_oldleft. (exists fom_gap_pfp_append_exists_oldleft_index_bound. fom_gap_pfp_append_exists_oldleft_index_bound + S (fom_index_pfp_append_exists_oldleft) = L) -> exists fom_value_pfp_append_exists_oldleft. ((((exists fom_beta_height_pfp_append_exists_oldleft_entry. fom_beta_height_pfp_append_exists_oldleft_entry + S (fom_value_pfp_append_exists_oldleft) = S ((S (fom_index_pfp_append_exists_oldleft)) * ac)) /\ exists fom_beta_quotient_pfp_append_exists_oldleft_entry. ab = fom_beta_quotient_pfp_append_exists_oldleft_entry * S ((S (fom_index_pfp_append_exists_oldleft)) * ac) + (fom_value_pfp_append_exists_oldleft))) /\ (exists fom_gap_pfp_append_exists_oldleft_value_bound. fom_gap_pfp_append_exists_oldleft_value_bound + S (fom_value_pfp_append_exists_oldleft) = p))) /\ (((forall fom_index_pfp_append_exists_oldright. (exists fom_gap_pfp_append_exists_oldright_index_bound. fom_gap_pfp_append_exists_oldright_index_bound + S (fom_index_pfp_append_exists_oldright) = M) -> exists fom_value_pfp_append_exists_oldright. ((((exists fom_beta_height_pfp_append_exists_oldright_entry. fom_beta_height_pfp_append_exists_oldright_entry + S (fom_value_pfp_append_exists_oldright) = S ((S (fom_index_pfp_append_exists_oldright)) * bc)) /\ exists fom_beta_quotient_pfp_append_exists_oldright_entry. bb = fom_beta_quotient_pfp_append_exists_oldright_entry * S ((S (fom_index_pfp_append_exists_oldright)) * bc) + (fom_value_pfp_append_exists_oldright))) /\ (exists fom_gap_pfp_append_exists_oldright_value_bound. fom_gap_pfp_append_exists_oldright_value_bound + S (fom_value_pfp_append_exists_oldright) = p))) /\ (((((((L)=0 \/ (M)=0) /\ (((N)=0)))) \/ (((~((L)=0)) /\ (((~((M)=0)) /\ (((L)+(M)=S (N)))))))) /\ ((forall pfc_index_append_exists_oldcoefficients. (exists pfa_gap_append_exists_oldcoefficientsbound. pfa_gap_append_exists_oldcoefficientsbound + S (pfc_index_append_exists_oldcoefficients) = (N)) -> exists pfc_value_append_exists_oldcoefficients. ((((exists ff_h_pfp_append_exists_oldcoefficientsentry. ff_h_pfp_append_exists_oldcoefficientsentry + S (pfc_value_append_exists_oldcoefficients) = S ((S (pfc_index_append_exists_oldcoefficients)) * pc)) /\ exists ff_q_pfp_append_exists_oldcoefficientsentry. pb = ff_q_pfp_append_exists_oldcoefficientsentry * S ((S (pfc_index_append_exists_oldcoefficients)) * pc) + (pfc_value_append_exists_oldcoefficients))) /\ ((exists pfc_terms_code_append_exists_oldcoefficientscoefficient pfc_terms_scale_append_exists_oldcoefficientscoefficient pfc_natural_sum_append_exists_oldcoefficientscoefficient. ((forall pfc_index_append_exists_oldcoefficientscoefficientdiagonal. (exists pfa_gap_append_exists_oldcoefficientscoefficientdiagonalbound. pfa_gap_append_exists_oldcoefficientscoefficientdiagonalbound + S (pfc_index_append_exists_oldcoefficientscoefficientdiagonal) = (S (pfc_index_append_exists_oldcoefficients))) -> exists pfc_value_append_exists_oldcoefficientscoefficientdiagonal. ((((exists ff_h_pfp_append_exists_oldcoefficientscoefficientdiagonalentry. ff_h_pfp_append_exists_oldcoefficientscoefficientdiagonalentry + S (pfc_value_append_exists_oldcoefficientscoefficientdiagonal) = S ((S (pfc_index_append_exists_oldcoefficientscoefficientdiagonal)) * pfc_terms_scale_append_exists_oldcoefficientscoefficient)) /\ exists ff_q_pfp_append_exists_oldcoefficientscoefficientdiagonalentry. pfc_terms_code_append_exists_oldcoefficientscoefficient = ff_q_pfp_append_exists_oldcoefficientscoefficientdiagonalentry * S ((S (pfc_index_append_exists_oldcoefficientscoefficientdiagonal)) * pfc_terms_scale_append_exists_oldcoefficientscoefficient) + (pfc_value_append_exists_oldcoefficientscoefficientdiagonal))) /\ ((exists pfc_complement_append_exists_oldcoefficientscoefficientdiagonalterm pfc_left_append_exists_oldcoefficientscoefficientdiagonalterm pfc_right_append_exists_oldcoefficientscoefficientdiagonalterm. (((pfc_index_append_exists_oldcoefficientscoefficientdiagonal)+pfc_complement_append_exists_oldcoefficientscoefficientdiagonalterm=(pfc_index_append_exists_oldcoefficients)) /\ ((((((exists pfa_gap_append_exists_oldcoefficientscoefficientdiagonaltermleftinside. pfa_gap_append_exists_oldcoefficientscoefficientdiagonaltermleftinside + S (pfc_index_append_exists_oldcoefficientscoefficientdiagonal) = (L)) /\ ((((exists ff_h_pfp_append_exists_oldcoefficientscoefficientdiagonaltermleftentry. ff_h_pfp_append_exists_oldcoefficientscoefficientdiagonaltermleftentry + S (pfc_left_append_exists_oldcoefficientscoefficientdiagonalterm) = S ((S (pfc_index_append_exists_oldcoefficientscoefficientdiagonal)) * ac)) /\ exists ff_q_pfp_append_exists_oldcoefficientscoefficientdiagonaltermleftentry. ab = ff_q_pfp_append_exists_oldcoefficientscoefficientdiagonaltermleftentry * S ((S (pfc_index_append_exists_oldcoefficientscoefficientdiagonal)) * ac) + (pfc_left_append_exists_oldcoefficientscoefficientdiagonalterm)))))) \/ (((exists pfc_gap_append_exists_oldcoefficientscoefficientdiagonaltermleftoutside. pfc_gap_append_exists_oldcoefficientscoefficientdiagonaltermleftoutside+(L)=(pfc_index_append_exists_oldcoefficientscoefficientdiagonal)) /\ (((pfc_left_append_exists_oldcoefficientscoefficientdiagonalterm)=0))))) /\ ((((((exists pfa_gap_append_exists_oldcoefficientscoefficientdiagonaltermrightinside. pfa_gap_append_exists_oldcoefficientscoefficientdiagonaltermrightinside + S (pfc_complement_append_exists_oldcoefficientscoefficientdiagonalterm) = (M)) /\ ((((exists ff_h_pfp_append_exists_oldcoefficientscoefficientdiagonaltermrightentry. ff_h_pfp_append_exists_oldcoefficientscoefficientdiagonaltermrightentry + S (pfc_right_append_exists_oldcoefficientscoefficientdiagonalterm) = S ((S (pfc_complement_append_exists_oldcoefficientscoefficientdiagonalterm)) * bc)) /\ exists ff_q_pfp_append_exists_oldcoefficientscoefficientdiagonaltermrightentry. bb = ff_q_pfp_append_exists_oldcoefficientscoefficientdiagonaltermrightentry * S ((S (pfc_complement_append_exists_oldcoefficientscoefficientdiagonalterm)) * bc) + (pfc_right_append_exists_oldcoefficientscoefficientdiagonalterm)))))) \/ (((exists pfc_gap_append_exists_oldcoefficientscoefficientdiagonaltermrightoutside. pfc_gap_append_exists_oldcoefficientscoefficientdiagonaltermrightoutside+(M)=(pfc_complement_append_exists_oldcoefficientscoefficientdiagonalterm)) /\ (((pfc_right_append_exists_oldcoefficientscoefficientdiagonalterm)=0))))) /\ (((pfc_value_append_exists_oldcoefficientscoefficientdiagonal)=pfc_left_append_exists_oldcoefficientscoefficientdiagonalterm*pfc_right_append_exists_oldcoefficientscoefficientdiagonalterm))))))))))) /\ (((exists fs_u_pfc_append_exists_oldcoefficientscoefficientsum fs_v_pfc_append_exists_oldcoefficientscoefficientsum. ((((exists fs_h_pfc_append_exists_oldcoefficientscoefficientsum_body_start. fs_h_pfc_append_exists_oldcoefficientscoefficientsum_body_start + S (0) = S ((S (0)) * fs_v_pfc_append_exists_oldcoefficientscoefficientsum)) /\ exists fs_q_pfc_append_exists_oldcoefficientscoefficientsum_body_start. fs_u_pfc_append_exists_oldcoefficientscoefficientsum = fs_q_pfc_append_exists_oldcoefficientscoefficientsum_body_start * S ((S (0)) * fs_v_pfc_append_exists_oldcoefficientscoefficientsum) + (0))) /\ ((((exists fs_h_pfc_append_exists_oldcoefficientscoefficientsum_body_terminal. fs_h_pfc_append_exists_oldcoefficientscoefficientsum_body_terminal + S (pfc_natural_sum_append_exists_oldcoefficientscoefficient) = S ((S (S (pfc_index_append_exists_oldcoefficients))) * fs_v_pfc_append_exists_oldcoefficientscoefficientsum)) /\ exists fs_q_pfc_append_exists_oldcoefficientscoefficientsum_body_terminal. fs_u_pfc_append_exists_oldcoefficientscoefficientsum = fs_q_pfc_append_exists_oldcoefficientscoefficientsum_body_terminal * S ((S (S (pfc_index_append_exists_oldcoefficients))) * fs_v_pfc_append_exists_oldcoefficientscoefficientsum) + (pfc_natural_sum_append_exists_oldcoefficientscoefficient))) /\ forall fs_i_pfc_append_exists_oldcoefficientscoefficientsum_body_steps. (exists fs_lt_pfc_append_exists_oldcoefficientscoefficientsum_body_steps_bound. fs_lt_pfc_append_exists_oldcoefficientscoefficientsum_body_steps_bound + S fs_i_pfc_append_exists_oldcoefficientscoefficientsum_body_steps = S (pfc_index_append_exists_oldcoefficients)) -> exists fs_a_pfc_append_exists_oldcoefficientscoefficientsum_body_steps fs_r_pfc_append_exists_oldcoefficientscoefficientsum_body_steps fs_s_pfc_append_exists_oldcoefficientscoefficientsum_body_steps. ((((exists fs_h_pfc_append_exists_oldcoefficientscoefficientsum_body_steps_summand. fs_h_pfc_append_exists_oldcoefficientscoefficientsum_body_steps_summand + S (fs_a_pfc_append_exists_oldcoefficientscoefficientsum_body_steps) = S ((S (fs_i_pfc_append_exists_oldcoefficientscoefficientsum_body_steps)) * pfc_terms_scale_append_exists_oldcoefficientscoefficient)) /\ exists fs_q_pfc_append_exists_oldcoefficientscoefficientsum_body_steps_summand. pfc_terms_code_append_exists_oldcoefficientscoefficient = fs_q_pfc_append_exists_oldcoefficientscoefficientsum_body_steps_summand * S ((S (fs_i_pfc_append_exists_oldcoefficientscoefficientsum_body_steps)) * pfc_terms_scale_append_exists_oldcoefficientscoefficient) + (fs_a_pfc_append_exists_oldcoefficientscoefficientsum_body_steps))) /\ ((((exists fs_h_pfc_append_exists_oldcoefficientscoefficientsum_body_steps_partial. fs_h_pfc_append_exists_oldcoefficientscoefficientsum_body_steps_partial + S (fs_r_pfc_append_exists_oldcoefficientscoefficientsum_body_steps) = S ((S (fs_i_pfc_append_exists_oldcoefficientscoefficientsum_body_steps)) * fs_v_pfc_append_exists_oldcoefficientscoefficientsum)) /\ exists fs_q_pfc_append_exists_oldcoefficientscoefficientsum_body_steps_partial. fs_u_pfc_append_exists_oldcoefficientscoefficientsum = fs_q_pfc_append_exists_oldcoefficientscoefficientsum_body_steps_partial * S ((S (fs_i_pfc_append_exists_oldcoefficientscoefficientsum_body_steps)) * fs_v_pfc_append_exists_oldcoefficientscoefficientsum) + (fs_r_pfc_append_exists_oldcoefficientscoefficientsum_body_steps))) /\ ((((exists fs_h_pfc_append_exists_oldcoefficientscoefficientsum_body_steps_successor. fs_h_pfc_append_exists_oldcoefficientscoefficientsum_body_steps_successor + S (fs_s_pfc_append_exists_oldcoefficientscoefficientsum_body_steps) = S ((S (S fs_i_pfc_append_exists_oldcoefficientscoefficientsum_body_steps)) * fs_v_pfc_append_exists_oldcoefficientscoefficientsum)) /\ exists fs_q_pfc_append_exists_oldcoefficientscoefficientsum_body_steps_successor. fs_u_pfc_append_exists_oldcoefficientscoefficientsum = fs_q_pfc_append_exists_oldcoefficientscoefficientsum_body_steps_successor * S ((S (S fs_i_pfc_append_exists_oldcoefficientscoefficientsum_body_steps)) * fs_v_pfc_append_exists_oldcoefficientscoefficientsum) + (fs_s_pfc_append_exists_oldcoefficientscoefficientsum_body_steps))) /\ fs_s_pfc_append_exists_oldcoefficientscoefficientsum_body_steps = fs_r_pfc_append_exists_oldcoefficientscoefficientsum_body_steps + fs_a_pfc_append_exists_oldcoefficientscoefficientsum_body_steps)))))) /\ ((((exists pfa_gap_append_exists_oldcoefficientscoefficientresiduebound. pfa_gap_append_exists_oldcoefficientscoefficientresiduebound + S (pfc_value_append_exists_oldcoefficients) = (p)) /\ ((exists pfa_offset_left_append_exists_oldcoefficientscoefficientresiduecongruence pfa_offset_right_append_exists_oldcoefficientscoefficientresiduecongruence. (pfc_natural_sum_append_exists_oldcoefficientscoefficient) + (p) * pfa_offset_left_append_exists_oldcoefficientscoefficientresiduecongruence = (pfc_value_append_exists_oldcoefficients) + (p) * pfa_offset_right_append_exists_oldcoefficientscoefficientresiduecongruence))))))))))))))))))) -> (exists db dc K qb qc ub uc vb vc UB UC VB VC rb rc. ((forall mdr_i_pfp_append_exists_preserve mdr_a_pfp_append_exists_preserve. (exists mdr_gap_pfp_append_exists_preserveb. mdr_gap_pfp_append_exists_preserveb + S (mdr_i_pfp_append_exists_preserve) = (M)) -> (((exists ff_h_mdr_pfp_append_exists_preserveo. ff_h_mdr_pfp_append_exists_preserveo + S (mdr_a_pfp_append_exists_preserve) = S ((S (mdr_i_pfp_append_exists_preserve)) * bc)) /\ exists ff_q_mdr_pfp_append_exists_preserveo. bb = ff_q_mdr_pfp_append_exists_preserveo * S ((S (mdr_i_pfp_append_exists_preserve)) * bc) + (mdr_a_pfp_append_exists_preserve))) -> (((exists ff_h_mdr_pfp_append_exists_preserven. ff_h_mdr_pfp_append_exists_preserven + S (mdr_a_pfp_append_exists_preserve) = S ((S (mdr_i_pfp_append_exists_preserve)) * dc)) /\ exists ff_q_mdr_pfp_append_exists_preserven. db = ff_q_mdr_pfp_append_exists_preserven * S ((S (mdr_i_pfp_append_exists_preserve)) * dc) + (mdr_a_pfp_append_exists_preserve)))) /\ (((((exists ff_h_pfp_append_exists_last. ff_h_pfp_append_exists_last + S (c) = S ((S (M)) * dc)) /\ exists ff_q_pfp_append_exists_last. db = ff_q_pfp_append_exists_last * S ((S (M)) * dc) + (c))) /\ (((((forall fom_index_pfp_append_exists_newleft. (exists fom_gap_pfp_append_exists_newleft_index_bound. fom_gap_pfp_append_exists_newleft_index_bound + S (fom_index_pfp_append_exists_newleft) = L) -> exists fom_value_pfp_append_exists_newleft. ((((exists fom_beta_height_pfp_append_exists_newleft_entry. fom_beta_height_pfp_append_exists_newleft_entry + S (fom_value_pfp_append_exists_newleft) = S ((S (fom_index_pfp_append_exists_newleft)) * ac)) /\ exists fom_beta_quotient_pfp_append_exists_newleft_entry. ab = fom_beta_quotient_pfp_append_exists_newleft_entry * S ((S (fom_index_pfp_append_exists_newleft)) * ac) + (fom_value_pfp_append_exists_newleft))) /\ (exists fom_gap_pfp_append_exists_newleft_value_bound. fom_gap_pfp_append_exists_newleft_value_bound + S (fom_value_pfp_append_exists_newleft) = p))) /\ (((forall fom_index_pfp_append_exists_newright. (exists fom_gap_pfp_append_exists_newright_index_bound. fom_gap_pfp_append_exists_newright_index_bound + S (fom_index_pfp_append_exists_newright) = S M) -> exists fom_value_pfp_append_exists_newright. ((((exists fom_beta_height_pfp_append_exists_newright_entry. fom_beta_height_pfp_append_exists_newright_entry + S (fom_value_pfp_append_exists_newright) = S ((S (fom_index_pfp_append_exists_newright)) * dc)) /\ exists fom_beta_quotient_pfp_append_exists_newright_entry. db = fom_beta_quotient_pfp_append_exists_newright_entry * S ((S (fom_index_pfp_append_exists_newright)) * dc) + (fom_value_pfp_append_exists_newright))) /\ (exists fom_gap_pfp_append_exists_newright_value_bound. fom_gap_pfp_append_exists_newright_value_bound + S (fom_value_pfp_append_exists_newright) = p))) /\ (((((((L)=0 \/ (S M)=0) /\ (((K)=0)))) \/ (((~((L)=0)) /\ (((~((S M)=0)) /\ (((L)+(S M)=S (K)))))))) /\ ((forall pfc_index_append_exists_newcoefficients. (exists pfa_gap_append_exists_newcoefficientsbound. pfa_gap_append_exists_newcoefficientsbound + S (pfc_index_append_exists_newcoefficients) = (K)) -> exists pfc_value_append_exists_newcoefficients. ((((exists ff_h_pfp_append_exists_newcoefficientsentry. ff_h_pfp_append_exists_newcoefficientsentry + S (pfc_value_append_exists_newcoefficients) = S ((S (pfc_index_append_exists_newcoefficients)) * qc)) /\ exists ff_q_pfp_append_exists_newcoefficientsentry. qb = ff_q_pfp_append_exists_newcoefficientsentry * S ((S (pfc_index_append_exists_newcoefficients)) * qc) + (pfc_value_append_exists_newcoefficients))) /\ ((exists pfc_terms_code_append_exists_newcoefficientscoefficient pfc_terms_scale_append_exists_newcoefficientscoefficient pfc_natural_sum_append_exists_newcoefficientscoefficient. ((forall pfc_index_append_exists_newcoefficientscoefficientdiagonal. (exists pfa_gap_append_exists_newcoefficientscoefficientdiagonalbound. pfa_gap_append_exists_newcoefficientscoefficientdiagonalbound + S (pfc_index_append_exists_newcoefficientscoefficientdiagonal) = (S (pfc_index_append_exists_newcoefficients))) -> exists pfc_value_append_exists_newcoefficientscoefficientdiagonal. ((((exists ff_h_pfp_append_exists_newcoefficientscoefficientdiagonalentry. ff_h_pfp_append_exists_newcoefficientscoefficientdiagonalentry + S (pfc_value_append_exists_newcoefficientscoefficientdiagonal) = S ((S (pfc_index_append_exists_newcoefficientscoefficientdiagonal)) * pfc_terms_scale_append_exists_newcoefficientscoefficient)) /\ exists ff_q_pfp_append_exists_newcoefficientscoefficientdiagonalentry. pfc_terms_code_append_exists_newcoefficientscoefficient = ff_q_pfp_append_exists_newcoefficientscoefficientdiagonalentry * S ((S (pfc_index_append_exists_newcoefficientscoefficientdiagonal)) * pfc_terms_scale_append_exists_newcoefficientscoefficient) + (pfc_value_append_exists_newcoefficientscoefficientdiagonal))) /\ ((exists pfc_complement_append_exists_newcoefficientscoefficientdiagonalterm pfc_left_append_exists_newcoefficientscoefficientdiagonalterm pfc_right_append_exists_newcoefficientscoefficientdiagonalterm. (((pfc_index_append_exists_newcoefficientscoefficientdiagonal)+pfc_complement_append_exists_newcoefficientscoefficientdiagonalterm=(pfc_index_append_exists_newcoefficients)) /\ ((((((exists pfa_gap_append_exists_newcoefficientscoefficientdiagonaltermleftinside. pfa_gap_append_exists_newcoefficientscoefficientdiagonaltermleftinside + S (pfc_index_append_exists_newcoefficientscoefficientdiagonal) = (L)) /\ ((((exists ff_h_pfp_append_exists_newcoefficientscoefficientdiagonaltermleftentry. ff_h_pfp_append_exists_newcoefficientscoefficientdiagonaltermleftentry + S (pfc_left_append_exists_newcoefficientscoefficientdiagonalterm) = S ((S (pfc_index_append_exists_newcoefficientscoefficientdiagonal)) * ac)) /\ exists ff_q_pfp_append_exists_newcoefficientscoefficientdiagonaltermleftentry. ab = ff_q_pfp_append_exists_newcoefficientscoefficientdiagonaltermleftentry * S ((S (pfc_index_append_exists_newcoefficientscoefficientdiagonal)) * ac) + (pfc_left_append_exists_newcoefficientscoefficientdiagonalterm)))))) \/ (((exists pfc_gap_append_exists_newcoefficientscoefficientdiagonaltermleftoutside. pfc_gap_append_exists_newcoefficientscoefficientdiagonaltermleftoutside+(L)=(pfc_index_append_exists_newcoefficientscoefficientdiagonal)) /\ (((pfc_left_append_exists_newcoefficientscoefficientdiagonalterm)=0))))) /\ ((((((exists pfa_gap_append_exists_newcoefficientscoefficientdiagonaltermrightinside. pfa_gap_append_exists_newcoefficientscoefficientdiagonaltermrightinside + S (pfc_complement_append_exists_newcoefficientscoefficientdiagonalterm) = (S M)) /\ ((((exists ff_h_pfp_append_exists_newcoefficientscoefficientdiagonaltermrightentry. ff_h_pfp_append_exists_newcoefficientscoefficientdiagonaltermrightentry + S (pfc_right_append_exists_newcoefficientscoefficientdiagonalterm) = S ((S (pfc_complement_append_exists_newcoefficientscoefficientdiagonalterm)) * dc)) /\ exists ff_q_pfp_append_exists_newcoefficientscoefficientdiagonaltermrightentry. db = ff_q_pfp_append_exists_newcoefficientscoefficientdiagonaltermrightentry * S ((S (pfc_complement_append_exists_newcoefficientscoefficientdiagonalterm)) * dc) + (pfc_right_append_exists_newcoefficientscoefficientdiagonalterm)))))) \/ (((exists pfc_gap_append_exists_newcoefficientscoefficientdiagonaltermrightoutside. pfc_gap_append_exists_newcoefficientscoefficientdiagonaltermrightoutside+(S M)=(pfc_complement_append_exists_newcoefficientscoefficientdiagonalterm)) /\ (((pfc_right_append_exists_newcoefficientscoefficientdiagonalterm)=0))))) /\ (((pfc_value_append_exists_newcoefficientscoefficientdiagonal)=pfc_left_append_exists_newcoefficientscoefficientdiagonalterm*pfc_right_append_exists_newcoefficientscoefficientdiagonalterm))))))))))) /\ (((exists fs_u_pfc_append_exists_newcoefficientscoefficientsum fs_v_pfc_append_exists_newcoefficientscoefficientsum. ((((exists fs_h_pfc_append_exists_newcoefficientscoefficientsum_body_start. fs_h_pfc_append_exists_newcoefficientscoefficientsum_body_start + S (0) = S ((S (0)) * fs_v_pfc_append_exists_newcoefficientscoefficientsum)) /\ exists fs_q_pfc_append_exists_newcoefficientscoefficientsum_body_start. fs_u_pfc_append_exists_newcoefficientscoefficientsum = fs_q_pfc_append_exists_newcoefficientscoefficientsum_body_start * S ((S (0)) * fs_v_pfc_append_exists_newcoefficientscoefficientsum) + (0))) /\ ((((exists fs_h_pfc_append_exists_newcoefficientscoefficientsum_body_terminal. fs_h_pfc_append_exists_newcoefficientscoefficientsum_body_terminal + S (pfc_natural_sum_append_exists_newcoefficientscoefficient) = S ((S (S (pfc_index_append_exists_newcoefficients))) * fs_v_pfc_append_exists_newcoefficientscoefficientsum)) /\ exists fs_q_pfc_append_exists_newcoefficientscoefficientsum_body_terminal. fs_u_pfc_append_exists_newcoefficientscoefficientsum = fs_q_pfc_append_exists_newcoefficientscoefficientsum_body_terminal * S ((S (S (pfc_index_append_exists_newcoefficients))) * fs_v_pfc_append_exists_newcoefficientscoefficientsum) + (pfc_natural_sum_append_exists_newcoefficientscoefficient))) /\ forall fs_i_pfc_append_exists_newcoefficientscoefficientsum_body_steps. (exists fs_lt_pfc_append_exists_newcoefficientscoefficientsum_body_steps_bound. fs_lt_pfc_append_exists_newcoefficientscoefficientsum_body_steps_bound + S fs_i_pfc_append_exists_newcoefficientscoefficientsum_body_steps = S (pfc_index_append_exists_newcoefficients)) -> exists fs_a_pfc_append_exists_newcoefficientscoefficientsum_body_steps fs_r_pfc_append_exists_newcoefficientscoefficientsum_body_steps fs_s_pfc_append_exists_newcoefficientscoefficientsum_body_steps. ((((exists fs_h_pfc_append_exists_newcoefficientscoefficientsum_body_steps_summand. fs_h_pfc_append_exists_newcoefficientscoefficientsum_body_steps_summand + S (fs_a_pfc_append_exists_newcoefficientscoefficientsum_body_steps) = S ((S (fs_i_pfc_append_exists_newcoefficientscoefficientsum_body_steps)) * pfc_terms_scale_append_exists_newcoefficientscoefficient)) /\ exists fs_q_pfc_append_exists_newcoefficientscoefficientsum_body_steps_summand. pfc_terms_code_append_exists_newcoefficientscoefficient = fs_q_pfc_append_exists_newcoefficientscoefficientsum_body_steps_summand * S ((S (fs_i_pfc_append_exists_newcoefficientscoefficientsum_body_steps)) * pfc_terms_scale_append_exists_newcoefficientscoefficient) + (fs_a_pfc_append_exists_newcoefficientscoefficientsum_body_steps))) /\ ((((exists fs_h_pfc_append_exists_newcoefficientscoefficientsum_body_steps_partial. fs_h_pfc_append_exists_newcoefficientscoefficientsum_body_steps_partial + S (fs_r_pfc_append_exists_newcoefficientscoefficientsum_body_steps) = S ((S (fs_i_pfc_append_exists_newcoefficientscoefficientsum_body_steps)) * fs_v_pfc_append_exists_newcoefficientscoefficientsum)) /\ exists fs_q_pfc_append_exists_newcoefficientscoefficientsum_body_steps_partial. fs_u_pfc_append_exists_newcoefficientscoefficientsum = fs_q_pfc_append_exists_newcoefficientscoefficientsum_body_steps_partial * S ((S (fs_i_pfc_append_exists_newcoefficientscoefficientsum_body_steps)) * fs_v_pfc_append_exists_newcoefficientscoefficientsum) + (fs_r_pfc_append_exists_newcoefficientscoefficientsum_body_steps))) /\ ((((exists fs_h_pfc_append_exists_newcoefficientscoefficientsum_body_steps_successor. fs_h_pfc_append_exists_newcoefficientscoefficientsum_body_steps_successor + S (fs_s_pfc_append_exists_newcoefficientscoefficientsum_body_steps) = S ((S (S fs_i_pfc_append_exists_newcoefficientscoefficientsum_body_steps)) * fs_v_pfc_append_exists_newcoefficientscoefficientsum)) /\ exists fs_q_pfc_append_exists_newcoefficientscoefficientsum_body_steps_successor. fs_u_pfc_append_exists_newcoefficientscoefficientsum = fs_q_pfc_append_exists_newcoefficientscoefficientsum_body_steps_successor * S ((S (S fs_i_pfc_append_exists_newcoefficientscoefficientsum_body_steps)) * fs_v_pfc_append_exists_newcoefficientscoefficientsum) + (fs_s_pfc_append_exists_newcoefficientscoefficientsum_body_steps))) /\ fs_s_pfc_append_exists_newcoefficientscoefficientsum_body_steps = fs_r_pfc_append_exists_newcoefficientscoefficientsum_body_steps + fs_a_pfc_append_exists_newcoefficientscoefficientsum_body_steps)))))) /\ ((((exists pfa_gap_append_exists_newcoefficientscoefficientresiduebound. pfa_gap_append_exists_newcoefficientscoefficientresiduebound + S (pfc_value_append_exists_newcoefficients) = (p)) /\ ((exists pfa_offset_left_append_exists_newcoefficientscoefficientresiduecongruence pfa_offset_right_append_exists_newcoefficientscoefficientresiduecongruence. (pfc_natural_sum_append_exists_newcoefficientscoefficient) + (p) * pfa_offset_left_append_exists_newcoefficientscoefficientresiduecongruence = (pfc_value_append_exists_newcoefficients) + (p) * pfa_offset_right_append_exists_newcoefficientscoefficientresiduecongruence))))))))))))))))))) /\ (((((forall mdr_i_pfp_append_exists_result_shiftprefix mdr_a_pfp_append_exists_result_shiftprefix. (exists mdr_gap_pfp_append_exists_result_shiftprefixb. mdr_gap_pfp_append_exists_result_shiftprefixb + S (mdr_i_pfp_append_exists_result_shiftprefix) = (N)) -> (((exists ff_h_mdr_pfp_append_exists_result_shiftprefixo. ff_h_mdr_pfp_append_exists_result_shiftprefixo + S (mdr_a_pfp_append_exists_result_shiftprefix) = S ((S (mdr_i_pfp_append_exists_result_shiftprefix)) * pc)) /\ exists ff_q_mdr_pfp_append_exists_result_shiftprefixo. pb = ff_q_mdr_pfp_append_exists_result_shiftprefixo * S ((S (mdr_i_pfp_append_exists_result_shiftprefix)) * pc) + (mdr_a_pfp_append_exists_result_shiftprefix))) -> (((exists ff_h_mdr_pfp_append_exists_result_shiftprefixn. ff_h_mdr_pfp_append_exists_result_shiftprefixn + S (mdr_a_pfp_append_exists_result_shiftprefix) = S ((S (mdr_i_pfp_append_exists_result_shiftprefix)) * uc)) /\ exists ff_q_mdr_pfp_append_exists_result_shiftprefixn. ub = ff_q_mdr_pfp_append_exists_result_shiftprefixn * S ((S (mdr_i_pfp_append_exists_result_shiftprefix)) * uc) + (mdr_a_pfp_append_exists_result_shiftprefix)))) /\ ((((exists ff_h_pfp_append_exists_result_shiftlast. ff_h_pfp_append_exists_result_shiftlast + S (0) = S ((S (N)) * uc)) /\ exists ff_q_pfp_append_exists_result_shiftlast. ub = ff_q_pfp_append_exists_result_shiftlast * S ((S (N)) * uc) + (0)))))) /\ (((((exists pfa_gap_append_exists_result_scalescalar. pfa_gap_append_exists_result_scalescalar + S (c) = (p)) /\ ((forall pfp_index_append_exists_result_scale. (exists pfa_gap_append_exists_result_scaleindex. pfa_gap_append_exists_result_scaleindex + S (pfp_index_append_exists_result_scale) = (L)) -> exists pfp_source_append_exists_result_scale pfp_value_append_exists_result_scale. ((((exists ff_h_pfp_append_exists_result_scalesource. ff_h_pfp_append_exists_result_scalesource + S (pfp_source_append_exists_result_scale) = S ((S (pfp_index_append_exists_result_scale)) * ac)) /\ exists ff_q_pfp_append_exists_result_scalesource. ab = ff_q_pfp_append_exists_result_scalesource * S ((S (pfp_index_append_exists_result_scale)) * ac) + (pfp_source_append_exists_result_scale))) /\ (((((exists ff_h_pfp_append_exists_result_scaletarget. ff_h_pfp_append_exists_result_scaletarget + S (pfp_value_append_exists_result_scale) = S ((S (pfp_index_append_exists_result_scale)) * vc)) /\ exists ff_q_pfp_append_exists_result_scaletarget. vb = ff_q_pfp_append_exists_result_scaletarget * S ((S (pfp_index_append_exists_result_scale)) * vc) + (pfp_value_append_exists_result_scale))) /\ ((((exists pfa_gap_append_exists_result_scaleoperationleft. pfa_gap_append_exists_result_scaleoperationleft + S (c) = (p)) /\ (((exists pfa_gap_append_exists_result_scaleoperationright. pfa_gap_append_exists_result_scaleoperationright + S (pfp_source_append_exists_result_scale) = (p)) /\ ((((exists pfa_gap_append_exists_result_scaleoperationresultbound. pfa_gap_append_exists_result_scaleoperationresultbound + S (pfp_value_append_exists_result_scale) = (p)) /\ ((exists pfa_offset_left_append_exists_result_scaleoperationresultcongruence pfa_offset_right_append_exists_result_scaleoperationresultcongruence. ((c) * (pfp_source_append_exists_result_scale)) + (p) * pfa_offset_left_append_exists_result_scaleoperationresultcongruence = (pfp_value_append_exists_result_scale) + (p) * pfa_offset_right_append_exists_result_scaleoperationresultcongruence))))))))))))))))) /\ (((((forall pfp_repeat_index_append_exists_result_leftzeros. (exists pfa_gap_append_exists_result_leftzerosindex. pfa_gap_append_exists_result_leftzerosindex + S (pfp_repeat_index_append_exists_result_leftzeros) = (L)) -> (((exists ff_h_pfp_append_exists_result_leftzerosentry. ff_h_pfp_append_exists_result_leftzerosentry + S (0) = S ((S (pfp_repeat_index_append_exists_result_leftzeros)) * UC)) /\ exists ff_q_pfp_append_exists_result_leftzerosentry. UB = ff_q_pfp_append_exists_result_leftzerosentry * S ((S (pfp_repeat_index_append_exists_result_leftzeros)) * UC) + (0)))) /\ ((forall pfrep_index_append_exists_result_left pfrep_value_append_exists_result_left. (exists pfa_gap_append_exists_result_leftbound. pfa_gap_append_exists_result_leftbound + S (pfrep_index_append_exists_result_left) = (S N)) -> (((exists ff_h_pfp_append_exists_result_leftinput. ff_h_pfp_append_exists_result_leftinput + S (pfrep_value_append_exists_result_left) = S ((S (pfrep_index_append_exists_result_left)) * uc)) /\ exists ff_q_pfp_append_exists_result_leftinput. ub = ff_q_pfp_append_exists_result_leftinput * S ((S (pfrep_index_append_exists_result_left)) * uc) + (pfrep_value_append_exists_result_left))) -> (((exists ff_h_pfp_append_exists_result_leftoutput. ff_h_pfp_append_exists_result_leftoutput + S (pfrep_value_append_exists_result_left) = S ((S ((L)+pfrep_index_append_exists_result_left)) * UC)) /\ exists ff_q_pfp_append_exists_result_leftoutput. UB = ff_q_pfp_append_exists_result_leftoutput * S ((S ((L)+pfrep_index_append_exists_result_left)) * UC) + (pfrep_value_append_exists_result_left))))))) /\ (((((forall pfp_repeat_index_append_exists_result_rightzeros. (exists pfa_gap_append_exists_result_rightzerosindex. pfa_gap_append_exists_result_rightzerosindex + S (pfp_repeat_index_append_exists_result_rightzeros) = (S N)) -> (((exists ff_h_pfp_append_exists_result_rightzerosentry. ff_h_pfp_append_exists_result_rightzerosentry + S (0) = S ((S (pfp_repeat_index_append_exists_result_rightzeros)) * VC)) /\ exists ff_q_pfp_append_exists_result_rightzerosentry. VB = ff_q_pfp_append_exists_result_rightzerosentry * S ((S (pfp_repeat_index_append_exists_result_rightzeros)) * VC) + (0)))) /\ ((forall pfrep_index_append_exists_result_right pfrep_value_append_exists_result_right. (exists pfa_gap_append_exists_result_rightbound. pfa_gap_append_exists_result_rightbound + S (pfrep_index_append_exists_result_right) = (L)) -> (((exists ff_h_pfp_append_exists_result_rightinput. ff_h_pfp_append_exists_result_rightinput + S (pfrep_value_append_exists_result_right) = S ((S (pfrep_index_append_exists_result_right)) * vc)) /\ exists ff_q_pfp_append_exists_result_rightinput. vb = ff_q_pfp_append_exists_result_rightinput * S ((S (pfrep_index_append_exists_result_right)) * vc) + (pfrep_value_append_exists_result_right))) -> (((exists ff_h_pfp_append_exists_result_rightoutput. ff_h_pfp_append_exists_result_rightoutput + S (pfrep_value_append_exists_result_right) = S ((S ((S N)+pfrep_index_append_exists_result_right)) * VC)) /\ exists ff_q_pfp_append_exists_result_rightoutput. VB = ff_q_pfp_append_exists_result_rightoutput * S ((S ((S N)+pfrep_index_append_exists_result_right)) * VC) + (pfrep_value_append_exists_result_right))))))) /\ (((forall pfp_index_append_exists_result_sum. (exists pfa_gap_append_exists_result_sumindex. pfa_gap_append_exists_result_sumindex + S (pfp_index_append_exists_result_sum) = (L+S N)) -> exists pfp_left_append_exists_result_sum pfp_right_append_exists_result_sum pfp_value_append_exists_result_sum. ((((exists ff_h_pfp_append_exists_result_sumleft. ff_h_pfp_append_exists_result_sumleft + S (pfp_left_append_exists_result_sum) = S ((S (pfp_index_append_exists_result_sum)) * UC)) /\ exists ff_q_pfp_append_exists_result_sumleft. UB = ff_q_pfp_append_exists_result_sumleft * S ((S (pfp_index_append_exists_result_sum)) * UC) + (pfp_left_append_exists_result_sum))) /\ (((((exists ff_h_pfp_append_exists_result_sumright. ff_h_pfp_append_exists_result_sumright + S (pfp_right_append_exists_result_sum) = S ((S (pfp_index_append_exists_result_sum)) * VC)) /\ exists ff_q_pfp_append_exists_result_sumright. VB = ff_q_pfp_append_exists_result_sumright * S ((S (pfp_index_append_exists_result_sum)) * VC) + (pfp_right_append_exists_result_sum))) /\ (((((exists ff_h_pfp_append_exists_result_sumtarget. ff_h_pfp_append_exists_result_sumtarget + S (pfp_value_append_exists_result_sum) = S ((S (pfp_index_append_exists_result_sum)) * rc)) /\ exists ff_q_pfp_append_exists_result_sumtarget. rb = ff_q_pfp_append_exists_result_sumtarget * S ((S (pfp_index_append_exists_result_sum)) * rc) + (pfp_value_append_exists_result_sum))) /\ ((((exists pfa_gap_append_exists_result_sumoperationleft. pfa_gap_append_exists_result_sumoperationleft + S (pfp_left_append_exists_result_sum) = (p)) /\ (((exists pfa_gap_append_exists_result_sumoperationright. pfa_gap_append_exists_result_sumoperationright + S (pfp_right_append_exists_result_sum) = (p)) /\ ((((exists pfa_gap_append_exists_result_sumoperationresultbound. pfa_gap_append_exists_result_sumoperationresultbound + S (pfp_value_append_exists_result_sum) = (p)) /\ ((exists pfa_offset_left_append_exists_result_sumoperationresultcongruence pfa_offset_right_append_exists_result_sumoperationresultcongruence. ((pfp_left_append_exists_result_sum) + (pfp_right_append_exists_result_sum)) + (p) * pfa_offset_left_append_exists_result_sumoperationresultcongruence = (pfp_value_append_exists_result_sum) + (p) * pfa_offset_right_append_exists_result_sumoperationresultcongruence)))))))))))))))) /\ ((forall pfrep_power_append_exists_equivalence pfrep_left_append_exists_equivalence pfrep_right_append_exists_equivalence. ((exists pfrep_position_append_exists_equivalencefirst. ((pfrep_position_append_exists_equivalencefirst+S (pfrep_power_append_exists_equivalence)=(K)) /\ ((((exists ff_h_pfp_append_exists_equivalencefirstentry. ff_h_pfp_append_exists_equivalencefirstentry + S (pfrep_left_append_exists_equivalence) = S ((S (pfrep_position_append_exists_equivalencefirst)) * qc)) /\ exists ff_q_pfp_append_exists_equivalencefirstentry. qb = ff_q_pfp_append_exists_equivalencefirstentry * S ((S (pfrep_position_append_exists_equivalencefirst)) * qc) + (pfrep_left_append_exists_equivalence)))))) \/ (((exists pfrep_gap_append_exists_equivalencefirstoutside. pfrep_gap_append_exists_equivalencefirstoutside+(K)=(pfrep_power_append_exists_equivalence)) /\ (((pfrep_left_append_exists_equivalence)=0))))) -> ((exists pfrep_position_append_exists_equivalencesecond. ((pfrep_position_append_exists_equivalencesecond+S (pfrep_power_append_exists_equivalence)=(L+S N)) /\ ((((exists ff_h_pfp_append_exists_equivalencesecondentry. ff_h_pfp_append_exists_equivalencesecondentry + S (pfrep_right_append_exists_equivalence) = S ((S (pfrep_position_append_exists_equivalencesecond)) * rc)) /\ exists ff_q_pfp_append_exists_equivalencesecondentry. rb = ff_q_pfp_append_exists_equivalencesecondentry * S ((S (pfrep_position_append_exists_equivalencesecond)) * rc) + (pfrep_right_append_exists_equivalence)))))) \/ (((exists pfrep_gap_append_exists_equivalencesecondoutside. pfrep_gap_append_exists_equivalencesecondoutside+(L+S N)=(pfrep_power_append_exists_equivalence)) /\ (((pfrep_right_append_exists_equivalence)=0))))) -> pfrep_left_append_exists_equivalence=pfrep_right_append_exists_equivalence))))))))))))))))))

Complete tactic proof in conservative notation

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

180 script commands · 40 reading checkpoints · 7 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 pb
  10. L10
    intro pc
02Fix variables and assumptionsL11–14

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

  1. L11
    intro N
  2. L12
    intro hp
  3. L13
    intro hc
  4. L14
    intro hP
03Establish hp0L15–20

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

  1. L15
    have hp0 : ~(p=0)
  2. L16
    intro hz
  3. L17
    specialize prime_nonzero (p)
  4. L18
    apply prime_nonzero
  5. L19
    exact hp
  6. L20
    exact hz
04Establish holdL21–22

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

  1. L21
    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. L22
    exact hP
05Separate the logical casesL23–25

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

  1. L23
    cases hold
  2. L24
    cases hold_right
  3. L25
    cases hold_right_right
06Establish hdL26–31

Establish this local claim before using it. It is not an additional assumption. The following proof commands apply beta prefix extend.

  1. L26
    have hd : ∃ db. ∃ dc. BetaAt(db,dc,M,c) ∧ BetaPrefixEqual(bb,bc,db,dc,M)Definitions: BetaAt(db,dc,M,c)BetaPrefixEqual(bb,bc,db,dc,M)Original native command in the exact edition
  2. L27
    specialize beta_prefix_extend (M)
  3. L28
    specialize beta_prefix_extend (bb)
  4. L29
    specialize beta_prefix_extend (bc)
  5. L30
    specialize beta_prefix_extend (c)
  6. L31
    apply beta_prefix_extend
07Separate the logical casesL32–34

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

  1. L32
    cases hd
  2. L33
    cases hd_witness
  3. L34
    cases hd_witness_witness
08Establish hboundedL35–44

Establish this local claim before using it. It is not an additional assumption. The following proof commands apply matrix rank bounded prefix extend.

  1. L35
    have hbounded : BetaPrefixInto(x,x1,S M,p)Definitions: BetaPrefixInto(x,x1,S M,p)Original native command in the exact edition
  2. L36
    specialize matrix_rank_bounded_prefix_extend (x)
  3. L37
    specialize matrix_rank_bounded_prefix_extend (x1)
  4. L38
    specialize matrix_rank_bounded_prefix_extend (M)
  5. L39
    specialize matrix_rank_bounded_prefix_extend (p)
  6. L40
    specialize matrix_rank_bounded_prefix_extend (c)
  7. L41
    apply matrix_rank_bounded_prefix_extend
  8. L42
    specialize matrix_rank_bounded_prefix_transport (bb)
  9. L43
    specialize matrix_rank_bounded_prefix_transport (bc)
  10. L44
    specialize matrix_rank_bounded_prefix_transport (x)
09Use earlier factsL45–52

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

  1. L45
    specialize matrix_rank_bounded_prefix_transport (x1)
  2. L46
    specialize matrix_rank_bounded_prefix_transport (M)
  3. L47
    specialize matrix_rank_bounded_prefix_transport (p)
  4. L48
    apply matrix_rank_bounded_prefix_transport
  5. L49
    exact hd_witness_witness_right
  6. L50
    exact hold_right_left
  7. L51
    exact hd_witness_witness_left
  8. L52
    exact hc
10Establish hlL53–56

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

  1. L53
    have hl : ∃ K. PolynomialProductLength(L,S M,K)Definitions: PolynomialProductLength(L,S M,K)Original native command in the exact edition
  2. L54
    specialize polynomial_product_length_exists (L)
  3. L55
    specialize polynomial_product_length_exists (S M)
  4. L56
    apply polynomial_product_length_exists
11Separate the logical casesL57–57

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

  1. L57
    cases hl
12Establish hQL58–67

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. L58
    have hQ : ∃ qb. ∃ qc. FpPolyProduct(p,ab,ac,L,x,x1,S M,qb,qc,x2)Definitions: FpPolyProduct(p,ab,ac,L,x,x1,S M,qb,qc,x2)Original native command in the exact edition
  2. L59
    specialize prime_field_polynomial_convolution_at_length_exists (p)
  3. L60
    specialize prime_field_polynomial_convolution_at_length_exists (ab)
  4. L61
    specialize prime_field_polynomial_convolution_at_length_exists (ac)
  5. L62
    specialize prime_field_polynomial_convolution_at_length_exists (L)
  6. L63
    specialize prime_field_polynomial_convolution_at_length_exists (x)
  7. L64
    specialize prime_field_polynomial_convolution_at_length_exists (x1)
  8. L65
    specialize prime_field_polynomial_convolution_at_length_exists (S M)
  9. L66
    specialize prime_field_polynomial_convolution_at_length_exists (x2)
  10. L67
    apply prime_field_polynomial_convolution_at_length_exists
13Use earlier factsL68–71

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

  1. L68
    exact hp0
  2. L69
    exact hold_left
  3. L70
    exact hbounded
  4. L71
    exact hl_witness
14Separate the logical casesL72–73

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

  1. L72
    cases hQ
  2. L73
    cases hQ_witness
15Establish hAL74–83

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

  1. L74
    have hA : ∃ ub. ∃ uc. ∃ vb. ∃ vc. ∃ UB. ∃ UC. ∃ VB. ∃ VC. ∃ rb. ∃ rc. 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))))Definitions: 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)Original native command in the exact edition
  2. L75
    specialize prime_field_polynomial_shift_scale_aligned_sum_exists (p)
  3. L76
    specialize prime_field_polynomial_shift_scale_aligned_sum_exists (c)
  4. L77
    specialize prime_field_polynomial_shift_scale_aligned_sum_exists (ab)
  5. L78
    specialize prime_field_polynomial_shift_scale_aligned_sum_exists (ac)
  6. L79
    specialize prime_field_polynomial_shift_scale_aligned_sum_exists (L)
  7. L80
    specialize prime_field_polynomial_shift_scale_aligned_sum_exists (pb)
  8. L81
    specialize prime_field_polynomial_shift_scale_aligned_sum_exists (pc)
  9. L82
    specialize prime_field_polynomial_shift_scale_aligned_sum_exists (N)
  10. L83
    apply prime_field_polynomial_shift_scale_aligned_sum_exists
16Use earlier factsL84–93

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

  1. L84
    exact hp
  2. L85
    exact hc
  3. L86
    exact hold_left
  4. L87
    specialize prime_field_polynomial_convolution_bounded (p)
  5. L88
    specialize prime_field_polynomial_convolution_bounded (ab)
  6. L89
    specialize prime_field_polynomial_convolution_bounded (ac)
  7. L90
    specialize prime_field_polynomial_convolution_bounded (L)
  8. L91
    specialize prime_field_polynomial_convolution_bounded (bb)
  9. L92
    specialize prime_field_polynomial_convolution_bounded (bc)
  10. L93
    specialize prime_field_polynomial_convolution_bounded (M)
17Use earlier factsL94–98

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

  1. L94
    specialize prime_field_polynomial_convolution_bounded (pb)
  2. L95
    specialize prime_field_polynomial_convolution_bounded (pc)
  3. L96
    specialize prime_field_polynomial_convolution_bounded (N)
  4. L97
    apply prime_field_polynomial_convolution_bounded
  5. L98
    exact hP
18Separate the logical casesL99–108

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

  1. L99
    cases hA
  2. L100
    cases hA_witness
  3. L101
    cases hA_witness_witness
  4. L102
    cases hA_witness_witness_witness
  5. L103
    cases hA_witness_witness_witness_witness
  6. L104
    cases hA_witness_witness_witness_witness_witness
  7. L105
    cases hA_witness_witness_witness_witness_witness_witness
  8. L106
    cases hA_witness_witness_witness_witness_witness_witness_witness
  9. L107
    cases hA_witness_witness_witness_witness_witness_witness_witness_witness
  10. L108
    cases hA_witness_witness_witness_witness_witness_witness_witness_witness_witness
19Separate the logical casesL109–112

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

  1. L109
    cases hA_witness_witness_witness_witness_witness_witness_witness_witness_witness_witness
  2. L110
    cases hA_witness_witness_witness_witness_witness_witness_witness_witness_witness_witness_right
  3. L111
    cases hA_witness_witness_witness_witness_witness_witness_witness_witness_witness_witness_right_right
  4. L112
    cases hA_witness_witness_witness_witness_witness_witness_witness_witness_witness_witness_right_right_right
20Construct an explicit witnessL113–122

Supply the displayed value, then prove that it has the required property.

  1. L113
    exists x
  2. L114
    exists x1
  3. L115
    exists x2
  4. L116
    exists x3
  5. L117
    exists x4
  6. L118
    exists x5
  7. L119
    exists x6
  8. L120
    exists x7
  9. L121
    exists x8
  10. L122
    exists x9
21Construct an explicit witnessL123–127

Supply the displayed value, then prove that it has the required property.

  1. L123
    exists x10
  2. L124
    exists x11
  3. L125
    exists x12
  4. L126
    exists x13
  5. L127
    exists x14
22Separate the logical casesL128–128

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

  1. L128
    split
23Use earlier factsL129–129

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

  1. L129
    exact hd_witness_witness_right
24Separate the logical casesL130–130

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

  1. L130
    split
25Use earlier factsL131–131

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

  1. L131
    exact hd_witness_witness_left
26Separate the logical casesL132–132

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

  1. L132
    split
27Use earlier factsL133–133

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

  1. L133
    exact hQ_witness_witness
28Separate the logical casesL134–134

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

  1. L134
    split
29Use earlier factsL135–135

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

  1. L135
    exact hA_witness_witness_witness_witness_witness_witness_witness_witness_witness_witness_left
30Separate the logical casesL136–136

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

  1. L136
    split
31Use earlier factsL137–137

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

  1. L137
    exact hA_witness_witness_witness_witness_witness_witness_witness_witness_witness_witness_right_left
32Separate the logical casesL138–138

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

  1. L138
    split
33Use earlier factsL139–139

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

  1. L139
    exact hA_witness_witness_witness_witness_witness_witness_witness_witness_witness_witness_right_right_left
34Separate the logical casesL140–140

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

  1. L140
    split
35Use earlier factsL141–141

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

  1. L141
    exact hA_witness_witness_witness_witness_witness_witness_witness_witness_witness_witness_right_right_right_left
36Separate the logical casesL142–142

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

  1. L142
    split
37Use earlier factsL143–152

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

  1. L143
    exact hA_witness_witness_witness_witness_witness_witness_witness_witness_witness_witness_right_right_right_right
  2. L144
    specialize prime_field_polynomial_convolution_right_append_equivalent (p)
  3. L145
    specialize prime_field_polynomial_convolution_right_append_equivalent (ab)
  4. L146
    specialize prime_field_polynomial_convolution_right_append_equivalent (ac)
  5. L147
    specialize prime_field_polynomial_convolution_right_append_equivalent (L)
  6. L148
    specialize prime_field_polynomial_convolution_right_append_equivalent (bb)
  7. L149
    specialize prime_field_polynomial_convolution_right_append_equivalent (bc)
  8. L150
    specialize prime_field_polynomial_convolution_right_append_equivalent (M)
  9. L151
    specialize prime_field_polynomial_convolution_right_append_equivalent (c)
  10. L152
    specialize prime_field_polynomial_convolution_right_append_equivalent (x)
38Use earlier factsL153–162

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

  1. L153
    specialize prime_field_polynomial_convolution_right_append_equivalent (x1)
  2. L154
    specialize prime_field_polynomial_convolution_right_append_equivalent (pb)
  3. L155
    specialize prime_field_polynomial_convolution_right_append_equivalent (pc)
  4. L156
    specialize prime_field_polynomial_convolution_right_append_equivalent (N)
  5. L157
    specialize prime_field_polynomial_convolution_right_append_equivalent (x3)
  6. L158
    specialize prime_field_polynomial_convolution_right_append_equivalent (x4)
  7. L159
    specialize prime_field_polynomial_convolution_right_append_equivalent (x2)
  8. L160
    specialize prime_field_polynomial_convolution_right_append_equivalent (x5)
  9. L161
    specialize prime_field_polynomial_convolution_right_append_equivalent (x6)
  10. L162
    specialize prime_field_polynomial_convolution_right_append_equivalent (x7)
39Use earlier factsL163–172

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

  1. L163
    specialize prime_field_polynomial_convolution_right_append_equivalent (x8)
  2. L164
    specialize prime_field_polynomial_convolution_right_append_equivalent (x9)
  3. L165
    specialize prime_field_polynomial_convolution_right_append_equivalent (x10)
  4. L166
    specialize prime_field_polynomial_convolution_right_append_equivalent (x11)
  5. L167
    specialize prime_field_polynomial_convolution_right_append_equivalent (x12)
  6. L168
    specialize prime_field_polynomial_convolution_right_append_equivalent (x13)
  7. L169
    specialize prime_field_polynomial_convolution_right_append_equivalent (x14)
  8. L170
    apply prime_field_polynomial_convolution_right_append_equivalent
  9. L171
    exact hp
  10. L172
    exact hd_witness_witness_right
40Use earlier factsL173–180

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

  1. L173
    exact hd_witness_witness_left
  2. L174
    exact hP
  3. L175
    exact hQ_witness_witness
  4. L176
    exact hA_witness_witness_witness_witness_witness_witness_witness_witness_witness_witness_left
  5. L177
    exact hA_witness_witness_witness_witness_witness_witness_witness_witness_witness_witness_right_left
  6. L178
    exact hA_witness_witness_witness_witness_witness_witness_witness_witness_witness_witness_right_right_left
  7. L179
    exact hA_witness_witness_witness_witness_witness_witness_witness_witness_witness_witness_right_right_right_left
  8. L180
    exact hA_witness_witness_witness_witness_witness_witness_witness_witness_witness_witness_right_right_right_right

Library-wide reading audit

Original defined command ledger · 180 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 pb
  10. 0010intro pc
  11. 0011intro N
  12. 0012intro hp
  13. 0013intro hc
  14. 0014intro hP
  15. 0015have hp0 : ~(p=0)
  16. 0016intro hz
  17. 0017specialize prime_nonzero (p)
  18. 0018apply prime_nonzero
  19. 0019exact hp
  20. 0020exact hz
  21. 0021have hold : FpPolyProduct(p,ab,ac,L,bb,bc,M,pb,pc,N)
  22. 0022exact hP
  23. 0023cases hold
  24. 0024cases hold_right
  25. 0025cases hold_right_right
  26. 0026have hd : ∃ db. ∃ dc. BetaAt(db,dc,M,c)BetaPrefixEqual(bb,bc,db,dc,M)
  27. 0027specialize beta_prefix_extend (M)
  28. 0028specialize beta_prefix_extend (bb)
  29. 0029specialize beta_prefix_extend (bc)
  30. 0030specialize beta_prefix_extend (c)
  31. 0031apply beta_prefix_extend
  32. 0032cases hd
  33. 0033cases hd_witness
  34. 0034cases hd_witness_witness
  35. 0035have hbounded : BetaPrefixInto(x,x1,S M,p)
  36. 0036specialize matrix_rank_bounded_prefix_extend (x)
  37. 0037specialize matrix_rank_bounded_prefix_extend (x1)
  38. 0038specialize matrix_rank_bounded_prefix_extend (M)
  39. 0039specialize matrix_rank_bounded_prefix_extend (p)
  40. 0040specialize matrix_rank_bounded_prefix_extend (c)
  41. 0041apply matrix_rank_bounded_prefix_extend
  42. 0042specialize matrix_rank_bounded_prefix_transport (bb)
  43. 0043specialize matrix_rank_bounded_prefix_transport (bc)
  44. 0044specialize matrix_rank_bounded_prefix_transport (x)
  45. 0045specialize matrix_rank_bounded_prefix_transport (x1)
  46. 0046specialize matrix_rank_bounded_prefix_transport (M)
  47. 0047specialize matrix_rank_bounded_prefix_transport (p)
  48. 0048apply matrix_rank_bounded_prefix_transport
  49. 0049exact hd_witness_witness_right
  50. 0050exact hold_right_left
  51. 0051exact hd_witness_witness_left
  52. 0052exact hc
  53. 0053have hl : ∃ K. PolynomialProductLength(L,S M,K)
  54. 0054specialize polynomial_product_length_exists (L)
  55. 0055specialize polynomial_product_length_exists (S M)
  56. 0056apply polynomial_product_length_exists
  57. 0057cases hl
  58. 0058have hQ : ∃ qb. ∃ qc. FpPolyProduct(p,ab,ac,L,x,x1,S M,qb,qc,x2)
  59. 0059specialize prime_field_polynomial_convolution_at_length_exists (p)
  60. 0060specialize prime_field_polynomial_convolution_at_length_exists (ab)
  61. 0061specialize prime_field_polynomial_convolution_at_length_exists (ac)
  62. 0062specialize prime_field_polynomial_convolution_at_length_exists (L)
  63. 0063specialize prime_field_polynomial_convolution_at_length_exists (x)
  64. 0064specialize prime_field_polynomial_convolution_at_length_exists (x1)
  65. 0065specialize prime_field_polynomial_convolution_at_length_exists (S M)
  66. 0066specialize prime_field_polynomial_convolution_at_length_exists (x2)
  67. 0067apply prime_field_polynomial_convolution_at_length_exists
  68. 0068exact hp0
  69. 0069exact hold_left
  70. 0070exact hbounded
  71. 0071exact hl_witness
  72. 0072cases hQ
  73. 0073cases hQ_witness
  74. 0074have hA : ∃ ub. ∃ uc. ∃ vb. ∃ vc. ∃ UB. ∃ UC. ∃ VB. ∃ VC. ∃ rb. ∃ rc. 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))))
  75. 0075specialize prime_field_polynomial_shift_scale_aligned_sum_exists (p)
  76. 0076specialize prime_field_polynomial_shift_scale_aligned_sum_exists (c)
  77. 0077specialize prime_field_polynomial_shift_scale_aligned_sum_exists (ab)
  78. 0078specialize prime_field_polynomial_shift_scale_aligned_sum_exists (ac)
  79. 0079specialize prime_field_polynomial_shift_scale_aligned_sum_exists (L)
  80. 0080specialize prime_field_polynomial_shift_scale_aligned_sum_exists (pb)
  81. 0081specialize prime_field_polynomial_shift_scale_aligned_sum_exists (pc)
  82. 0082specialize prime_field_polynomial_shift_scale_aligned_sum_exists (N)
  83. 0083apply prime_field_polynomial_shift_scale_aligned_sum_exists
  84. 0084exact hp
  85. 0085exact hc
  86. 0086exact hold_left
  87. 0087specialize prime_field_polynomial_convolution_bounded (p)
  88. 0088specialize prime_field_polynomial_convolution_bounded (ab)
  89. 0089specialize prime_field_polynomial_convolution_bounded (ac)
  90. 0090specialize prime_field_polynomial_convolution_bounded (L)
  91. 0091specialize prime_field_polynomial_convolution_bounded (bb)
  92. 0092specialize prime_field_polynomial_convolution_bounded (bc)
  93. 0093specialize prime_field_polynomial_convolution_bounded (M)
  94. 0094specialize prime_field_polynomial_convolution_bounded (pb)
  95. 0095specialize prime_field_polynomial_convolution_bounded (pc)
  96. 0096specialize prime_field_polynomial_convolution_bounded (N)
  97. 0097apply prime_field_polynomial_convolution_bounded
  98. 0098exact hP
  99. 0099cases hA
  100. 0100cases hA_witness
  101. 0101cases hA_witness_witness
  102. 0102cases hA_witness_witness_witness
  103. 0103cases hA_witness_witness_witness_witness
  104. 0104cases hA_witness_witness_witness_witness_witness
  105. 0105cases hA_witness_witness_witness_witness_witness_witness
  106. 0106cases hA_witness_witness_witness_witness_witness_witness_witness
  107. 0107cases hA_witness_witness_witness_witness_witness_witness_witness_witness
  108. 0108cases hA_witness_witness_witness_witness_witness_witness_witness_witness_witness
  109. 0109cases hA_witness_witness_witness_witness_witness_witness_witness_witness_witness_witness
  110. 0110cases hA_witness_witness_witness_witness_witness_witness_witness_witness_witness_witness_right
  111. 0111cases hA_witness_witness_witness_witness_witness_witness_witness_witness_witness_witness_right_right
  112. 0112cases hA_witness_witness_witness_witness_witness_witness_witness_witness_witness_witness_right_right_right
  113. 0113exists x
  114. 0114exists x1
  115. 0115exists x2
  116. 0116exists x3
  117. 0117exists x4
  118. 0118exists x5
  119. 0119exists x6
  120. 0120exists x7
  121. 0121exists x8
  122. 0122exists x9
  123. 0123exists x10
  124. 0124exists x11
  125. 0125exists x12
  126. 0126exists x13
  127. 0127exists x14
  128. 0128split
  129. 0129exact hd_witness_witness_right
  130. 0130split
  131. 0131exact hd_witness_witness_left
  132. 0132split
  133. 0133exact hQ_witness_witness
  134. 0134split
  135. 0135exact hA_witness_witness_witness_witness_witness_witness_witness_witness_witness_witness_left
  136. 0136split
  137. 0137exact hA_witness_witness_witness_witness_witness_witness_witness_witness_witness_witness_right_left
  138. 0138split
  139. 0139exact hA_witness_witness_witness_witness_witness_witness_witness_witness_witness_witness_right_right_left
  140. 0140split
  141. 0141exact hA_witness_witness_witness_witness_witness_witness_witness_witness_witness_witness_right_right_right_left
  142. 0142split
  143. 0143exact hA_witness_witness_witness_witness_witness_witness_witness_witness_witness_witness_right_right_right_right
  144. 0144specialize prime_field_polynomial_convolution_right_append_equivalent (p)
  145. 0145specialize prime_field_polynomial_convolution_right_append_equivalent (ab)
  146. 0146specialize prime_field_polynomial_convolution_right_append_equivalent (ac)
  147. 0147specialize prime_field_polynomial_convolution_right_append_equivalent (L)
  148. 0148specialize prime_field_polynomial_convolution_right_append_equivalent (bb)
  149. 0149specialize prime_field_polynomial_convolution_right_append_equivalent (bc)
  150. 0150specialize prime_field_polynomial_convolution_right_append_equivalent (M)
  151. 0151specialize prime_field_polynomial_convolution_right_append_equivalent (c)
  152. 0152specialize prime_field_polynomial_convolution_right_append_equivalent (x)
  153. 0153specialize prime_field_polynomial_convolution_right_append_equivalent (x1)
  154. 0154specialize prime_field_polynomial_convolution_right_append_equivalent (pb)
  155. 0155specialize prime_field_polynomial_convolution_right_append_equivalent (pc)
  156. 0156specialize prime_field_polynomial_convolution_right_append_equivalent (N)
  157. 0157specialize prime_field_polynomial_convolution_right_append_equivalent (x3)
  158. 0158specialize prime_field_polynomial_convolution_right_append_equivalent (x4)
  159. 0159specialize prime_field_polynomial_convolution_right_append_equivalent (x2)
  160. 0160specialize prime_field_polynomial_convolution_right_append_equivalent (x5)
  161. 0161specialize prime_field_polynomial_convolution_right_append_equivalent (x6)
  162. 0162specialize prime_field_polynomial_convolution_right_append_equivalent (x7)
  163. 0163specialize prime_field_polynomial_convolution_right_append_equivalent (x8)
  164. 0164specialize prime_field_polynomial_convolution_right_append_equivalent (x9)
  165. 0165specialize prime_field_polynomial_convolution_right_append_equivalent (x10)
  166. 0166specialize prime_field_polynomial_convolution_right_append_equivalent (x11)
  167. 0167specialize prime_field_polynomial_convolution_right_append_equivalent (x12)
  168. 0168specialize prime_field_polynomial_convolution_right_append_equivalent (x13)
  169. 0169specialize prime_field_polynomial_convolution_right_append_equivalent (x14)
  170. 0170apply prime_field_polynomial_convolution_right_append_equivalent
  171. 0171exact hp
  172. 0172exact hd_witness_witness_right
  173. 0173exact hd_witness_witness_left
  174. 0174exact hP
  175. 0175exact hQ_witness_witness
  176. 0176exact hA_witness_witness_witness_witness_witness_witness_witness_witness_witness_witness_left
  177. 0177exact hA_witness_witness_witness_witness_witness_witness_witness_witness_witness_witness_right_left
  178. 0178exact hA_witness_witness_witness_witness_witness_witness_witness_witness_witness_witness_right_right_left
  179. 0179exact hA_witness_witness_witness_witness_witness_witness_witness_witness_witness_witness_right_right_right_left
  180. 0180exact hA_witness_witness_witness_witness_witness_witness_witness_witness_witness_witness_right_right_right_right