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 b c d e t l n r. (~((p) = 1) /\ forall pfa_factor_left_invariant_prime pfa_factor_right_invariant_prime. (p) = pfa_factor_left_invariant_prime * pfa_factor_right_invariant_prime -> pfa_factor_left_invariant_prime = 1 \/ pfa_factor_right_invariant_prime = 1) -> (forall pfp_index_invariant_coefficients_reduced. (exists pfa_gap_invariant_coefficients_reducedindex. pfa_gap_invariant_coefficients_reducedindex + S (pfp_index_invariant_coefficients_reduced) = (l)) -> exists pfp_source_invariant_coefficients_reduced pfp_residue_invariant_coefficients_reduced. ((((exists ff_h_pfp_invariant_coefficients_reducedsource. ff_h_pfp_invariant_coefficients_reducedsource + S (pfp_source_invariant_coefficients_reduced) = S ((S (pfp_index_invariant_coefficients_reduced)) * c)) /\ exists ff_q_pfp_invariant_coefficients_reducedsource. b = ff_q_pfp_invariant_coefficients_reducedsource * S ((S (pfp_index_invariant_coefficients_reduced)) * c) + (pfp_source_invariant_coefficients_reduced))) /\ (((((exists ff_h_pfp_invariant_coefficients_reducedtarget. ff_h_pfp_invariant_coefficients_reducedtarget + S (pfp_residue_invariant_coefficients_reduced) = S ((S (pfp_index_invariant_coefficients_reduced)) * e)) /\ exists ff_q_pfp_invariant_coefficients_reducedtarget. d = ff_q_pfp_invariant_coefficients_reducedtarget * S ((S (pfp_index_invariant_coefficients_reduced)) * e) + (pfp_residue_invariant_coefficients_reduced))) /\ ((((exists pfa_gap_invariant_coefficients_reducedresiduebound. pfa_gap_invariant_coefficients_reducedresiduebound + S (pfp_residue_invariant_coefficients_reduced) = (p)) /\ ((exists pfa_offset_left_invariant_coefficients_reducedresiduecongruence pfa_offset_right_invariant_coefficients_reducedresiduecongruence. (pfp_source_invariant_coefficients_reduced) + (p) * pfa_offset_left_invariant_coefficients_reducedresiduecongruence = (pfp_residue_invariant_coefficients_reduced) + (p) * pfa_offset_right_invariant_coefficients_reducedresiduecongruence))))))))) -> (exists ff_u_ph_pfh_invariant_natural ff_v_ph_pfh_invariant_natural. ((((exists fs_h_ph_pfh_invariant_natural_body_start. fs_h_ph_pfh_invariant_natural_body_start + S (0) = S ((S (0)) * ff_v_ph_pfh_invariant_natural)) /\ exists fs_q_ph_pfh_invariant_natural_body_start. ff_u_ph_pfh_invariant_natural = fs_q_ph_pfh_invariant_natural_body_start * S ((S (0)) * ff_v_ph_pfh_invariant_natural) + (0))) /\ ((((exists fs_h_ph_pfh_invariant_natural_body_terminal. fs_h_ph_pfh_invariant_natural_body_terminal + S (n) = S ((S (l)) * ff_v_ph_pfh_invariant_natural)) /\ exists fs_q_ph_pfh_invariant_natural_body_terminal. ff_u_ph_pfh_invariant_natural = fs_q_ph_pfh_invariant_natural_body_terminal * S ((S (l)) * ff_v_ph_pfh_invariant_natural) + (n))) /\ forall ff_i_ph_pfh_invariant_natural_body_steps. (exists ph_bound_pfh_invariant_natural_body_steps. ph_bound_pfh_invariant_natural_body_steps + S ff_i_ph_pfh_invariant_natural_body_steps = l) -> exists ff_coefficient_ph_pfh_invariant_natural_body_steps ff_previous_ph_pfh_invariant_natural_body_steps ff_current_ph_pfh_invariant_natural_body_steps. ((((exists fs_h_ph_pfh_invariant_natural_body_steps_coefficient. fs_h_ph_pfh_invariant_natural_body_steps_coefficient + S (ff_coefficient_ph_pfh_invariant_natural_body_steps) = S ((S (ff_i_ph_pfh_invariant_natural_body_steps)) * c)) /\ exists fs_q_ph_pfh_invariant_natural_body_steps_coefficient. b = fs_q_ph_pfh_invariant_natural_body_steps_coefficient * S ((S (ff_i_ph_pfh_invariant_natural_body_steps)) * c) + (ff_coefficient_ph_pfh_invariant_natural_body_steps))) /\ ((((exists fs_h_ph_pfh_invariant_natural_body_steps_before. fs_h_ph_pfh_invariant_natural_body_steps_before + S (ff_previous_ph_pfh_invariant_natural_body_steps) = S ((S (ff_i_ph_pfh_invariant_natural_body_steps)) * ff_v_ph_pfh_invariant_natural)) /\ exists fs_q_ph_pfh_invariant_natural_body_steps_before. ff_u_ph_pfh_invariant_natural = fs_q_ph_pfh_invariant_natural_body_steps_before * S ((S (ff_i_ph_pfh_invariant_natural_body_steps)) * ff_v_ph_pfh_invariant_natural) + (ff_previous_ph_pfh_invariant_natural_body_steps))) /\ ((((exists fs_h_ph_pfh_invariant_natural_body_steps_after. fs_h_ph_pfh_invariant_natural_body_steps_after + S (ff_current_ph_pfh_invariant_natural_body_steps) = S ((S (S ff_i_ph_pfh_invariant_natural_body_steps)) * ff_v_ph_pfh_invariant_natural)) /\ exists fs_q_ph_pfh_invariant_natural_body_steps_after. ff_u_ph_pfh_invariant_natural = fs_q_ph_pfh_invariant_natural_body_steps_after * S ((S (S ff_i_ph_pfh_invariant_natural_body_steps)) * ff_v_ph_pfh_invariant_natural) + (ff_current_ph_pfh_invariant_natural_body_steps))) /\ ff_current_ph_pfh_invariant_natural_body_steps = ff_previous_ph_pfh_invariant_natural_body_steps * t + ff_coefficient_ph_pfh_invariant_natural_body_steps)))))) -> (exists pfh_trace_code_invariant_execution pfh_trace_scale_invariant_execution. (((exists pfa_gap_invariant_executiontracebase. pfa_gap_invariant_executiontracebase + S (t) = (p)) /\ (((((exists ff_h_pfp_invariant_executiontraceinitial. ff_h_pfp_invariant_executiontraceinitial + S (0) = S ((S (0)) * pfh_trace_scale_invariant_execution)) /\ exists ff_q_pfp_invariant_executiontraceinitial. pfh_trace_code_invariant_execution = ff_q_pfp_invariant_executiontraceinitial * S ((S (0)) * pfh_trace_scale_invariant_execution) + (0))) /\ (((((exists ff_h_pfp_invariant_executiontraceterminal. ff_h_pfp_invariant_executiontraceterminal + S (r) = S ((S (l)) * pfh_trace_scale_invariant_execution)) /\ exists ff_q_pfp_invariant_executiontraceterminal. pfh_trace_code_invariant_execution = ff_q_pfp_invariant_executiontraceterminal * S ((S (l)) * pfh_trace_scale_invariant_execution) + (r))) /\ ((forall pfh_index_invariant_executiontracesteps. (exists pfa_gap_invariant_executiontracestepsindex. pfa_gap_invariant_executiontracestepsindex + S (pfh_index_invariant_executiontracesteps) = (l)) -> (exists pfh_coefficient_invariant_executiontracestepsstep pfh_before_invariant_executiontracestepsstep pfh_after_invariant_executiontracestepsstep pfh_product_invariant_executiontracestepsstep. ((((exists ff_h_pfp_invariant_executiontracestepsstepcoefficient. ff_h_pfp_invariant_executiontracestepsstepcoefficient + S (pfh_coefficient_invariant_executiontracestepsstep) = S ((S (pfh_index_invariant_executiontracesteps)) * e)) /\ exists ff_q_pfp_invariant_executiontracestepsstepcoefficient. d = ff_q_pfp_invariant_executiontracestepsstepcoefficient * S ((S (pfh_index_invariant_executiontracesteps)) * e) + (pfh_coefficient_invariant_executiontracestepsstep))) /\ (((((exists ff_h_pfp_invariant_executiontracestepsstepbefore. ff_h_pfp_invariant_executiontracestepsstepbefore + S (pfh_before_invariant_executiontracestepsstep) = S ((S (pfh_index_invariant_executiontracesteps)) * pfh_trace_scale_invariant_execution)) /\ exists ff_q_pfp_invariant_executiontracestepsstepbefore. pfh_trace_code_invariant_execution = ff_q_pfp_invariant_executiontracestepsstepbefore * S ((S (pfh_index_invariant_executiontracesteps)) * pfh_trace_scale_invariant_execution) + (pfh_before_invariant_executiontracestepsstep))) /\ (((((exists ff_h_pfp_invariant_executiontracestepsstepafter. ff_h_pfp_invariant_executiontracestepsstepafter + S (pfh_after_invariant_executiontracestepsstep) = S ((S (S (pfh_index_invariant_executiontracesteps))) * pfh_trace_scale_invariant_execution)) /\ exists ff_q_pfp_invariant_executiontracestepsstepafter. pfh_trace_code_invariant_execution = ff_q_pfp_invariant_executiontracestepsstepafter * S ((S (S (pfh_index_invariant_executiontracesteps))) * pfh_trace_scale_invariant_execution) + (pfh_after_invariant_executiontracestepsstep))) /\ (((((exists pfa_gap_invariant_executiontracestepsstepmultiplyleft. pfa_gap_invariant_executiontracestepsstepmultiplyleft + S (pfh_before_invariant_executiontracestepsstep) = (p)) /\ (((exists pfa_gap_invariant_executiontracestepsstepmultiplyright. pfa_gap_invariant_executiontracestepsstepmultiplyright + S (t) = (p)) /\ ((((exists pfa_gap_invariant_executiontracestepsstepmultiplyresultbound. pfa_gap_invariant_executiontracestepsstepmultiplyresultbound + S (pfh_product_invariant_executiontracestepsstep) = (p)) /\ ((exists pfa_offset_left_invariant_executiontracestepsstepmultiplyresultcongruence pfa_offset_right_invariant_executiontracestepsstepmultiplyresultcongruence. ((pfh_before_invariant_executiontracestepsstep) * (t)) + (p) * pfa_offset_left_invariant_executiontracestepsstepmultiplyresultcongruence = (pfh_product_invariant_executiontracestepsstep) + (p) * pfa_offset_right_invariant_executiontracestepsstepmultiplyresultcongruence))))))))) /\ ((((exists pfa_gap_invariant_executiontracestepsstepaddleft. pfa_gap_invariant_executiontracestepsstepaddleft + S (pfh_product_invariant_executiontracestepsstep) = (p)) /\ (((exists pfa_gap_invariant_executiontracestepsstepaddright. pfa_gap_invariant_executiontracestepsstepaddright + S (pfh_coefficient_invariant_executiontracestepsstep) = (p)) /\ ((((exists pfa_gap_invariant_executiontracestepsstepaddresultbound. pfa_gap_invariant_executiontracestepsstepaddresultbound + S (pfh_after_invariant_executiontracestepsstep) = (p)) /\ ((exists pfa_offset_left_invariant_executiontracestepsstepaddresultcongruence pfa_offset_right_invariant_executiontracestepsstepaddresultcongruence. ((pfh_product_invariant_executiontracestepsstep) + (pfh_coefficient_invariant_executiontracestepsstep)) + (p) * pfa_offset_left_invariant_executiontracestepsstepaddresultcongruence = (pfh_after_invariant_executiontracestepsstep) + (p) * pfa_offset_right_invariant_executiontracestepsstepaddresultcongruence))))))))))))))))))))))))))) -> (((exists pfa_gap_invariant_resultbound. pfa_gap_invariant_resultbound + S (r) = (p)) /\ ((exists pfa_offset_left_invariant_resultcongruence pfa_offset_right_invariant_resultcongruence. (n) + (p) * pfa_offset_left_invariant_resultcongruence = (r) + (p) * pfa_offset_right_invariant_resultcongruence))))Constructive proof overview
Generated structural guide
Ordinary induction proves the residue invariant against arbitrary natural coefficients and their actual coefficientwise reduction; the invariant is not part of the execution definition.
The unchanged tactic script uses 13 declared prerequisites and contains 142 exact native proof lines.
Alpha v34 checked-use · first admitted v31 · independently kernel and Lean verified; not Stable
Proof neighborhood
Direct dependencies
beta_horner_eval_empty Alpha theorem; checked-use authorized PP0024 prime_field_polynomial_horner_empty prime_field_residue_reflexive Alpha theorem; checked-use authorized prime_field_zero_below_prime Alpha theorem; checked-use authorized beta_horner_eval_successor_decompose Alpha theorem; checked-use authorized PP0025 prime_field_polynomial_horner_successor_decompose PP0003 prime_field_polynomial_normalization_entry zero_add Stable theorem; checked-use authorized le_succ Stable theorem; checked-use authorized PP0023 prime_field_polynomial_horner_input_bounds prime_field_residue_multiply Alpha theorem; checked-use authorized prime_field_residue_input_equal Alpha theorem; checked-use authorized prime_field_residue_add Alpha theorem; checked-use authorizedDirect 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 (4)
01Fix variables and assumptionsL1–7
02Induction on lL8–14
03Establish hnzeroL15–21
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply beta horner eval empty.
04Establish hrzeroL22–31
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply prime field polynomial horner empty.
- L22
have hrzero : r=0 - L23
specialize prime_field_polynomial_horner_empty (p) - L24
specialize prime_field_polynomial_horner_empty (d) - L25
specialize prime_field_polynomial_horner_empty (e) - L26
specialize prime_field_polynomial_horner_empty (t) - L27
specialize prime_field_polynomial_horner_empty (r) - L28
apply prime_field_polynomial_horner_empty - L29
exact hr - L30
rewrite hnzero - L31
rewrite hrzero
05Calculate and transport equalitiesL32–32
Carry out the recorded arithmetic or equality steps; inspect the exact commands for their direction and premises.
- L32
rewrite hrzero
06Use earlier factsL33–38
Instantiate or apply named facts and discharge the corresponding proof obligations.
07Fix variables and assumptionsL39–44
08Establish hnsL45–52
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply beta horner eval successor decompose.
- L45
- L46
specialize beta_horner_eval_successor_decompose (b) - L47
specialize beta_horner_eval_successor_decompose (c) - L48
specialize beta_horner_eval_successor_decompose (t) - L49
specialize beta_horner_eval_successor_decompose (l) - L50
specialize beta_horner_eval_successor_decompose (n) - L51
apply beta_horner_eval_successor_decompose - L52
exact hn
09Separate the logical casesL53–56
10Establish hrsL57–65
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply prime field polynomial horner successor decompose.
- L57
- L58
specialize prime_field_polynomial_horner_successor_decompose (p) - L59
specialize prime_field_polynomial_horner_successor_decompose (d) - L60
specialize prime_field_polynomial_horner_successor_decompose (e) - L61
specialize prime_field_polynomial_horner_successor_decompose (t) - L62
specialize prime_field_polynomial_horner_successor_decompose (l) - L63
specialize prime_field_polynomial_horner_successor_decompose (r) - L64
apply prime_field_polynomial_horner_successor_decompose - L65
exact hr
11Separate the logical casesL66–71
12Establish hcoefficientL72–81
Establish this local claim before using it. It is not an additional assumption.
- L72
have hcoefficient : ((exists pfa_gap_invariant_coefficient_residuebound. pfa_gap_invariant_coefficient_residuebound + S (x2) = (p)) /\ ((exists pfa_offset_left_invariant_coefficient_residuecongruence pfa_offset_right_invariant_coefficient_residuecongruence. (x) + (p) * pfa_offset_left_invariant_coefficient_residuecongruence = (x2) + (p) * pfa_offset_right_invariant_coefficient_residuecongruence))) - L73
specialize prime_field_polynomial_normalization_entry (p) - L74
specialize prime_field_polynomial_normalization_entry (b) - L75
specialize prime_field_polynomial_normalization_entry (c) - L76
specialize prime_field_polynomial_normalization_entry (d) - L77
specialize prime_field_polynomial_normalization_entry (e) - L78
specialize prime_field_polynomial_normalization_entry (S l) - L79
specialize prime_field_polynomial_normalization_entry (l) - L80
specialize prime_field_polynomial_normalization_entry (x) - L81
specialize prime_field_polynomial_normalization_entry (x2)
13Use earlier factsL82–83
14Construct an explicit witnessL84–84
Supply the displayed value, then prove that it has the required property.
- L84
exists 0
15Use earlier factsL85–87
16Establish hpreviousL88–97
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply IH.
- L88
have hprevious : ((exists pfa_gap_invariant_previous_residuebound. pfa_gap_invariant_previous_residuebound + S (x3) = (p)) /\ ((exists pfa_offset_left_invariant_previous_residuecongruence pfa_offset_right_invariant_previous_residuecongruence. (x1) + (p) * pfa_offset_left_invariant_previous_residuecongruence = (x3) + (p) * pfa_offset_right_invariant_previous_residuecongruence))) - L89
specialize IH (x1) - L90
specialize IH (x3) - L91
apply IH - L92
exact hp - L93
intro i - L94
intro hi - L95
specialize hred (i) - L96
apply hred - L97
specialize le_succ (S i)
17Use earlier factsL98–102
18Establish hboundsL103–111
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply prime field polynomial horner input bounds.
- L103
have hbounds : Lt(t,p) ∧ BetaPrefixInto(d,e,l,p)Definitions: BetaPrefixIntoLt - L104
specialize prime_field_polynomial_horner_input_bounds (p) - L105
specialize prime_field_polynomial_horner_input_bounds (d) - L106
specialize prime_field_polynomial_horner_input_bounds (e) - L107
specialize prime_field_polynomial_horner_input_bounds (t) - L108
specialize prime_field_polynomial_horner_input_bounds (l) - L109
specialize prime_field_polynomial_horner_input_bounds (x3) - L110
apply prime_field_polynomial_horner_input_bounds - L111
exact hrs_witness_witness_witness_right_left
19Separate the logical casesL112–112
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L112
cases hbounds
20Establish hproductL113–122
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply prime field residue multiply.
- L113
have hproduct : ((exists pfa_gap_invariant_product_residuebound. pfa_gap_invariant_product_residuebound + S (x4) = (p)) /\ ((exists pfa_offset_left_invariant_product_residuecongruence pfa_offset_right_invariant_product_residuecongruence. (x1*t) + (p) * pfa_offset_left_invariant_product_residuecongruence = (x4) + (p) * pfa_offset_right_invariant_product_residuecongruence))) - L114
specialize prime_field_residue_multiply (p) - L115
specialize prime_field_residue_multiply (x1) - L116
specialize prime_field_residue_multiply (t) - L117
specialize prime_field_residue_multiply (x3) - L118
specialize prime_field_residue_multiply (t) - L119
specialize prime_field_residue_multiply (x4) - L120
apply prime_field_residue_multiply - L121
exact hprevious - L122
specialize prime_field_residue_reflexive (p)
21Use earlier factsL123–132
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L123
specialize prime_field_residue_reflexive (t) - L124
apply prime_field_residue_reflexive - L125
exact hbounds_left - L126
exact hrs_witness_witness_witness_right_right_left - L127
specialize prime_field_residue_input_equal (p) - L128
specialize prime_field_residue_input_equal (n) - L129
specialize prime_field_residue_input_equal (x1*t+x) - L130
specialize prime_field_residue_input_equal (r) - L131
apply prime_field_residue_input_equal - L132
exact hns_witness_witness_right_right
22Use earlier factsL133–142
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L133
specialize prime_field_residue_add (p) - L134
specialize prime_field_residue_add (x1*t) - L135
specialize prime_field_residue_add (x) - L136
specialize prime_field_residue_add (x4) - L137
specialize prime_field_residue_add (x2) - L138
specialize prime_field_residue_add (r) - L139
apply prime_field_residue_add - L140
exact hproduct - L141
exact hcoefficient - L142
exact hrs_witness_witness_witness_right_right_right
Original exact command ledger · 142 lines
- 0001
intro p - 0002
intro b - 0003
intro c - 0004
intro d - 0005
intro e - 0006
intro t - 0007
intro l - 0008
induction l - 0009
intro n - 0010
intro r - 0011
intro hp - 0012
intro hred - 0013
intro hn - 0014
intro hr - 0015
have hnzero : n=0 - 0016
specialize beta_horner_eval_empty (b) - 0017
specialize beta_horner_eval_empty (c) - 0018
specialize beta_horner_eval_empty (t) - 0019
specialize beta_horner_eval_empty (n) - 0020
apply beta_horner_eval_empty - 0021
exact hn - 0022
have hrzero : r=0 - 0023
specialize prime_field_polynomial_horner_empty (p) - 0024
specialize prime_field_polynomial_horner_empty (d) - 0025
specialize prime_field_polynomial_horner_empty (e) - 0026
specialize prime_field_polynomial_horner_empty (t) - 0027
specialize prime_field_polynomial_horner_empty (r) - 0028
apply prime_field_polynomial_horner_empty - 0029
exact hr - 0030
rewrite hnzero - 0031
rewrite hrzero - 0032
rewrite hrzero - 0033
specialize prime_field_residue_reflexive (p) - 0034
specialize prime_field_residue_reflexive (0) - 0035
apply prime_field_residue_reflexive - 0036
specialize prime_field_zero_below_prime (p) - 0037
apply prime_field_zero_below_prime - 0038
exact hp - 0039
intro n - 0040
intro r - 0041
intro hp - 0042
intro hred - 0043
intro hn - 0044
intro hr - 0045
have hns : exists a h. ((((exists ff_h_pfp_invariant_natural_coefficient. ff_h_pfp_invariant_natural_coefficient + S (a) = S ((S (l)) * c)) /\ exists ff_q_pfp_invariant_natural_coefficient. b = ff_q_pfp_invariant_natural_coefficient * S ((S (l)) * c) + (a))) /\ (((exists ff_u_ph_pfh_invariant_natural_prefix ff_v_ph_pfh_invariant_natural_prefix. ((((exists fs_h_ph_pfh_invariant_natural_prefix_body_start. fs_h_ph_pfh_invariant_natural_prefix_body_start + S (0) = S ((S (0)) * ff_v_ph_pfh_invariant_natural_prefix)) /\ exists fs_q_ph_pfh_invariant_natural_prefix_body_start. ff_u_ph_pfh_invariant_natural_prefix = fs_q_ph_pfh_invariant_natural_prefix_body_start * S ((S (0)) * ff_v_ph_pfh_invariant_natural_prefix) + (0))) /\ ((((exists fs_h_ph_pfh_invariant_natural_prefix_body_terminal. fs_h_ph_pfh_invariant_natural_prefix_body_terminal + S (h) = S ((S (l)) * ff_v_ph_pfh_invariant_natural_prefix)) /\ exists fs_q_ph_pfh_invariant_natural_prefix_body_terminal. ff_u_ph_pfh_invariant_natural_prefix = fs_q_ph_pfh_invariant_natural_prefix_body_terminal * S ((S (l)) * ff_v_ph_pfh_invariant_natural_prefix) + (h))) /\ forall ff_i_ph_pfh_invariant_natural_prefix_body_steps. (exists ph_bound_pfh_invariant_natural_prefix_body_steps. ph_bound_pfh_invariant_natural_prefix_body_steps + S ff_i_ph_pfh_invariant_natural_prefix_body_steps = l) -> exists ff_coefficient_ph_pfh_invariant_natural_prefix_body_steps ff_previous_ph_pfh_invariant_natural_prefix_body_steps ff_current_ph_pfh_invariant_natural_prefix_body_steps. ((((exists fs_h_ph_pfh_invariant_natural_prefix_body_steps_coefficient. fs_h_ph_pfh_invariant_natural_prefix_body_steps_coefficient + S (ff_coefficient_ph_pfh_invariant_natural_prefix_body_steps) = S ((S (ff_i_ph_pfh_invariant_natural_prefix_body_steps)) * c)) /\ exists fs_q_ph_pfh_invariant_natural_prefix_body_steps_coefficient. b = fs_q_ph_pfh_invariant_natural_prefix_body_steps_coefficient * S ((S (ff_i_ph_pfh_invariant_natural_prefix_body_steps)) * c) + (ff_coefficient_ph_pfh_invariant_natural_prefix_body_steps))) /\ ((((exists fs_h_ph_pfh_invariant_natural_prefix_body_steps_before. fs_h_ph_pfh_invariant_natural_prefix_body_steps_before + S (ff_previous_ph_pfh_invariant_natural_prefix_body_steps) = S ((S (ff_i_ph_pfh_invariant_natural_prefix_body_steps)) * ff_v_ph_pfh_invariant_natural_prefix)) /\ exists fs_q_ph_pfh_invariant_natural_prefix_body_steps_before. ff_u_ph_pfh_invariant_natural_prefix = fs_q_ph_pfh_invariant_natural_prefix_body_steps_before * S ((S (ff_i_ph_pfh_invariant_natural_prefix_body_steps)) * ff_v_ph_pfh_invariant_natural_prefix) + (ff_previous_ph_pfh_invariant_natural_prefix_body_steps))) /\ ((((exists fs_h_ph_pfh_invariant_natural_prefix_body_steps_after. fs_h_ph_pfh_invariant_natural_prefix_body_steps_after + S (ff_current_ph_pfh_invariant_natural_prefix_body_steps) = S ((S (S ff_i_ph_pfh_invariant_natural_prefix_body_steps)) * ff_v_ph_pfh_invariant_natural_prefix)) /\ exists fs_q_ph_pfh_invariant_natural_prefix_body_steps_after. ff_u_ph_pfh_invariant_natural_prefix = fs_q_ph_pfh_invariant_natural_prefix_body_steps_after * S ((S (S ff_i_ph_pfh_invariant_natural_prefix_body_steps)) * ff_v_ph_pfh_invariant_natural_prefix) + (ff_current_ph_pfh_invariant_natural_prefix_body_steps))) /\ ff_current_ph_pfh_invariant_natural_prefix_body_steps = ff_previous_ph_pfh_invariant_natural_prefix_body_steps * t + ff_coefficient_ph_pfh_invariant_natural_prefix_body_steps)))))) /\ ((n=h*t+a))))) - 0046
specialize beta_horner_eval_successor_decompose (b) - 0047
specialize beta_horner_eval_successor_decompose (c) - 0048
specialize beta_horner_eval_successor_decompose (t) - 0049
specialize beta_horner_eval_successor_decompose (l) - 0050
specialize beta_horner_eval_successor_decompose (n) - 0051
apply beta_horner_eval_successor_decompose - 0052
exact hn - 0053
cases hns - 0054
cases hns_witness - 0055
cases hns_witness_witness - 0056
cases hns_witness_witness_right - 0057
have hrs : exists a h k. ((((exists ff_h_pfp_invariant_canonical_coefficient. ff_h_pfp_invariant_canonical_coefficient + S (a) = S ((S (l)) * e)) /\ exists ff_q_pfp_invariant_canonical_coefficient. d = ff_q_pfp_invariant_canonical_coefficient * S ((S (l)) * e) + (a))) /\ (((exists pfh_trace_code_invariant_canonical_prefix pfh_trace_scale_invariant_canonical_prefix. (((exists pfa_gap_invariant_canonical_prefixtracebase. pfa_gap_invariant_canonical_prefixtracebase + S (t) = (p)) /\ (((((exists ff_h_pfp_invariant_canonical_prefixtraceinitial. ff_h_pfp_invariant_canonical_prefixtraceinitial + S (0) = S ((S (0)) * pfh_trace_scale_invariant_canonical_prefix)) /\ exists ff_q_pfp_invariant_canonical_prefixtraceinitial. pfh_trace_code_invariant_canonical_prefix = ff_q_pfp_invariant_canonical_prefixtraceinitial * S ((S (0)) * pfh_trace_scale_invariant_canonical_prefix) + (0))) /\ (((((exists ff_h_pfp_invariant_canonical_prefixtraceterminal. ff_h_pfp_invariant_canonical_prefixtraceterminal + S (h) = S ((S (l)) * pfh_trace_scale_invariant_canonical_prefix)) /\ exists ff_q_pfp_invariant_canonical_prefixtraceterminal. pfh_trace_code_invariant_canonical_prefix = ff_q_pfp_invariant_canonical_prefixtraceterminal * S ((S (l)) * pfh_trace_scale_invariant_canonical_prefix) + (h))) /\ ((forall pfh_index_invariant_canonical_prefixtracesteps. (exists pfa_gap_invariant_canonical_prefixtracestepsindex. pfa_gap_invariant_canonical_prefixtracestepsindex + S (pfh_index_invariant_canonical_prefixtracesteps) = (l)) -> (exists pfh_coefficient_invariant_canonical_prefixtracestepsstep pfh_before_invariant_canonical_prefixtracestepsstep pfh_after_invariant_canonical_prefixtracestepsstep pfh_product_invariant_canonical_prefixtracestepsstep. ((((exists ff_h_pfp_invariant_canonical_prefixtracestepsstepcoefficient. ff_h_pfp_invariant_canonical_prefixtracestepsstepcoefficient + S (pfh_coefficient_invariant_canonical_prefixtracestepsstep) = S ((S (pfh_index_invariant_canonical_prefixtracesteps)) * e)) /\ exists ff_q_pfp_invariant_canonical_prefixtracestepsstepcoefficient. d = ff_q_pfp_invariant_canonical_prefixtracestepsstepcoefficient * S ((S (pfh_index_invariant_canonical_prefixtracesteps)) * e) + (pfh_coefficient_invariant_canonical_prefixtracestepsstep))) /\ (((((exists ff_h_pfp_invariant_canonical_prefixtracestepsstepbefore. ff_h_pfp_invariant_canonical_prefixtracestepsstepbefore + S (pfh_before_invariant_canonical_prefixtracestepsstep) = S ((S (pfh_index_invariant_canonical_prefixtracesteps)) * pfh_trace_scale_invariant_canonical_prefix)) /\ exists ff_q_pfp_invariant_canonical_prefixtracestepsstepbefore. pfh_trace_code_invariant_canonical_prefix = ff_q_pfp_invariant_canonical_prefixtracestepsstepbefore * S ((S (pfh_index_invariant_canonical_prefixtracesteps)) * pfh_trace_scale_invariant_canonical_prefix) + (pfh_before_invariant_canonical_prefixtracestepsstep))) /\ (((((exists ff_h_pfp_invariant_canonical_prefixtracestepsstepafter. ff_h_pfp_invariant_canonical_prefixtracestepsstepafter + S (pfh_after_invariant_canonical_prefixtracestepsstep) = S ((S (S (pfh_index_invariant_canonical_prefixtracesteps))) * pfh_trace_scale_invariant_canonical_prefix)) /\ exists ff_q_pfp_invariant_canonical_prefixtracestepsstepafter. pfh_trace_code_invariant_canonical_prefix = ff_q_pfp_invariant_canonical_prefixtracestepsstepafter * S ((S (S (pfh_index_invariant_canonical_prefixtracesteps))) * pfh_trace_scale_invariant_canonical_prefix) + (pfh_after_invariant_canonical_prefixtracestepsstep))) /\ (((((exists pfa_gap_invariant_canonical_prefixtracestepsstepmultiplyleft. pfa_gap_invariant_canonical_prefixtracestepsstepmultiplyleft + S (pfh_before_invariant_canonical_prefixtracestepsstep) = (p)) /\ (((exists pfa_gap_invariant_canonical_prefixtracestepsstepmultiplyright. pfa_gap_invariant_canonical_prefixtracestepsstepmultiplyright + S (t) = (p)) /\ ((((exists pfa_gap_invariant_canonical_prefixtracestepsstepmultiplyresultbound. pfa_gap_invariant_canonical_prefixtracestepsstepmultiplyresultbound + S (pfh_product_invariant_canonical_prefixtracestepsstep) = (p)) /\ ((exists pfa_offset_left_invariant_canonical_prefixtracestepsstepmultiplyresultcongruence pfa_offset_right_invariant_canonical_prefixtracestepsstepmultiplyresultcongruence. ((pfh_before_invariant_canonical_prefixtracestepsstep) * (t)) + (p) * pfa_offset_left_invariant_canonical_prefixtracestepsstepmultiplyresultcongruence = (pfh_product_invariant_canonical_prefixtracestepsstep) + (p) * pfa_offset_right_invariant_canonical_prefixtracestepsstepmultiplyresultcongruence))))))))) /\ ((((exists pfa_gap_invariant_canonical_prefixtracestepsstepaddleft. pfa_gap_invariant_canonical_prefixtracestepsstepaddleft + S (pfh_product_invariant_canonical_prefixtracestepsstep) = (p)) /\ (((exists pfa_gap_invariant_canonical_prefixtracestepsstepaddright. pfa_gap_invariant_canonical_prefixtracestepsstepaddright + S (pfh_coefficient_invariant_canonical_prefixtracestepsstep) = (p)) /\ ((((exists pfa_gap_invariant_canonical_prefixtracestepsstepaddresultbound. pfa_gap_invariant_canonical_prefixtracestepsstepaddresultbound + S (pfh_after_invariant_canonical_prefixtracestepsstep) = (p)) /\ ((exists pfa_offset_left_invariant_canonical_prefixtracestepsstepaddresultcongruence pfa_offset_right_invariant_canonical_prefixtracestepsstepaddresultcongruence. ((pfh_product_invariant_canonical_prefixtracestepsstep) + (pfh_coefficient_invariant_canonical_prefixtracestepsstep)) + (p) * pfa_offset_left_invariant_canonical_prefixtracestepsstepaddresultcongruence = (pfh_after_invariant_canonical_prefixtracestepsstep) + (p) * pfa_offset_right_invariant_canonical_prefixtracestepsstepaddresultcongruence))))))))))))))))))))))))))) /\ (((((exists pfa_gap_invariant_canonical_multiplyleft. pfa_gap_invariant_canonical_multiplyleft + S (h) = (p)) /\ (((exists pfa_gap_invariant_canonical_multiplyright. pfa_gap_invariant_canonical_multiplyright + S (t) = (p)) /\ ((((exists pfa_gap_invariant_canonical_multiplyresultbound. pfa_gap_invariant_canonical_multiplyresultbound + S (k) = (p)) /\ ((exists pfa_offset_left_invariant_canonical_multiplyresultcongruence pfa_offset_right_invariant_canonical_multiplyresultcongruence. ((h) * (t)) + (p) * pfa_offset_left_invariant_canonical_multiplyresultcongruence = (k) + (p) * pfa_offset_right_invariant_canonical_multiplyresultcongruence))))))))) /\ ((((exists pfa_gap_invariant_canonical_addleft. pfa_gap_invariant_canonical_addleft + S (k) = (p)) /\ (((exists pfa_gap_invariant_canonical_addright. pfa_gap_invariant_canonical_addright + S (a) = (p)) /\ ((((exists pfa_gap_invariant_canonical_addresultbound. pfa_gap_invariant_canonical_addresultbound + S (r) = (p)) /\ ((exists pfa_offset_left_invariant_canonical_addresultcongruence pfa_offset_right_invariant_canonical_addresultcongruence. ((k) + (a)) + (p) * pfa_offset_left_invariant_canonical_addresultcongruence = (r) + (p) * pfa_offset_right_invariant_canonical_addresultcongruence))))))))))))))) - 0058
specialize prime_field_polynomial_horner_successor_decompose (p) - 0059
specialize prime_field_polynomial_horner_successor_decompose (d) - 0060
specialize prime_field_polynomial_horner_successor_decompose (e) - 0061
specialize prime_field_polynomial_horner_successor_decompose (t) - 0062
specialize prime_field_polynomial_horner_successor_decompose (l) - 0063
specialize prime_field_polynomial_horner_successor_decompose (r) - 0064
apply prime_field_polynomial_horner_successor_decompose - 0065
exact hr - 0066
cases hrs - 0067
cases hrs_witness - 0068
cases hrs_witness_witness - 0069
cases hrs_witness_witness_witness - 0070
cases hrs_witness_witness_witness_right - 0071
cases hrs_witness_witness_witness_right_right - 0072
have hcoefficient : ((exists pfa_gap_invariant_coefficient_residuebound. pfa_gap_invariant_coefficient_residuebound + S (x2) = (p)) /\ ((exists pfa_offset_left_invariant_coefficient_residuecongruence pfa_offset_right_invariant_coefficient_residuecongruence. (x) + (p) * pfa_offset_left_invariant_coefficient_residuecongruence = (x2) + (p) * pfa_offset_right_invariant_coefficient_residuecongruence))) - 0073
specialize prime_field_polynomial_normalization_entry (p) - 0074
specialize prime_field_polynomial_normalization_entry (b) - 0075
specialize prime_field_polynomial_normalization_entry (c) - 0076
specialize prime_field_polynomial_normalization_entry (d) - 0077
specialize prime_field_polynomial_normalization_entry (e) - 0078
specialize prime_field_polynomial_normalization_entry (S l) - 0079
specialize prime_field_polynomial_normalization_entry (l) - 0080
specialize prime_field_polynomial_normalization_entry (x) - 0081
specialize prime_field_polynomial_normalization_entry (x2) - 0082
apply prime_field_polynomial_normalization_entry - 0083
exact hred - 0084
exists 0 - 0085
apply zero_add - 0086
exact hns_witness_witness_left - 0087
exact hrs_witness_witness_witness_left - 0088
have hprevious : ((exists pfa_gap_invariant_previous_residuebound. pfa_gap_invariant_previous_residuebound + S (x3) = (p)) /\ ((exists pfa_offset_left_invariant_previous_residuecongruence pfa_offset_right_invariant_previous_residuecongruence. (x1) + (p) * pfa_offset_left_invariant_previous_residuecongruence = (x3) + (p) * pfa_offset_right_invariant_previous_residuecongruence))) - 0089
specialize IH (x1) - 0090
specialize IH (x3) - 0091
apply IH - 0092
exact hp - 0093
intro i - 0094
intro hi - 0095
specialize hred (i) - 0096
apply hred - 0097
specialize le_succ (S i) - 0098
specialize le_succ (l) - 0099
apply le_succ - 0100
exact hi - 0101
exact hns_witness_witness_right_left - 0102
exact hrs_witness_witness_witness_right_left - 0103
have hbounds : ((exists pfa_gap_invariant_base_bound. pfa_gap_invariant_base_bound + S (t) = (p)) /\ ((forall fom_index_pfp_invariant_coefficients. (exists fom_gap_pfp_invariant_coefficients_index_bound. fom_gap_pfp_invariant_coefficients_index_bound + S (fom_index_pfp_invariant_coefficients) = l) -> exists fom_value_pfp_invariant_coefficients. ((((exists fom_beta_height_pfp_invariant_coefficients_entry. fom_beta_height_pfp_invariant_coefficients_entry + S (fom_value_pfp_invariant_coefficients) = S ((S (fom_index_pfp_invariant_coefficients)) * e)) /\ exists fom_beta_quotient_pfp_invariant_coefficients_entry. d = fom_beta_quotient_pfp_invariant_coefficients_entry * S ((S (fom_index_pfp_invariant_coefficients)) * e) + (fom_value_pfp_invariant_coefficients))) /\ (exists fom_gap_pfp_invariant_coefficients_value_bound. fom_gap_pfp_invariant_coefficients_value_bound + S (fom_value_pfp_invariant_coefficients) = p))))) - 0104
specialize prime_field_polynomial_horner_input_bounds (p) - 0105
specialize prime_field_polynomial_horner_input_bounds (d) - 0106
specialize prime_field_polynomial_horner_input_bounds (e) - 0107
specialize prime_field_polynomial_horner_input_bounds (t) - 0108
specialize prime_field_polynomial_horner_input_bounds (l) - 0109
specialize prime_field_polynomial_horner_input_bounds (x3) - 0110
apply prime_field_polynomial_horner_input_bounds - 0111
exact hrs_witness_witness_witness_right_left - 0112
cases hbounds - 0113
have hproduct : ((exists pfa_gap_invariant_product_residuebound. pfa_gap_invariant_product_residuebound + S (x4) = (p)) /\ ((exists pfa_offset_left_invariant_product_residuecongruence pfa_offset_right_invariant_product_residuecongruence. (x1*t) + (p) * pfa_offset_left_invariant_product_residuecongruence = (x4) + (p) * pfa_offset_right_invariant_product_residuecongruence))) - 0114
specialize prime_field_residue_multiply (p) - 0115
specialize prime_field_residue_multiply (x1) - 0116
specialize prime_field_residue_multiply (t) - 0117
specialize prime_field_residue_multiply (x3) - 0118
specialize prime_field_residue_multiply (t) - 0119
specialize prime_field_residue_multiply (x4) - 0120
apply prime_field_residue_multiply - 0121
exact hprevious - 0122
specialize prime_field_residue_reflexive (p) - 0123
specialize prime_field_residue_reflexive (t) - 0124
apply prime_field_residue_reflexive - 0125
exact hbounds_left - 0126
exact hrs_witness_witness_witness_right_right_left - 0127
specialize prime_field_residue_input_equal (p) - 0128
specialize prime_field_residue_input_equal (n) - 0129
specialize prime_field_residue_input_equal (x1*t+x) - 0130
specialize prime_field_residue_input_equal (r) - 0131
apply prime_field_residue_input_equal - 0132
exact hns_witness_witness_right_right - 0133
specialize prime_field_residue_add (p) - 0134
specialize prime_field_residue_add (x1*t) - 0135
specialize prime_field_residue_add (x) - 0136
specialize prime_field_residue_add (x4) - 0137
specialize prime_field_residue_add (x2) - 0138
specialize prime_field_residue_add (r) - 0139
apply prime_field_residue_add - 0140
exact hproduct - 0141
exact hcoefficient - 0142
exact hrs_witness_witness_witness_right_right_right