PQ004E

prime_field_polynomial_horner_transition_values

Adjacent actual prefix values satisfy the genuine multiply-then-add recurrence, even when their execution histories use different codes.

Alpha v34 checked-use · first admitted v32 · independently kernel and Lean verified; not Stable

Current library: Alpha v34, 4,223 checked-use theorems; Stable remains 432. Historical first admissions, original proof editions, and non-admitted aliases are preserved.

All coefficients retain the established highest-degree-first order. Trimming handles empty and all-zero prefixes; monic normalization requires a nonzero leading coefficient. Synthetic division has a nonempty input of length S n and a quotient of length n, unique in decoded values. Its coefficient recurrence, actual evaluation remainder and positive-degree drop are checked. General polynomial Euclidean division, gcd/Bezout, an arbitrary-convolution factor theorem, irreducible-polynomial existence and the full G091 prime-power-field endpoint remain open. These exact theorems are first admitted to Alpha v32; Stable remains unchanged.

Exact theorem in conservative defined notation

∀ p. ∀ b. ∀ c. ∀ a. ∀ i. ∀ h. ∀ v. ∀ r. Prime(p)FpHorner(p,b,c,a,i,h)FpHorner(p,b,c,a,S i,r)BetaAt(b,c,i,v) → ∃ x. FpMul(p,h,a,x)FpAdd(p,x,v,r)

Every linked abbreviation expands hygienically to the identical original native formula.

Definition DAG

Actual proof prerequisites

