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 a n qb qc r i h. (exists pfs_history_code_entry_division pfs_history_scale_entry_division. ((((exists pfa_gap_entry_divisiontracebase. pfa_gap_entry_divisiontracebase + S (a) = (p)) /\ (((((exists ff_h_pfp_entry_divisiontraceinitial. ff_h_pfp_entry_divisiontraceinitial + S (0) = S ((S (0)) * pfs_history_scale_entry_division)) /\ exists ff_q_pfp_entry_divisiontraceinitial. pfs_history_code_entry_division = ff_q_pfp_entry_divisiontraceinitial * S ((S (0)) * pfs_history_scale_entry_division) + (0))) /\ (((((exists ff_h_pfp_entry_divisiontraceterminal. ff_h_pfp_entry_divisiontraceterminal + S (r) = S ((S (S (n))) * pfs_history_scale_entry_division)) /\ exists ff_q_pfp_entry_divisiontraceterminal. pfs_history_code_entry_division = ff_q_pfp_entry_divisiontraceterminal * S ((S (S (n))) * pfs_history_scale_entry_division) + (r))) /\ ((forall pfh_index_entry_divisiontracesteps. (exists pfa_gap_entry_divisiontracestepsindex. pfa_gap_entry_divisiontracestepsindex + S (pfh_index_entry_divisiontracesteps) = (S (n))) -> (exists pfh_coefficient_entry_divisiontracestepsstep pfh_before_entry_divisiontracestepsstep pfh_after_entry_divisiontracestepsstep pfh_product_entry_divisiontracestepsstep. ((((exists ff_h_pfp_entry_divisiontracestepsstepcoefficient. ff_h_pfp_entry_divisiontracestepsstepcoefficient + S (pfh_coefficient_entry_divisiontracestepsstep) = S ((S (pfh_index_entry_divisiontracesteps)) * c)) /\ exists ff_q_pfp_entry_divisiontracestepsstepcoefficient. b = ff_q_pfp_entry_divisiontracestepsstepcoefficient * S ((S (pfh_index_entry_divisiontracesteps)) * c) + (pfh_coefficient_entry_divisiontracestepsstep))) /\ (((((exists ff_h_pfp_entry_divisiontracestepsstepbefore. ff_h_pfp_entry_divisiontracestepsstepbefore + S (pfh_before_entry_divisiontracestepsstep) = S ((S (pfh_index_entry_divisiontracesteps)) * pfs_history_scale_entry_division)) /\ exists ff_q_pfp_entry_divisiontracestepsstepbefore. pfs_history_code_entry_division = ff_q_pfp_entry_divisiontracestepsstepbefore * S ((S (pfh_index_entry_divisiontracesteps)) * pfs_history_scale_entry_division) + (pfh_before_entry_divisiontracestepsstep))) /\ (((((exists ff_h_pfp_entry_divisiontracestepsstepafter. ff_h_pfp_entry_divisiontracestepsstepafter + S (pfh_after_entry_divisiontracestepsstep) = S ((S (S (pfh_index_entry_divisiontracesteps))) * pfs_history_scale_entry_division)) /\ exists ff_q_pfp_entry_divisiontracestepsstepafter. pfs_history_code_entry_division = ff_q_pfp_entry_divisiontracestepsstepafter * S ((S (S (pfh_index_entry_divisiontracesteps))) * pfs_history_scale_entry_division) + (pfh_after_entry_divisiontracestepsstep))) /\ (((((exists pfa_gap_entry_divisiontracestepsstepmultiplyleft. pfa_gap_entry_divisiontracestepsstepmultiplyleft + S (pfh_before_entry_divisiontracestepsstep) = (p)) /\ (((exists pfa_gap_entry_divisiontracestepsstepmultiplyright. pfa_gap_entry_divisiontracestepsstepmultiplyright + S (a) = (p)) /\ ((((exists pfa_gap_entry_divisiontracestepsstepmultiplyresultbound. pfa_gap_entry_divisiontracestepsstepmultiplyresultbound + S (pfh_product_entry_divisiontracestepsstep) = (p)) /\ ((exists pfa_offset_left_entry_divisiontracestepsstepmultiplyresultcongruence pfa_offset_right_entry_divisiontracestepsstepmultiplyresultcongruence. ((pfh_before_entry_divisiontracestepsstep) * (a)) + (p) * pfa_offset_left_entry_divisiontracestepsstepmultiplyresultcongruence = (pfh_product_entry_divisiontracestepsstep) + (p) * pfa_offset_right_entry_divisiontracestepsstepmultiplyresultcongruence))))))))) /\ ((((exists pfa_gap_entry_divisiontracestepsstepaddleft. pfa_gap_entry_divisiontracestepsstepaddleft + S (pfh_product_entry_divisiontracestepsstep) = (p)) /\ (((exists pfa_gap_entry_divisiontracestepsstepaddright. pfa_gap_entry_divisiontracestepsstepaddright + S (pfh_coefficient_entry_divisiontracestepsstep) = (p)) /\ ((((exists pfa_gap_entry_divisiontracestepsstepaddresultbound. pfa_gap_entry_divisiontracestepsstepaddresultbound + S (pfh_after_entry_divisiontracestepsstep) = (p)) /\ ((exists pfa_offset_left_entry_divisiontracestepsstepaddresultcongruence pfa_offset_right_entry_divisiontracestepsstepaddresultcongruence. ((pfh_product_entry_divisiontracestepsstep) + (pfh_coefficient_entry_divisiontracestepsstep)) + (p) * pfa_offset_left_entry_divisiontracestepsstepaddresultcongruence = (pfh_after_entry_divisiontracestepsstep) + (p) * pfa_offset_right_entry_divisiontracestepsstepaddresultcongruence)))))))))))))))))))))))))) /\ ((forall ff_index_mcp_pfs_entry_divisionquotient ff_source_mcp_pfs_entry_divisionquotient ff_target_mcp_pfs_entry_divisionquotient. (exists mcp_gap_pfs_entry_divisionquotient_bound. mcp_gap_pfs_entry_divisionquotient_bound + S (ff_index_mcp_pfs_entry_divisionquotient) = (n)) -> (((exists fs_h_mcp_pfs_entry_divisionquotient_source. fs_h_mcp_pfs_entry_divisionquotient_source + S (ff_source_mcp_pfs_entry_divisionquotient) = S ((S ((1) + (1) * ff_index_mcp_pfs_entry_divisionquotient)) * pfs_history_scale_entry_division)) /\ exists fs_q_mcp_pfs_entry_divisionquotient_source. pfs_history_code_entry_division = fs_q_mcp_pfs_entry_divisionquotient_source * S ((S ((1) + (1) * ff_index_mcp_pfs_entry_divisionquotient)) * pfs_history_scale_entry_division) + (ff_source_mcp_pfs_entry_divisionquotient))) -> (((exists fs_h_mcp_pfs_entry_divisionquotient_target. fs_h_mcp_pfs_entry_divisionquotient_target + S (ff_target_mcp_pfs_entry_divisionquotient) = S ((S (ff_index_mcp_pfs_entry_divisionquotient)) * qc)) /\ exists fs_q_mcp_pfs_entry_divisionquotient_target. qb = fs_q_mcp_pfs_entry_divisionquotient_target * S ((S (ff_index_mcp_pfs_entry_divisionquotient)) * qc) + (ff_target_mcp_pfs_entry_divisionquotient))) -> ff_target_mcp_pfs_entry_divisionquotient = ff_source_mcp_pfs_entry_divisionquotient)))) -> (exists pfa_gap_entry_index. pfa_gap_entry_index + S (i) = (n)) -> (((exists ff_h_pfp_entry_quotient. ff_h_pfp_entry_quotient + S (h) = S ((S (i)) * qc)) /\ exists ff_q_pfp_entry_quotient. qb = ff_q_pfp_entry_quotient * S ((S (i)) * qc) + (h))) -> (exists pfh_trace_code_entry_execution pfh_trace_scale_entry_execution. (((exists pfa_gap_entry_executiontracebase. pfa_gap_entry_executiontracebase + S (a) = (p)) /\ (((((exists ff_h_pfp_entry_executiontraceinitial. ff_h_pfp_entry_executiontraceinitial + S (0) = S ((S (0)) * pfh_trace_scale_entry_execution)) /\ exists ff_q_pfp_entry_executiontraceinitial. pfh_trace_code_entry_execution = ff_q_pfp_entry_executiontraceinitial * S ((S (0)) * pfh_trace_scale_entry_execution) + (0))) /\ (((((exists ff_h_pfp_entry_executiontraceterminal. ff_h_pfp_entry_executiontraceterminal + S (h) = S ((S (S i)) * pfh_trace_scale_entry_execution)) /\ exists ff_q_pfp_entry_executiontraceterminal. pfh_trace_code_entry_execution = ff_q_pfp_entry_executiontraceterminal * S ((S (S i)) * pfh_trace_scale_entry_execution) + (h))) /\ ((forall pfh_index_entry_executiontracesteps. (exists pfa_gap_entry_executiontracestepsindex. pfa_gap_entry_executiontracestepsindex + S (pfh_index_entry_executiontracesteps) = (S i)) -> (exists pfh_coefficient_entry_executiontracestepsstep pfh_before_entry_executiontracestepsstep pfh_after_entry_executiontracestepsstep pfh_product_entry_executiontracestepsstep. ((((exists ff_h_pfp_entry_executiontracestepsstepcoefficient. ff_h_pfp_entry_executiontracestepsstepcoefficient + S (pfh_coefficient_entry_executiontracestepsstep) = S ((S (pfh_index_entry_executiontracesteps)) * c)) /\ exists ff_q_pfp_entry_executiontracestepsstepcoefficient. b = ff_q_pfp_entry_executiontracestepsstepcoefficient * S ((S (pfh_index_entry_executiontracesteps)) * c) + (pfh_coefficient_entry_executiontracestepsstep))) /\ (((((exists ff_h_pfp_entry_executiontracestepsstepbefore. ff_h_pfp_entry_executiontracestepsstepbefore + S (pfh_before_entry_executiontracestepsstep) = S ((S (pfh_index_entry_executiontracesteps)) * pfh_trace_scale_entry_execution)) /\ exists ff_q_pfp_entry_executiontracestepsstepbefore. pfh_trace_code_entry_execution = ff_q_pfp_entry_executiontracestepsstepbefore * S ((S (pfh_index_entry_executiontracesteps)) * pfh_trace_scale_entry_execution) + (pfh_before_entry_executiontracestepsstep))) /\ (((((exists ff_h_pfp_entry_executiontracestepsstepafter. ff_h_pfp_entry_executiontracestepsstepafter + S (pfh_after_entry_executiontracestepsstep) = S ((S (S (pfh_index_entry_executiontracesteps))) * pfh_trace_scale_entry_execution)) /\ exists ff_q_pfp_entry_executiontracestepsstepafter. pfh_trace_code_entry_execution = ff_q_pfp_entry_executiontracestepsstepafter * S ((S (S (pfh_index_entry_executiontracesteps))) * pfh_trace_scale_entry_execution) + (pfh_after_entry_executiontracestepsstep))) /\ (((((exists pfa_gap_entry_executiontracestepsstepmultiplyleft. pfa_gap_entry_executiontracestepsstepmultiplyleft + S (pfh_before_entry_executiontracestepsstep) = (p)) /\ (((exists pfa_gap_entry_executiontracestepsstepmultiplyright. pfa_gap_entry_executiontracestepsstepmultiplyright + S (a) = (p)) /\ ((((exists pfa_gap_entry_executiontracestepsstepmultiplyresultbound. pfa_gap_entry_executiontracestepsstepmultiplyresultbound + S (pfh_product_entry_executiontracestepsstep) = (p)) /\ ((exists pfa_offset_left_entry_executiontracestepsstepmultiplyresultcongruence pfa_offset_right_entry_executiontracestepsstepmultiplyresultcongruence. ((pfh_before_entry_executiontracestepsstep) * (a)) + (p) * pfa_offset_left_entry_executiontracestepsstepmultiplyresultcongruence = (pfh_product_entry_executiontracestepsstep) + (p) * pfa_offset_right_entry_executiontracestepsstepmultiplyresultcongruence))))))))) /\ ((((exists pfa_gap_entry_executiontracestepsstepaddleft. pfa_gap_entry_executiontracestepsstepaddleft + S (pfh_product_entry_executiontracestepsstep) = (p)) /\ (((exists pfa_gap_entry_executiontracestepsstepaddright. pfa_gap_entry_executiontracestepsstepaddright + S (pfh_coefficient_entry_executiontracestepsstep) = (p)) /\ ((((exists pfa_gap_entry_executiontracestepsstepaddresultbound. pfa_gap_entry_executiontracestepsstepaddresultbound + S (pfh_after_entry_executiontracestepsstep) = (p)) /\ ((exists pfa_offset_left_entry_executiontracestepsstepaddresultcongruence pfa_offset_right_entry_executiontracestepsstepaddresultcongruence. ((pfh_product_entry_executiontracestepsstep) + (pfh_coefficient_entry_executiontracestepsstep)) + (p) * pfa_offset_left_entry_executiontracestepsstepaddresultcongruence = (pfh_after_entry_executiontracestepsstep) + (p) * pfa_offset_right_entry_executiontracestepsstepaddresultcongruence)))))))))))))))))))))))))))Constructive proof overview
Generated structural guide
Each decoded quotient coefficient is precisely the actual Horner value of the corresponding nonempty input prefix.
The unchanged tactic script uses 6 declared prerequisites and contains 60 exact native proof lines.
Alpha v34 checked-use · first admitted v32 · independently kernel and Lean verified; not Stable
Proof neighborhood
Direct dependencies
beta_at_exists Stable theorem; checked-use authorized one_mul Stable theorem; checked-use authorized add_succ_left Stable theorem; checked-use authorized zero_add Stable theorem; checked-use authorized PQ0045 prime_field_polynomial_horner_trace_prefix le_succ Stable 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 (1)
01Fix variables and assumptionsL1–10
02Fix variables and assumptionsL11–13
03Separate the logical casesL14–16
04Establish heL17–21
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply beta at exists.
- L17
have he : exists z. (((exists ff_h_pfp_entry_history_state. ff_h_pfp_entry_history_state + S (z) = S ((S (S i)) * x1)) /\ exists ff_q_pfp_entry_history_state. x = ff_q_pfp_entry_history_state * S ((S (S i)) * x1) + (z))) - L18
specialize beta_at_exists (x) - L19
specialize beta_at_exists (x1) - L20
specialize beta_at_exists (S i) - L21
apply beta_at_exists
05Separate the logical casesL22–22
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L22
cases he
06Establish hindexL23–24
07Establish hshiftL25–28
Establish this local claim before using it. It is not an additional assumption.
08Establish heqL29–36
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply hs witness witness right.
09Establish hexL37–46
Establish this local claim before using it. It is not an additional assumption.
- L37
have hex : FpHorner(p,b,c,a,S i,x2)Definitions: FpHorner - L38
specialize prime_field_polynomial_horner_trace_prefix (p) - L39
specialize prime_field_polynomial_horner_trace_prefix (b) - L40
specialize prime_field_polynomial_horner_trace_prefix (c) - L41
specialize prime_field_polynomial_horner_trace_prefix (a) - L42
specialize prime_field_polynomial_horner_trace_prefix (S n) - L43
specialize prime_field_polynomial_horner_trace_prefix (r) - L44
specialize prime_field_polynomial_horner_trace_prefix (x) - L45
specialize prime_field_polynomial_horner_trace_prefix (x1) - L46
specialize prime_field_polynomial_horner_trace_prefix (S i)
10Use earlier factsL47–54
Instantiate or apply named facts and discharge the corresponding proof obligations.
Original exact command ledger · 60 lines
- 0001
intro p - 0002
intro b - 0003
intro c - 0004
intro a - 0005
intro n - 0006
intro qb - 0007
intro qc - 0008
intro r - 0009
intro i - 0010
intro h - 0011
intro hs - 0012
intro hi - 0013
intro hh - 0014
cases hs - 0015
cases hs_witness - 0016
cases hs_witness_witness - 0017
have he : exists z. (((exists ff_h_pfp_entry_history_state. ff_h_pfp_entry_history_state + S (z) = S ((S (S i)) * x1)) /\ exists ff_q_pfp_entry_history_state. x = ff_q_pfp_entry_history_state * S ((S (S i)) * x1) + (z))) - 0018
specialize beta_at_exists (x) - 0019
specialize beta_at_exists (x1) - 0020
specialize beta_at_exists (S i) - 0021
apply beta_at_exists - 0022
cases he - 0023
have hindex : 1+1*i=S i - 0024
simp [one_mul,add_succ_left,zero_add] - 0025
have hshift : ((exists ff_h_pfp_entry_shifted_state. ff_h_pfp_entry_shifted_state + S (x2) = S ((S (1+1*i)) * x1)) /\ exists ff_q_pfp_entry_shifted_state. x = ff_q_pfp_entry_shifted_state * S ((S (1+1*i)) * x1) + (x2)) - 0026
rewrite hindex - 0027
rewrite hindex - 0028
exact he_witness - 0029
have heq : h=x2 - 0030
specialize hs_witness_witness_right (i) - 0031
specialize hs_witness_witness_right (x2) - 0032
specialize hs_witness_witness_right (h) - 0033
apply hs_witness_witness_right - 0034
exact hi - 0035
exact hshift - 0036
exact hh - 0037
have hex : exists pfh_trace_code_entry_execution_chosen pfh_trace_scale_entry_execution_chosen. (((exists pfa_gap_entry_execution_chosentracebase. pfa_gap_entry_execution_chosentracebase + S (a) = (p)) /\ (((((exists ff_h_pfp_entry_execution_chosentraceinitial. ff_h_pfp_entry_execution_chosentraceinitial + S (0) = S ((S (0)) * pfh_trace_scale_entry_execution_chosen)) /\ exists ff_q_pfp_entry_execution_chosentraceinitial. pfh_trace_code_entry_execution_chosen = ff_q_pfp_entry_execution_chosentraceinitial * S ((S (0)) * pfh_trace_scale_entry_execution_chosen) + (0))) /\ (((((exists ff_h_pfp_entry_execution_chosentraceterminal. ff_h_pfp_entry_execution_chosentraceterminal + S (x2) = S ((S (S i)) * pfh_trace_scale_entry_execution_chosen)) /\ exists ff_q_pfp_entry_execution_chosentraceterminal. pfh_trace_code_entry_execution_chosen = ff_q_pfp_entry_execution_chosentraceterminal * S ((S (S i)) * pfh_trace_scale_entry_execution_chosen) + (x2))) /\ ((forall pfh_index_entry_execution_chosentracesteps. (exists pfa_gap_entry_execution_chosentracestepsindex. pfa_gap_entry_execution_chosentracestepsindex + S (pfh_index_entry_execution_chosentracesteps) = (S i)) -> (exists pfh_coefficient_entry_execution_chosentracestepsstep pfh_before_entry_execution_chosentracestepsstep pfh_after_entry_execution_chosentracestepsstep pfh_product_entry_execution_chosentracestepsstep. ((((exists ff_h_pfp_entry_execution_chosentracestepsstepcoefficient. ff_h_pfp_entry_execution_chosentracestepsstepcoefficient + S (pfh_coefficient_entry_execution_chosentracestepsstep) = S ((S (pfh_index_entry_execution_chosentracesteps)) * c)) /\ exists ff_q_pfp_entry_execution_chosentracestepsstepcoefficient. b = ff_q_pfp_entry_execution_chosentracestepsstepcoefficient * S ((S (pfh_index_entry_execution_chosentracesteps)) * c) + (pfh_coefficient_entry_execution_chosentracestepsstep))) /\ (((((exists ff_h_pfp_entry_execution_chosentracestepsstepbefore. ff_h_pfp_entry_execution_chosentracestepsstepbefore + S (pfh_before_entry_execution_chosentracestepsstep) = S ((S (pfh_index_entry_execution_chosentracesteps)) * pfh_trace_scale_entry_execution_chosen)) /\ exists ff_q_pfp_entry_execution_chosentracestepsstepbefore. pfh_trace_code_entry_execution_chosen = ff_q_pfp_entry_execution_chosentracestepsstepbefore * S ((S (pfh_index_entry_execution_chosentracesteps)) * pfh_trace_scale_entry_execution_chosen) + (pfh_before_entry_execution_chosentracestepsstep))) /\ (((((exists ff_h_pfp_entry_execution_chosentracestepsstepafter. ff_h_pfp_entry_execution_chosentracestepsstepafter + S (pfh_after_entry_execution_chosentracestepsstep) = S ((S (S (pfh_index_entry_execution_chosentracesteps))) * pfh_trace_scale_entry_execution_chosen)) /\ exists ff_q_pfp_entry_execution_chosentracestepsstepafter. pfh_trace_code_entry_execution_chosen = ff_q_pfp_entry_execution_chosentracestepsstepafter * S ((S (S (pfh_index_entry_execution_chosentracesteps))) * pfh_trace_scale_entry_execution_chosen) + (pfh_after_entry_execution_chosentracestepsstep))) /\ (((((exists pfa_gap_entry_execution_chosentracestepsstepmultiplyleft. pfa_gap_entry_execution_chosentracestepsstepmultiplyleft + S (pfh_before_entry_execution_chosentracestepsstep) = (p)) /\ (((exists pfa_gap_entry_execution_chosentracestepsstepmultiplyright. pfa_gap_entry_execution_chosentracestepsstepmultiplyright + S (a) = (p)) /\ ((((exists pfa_gap_entry_execution_chosentracestepsstepmultiplyresultbound. pfa_gap_entry_execution_chosentracestepsstepmultiplyresultbound + S (pfh_product_entry_execution_chosentracestepsstep) = (p)) /\ ((exists pfa_offset_left_entry_execution_chosentracestepsstepmultiplyresultcongruence pfa_offset_right_entry_execution_chosentracestepsstepmultiplyresultcongruence. ((pfh_before_entry_execution_chosentracestepsstep) * (a)) + (p) * pfa_offset_left_entry_execution_chosentracestepsstepmultiplyresultcongruence = (pfh_product_entry_execution_chosentracestepsstep) + (p) * pfa_offset_right_entry_execution_chosentracestepsstepmultiplyresultcongruence))))))))) /\ ((((exists pfa_gap_entry_execution_chosentracestepsstepaddleft. pfa_gap_entry_execution_chosentracestepsstepaddleft + S (pfh_product_entry_execution_chosentracestepsstep) = (p)) /\ (((exists pfa_gap_entry_execution_chosentracestepsstepaddright. pfa_gap_entry_execution_chosentracestepsstepaddright + S (pfh_coefficient_entry_execution_chosentracestepsstep) = (p)) /\ ((((exists pfa_gap_entry_execution_chosentracestepsstepaddresultbound. pfa_gap_entry_execution_chosentracestepsstepaddresultbound + S (pfh_after_entry_execution_chosentracestepsstep) = (p)) /\ ((exists pfa_offset_left_entry_execution_chosentracestepsstepaddresultcongruence pfa_offset_right_entry_execution_chosentracestepsstepaddresultcongruence. ((pfh_product_entry_execution_chosentracestepsstep) + (pfh_coefficient_entry_execution_chosentracestepsstep)) + (p) * pfa_offset_left_entry_execution_chosentracestepsstepaddresultcongruence = (pfh_after_entry_execution_chosentracestepsstep) + (p) * pfa_offset_right_entry_execution_chosentracestepsstepaddresultcongruence)))))))))))))))))))))))))) - 0038
specialize prime_field_polynomial_horner_trace_prefix (p) - 0039
specialize prime_field_polynomial_horner_trace_prefix (b) - 0040
specialize prime_field_polynomial_horner_trace_prefix (c) - 0041
specialize prime_field_polynomial_horner_trace_prefix (a) - 0042
specialize prime_field_polynomial_horner_trace_prefix (S n) - 0043
specialize prime_field_polynomial_horner_trace_prefix (r) - 0044
specialize prime_field_polynomial_horner_trace_prefix (x) - 0045
specialize prime_field_polynomial_horner_trace_prefix (x1) - 0046
specialize prime_field_polynomial_horner_trace_prefix (S i) - 0047
specialize prime_field_polynomial_horner_trace_prefix (x2) - 0048
apply prime_field_polynomial_horner_trace_prefix - 0049
exact hs_witness_witness_left - 0050
specialize le_succ (S i) - 0051
specialize le_succ (n) - 0052
apply le_succ - 0053
exact hi - 0054
exact he_witness - 0055
have hback : x2=h - 0056
symm - 0057
exact heq - 0058
rewrite hback at hex - 0059
rewrite hback at hex - 0060
exact hex