Current library: Alpha v34, 4,223 checked-use theorems; Stable remains 432. Historical first admissions, original proof editions, and non-admitted aliases are preserved.
Exact expanded first-order arithmetic statement
forall p ab ac L. (~((p) = 1) /\ forall pfa_factor_left_unit_exists_prime pfa_factor_right_unit_exists_prime. (p) = pfa_factor_left_unit_exists_prime * pfa_factor_right_unit_exists_prime -> pfa_factor_left_unit_exists_prime = 1 \/ pfa_factor_right_unit_exists_prime = 1) -> (forall fom_index_pfp_unit_exists_A. (exists fom_gap_pfp_unit_exists_A_index_bound. fom_gap_pfp_unit_exists_A_index_bound + S (fom_index_pfp_unit_exists_A) = L) -> exists fom_value_pfp_unit_exists_A. ((((exists fom_beta_height_pfp_unit_exists_A_entry. fom_beta_height_pfp_unit_exists_A_entry + S (fom_value_pfp_unit_exists_A) = S ((S (fom_index_pfp_unit_exists_A)) * ac)) /\ exists fom_beta_quotient_pfp_unit_exists_A_entry. ab = fom_beta_quotient_pfp_unit_exists_A_entry * S ((S (fom_index_pfp_unit_exists_A)) * ac) + (fom_value_pfp_unit_exists_A))) /\ (exists fom_gap_pfp_unit_exists_A_value_bound. fom_gap_pfp_unit_exists_A_value_bound + S (fom_value_pfp_unit_exists_A) = p))) -> (exists ub uc cb cc. ((forall fom_index_pfp_unit_exists_result_unit_bound. (exists fom_gap_pfp_unit_exists_result_unit_bound_index_bound. fom_gap_pfp_unit_exists_result_unit_bound_index_bound + S (fom_index_pfp_unit_exists_result_unit_bound) = 1) -> exists fom_value_pfp_unit_exists_result_unit_bound. ((((exists fom_beta_height_pfp_unit_exists_result_unit_bound_entry. fom_beta_height_pfp_unit_exists_result_unit_bound_entry + S (fom_value_pfp_unit_exists_result_unit_bound) = S ((S (fom_index_pfp_unit_exists_result_unit_bound)) * uc)) /\ exists fom_beta_quotient_pfp_unit_exists_result_unit_bound_entry. ub = fom_beta_quotient_pfp_unit_exists_result_unit_bound_entry * S ((S (fom_index_pfp_unit_exists_result_unit_bound)) * uc) + (fom_value_pfp_unit_exists_result_unit_bound))) /\ (exists fom_gap_pfp_unit_exists_result_unit_bound_value_bound. fom_gap_pfp_unit_exists_result_unit_bound_value_bound + S (fom_value_pfp_unit_exists_result_unit_bound) = p))) /\ (((((exists ff_h_pfp_unit_exists_result_unit_value. ff_h_pfp_unit_exists_result_unit_value + S (1) = S ((S (0)) * uc)) /\ exists ff_q_pfp_unit_exists_result_unit_value. ub = ff_q_pfp_unit_exists_result_unit_value * S ((S (0)) * uc) + (1))) /\ (((((forall fom_index_pfp_unit_exists_result_productleft. (exists fom_gap_pfp_unit_exists_result_productleft_index_bound. fom_gap_pfp_unit_exists_result_productleft_index_bound + S (fom_index_pfp_unit_exists_result_productleft) = 1) -> exists fom_value_pfp_unit_exists_result_productleft. ((((exists fom_beta_height_pfp_unit_exists_result_productleft_entry. fom_beta_height_pfp_unit_exists_result_productleft_entry + S (fom_value_pfp_unit_exists_result_productleft) = S ((S (fom_index_pfp_unit_exists_result_productleft)) * uc)) /\ exists fom_beta_quotient_pfp_unit_exists_result_productleft_entry. ub = fom_beta_quotient_pfp_unit_exists_result_productleft_entry * S ((S (fom_index_pfp_unit_exists_result_productleft)) * uc) + (fom_value_pfp_unit_exists_result_productleft))) /\ (exists fom_gap_pfp_unit_exists_result_productleft_value_bound. fom_gap_pfp_unit_exists_result_productleft_value_bound + S (fom_value_pfp_unit_exists_result_productleft) = p))) /\ (((forall fom_index_pfp_unit_exists_result_productright. (exists fom_gap_pfp_unit_exists_result_productright_index_bound. fom_gap_pfp_unit_exists_result_productright_index_bound + S (fom_index_pfp_unit_exists_result_productright) = L) -> exists fom_value_pfp_unit_exists_result_productright. ((((exists fom_beta_height_pfp_unit_exists_result_productright_entry. fom_beta_height_pfp_unit_exists_result_productright_entry + S (fom_value_pfp_unit_exists_result_productright) = S ((S (fom_index_pfp_unit_exists_result_productright)) * ac)) /\ exists fom_beta_quotient_pfp_unit_exists_result_productright_entry. ab = fom_beta_quotient_pfp_unit_exists_result_productright_entry * S ((S (fom_index_pfp_unit_exists_result_productright)) * ac) + (fom_value_pfp_unit_exists_result_productright))) /\ (exists fom_gap_pfp_unit_exists_result_productright_value_bound. fom_gap_pfp_unit_exists_result_productright_value_bound + S (fom_value_pfp_unit_exists_result_productright) = p))) /\ (((((((1)=0 \/ (L)=0) /\ (((L)=0)))) \/ (((~((1)=0)) /\ (((~((L)=0)) /\ (((1)+(L)=S (L)))))))) /\ ((forall pfc_index_unit_exists_result_productcoefficients. (exists pfa_gap_unit_exists_result_productcoefficientsbound. pfa_gap_unit_exists_result_productcoefficientsbound + S (pfc_index_unit_exists_result_productcoefficients) = (L)) -> exists pfc_value_unit_exists_result_productcoefficients. ((((exists ff_h_pfp_unit_exists_result_productcoefficientsentry. ff_h_pfp_unit_exists_result_productcoefficientsentry + S (pfc_value_unit_exists_result_productcoefficients) = S ((S (pfc_index_unit_exists_result_productcoefficients)) * cc)) /\ exists ff_q_pfp_unit_exists_result_productcoefficientsentry. cb = ff_q_pfp_unit_exists_result_productcoefficientsentry * S ((S (pfc_index_unit_exists_result_productcoefficients)) * cc) + (pfc_value_unit_exists_result_productcoefficients))) /\ ((exists pfc_terms_code_unit_exists_result_productcoefficientscoefficient pfc_terms_scale_unit_exists_result_productcoefficientscoefficient pfc_natural_sum_unit_exists_result_productcoefficientscoefficient. ((forall pfc_index_unit_exists_result_productcoefficientscoefficientdiagonal. (exists pfa_gap_unit_exists_result_productcoefficientscoefficientdiagonalbound. pfa_gap_unit_exists_result_productcoefficientscoefficientdiagonalbound + S (pfc_index_unit_exists_result_productcoefficientscoefficientdiagonal) = (S (pfc_index_unit_exists_result_productcoefficients))) -> exists pfc_value_unit_exists_result_productcoefficientscoefficientdiagonal. ((((exists ff_h_pfp_unit_exists_result_productcoefficientscoefficientdiagonalentry. ff_h_pfp_unit_exists_result_productcoefficientscoefficientdiagonalentry + S (pfc_value_unit_exists_result_productcoefficientscoefficientdiagonal) = S ((S (pfc_index_unit_exists_result_productcoefficientscoefficientdiagonal)) * pfc_terms_scale_unit_exists_result_productcoefficientscoefficient)) /\ exists ff_q_pfp_unit_exists_result_productcoefficientscoefficientdiagonalentry. pfc_terms_code_unit_exists_result_productcoefficientscoefficient = ff_q_pfp_unit_exists_result_productcoefficientscoefficientdiagonalentry * S ((S (pfc_index_unit_exists_result_productcoefficientscoefficientdiagonal)) * pfc_terms_scale_unit_exists_result_productcoefficientscoefficient) + (pfc_value_unit_exists_result_productcoefficientscoefficientdiagonal))) /\ ((exists pfc_complement_unit_exists_result_productcoefficientscoefficientdiagonalterm pfc_left_unit_exists_result_productcoefficientscoefficientdiagonalterm pfc_right_unit_exists_result_productcoefficientscoefficientdiagonalterm. (((pfc_index_unit_exists_result_productcoefficientscoefficientdiagonal)+pfc_complement_unit_exists_result_productcoefficientscoefficientdiagonalterm=(pfc_index_unit_exists_result_productcoefficients)) /\ ((((((exists pfa_gap_unit_exists_result_productcoefficientscoefficientdiagonaltermleftinside. pfa_gap_unit_exists_result_productcoefficientscoefficientdiagonaltermleftinside + S (pfc_index_unit_exists_result_productcoefficientscoefficientdiagonal) = (1)) /\ ((((exists ff_h_pfp_unit_exists_result_productcoefficientscoefficientdiagonaltermleftentry. ff_h_pfp_unit_exists_result_productcoefficientscoefficientdiagonaltermleftentry + S (pfc_left_unit_exists_result_productcoefficientscoefficientdiagonalterm) = S ((S (pfc_index_unit_exists_result_productcoefficientscoefficientdiagonal)) * uc)) /\ exists ff_q_pfp_unit_exists_result_productcoefficientscoefficientdiagonaltermleftentry. ub = ff_q_pfp_unit_exists_result_productcoefficientscoefficientdiagonaltermleftentry * S ((S (pfc_index_unit_exists_result_productcoefficientscoefficientdiagonal)) * uc) + (pfc_left_unit_exists_result_productcoefficientscoefficientdiagonalterm)))))) \/ (((exists pfc_gap_unit_exists_result_productcoefficientscoefficientdiagonaltermleftoutside. pfc_gap_unit_exists_result_productcoefficientscoefficientdiagonaltermleftoutside+(1)=(pfc_index_unit_exists_result_productcoefficientscoefficientdiagonal)) /\ (((pfc_left_unit_exists_result_productcoefficientscoefficientdiagonalterm)=0))))) /\ ((((((exists pfa_gap_unit_exists_result_productcoefficientscoefficientdiagonaltermrightinside. pfa_gap_unit_exists_result_productcoefficientscoefficientdiagonaltermrightinside + S (pfc_complement_unit_exists_result_productcoefficientscoefficientdiagonalterm) = (L)) /\ ((((exists ff_h_pfp_unit_exists_result_productcoefficientscoefficientdiagonaltermrightentry. ff_h_pfp_unit_exists_result_productcoefficientscoefficientdiagonaltermrightentry + S (pfc_right_unit_exists_result_productcoefficientscoefficientdiagonalterm) = S ((S (pfc_complement_unit_exists_result_productcoefficientscoefficientdiagonalterm)) * ac)) /\ exists ff_q_pfp_unit_exists_result_productcoefficientscoefficientdiagonaltermrightentry. ab = ff_q_pfp_unit_exists_result_productcoefficientscoefficientdiagonaltermrightentry * S ((S (pfc_complement_unit_exists_result_productcoefficientscoefficientdiagonalterm)) * ac) + (pfc_right_unit_exists_result_productcoefficientscoefficientdiagonalterm)))))) \/ (((exists pfc_gap_unit_exists_result_productcoefficientscoefficientdiagonaltermrightoutside. pfc_gap_unit_exists_result_productcoefficientscoefficientdiagonaltermrightoutside+(L)=(pfc_complement_unit_exists_result_productcoefficientscoefficientdiagonalterm)) /\ (((pfc_right_unit_exists_result_productcoefficientscoefficientdiagonalterm)=0))))) /\ (((pfc_value_unit_exists_result_productcoefficientscoefficientdiagonal)=pfc_left_unit_exists_result_productcoefficientscoefficientdiagonalterm*pfc_right_unit_exists_result_productcoefficientscoefficientdiagonalterm))))))))))) /\ (((exists fs_u_pfc_unit_exists_result_productcoefficientscoefficientsum fs_v_pfc_unit_exists_result_productcoefficientscoefficientsum. ((((exists fs_h_pfc_unit_exists_result_productcoefficientscoefficientsum_body_start. fs_h_pfc_unit_exists_result_productcoefficientscoefficientsum_body_start + S (0) = S ((S (0)) * fs_v_pfc_unit_exists_result_productcoefficientscoefficientsum)) /\ exists fs_q_pfc_unit_exists_result_productcoefficientscoefficientsum_body_start. fs_u_pfc_unit_exists_result_productcoefficientscoefficientsum = fs_q_pfc_unit_exists_result_productcoefficientscoefficientsum_body_start * S ((S (0)) * fs_v_pfc_unit_exists_result_productcoefficientscoefficientsum) + (0))) /\ ((((exists fs_h_pfc_unit_exists_result_productcoefficientscoefficientsum_body_terminal. fs_h_pfc_unit_exists_result_productcoefficientscoefficientsum_body_terminal + S (pfc_natural_sum_unit_exists_result_productcoefficientscoefficient) = S ((S (S (pfc_index_unit_exists_result_productcoefficients))) * fs_v_pfc_unit_exists_result_productcoefficientscoefficientsum)) /\ exists fs_q_pfc_unit_exists_result_productcoefficientscoefficientsum_body_terminal. fs_u_pfc_unit_exists_result_productcoefficientscoefficientsum = fs_q_pfc_unit_exists_result_productcoefficientscoefficientsum_body_terminal * S ((S (S (pfc_index_unit_exists_result_productcoefficients))) * fs_v_pfc_unit_exists_result_productcoefficientscoefficientsum) + (pfc_natural_sum_unit_exists_result_productcoefficientscoefficient))) /\ forall fs_i_pfc_unit_exists_result_productcoefficientscoefficientsum_body_steps. (exists fs_lt_pfc_unit_exists_result_productcoefficientscoefficientsum_body_steps_bound. fs_lt_pfc_unit_exists_result_productcoefficientscoefficientsum_body_steps_bound + S fs_i_pfc_unit_exists_result_productcoefficientscoefficientsum_body_steps = S (pfc_index_unit_exists_result_productcoefficients)) -> exists fs_a_pfc_unit_exists_result_productcoefficientscoefficientsum_body_steps fs_r_pfc_unit_exists_result_productcoefficientscoefficientsum_body_steps fs_s_pfc_unit_exists_result_productcoefficientscoefficientsum_body_steps. ((((exists fs_h_pfc_unit_exists_result_productcoefficientscoefficientsum_body_steps_summand. fs_h_pfc_unit_exists_result_productcoefficientscoefficientsum_body_steps_summand + S (fs_a_pfc_unit_exists_result_productcoefficientscoefficientsum_body_steps) = S ((S (fs_i_pfc_unit_exists_result_productcoefficientscoefficientsum_body_steps)) * pfc_terms_scale_unit_exists_result_productcoefficientscoefficient)) /\ exists fs_q_pfc_unit_exists_result_productcoefficientscoefficientsum_body_steps_summand. pfc_terms_code_unit_exists_result_productcoefficientscoefficient = fs_q_pfc_unit_exists_result_productcoefficientscoefficientsum_body_steps_summand * S ((S (fs_i_pfc_unit_exists_result_productcoefficientscoefficientsum_body_steps)) * pfc_terms_scale_unit_exists_result_productcoefficientscoefficient) + (fs_a_pfc_unit_exists_result_productcoefficientscoefficientsum_body_steps))) /\ ((((exists fs_h_pfc_unit_exists_result_productcoefficientscoefficientsum_body_steps_partial. fs_h_pfc_unit_exists_result_productcoefficientscoefficientsum_body_steps_partial + S (fs_r_pfc_unit_exists_result_productcoefficientscoefficientsum_body_steps) = S ((S (fs_i_pfc_unit_exists_result_productcoefficientscoefficientsum_body_steps)) * fs_v_pfc_unit_exists_result_productcoefficientscoefficientsum)) /\ exists fs_q_pfc_unit_exists_result_productcoefficientscoefficientsum_body_steps_partial. fs_u_pfc_unit_exists_result_productcoefficientscoefficientsum = fs_q_pfc_unit_exists_result_productcoefficientscoefficientsum_body_steps_partial * S ((S (fs_i_pfc_unit_exists_result_productcoefficientscoefficientsum_body_steps)) * fs_v_pfc_unit_exists_result_productcoefficientscoefficientsum) + (fs_r_pfc_unit_exists_result_productcoefficientscoefficientsum_body_steps))) /\ ((((exists fs_h_pfc_unit_exists_result_productcoefficientscoefficientsum_body_steps_successor. fs_h_pfc_unit_exists_result_productcoefficientscoefficientsum_body_steps_successor + S (fs_s_pfc_unit_exists_result_productcoefficientscoefficientsum_body_steps) = S ((S (S fs_i_pfc_unit_exists_result_productcoefficientscoefficientsum_body_steps)) * fs_v_pfc_unit_exists_result_productcoefficientscoefficientsum)) /\ exists fs_q_pfc_unit_exists_result_productcoefficientscoefficientsum_body_steps_successor. fs_u_pfc_unit_exists_result_productcoefficientscoefficientsum = fs_q_pfc_unit_exists_result_productcoefficientscoefficientsum_body_steps_successor * S ((S (S fs_i_pfc_unit_exists_result_productcoefficientscoefficientsum_body_steps)) * fs_v_pfc_unit_exists_result_productcoefficientscoefficientsum) + (fs_s_pfc_unit_exists_result_productcoefficientscoefficientsum_body_steps))) /\ fs_s_pfc_unit_exists_result_productcoefficientscoefficientsum_body_steps = fs_r_pfc_unit_exists_result_productcoefficientscoefficientsum_body_steps + fs_a_pfc_unit_exists_result_productcoefficientscoefficientsum_body_steps)))))) /\ ((((exists pfa_gap_unit_exists_result_productcoefficientscoefficientresiduebound. pfa_gap_unit_exists_result_productcoefficientscoefficientresiduebound + S (pfc_value_unit_exists_result_productcoefficients) = (p)) /\ ((exists pfa_offset_left_unit_exists_result_productcoefficientscoefficientresiduecongruence pfa_offset_right_unit_exists_result_productcoefficientscoefficientresiduecongruence. (pfc_natural_sum_unit_exists_result_productcoefficientscoefficient) + (p) * pfa_offset_left_unit_exists_result_productcoefficientscoefficientresiduecongruence = (pfc_value_unit_exists_result_productcoefficients) + (p) * pfa_offset_right_unit_exists_result_productcoefficientscoefficientresiduecongruence))))))))))))))))))) /\ ((forall pfrep_power_unit_exists_result_equivalent pfrep_left_unit_exists_result_equivalent pfrep_right_unit_exists_result_equivalent. ((exists pfrep_position_unit_exists_result_equivalentfirst. ((pfrep_position_unit_exists_result_equivalentfirst+S (pfrep_power_unit_exists_result_equivalent)=(L)) /\ ((((exists ff_h_pfp_unit_exists_result_equivalentfirstentry. ff_h_pfp_unit_exists_result_equivalentfirstentry + S (pfrep_left_unit_exists_result_equivalent) = S ((S (pfrep_position_unit_exists_result_equivalentfirst)) * cc)) /\ exists ff_q_pfp_unit_exists_result_equivalentfirstentry. cb = ff_q_pfp_unit_exists_result_equivalentfirstentry * S ((S (pfrep_position_unit_exists_result_equivalentfirst)) * cc) + (pfrep_left_unit_exists_result_equivalent)))))) \/ (((exists pfrep_gap_unit_exists_result_equivalentfirstoutside. pfrep_gap_unit_exists_result_equivalentfirstoutside+(L)=(pfrep_power_unit_exists_result_equivalent)) /\ (((pfrep_left_unit_exists_result_equivalent)=0))))) -> ((exists pfrep_position_unit_exists_result_equivalentsecond. ((pfrep_position_unit_exists_result_equivalentsecond+S (pfrep_power_unit_exists_result_equivalent)=(L)) /\ ((((exists ff_h_pfp_unit_exists_result_equivalentsecondentry. ff_h_pfp_unit_exists_result_equivalentsecondentry + S (pfrep_right_unit_exists_result_equivalent) = S ((S (pfrep_position_unit_exists_result_equivalentsecond)) * ac)) /\ exists ff_q_pfp_unit_exists_result_equivalentsecondentry. ab = ff_q_pfp_unit_exists_result_equivalentsecondentry * S ((S (pfrep_position_unit_exists_result_equivalentsecond)) * ac) + (pfrep_right_unit_exists_result_equivalent)))))) \/ (((exists pfrep_gap_unit_exists_result_equivalentsecondoutside. pfrep_gap_unit_exists_result_equivalentsecondoutside+(L)=(pfrep_power_unit_exists_result_equivalent)) /\ (((pfrep_right_unit_exists_result_equivalent)=0))))) -> pfrep_left_unit_exists_result_equivalent=pfrep_right_unit_exists_result_equivalent))))))))Constructive proof overview
Generated structural guide
Construct an actual canonical length-one unit and its actual length-L left product, formally equal to A. The proper length is zero when A is empty.
The unchanged tactic script uses 9 declared prerequisites and contains 81 exact native proof lines.
Alpha v34 checked-use · first admitted v34 · independently kernel and Lean verified; not Stable
Proof neighborhood
Direct dependencies
prime_nonzero Alpha theorem; checked-use authorized prime_field_polynomial_repeat_exists Alpha theorem; checked-use authorized prime_two_le Alpha theorem; checked-use authorized zero_add Alpha theorem; checked-use authorized prime_field_polynomial_convolution_at_length_exists Alpha theorem; checked-use authorized eq_decidable Alpha theorem; checked-use authorized succ_ne_zero Alpha theorem; checked-use authorized add_succ_left Alpha theorem; checked-use authorized PG0032 prime_field_polynomial_convolution_left_unit_equivalentDirect dependents
Formal native tactic body
Dependencies are introduced as named hypotheses before line 1. Local theorem links identify exact declared prerequisites. This exact body belongs to a complete independently kernel-checked constructive proof bundle and has Alpha checked-use authority; it does not imply Stable membership.
Read the argument
Proof checkpoints
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.
Named ingredients (1)
01Fix variables and assumptionsL1–6
02Establish hp0L7–12
03Establish huL13–20
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply prime field polynomial repeat exists.
- L13
have hu : ∃ ub. ∃ uc. BetaPrefixInto(ub,uc,1,p) ∧ Repeat(ub,uc,1,1)Definitions: BetaPrefixIntoRepeat - L14
specialize prime_field_polynomial_repeat_exists (p) - L15
specialize prime_field_polynomial_repeat_exists (1) - L16
specialize prime_field_polynomial_repeat_exists (1) - L17
apply prime_field_polynomial_repeat_exists - L18
specialize prime_two_le (p) - L19
apply prime_two_le - L20
exact hp
04Separate the logical casesL21–23
05Establish honeL24–26
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply hu witness witness right.
06Construct an explicit witnessL27–27
Supply the displayed value, then prove that it has the required property.
- L27
exists 0
07Use earlier factsL28–28
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L28
apply zero_add
08Establish hcL29–38
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.
- L29
have hc : ∃ cb. ∃ cc. FpPolyProduct(p,x,x1,1,ab,ac,L,cb,cc,L)Definitions: FpPolyProduct - L30
specialize prime_field_polynomial_convolution_at_length_exists (p) - L31
specialize prime_field_polynomial_convolution_at_length_exists (x) - L32
specialize prime_field_polynomial_convolution_at_length_exists (x1) - L33
specialize prime_field_polynomial_convolution_at_length_exists (1) - L34
specialize prime_field_polynomial_convolution_at_length_exists (ab) - L35
specialize prime_field_polynomial_convolution_at_length_exists (ac) - L36
specialize prime_field_polynomial_convolution_at_length_exists (L) - L37
specialize prime_field_polynomial_convolution_at_length_exists (L) - L38
apply prime_field_polynomial_convolution_at_length_exists
09Use earlier factsL39–41
10Establish hzeroL42–45
11Separate the logical casesL46–49
12Use earlier factsL50–51
13Separate the logical casesL52–53
14Use earlier factsL54–55
15Separate the logical casesL56–56
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L56
split
16Use earlier factsL57–57
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L57
exact hzero_right
17Calculate and transport equalitiesL58–58
Carry out the recorded arithmetic or equality steps; inspect the exact commands for their direction and premises.
- L58
simp [add_succ_left,zero_add]
18Separate the logical casesL59–60
19Construct an explicit witnessL61–64
20Separate the logical casesL65–65
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L65
split
21Use earlier factsL66–66
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L66
exact hu_witness_witness_left
22Separate the logical casesL67–67
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L67
split
23Use earlier factsL68–68
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L68
exact hone
24Separate the logical casesL69–69
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L69
split
25Use earlier factsL70–79
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L70
exact hc_witness_witness - L71
specialize prime_field_polynomial_convolution_left_unit_equivalent (p) - L72
specialize prime_field_polynomial_convolution_left_unit_equivalent (x) - L73
specialize prime_field_polynomial_convolution_left_unit_equivalent (x1) - L74
specialize prime_field_polynomial_convolution_left_unit_equivalent (ab) - L75
specialize prime_field_polynomial_convolution_left_unit_equivalent (ac) - L76
specialize prime_field_polynomial_convolution_left_unit_equivalent (L) - L77
specialize prime_field_polynomial_convolution_left_unit_equivalent (x2) - L78
specialize prime_field_polynomial_convolution_left_unit_equivalent (x3) - L79
apply prime_field_polynomial_convolution_left_unit_equivalent
Original exact command ledger · 81 lines
- 0001
intro p - 0002
intro ab - 0003
intro ac - 0004
intro L - 0005
intro hp - 0006
intro hA - 0007
have hp0 : ~(p=0) - 0008
intro hz - 0009
specialize prime_nonzero (p) - 0010
apply prime_nonzero - 0011
exact hp - 0012
exact hz - 0013
have hu : exists ub uc. ((forall fom_index_pfp_unit_exists_bound. (exists fom_gap_pfp_unit_exists_bound_index_bound. fom_gap_pfp_unit_exists_bound_index_bound + S (fom_index_pfp_unit_exists_bound) = 1) -> exists fom_value_pfp_unit_exists_bound. ((((exists fom_beta_height_pfp_unit_exists_bound_entry. fom_beta_height_pfp_unit_exists_bound_entry + S (fom_value_pfp_unit_exists_bound) = S ((S (fom_index_pfp_unit_exists_bound)) * uc)) /\ exists fom_beta_quotient_pfp_unit_exists_bound_entry. ub = fom_beta_quotient_pfp_unit_exists_bound_entry * S ((S (fom_index_pfp_unit_exists_bound)) * uc) + (fom_value_pfp_unit_exists_bound))) /\ (exists fom_gap_pfp_unit_exists_bound_value_bound. fom_gap_pfp_unit_exists_bound_value_bound + S (fom_value_pfp_unit_exists_bound) = p))) /\ ((forall pfp_repeat_index_unit_exists_repeat. (exists pfa_gap_unit_exists_repeatindex. pfa_gap_unit_exists_repeatindex + S (pfp_repeat_index_unit_exists_repeat) = (1)) -> (((exists ff_h_pfp_unit_exists_repeatentry. ff_h_pfp_unit_exists_repeatentry + S (1) = S ((S (pfp_repeat_index_unit_exists_repeat)) * uc)) /\ exists ff_q_pfp_unit_exists_repeatentry. ub = ff_q_pfp_unit_exists_repeatentry * S ((S (pfp_repeat_index_unit_exists_repeat)) * uc) + (1)))))) - 0014
specialize prime_field_polynomial_repeat_exists (p) - 0015
specialize prime_field_polynomial_repeat_exists (1) - 0016
specialize prime_field_polynomial_repeat_exists (1) - 0017
apply prime_field_polynomial_repeat_exists - 0018
specialize prime_two_le (p) - 0019
apply prime_two_le - 0020
exact hp - 0021
cases hu - 0022
cases hu_witness - 0023
cases hu_witness_witness - 0024
have hone : ((exists ff_h_pfp_unit_exists_value. ff_h_pfp_unit_exists_value + S (1) = S ((S (0)) * x1)) /\ exists ff_q_pfp_unit_exists_value. x = ff_q_pfp_unit_exists_value * S ((S (0)) * x1) + (1)) - 0025
specialize hu_witness_witness_right (0) - 0026
apply hu_witness_witness_right - 0027
exists 0 - 0028
apply zero_add - 0029
have hc : exists cb cc. (((forall fom_index_pfp_unit_exists_chosenleft. (exists fom_gap_pfp_unit_exists_chosenleft_index_bound. fom_gap_pfp_unit_exists_chosenleft_index_bound + S (fom_index_pfp_unit_exists_chosenleft) = 1) -> exists fom_value_pfp_unit_exists_chosenleft. ((((exists fom_beta_height_pfp_unit_exists_chosenleft_entry. fom_beta_height_pfp_unit_exists_chosenleft_entry + S (fom_value_pfp_unit_exists_chosenleft) = S ((S (fom_index_pfp_unit_exists_chosenleft)) * x1)) /\ exists fom_beta_quotient_pfp_unit_exists_chosenleft_entry. x = fom_beta_quotient_pfp_unit_exists_chosenleft_entry * S ((S (fom_index_pfp_unit_exists_chosenleft)) * x1) + (fom_value_pfp_unit_exists_chosenleft))) /\ (exists fom_gap_pfp_unit_exists_chosenleft_value_bound. fom_gap_pfp_unit_exists_chosenleft_value_bound + S (fom_value_pfp_unit_exists_chosenleft) = p))) /\ (((forall fom_index_pfp_unit_exists_chosenright. (exists fom_gap_pfp_unit_exists_chosenright_index_bound. fom_gap_pfp_unit_exists_chosenright_index_bound + S (fom_index_pfp_unit_exists_chosenright) = L) -> exists fom_value_pfp_unit_exists_chosenright. ((((exists fom_beta_height_pfp_unit_exists_chosenright_entry. fom_beta_height_pfp_unit_exists_chosenright_entry + S (fom_value_pfp_unit_exists_chosenright) = S ((S (fom_index_pfp_unit_exists_chosenright)) * ac)) /\ exists fom_beta_quotient_pfp_unit_exists_chosenright_entry. ab = fom_beta_quotient_pfp_unit_exists_chosenright_entry * S ((S (fom_index_pfp_unit_exists_chosenright)) * ac) + (fom_value_pfp_unit_exists_chosenright))) /\ (exists fom_gap_pfp_unit_exists_chosenright_value_bound. fom_gap_pfp_unit_exists_chosenright_value_bound + S (fom_value_pfp_unit_exists_chosenright) = p))) /\ (((((((1)=0 \/ (L)=0) /\ (((L)=0)))) \/ (((~((1)=0)) /\ (((~((L)=0)) /\ (((1)+(L)=S (L)))))))) /\ ((forall pfc_index_unit_exists_chosencoefficients. (exists pfa_gap_unit_exists_chosencoefficientsbound. pfa_gap_unit_exists_chosencoefficientsbound + S (pfc_index_unit_exists_chosencoefficients) = (L)) -> exists pfc_value_unit_exists_chosencoefficients. ((((exists ff_h_pfp_unit_exists_chosencoefficientsentry. ff_h_pfp_unit_exists_chosencoefficientsentry + S (pfc_value_unit_exists_chosencoefficients) = S ((S (pfc_index_unit_exists_chosencoefficients)) * cc)) /\ exists ff_q_pfp_unit_exists_chosencoefficientsentry. cb = ff_q_pfp_unit_exists_chosencoefficientsentry * S ((S (pfc_index_unit_exists_chosencoefficients)) * cc) + (pfc_value_unit_exists_chosencoefficients))) /\ ((exists pfc_terms_code_unit_exists_chosencoefficientscoefficient pfc_terms_scale_unit_exists_chosencoefficientscoefficient pfc_natural_sum_unit_exists_chosencoefficientscoefficient. ((forall pfc_index_unit_exists_chosencoefficientscoefficientdiagonal. (exists pfa_gap_unit_exists_chosencoefficientscoefficientdiagonalbound. pfa_gap_unit_exists_chosencoefficientscoefficientdiagonalbound + S (pfc_index_unit_exists_chosencoefficientscoefficientdiagonal) = (S (pfc_index_unit_exists_chosencoefficients))) -> exists pfc_value_unit_exists_chosencoefficientscoefficientdiagonal. ((((exists ff_h_pfp_unit_exists_chosencoefficientscoefficientdiagonalentry. ff_h_pfp_unit_exists_chosencoefficientscoefficientdiagonalentry + S (pfc_value_unit_exists_chosencoefficientscoefficientdiagonal) = S ((S (pfc_index_unit_exists_chosencoefficientscoefficientdiagonal)) * pfc_terms_scale_unit_exists_chosencoefficientscoefficient)) /\ exists ff_q_pfp_unit_exists_chosencoefficientscoefficientdiagonalentry. pfc_terms_code_unit_exists_chosencoefficientscoefficient = ff_q_pfp_unit_exists_chosencoefficientscoefficientdiagonalentry * S ((S (pfc_index_unit_exists_chosencoefficientscoefficientdiagonal)) * pfc_terms_scale_unit_exists_chosencoefficientscoefficient) + (pfc_value_unit_exists_chosencoefficientscoefficientdiagonal))) /\ ((exists pfc_complement_unit_exists_chosencoefficientscoefficientdiagonalterm pfc_left_unit_exists_chosencoefficientscoefficientdiagonalterm pfc_right_unit_exists_chosencoefficientscoefficientdiagonalterm. (((pfc_index_unit_exists_chosencoefficientscoefficientdiagonal)+pfc_complement_unit_exists_chosencoefficientscoefficientdiagonalterm=(pfc_index_unit_exists_chosencoefficients)) /\ ((((((exists pfa_gap_unit_exists_chosencoefficientscoefficientdiagonaltermleftinside. pfa_gap_unit_exists_chosencoefficientscoefficientdiagonaltermleftinside + S (pfc_index_unit_exists_chosencoefficientscoefficientdiagonal) = (1)) /\ ((((exists ff_h_pfp_unit_exists_chosencoefficientscoefficientdiagonaltermleftentry. ff_h_pfp_unit_exists_chosencoefficientscoefficientdiagonaltermleftentry + S (pfc_left_unit_exists_chosencoefficientscoefficientdiagonalterm) = S ((S (pfc_index_unit_exists_chosencoefficientscoefficientdiagonal)) * x1)) /\ exists ff_q_pfp_unit_exists_chosencoefficientscoefficientdiagonaltermleftentry. x = ff_q_pfp_unit_exists_chosencoefficientscoefficientdiagonaltermleftentry * S ((S (pfc_index_unit_exists_chosencoefficientscoefficientdiagonal)) * x1) + (pfc_left_unit_exists_chosencoefficientscoefficientdiagonalterm)))))) \/ (((exists pfc_gap_unit_exists_chosencoefficientscoefficientdiagonaltermleftoutside. pfc_gap_unit_exists_chosencoefficientscoefficientdiagonaltermleftoutside+(1)=(pfc_index_unit_exists_chosencoefficientscoefficientdiagonal)) /\ (((pfc_left_unit_exists_chosencoefficientscoefficientdiagonalterm)=0))))) /\ ((((((exists pfa_gap_unit_exists_chosencoefficientscoefficientdiagonaltermrightinside. pfa_gap_unit_exists_chosencoefficientscoefficientdiagonaltermrightinside + S (pfc_complement_unit_exists_chosencoefficientscoefficientdiagonalterm) = (L)) /\ ((((exists ff_h_pfp_unit_exists_chosencoefficientscoefficientdiagonaltermrightentry. ff_h_pfp_unit_exists_chosencoefficientscoefficientdiagonaltermrightentry + S (pfc_right_unit_exists_chosencoefficientscoefficientdiagonalterm) = S ((S (pfc_complement_unit_exists_chosencoefficientscoefficientdiagonalterm)) * ac)) /\ exists ff_q_pfp_unit_exists_chosencoefficientscoefficientdiagonaltermrightentry. ab = ff_q_pfp_unit_exists_chosencoefficientscoefficientdiagonaltermrightentry * S ((S (pfc_complement_unit_exists_chosencoefficientscoefficientdiagonalterm)) * ac) + (pfc_right_unit_exists_chosencoefficientscoefficientdiagonalterm)))))) \/ (((exists pfc_gap_unit_exists_chosencoefficientscoefficientdiagonaltermrightoutside. pfc_gap_unit_exists_chosencoefficientscoefficientdiagonaltermrightoutside+(L)=(pfc_complement_unit_exists_chosencoefficientscoefficientdiagonalterm)) /\ (((pfc_right_unit_exists_chosencoefficientscoefficientdiagonalterm)=0))))) /\ (((pfc_value_unit_exists_chosencoefficientscoefficientdiagonal)=pfc_left_unit_exists_chosencoefficientscoefficientdiagonalterm*pfc_right_unit_exists_chosencoefficientscoefficientdiagonalterm))))))))))) /\ (((exists fs_u_pfc_unit_exists_chosencoefficientscoefficientsum fs_v_pfc_unit_exists_chosencoefficientscoefficientsum. ((((exists fs_h_pfc_unit_exists_chosencoefficientscoefficientsum_body_start. fs_h_pfc_unit_exists_chosencoefficientscoefficientsum_body_start + S (0) = S ((S (0)) * fs_v_pfc_unit_exists_chosencoefficientscoefficientsum)) /\ exists fs_q_pfc_unit_exists_chosencoefficientscoefficientsum_body_start. fs_u_pfc_unit_exists_chosencoefficientscoefficientsum = fs_q_pfc_unit_exists_chosencoefficientscoefficientsum_body_start * S ((S (0)) * fs_v_pfc_unit_exists_chosencoefficientscoefficientsum) + (0))) /\ ((((exists fs_h_pfc_unit_exists_chosencoefficientscoefficientsum_body_terminal. fs_h_pfc_unit_exists_chosencoefficientscoefficientsum_body_terminal + S (pfc_natural_sum_unit_exists_chosencoefficientscoefficient) = S ((S (S (pfc_index_unit_exists_chosencoefficients))) * fs_v_pfc_unit_exists_chosencoefficientscoefficientsum)) /\ exists fs_q_pfc_unit_exists_chosencoefficientscoefficientsum_body_terminal. fs_u_pfc_unit_exists_chosencoefficientscoefficientsum = fs_q_pfc_unit_exists_chosencoefficientscoefficientsum_body_terminal * S ((S (S (pfc_index_unit_exists_chosencoefficients))) * fs_v_pfc_unit_exists_chosencoefficientscoefficientsum) + (pfc_natural_sum_unit_exists_chosencoefficientscoefficient))) /\ forall fs_i_pfc_unit_exists_chosencoefficientscoefficientsum_body_steps. (exists fs_lt_pfc_unit_exists_chosencoefficientscoefficientsum_body_steps_bound. fs_lt_pfc_unit_exists_chosencoefficientscoefficientsum_body_steps_bound + S fs_i_pfc_unit_exists_chosencoefficientscoefficientsum_body_steps = S (pfc_index_unit_exists_chosencoefficients)) -> exists fs_a_pfc_unit_exists_chosencoefficientscoefficientsum_body_steps fs_r_pfc_unit_exists_chosencoefficientscoefficientsum_body_steps fs_s_pfc_unit_exists_chosencoefficientscoefficientsum_body_steps. ((((exists fs_h_pfc_unit_exists_chosencoefficientscoefficientsum_body_steps_summand. fs_h_pfc_unit_exists_chosencoefficientscoefficientsum_body_steps_summand + S (fs_a_pfc_unit_exists_chosencoefficientscoefficientsum_body_steps) = S ((S (fs_i_pfc_unit_exists_chosencoefficientscoefficientsum_body_steps)) * pfc_terms_scale_unit_exists_chosencoefficientscoefficient)) /\ exists fs_q_pfc_unit_exists_chosencoefficientscoefficientsum_body_steps_summand. pfc_terms_code_unit_exists_chosencoefficientscoefficient = fs_q_pfc_unit_exists_chosencoefficientscoefficientsum_body_steps_summand * S ((S (fs_i_pfc_unit_exists_chosencoefficientscoefficientsum_body_steps)) * pfc_terms_scale_unit_exists_chosencoefficientscoefficient) + (fs_a_pfc_unit_exists_chosencoefficientscoefficientsum_body_steps))) /\ ((((exists fs_h_pfc_unit_exists_chosencoefficientscoefficientsum_body_steps_partial. fs_h_pfc_unit_exists_chosencoefficientscoefficientsum_body_steps_partial + S (fs_r_pfc_unit_exists_chosencoefficientscoefficientsum_body_steps) = S ((S (fs_i_pfc_unit_exists_chosencoefficientscoefficientsum_body_steps)) * fs_v_pfc_unit_exists_chosencoefficientscoefficientsum)) /\ exists fs_q_pfc_unit_exists_chosencoefficientscoefficientsum_body_steps_partial. fs_u_pfc_unit_exists_chosencoefficientscoefficientsum = fs_q_pfc_unit_exists_chosencoefficientscoefficientsum_body_steps_partial * S ((S (fs_i_pfc_unit_exists_chosencoefficientscoefficientsum_body_steps)) * fs_v_pfc_unit_exists_chosencoefficientscoefficientsum) + (fs_r_pfc_unit_exists_chosencoefficientscoefficientsum_body_steps))) /\ ((((exists fs_h_pfc_unit_exists_chosencoefficientscoefficientsum_body_steps_successor. fs_h_pfc_unit_exists_chosencoefficientscoefficientsum_body_steps_successor + S (fs_s_pfc_unit_exists_chosencoefficientscoefficientsum_body_steps) = S ((S (S fs_i_pfc_unit_exists_chosencoefficientscoefficientsum_body_steps)) * fs_v_pfc_unit_exists_chosencoefficientscoefficientsum)) /\ exists fs_q_pfc_unit_exists_chosencoefficientscoefficientsum_body_steps_successor. fs_u_pfc_unit_exists_chosencoefficientscoefficientsum = fs_q_pfc_unit_exists_chosencoefficientscoefficientsum_body_steps_successor * S ((S (S fs_i_pfc_unit_exists_chosencoefficientscoefficientsum_body_steps)) * fs_v_pfc_unit_exists_chosencoefficientscoefficientsum) + (fs_s_pfc_unit_exists_chosencoefficientscoefficientsum_body_steps))) /\ fs_s_pfc_unit_exists_chosencoefficientscoefficientsum_body_steps = fs_r_pfc_unit_exists_chosencoefficientscoefficientsum_body_steps + fs_a_pfc_unit_exists_chosencoefficientscoefficientsum_body_steps)))))) /\ ((((exists pfa_gap_unit_exists_chosencoefficientscoefficientresiduebound. pfa_gap_unit_exists_chosencoefficientscoefficientresiduebound + S (pfc_value_unit_exists_chosencoefficients) = (p)) /\ ((exists pfa_offset_left_unit_exists_chosencoefficientscoefficientresiduecongruence pfa_offset_right_unit_exists_chosencoefficientscoefficientresiduecongruence. (pfc_natural_sum_unit_exists_chosencoefficientscoefficient) + (p) * pfa_offset_left_unit_exists_chosencoefficientscoefficientresiduecongruence = (pfc_value_unit_exists_chosencoefficients) + (p) * pfa_offset_right_unit_exists_chosencoefficientscoefficientresiduecongruence))))))))))))))))))) - 0030
specialize prime_field_polynomial_convolution_at_length_exists (p) - 0031
specialize prime_field_polynomial_convolution_at_length_exists (x) - 0032
specialize prime_field_polynomial_convolution_at_length_exists (x1) - 0033
specialize prime_field_polynomial_convolution_at_length_exists (1) - 0034
specialize prime_field_polynomial_convolution_at_length_exists (ab) - 0035
specialize prime_field_polynomial_convolution_at_length_exists (ac) - 0036
specialize prime_field_polynomial_convolution_at_length_exists (L) - 0037
specialize prime_field_polynomial_convolution_at_length_exists (L) - 0038
apply prime_field_polynomial_convolution_at_length_exists - 0039
exact hp0 - 0040
exact hu_witness_witness_left - 0041
exact hA - 0042
have hzero : L=0 \/ ~(L=0) - 0043
specialize eq_decidable (L) - 0044
specialize eq_decidable (0) - 0045
apply eq_decidable - 0046
cases hzero - 0047
left - 0048
split - 0049
right - 0050
exact hzero_left - 0051
exact hzero_left - 0052
right - 0053
split - 0054
specialize succ_ne_zero (0) - 0055
apply succ_ne_zero - 0056
split - 0057
exact hzero_right - 0058
simp [add_succ_left,zero_add] - 0059
cases hc - 0060
cases hc_witness - 0061
exists x - 0062
exists x1 - 0063
exists x2 - 0064
exists x3 - 0065
split - 0066
exact hu_witness_witness_left - 0067
split - 0068
exact hone - 0069
split - 0070
exact hc_witness_witness - 0071
specialize prime_field_polynomial_convolution_left_unit_equivalent (p) - 0072
specialize prime_field_polynomial_convolution_left_unit_equivalent (x) - 0073
specialize prime_field_polynomial_convolution_left_unit_equivalent (x1) - 0074
specialize prime_field_polynomial_convolution_left_unit_equivalent (ab) - 0075
specialize prime_field_polynomial_convolution_left_unit_equivalent (ac) - 0076
specialize prime_field_polynomial_convolution_left_unit_equivalent (L) - 0077
specialize prime_field_polynomial_convolution_left_unit_equivalent (x2) - 0078
specialize prime_field_polynomial_convolution_left_unit_equivalent (x3) - 0079
apply prime_field_polynomial_convolution_left_unit_equivalent - 0080
exact hone - 0081
exact hc_witness_witness