Original expanded first-order statement
forall p b c a i h v r. (~((p) = 1) /\ forall pfa_factor_left_transition_prime pfa_factor_right_transition_prime. (p) = pfa_factor_left_transition_prime * pfa_factor_right_transition_prime -> pfa_factor_left_transition_prime = 1 \/ pfa_factor_right_transition_prime = 1) -> (exists pfh_trace_code_transition_before pfh_trace_scale_transition_before. (((exists pfa_gap_transition_beforetracebase. pfa_gap_transition_beforetracebase + S (a) = (p)) /\ (((((exists ff_h_pfp_transition_beforetraceinitial. ff_h_pfp_transition_beforetraceinitial + S (0) = S ((S (0)) * pfh_trace_scale_transition_before)) /\ exists ff_q_pfp_transition_beforetraceinitial. pfh_trace_code_transition_before = ff_q_pfp_transition_beforetraceinitial * S ((S (0)) * pfh_trace_scale_transition_before) + (0))) /\ (((((exists ff_h_pfp_transition_beforetraceterminal. ff_h_pfp_transition_beforetraceterminal + S (h) = S ((S (i)) * pfh_trace_scale_transition_before)) /\ exists ff_q_pfp_transition_beforetraceterminal. pfh_trace_code_transition_before = ff_q_pfp_transition_beforetraceterminal * S ((S (i)) * pfh_trace_scale_transition_before) + (h))) /\ ((forall pfh_index_transition_beforetracesteps. (exists pfa_gap_transition_beforetracestepsindex. pfa_gap_transition_beforetracestepsindex + S (pfh_index_transition_beforetracesteps) = (i)) -> (exists pfh_coefficient_transition_beforetracestepsstep pfh_before_transition_beforetracestepsstep pfh_after_transition_beforetracestepsstep pfh_product_transition_beforetracestepsstep. ((((exists ff_h_pfp_transition_beforetracestepsstepcoefficient. ff_h_pfp_transition_beforetracestepsstepcoefficient + S (pfh_coefficient_transition_beforetracestepsstep) = S ((S (pfh_index_transition_beforetracesteps)) * c)) /\ exists ff_q_pfp_transition_beforetracestepsstepcoefficient. b = ff_q_pfp_transition_beforetracestepsstepcoefficient * S ((S (pfh_index_transition_beforetracesteps)) * c) + (pfh_coefficient_transition_beforetracestepsstep))) /\ (((((exists ff_h_pfp_transition_beforetracestepsstepbefore. ff_h_pfp_transition_beforetracestepsstepbefore + S (pfh_before_transition_beforetracestepsstep) = S ((S (pfh_index_transition_beforetracesteps)) * pfh_trace_scale_transition_before)) /\ exists ff_q_pfp_transition_beforetracestepsstepbefore. pfh_trace_code_transition_before = ff_q_pfp_transition_beforetracestepsstepbefore * S ((S (pfh_index_transition_beforetracesteps)) * pfh_trace_scale_transition_before) + (pfh_before_transition_beforetracestepsstep))) /\ (((((exists ff_h_pfp_transition_beforetracestepsstepafter. ff_h_pfp_transition_beforetracestepsstepafter + S (pfh_after_transition_beforetracestepsstep) = S ((S (S (pfh_index_transition_beforetracesteps))) * pfh_trace_scale_transition_before)) /\ exists ff_q_pfp_transition_beforetracestepsstepafter. pfh_trace_code_transition_before = ff_q_pfp_transition_beforetracestepsstepafter * S ((S (S (pfh_index_transition_beforetracesteps))) * pfh_trace_scale_transition_before) + (pfh_after_transition_beforetracestepsstep))) /\ (((((exists pfa_gap_transition_beforetracestepsstepmultiplyleft. pfa_gap_transition_beforetracestepsstepmultiplyleft + S (pfh_before_transition_beforetracestepsstep) = (p)) /\ (((exists pfa_gap_transition_beforetracestepsstepmultiplyright. pfa_gap_transition_beforetracestepsstepmultiplyright + S (a) = (p)) /\ ((((exists pfa_gap_transition_beforetracestepsstepmultiplyresultbound. pfa_gap_transition_beforetracestepsstepmultiplyresultbound + S (pfh_product_transition_beforetracestepsstep) = (p)) /\ ((exists pfa_offset_left_transition_beforetracestepsstepmultiplyresultcongruence pfa_offset_right_transition_beforetracestepsstepmultiplyresultcongruence. ((pfh_before_transition_beforetracestepsstep) * (a)) + (p) * pfa_offset_left_transition_beforetracestepsstepmultiplyresultcongruence = (pfh_product_transition_beforetracestepsstep) + (p) * pfa_offset_right_transition_beforetracestepsstepmultiplyresultcongruence))))))))) /\ ((((exists pfa_gap_transition_beforetracestepsstepaddleft. pfa_gap_transition_beforetracestepsstepaddleft + S (pfh_product_transition_beforetracestepsstep) = (p)) /\ (((exists pfa_gap_transition_beforetracestepsstepaddright. pfa_gap_transition_beforetracestepsstepaddright + S (pfh_coefficient_transition_beforetracestepsstep) = (p)) /\ ((((exists pfa_gap_transition_beforetracestepsstepaddresultbound. pfa_gap_transition_beforetracestepsstepaddresultbound + S (pfh_after_transition_beforetracestepsstep) = (p)) /\ ((exists pfa_offset_left_transition_beforetracestepsstepaddresultcongruence pfa_offset_right_transition_beforetracestepsstepaddresultcongruence. ((pfh_product_transition_beforetracestepsstep) + (pfh_coefficient_transition_beforetracestepsstep)) + (p) * pfa_offset_left_transition_beforetracestepsstepaddresultcongruence = (pfh_after_transition_beforetracestepsstep) + (p) * pfa_offset_right_transition_beforetracestepsstepaddresultcongruence))))))))))))))))))))))))))) -> (exists pfh_trace_code_transition_after pfh_trace_scale_transition_after. (((exists pfa_gap_transition_aftertracebase. pfa_gap_transition_aftertracebase + S (a) = (p)) /\ (((((exists ff_h_pfp_transition_aftertraceinitial. ff_h_pfp_transition_aftertraceinitial + S (0) = S ((S (0)) * pfh_trace_scale_transition_after)) /\ exists ff_q_pfp_transition_aftertraceinitial. pfh_trace_code_transition_after = ff_q_pfp_transition_aftertraceinitial * S ((S (0)) * pfh_trace_scale_transition_after) + (0))) /\ (((((exists ff_h_pfp_transition_aftertraceterminal. ff_h_pfp_transition_aftertraceterminal + S (r) = S ((S (S i)) * pfh_trace_scale_transition_after)) /\ exists ff_q_pfp_transition_aftertraceterminal. pfh_trace_code_transition_after = ff_q_pfp_transition_aftertraceterminal * S ((S (S i)) * pfh_trace_scale_transition_after) + (r))) /\ ((forall pfh_index_transition_aftertracesteps. (exists pfa_gap_transition_aftertracestepsindex. pfa_gap_transition_aftertracestepsindex + S (pfh_index_transition_aftertracesteps) = (S i)) -> (exists pfh_coefficient_transition_aftertracestepsstep pfh_before_transition_aftertracestepsstep pfh_after_transition_aftertracestepsstep pfh_product_transition_aftertracestepsstep. ((((exists ff_h_pfp_transition_aftertracestepsstepcoefficient. ff_h_pfp_transition_aftertracestepsstepcoefficient + S (pfh_coefficient_transition_aftertracestepsstep) = S ((S (pfh_index_transition_aftertracesteps)) * c)) /\ exists ff_q_pfp_transition_aftertracestepsstepcoefficient. b = ff_q_pfp_transition_aftertracestepsstepcoefficient * S ((S (pfh_index_transition_aftertracesteps)) * c) + (pfh_coefficient_transition_aftertracestepsstep))) /\ (((((exists ff_h_pfp_transition_aftertracestepsstepbefore. ff_h_pfp_transition_aftertracestepsstepbefore + S (pfh_before_transition_aftertracestepsstep) = S ((S (pfh_index_transition_aftertracesteps)) * pfh_trace_scale_transition_after)) /\ exists ff_q_pfp_transition_aftertracestepsstepbefore. pfh_trace_code_transition_after = ff_q_pfp_transition_aftertracestepsstepbefore * S ((S (pfh_index_transition_aftertracesteps)) * pfh_trace_scale_transition_after) + (pfh_before_transition_aftertracestepsstep))) /\ (((((exists ff_h_pfp_transition_aftertracestepsstepafter. ff_h_pfp_transition_aftertracestepsstepafter + S (pfh_after_transition_aftertracestepsstep) = S ((S (S (pfh_index_transition_aftertracesteps))) * pfh_trace_scale_transition_after)) /\ exists ff_q_pfp_transition_aftertracestepsstepafter. pfh_trace_code_transition_after = ff_q_pfp_transition_aftertracestepsstepafter * S ((S (S (pfh_index_transition_aftertracesteps))) * pfh_trace_scale_transition_after) + (pfh_after_transition_aftertracestepsstep))) /\ (((((exists pfa_gap_transition_aftertracestepsstepmultiplyleft. pfa_gap_transition_aftertracestepsstepmultiplyleft + S (pfh_before_transition_aftertracestepsstep) = (p)) /\ (((exists pfa_gap_transition_aftertracestepsstepmultiplyright. pfa_gap_transition_aftertracestepsstepmultiplyright + S (a) = (p)) /\ ((((exists pfa_gap_transition_aftertracestepsstepmultiplyresultbound. pfa_gap_transition_aftertracestepsstepmultiplyresultbound + S (pfh_product_transition_aftertracestepsstep) = (p)) /\ ((exists pfa_offset_left_transition_aftertracestepsstepmultiplyresultcongruence pfa_offset_right_transition_aftertracestepsstepmultiplyresultcongruence. ((pfh_before_transition_aftertracestepsstep) * (a)) + (p) * pfa_offset_left_transition_aftertracestepsstepmultiplyresultcongruence = (pfh_product_transition_aftertracestepsstep) + (p) * pfa_offset_right_transition_aftertracestepsstepmultiplyresultcongruence))))))))) /\ ((((exists pfa_gap_transition_aftertracestepsstepaddleft. pfa_gap_transition_aftertracestepsstepaddleft + S (pfh_product_transition_aftertracestepsstep) = (p)) /\ (((exists pfa_gap_transition_aftertracestepsstepaddright. pfa_gap_transition_aftertracestepsstepaddright + S (pfh_coefficient_transition_aftertracestepsstep) = (p)) /\ ((((exists pfa_gap_transition_aftertracestepsstepaddresultbound. pfa_gap_transition_aftertracestepsstepaddresultbound + S (pfh_after_transition_aftertracestepsstep) = (p)) /\ ((exists pfa_offset_left_transition_aftertracestepsstepaddresultcongruence pfa_offset_right_transition_aftertracestepsstepaddresultcongruence. ((pfh_product_transition_aftertracestepsstep) + (pfh_coefficient_transition_aftertracestepsstep)) + (p) * pfa_offset_left_transition_aftertracestepsstepaddresultcongruence = (pfh_after_transition_aftertracestepsstep) + (p) * pfa_offset_right_transition_aftertracestepsstepaddresultcongruence))))))))))))))))))))))))))) -> (((exists ff_h_pfp_transition_coefficient. ff_h_pfp_transition_coefficient + S (v) = S ((S (i)) * c)) /\ exists ff_q_pfp_transition_coefficient. b = ff_q_pfp_transition_coefficient * S ((S (i)) * c) + (v))) -> exists k. ((((exists pfa_gap_transition_productleft. pfa_gap_transition_productleft + S (h) = (p)) /\ (((exists pfa_gap_transition_productright. pfa_gap_transition_productright + S (a) = (p)) /\ ((((exists pfa_gap_transition_productresultbound. pfa_gap_transition_productresultbound + S (k) = (p)) /\ ((exists pfa_offset_left_transition_productresultcongruence pfa_offset_right_transition_productresultcongruence. ((h) * (a)) + (p) * pfa_offset_left_transition_productresultcongruence = (k) + (p) * pfa_offset_right_transition_productresultcongruence))))))))) /\ ((((exists pfa_gap_transition_sumleft. pfa_gap_transition_sumleft + S (k) = (p)) /\ (((exists pfa_gap_transition_sumright. pfa_gap_transition_sumright + S (v) = (p)) /\ ((((exists pfa_gap_transition_sumresultbound. pfa_gap_transition_sumresultbound + S (r) = (p)) /\ ((exists pfa_offset_left_transition_sumresultcongruence pfa_offset_right_transition_sumresultcongruence. ((k) + (v)) + (p) * pfa_offset_left_transition_sumresultcongruence = (r) + (p) * pfa_offset_right_transition_sumresultcongruence)))))))))))

Complete tactic proof in conservative notation

All 56 original proof lines are preserved. Only local proposition formulas are abbreviated; every abbreviation has an exact binder-safe expansion check. The linked exact edition contains the unchanged replay script.

Read the argument

Proof checkpoints

56 script commands · 11 reading checkpoints · 3 local claims

This is a reading aid, not a new proof or a proof-tree certificate. Checkpoint groups are consecutive commands, not inferred branch boundaries. Every step links to the preserved script.

Definition notation is shown below. Open the paired exact edition for the original native formulas. Source pairing is not a new equivalence certificate.

01Fix variables and assumptionsL1–10

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

  1. L1
    intro p
  2. L2
    intro b
  3. L3
    intro c
  4. L4
    intro a
  5. L5
    intro i
  6. L6
    intro h
  7. L7
    intro v
  8. L8
    intro r
  9. L9
    intro hp
  10. L10
    intro he
02Fix variables and assumptionsL11–12

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

  1. L11
    intro hn
  2. L12
    intro hv
03Establish hdL13–21

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

  1. L13
    have hd : ∃ v. ∃ h. ∃ k. BetaAt(b,c,i,v) ∧ (FpHorner(p,b,c,a,i,h) ∧ (FpMul(p,h,a,k) ∧ FpAdd(p,k,v,r)))Definitions: BetaAt(b,c,i,v)FpHorner(p,b,c,a,i,h)FpMul(p,h,a,k)FpAdd(p,k,v,r)Original native command in the exact edition
  2. L14
    specialize prime_field_polynomial_horner_successor_decompose (p)
  3. L15
    specialize prime_field_polynomial_horner_successor_decompose (b)
  4. L16
    specialize prime_field_polynomial_horner_successor_decompose (c)
  5. L17
    specialize prime_field_polynomial_horner_successor_decompose (a)
  6. L18
    specialize prime_field_polynomial_horner_successor_decompose (i)
  7. L19
    specialize prime_field_polynomial_horner_successor_decompose (r)
  8. L20
    apply prime_field_polynomial_horner_successor_decompose
  9. L21
    exact hn
04Separate the logical casesL22–27

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

  1. L22
    cases hd
  2. L23
    cases hd_witness
  3. L24
    cases hd_witness_witness
  4. L25
    cases hd_witness_witness_witness
  5. L26
    cases hd_witness_witness_witness_right
  6. L27
    cases hd_witness_witness_witness_right_right
05Establish hveL28–36

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

  1. L28
    have hve : x=v
  2. L29
    specialize beta_at_unique (b)
  3. L30
    specialize beta_at_unique (c)
  4. L31
    specialize beta_at_unique (i)
  5. L32
    specialize beta_at_unique (x)
  6. L33
    specialize beta_at_unique (v)
  7. L34
    apply beta_at_unique
  8. L35
    exact hd_witness_witness_witness_left
  9. L36
    exact hv
06Establish hheL37–46

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

  1. L37
    have hhe : x1=h
  2. L38
    specialize prime_field_polynomial_horner_functional (p)
  3. L39
    specialize prime_field_polynomial_horner_functional (b)
  4. L40
    specialize prime_field_polynomial_horner_functional (c)
  5. L41
    specialize prime_field_polynomial_horner_functional (a)
  6. L42
    specialize prime_field_polynomial_horner_functional (i)
  7. L43
    specialize prime_field_polynomial_horner_functional (x1)
  8. L44
    specialize prime_field_polynomial_horner_functional (h)
  9. L45
    apply prime_field_polynomial_horner_functional
  10. L46
    exact hp
07Use earlier factsL47–48

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

  1. L47
    exact hd_witness_witness_witness_right_left
  2. L48
    exact he
08Calculate and transport equalitiesL49–52

Carry out the recorded arithmetic or equality steps; inspect the exact commands for their direction and premises.

  1. L49
    rewrite hhe at hd_witness_witness_witness_right_right_left
  2. L50
    rewrite hhe at hd_witness_witness_witness_right_right_left
  3. L51
    rewrite hve at hd_witness_witness_witness_right_right_right
  4. L52
    rewrite hve at hd_witness_witness_witness_right_right_right
09Construct an explicit witnessL53–53

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

  1. L53
    exists x2
10Separate the logical casesL54–54

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

  1. L54
    split
11Use earlier factsL55–56

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

  1. L55
    exact hd_witness_witness_witness_right_right_left
  2. L56
    exact hd_witness_witness_witness_right_right_right

Library-wide reading audit

Original defined command ledger · 56 lines
  1. 0001intro p
  2. 0002intro b
  3. 0003intro c
  4. 0004intro a
  5. 0005intro i
  6. 0006intro h
  7. 0007intro v
  8. 0008intro r
  9. 0009intro hp
  10. 0010intro he
  11. 0011intro hn
  12. 0012intro hv
  13. 0013have hd : ∃ v. ∃ h. ∃ k. BetaAt(b,c,i,v) ∧ (FpHorner(p,b,c,a,i,h) ∧ (FpMul(p,h,a,k)FpAdd(p,k,v,r)))
  14. 0014specialize prime_field_polynomial_horner_successor_decompose (p)
  15. 0015specialize prime_field_polynomial_horner_successor_decompose (b)
  16. 0016specialize prime_field_polynomial_horner_successor_decompose (c)
  17. 0017specialize prime_field_polynomial_horner_successor_decompose (a)
  18. 0018specialize prime_field_polynomial_horner_successor_decompose (i)
  19. 0019specialize prime_field_polynomial_horner_successor_decompose (r)
  20. 0020apply prime_field_polynomial_horner_successor_decompose
  21. 0021exact hn
  22. 0022cases hd
  23. 0023cases hd_witness
  24. 0024cases hd_witness_witness
  25. 0025cases hd_witness_witness_witness
  26. 0026cases hd_witness_witness_witness_right
  27. 0027cases hd_witness_witness_witness_right_right
  28. 0028have hve : x=v
  29. 0029specialize beta_at_unique (b)
  30. 0030specialize beta_at_unique (c)
  31. 0031specialize beta_at_unique (i)
  32. 0032specialize beta_at_unique (x)
  33. 0033specialize beta_at_unique (v)
  34. 0034apply beta_at_unique
  35. 0035exact hd_witness_witness_witness_left
  36. 0036exact hv
  37. 0037have hhe : x1=h
  38. 0038specialize prime_field_polynomial_horner_functional (p)
  39. 0039specialize prime_field_polynomial_horner_functional (b)
  40. 0040specialize prime_field_polynomial_horner_functional (c)
  41. 0041specialize prime_field_polynomial_horner_functional (a)
  42. 0042specialize prime_field_polynomial_horner_functional (i)
  43. 0043specialize prime_field_polynomial_horner_functional (x1)
  44. 0044specialize prime_field_polynomial_horner_functional (h)
  45. 0045apply prime_field_polynomial_horner_functional
  46. 0046exact hp
  47. 0047exact hd_witness_witness_witness_right_left
  48. 0048exact he
  49. 0049rewrite hhe at hd_witness_witness_witness_right_right_left
  50. 0050rewrite hhe at hd_witness_witness_witness_right_right_left
  51. 0051rewrite hve at hd_witness_witness_witness_right_right_right
  52. 0052rewrite hve at hd_witness_witness_witness_right_right_right
  53. 0053exists x2
  54. 0054split
  55. 0055exact hd_witness_witness_witness_right_right_left
  56. 0056exact hd_witness_witness_witness_right_right_right