PP0024

prime_field_polynomial_horner_empty

The empty polynomial execution returns zero by its actual initial and terminal beta entries.

Alpha v34 checked-use · first admitted v31 · 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.

Length is representation length, not polynomial degree. Leading zeros and the empty zero polynomial are allowed; the canonical argument guard x<p also applies to the empty case. Evaluation is defined by actual field-operation steps, not an assumed residue invariant. Polynomial division, gcd, irreducibles and general prime-power extension fields remain open; this does not close G091.

Exact theorem in conservative defined notation

∀ p. ∀ b. ∀ c. ∀ t. ∀ r. FpHorner(p,b,c,t,0,r) → r = 0

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 t r. (exists pfh_trace_code_empty_execution pfh_trace_scale_empty_execution. (((exists pfa_gap_empty_executiontracebase. pfa_gap_empty_executiontracebase + S (t) = (p)) /\ (((((exists ff_h_pfp_empty_executiontraceinitial. ff_h_pfp_empty_executiontraceinitial + S (0) = S ((S (0)) * pfh_trace_scale_empty_execution)) /\ exists ff_q_pfp_empty_executiontraceinitial. pfh_trace_code_empty_execution = ff_q_pfp_empty_executiontraceinitial * S ((S (0)) * pfh_trace_scale_empty_execution) + (0))) /\ (((((exists ff_h_pfp_empty_executiontraceterminal. ff_h_pfp_empty_executiontraceterminal + S (r) = S ((S (0)) * pfh_trace_scale_empty_execution)) /\ exists ff_q_pfp_empty_executiontraceterminal. pfh_trace_code_empty_execution = ff_q_pfp_empty_executiontraceterminal * S ((S (0)) * pfh_trace_scale_empty_execution) + (r))) /\ ((forall pfh_index_empty_executiontracesteps. (exists pfa_gap_empty_executiontracestepsindex. pfa_gap_empty_executiontracestepsindex + S (pfh_index_empty_executiontracesteps) = (0)) -> (exists pfh_coefficient_empty_executiontracestepsstep pfh_before_empty_executiontracestepsstep pfh_after_empty_executiontracestepsstep pfh_product_empty_executiontracestepsstep. ((((exists ff_h_pfp_empty_executiontracestepsstepcoefficient. ff_h_pfp_empty_executiontracestepsstepcoefficient + S (pfh_coefficient_empty_executiontracestepsstep) = S ((S (pfh_index_empty_executiontracesteps)) * c)) /\ exists ff_q_pfp_empty_executiontracestepsstepcoefficient. b = ff_q_pfp_empty_executiontracestepsstepcoefficient * S ((S (pfh_index_empty_executiontracesteps)) * c) + (pfh_coefficient_empty_executiontracestepsstep))) /\ (((((exists ff_h_pfp_empty_executiontracestepsstepbefore. ff_h_pfp_empty_executiontracestepsstepbefore + S (pfh_before_empty_executiontracestepsstep) = S ((S (pfh_index_empty_executiontracesteps)) * pfh_trace_scale_empty_execution)) /\ exists ff_q_pfp_empty_executiontracestepsstepbefore. pfh_trace_code_empty_execution = ff_q_pfp_empty_executiontracestepsstepbefore * S ((S (pfh_index_empty_executiontracesteps)) * pfh_trace_scale_empty_execution) + (pfh_before_empty_executiontracestepsstep))) /\ (((((exists ff_h_pfp_empty_executiontracestepsstepafter. ff_h_pfp_empty_executiontracestepsstepafter + S (pfh_after_empty_executiontracestepsstep) = S ((S (S (pfh_index_empty_executiontracesteps))) * pfh_trace_scale_empty_execution)) /\ exists ff_q_pfp_empty_executiontracestepsstepafter. pfh_trace_code_empty_execution = ff_q_pfp_empty_executiontracestepsstepafter * S ((S (S (pfh_index_empty_executiontracesteps))) * pfh_trace_scale_empty_execution) + (pfh_after_empty_executiontracestepsstep))) /\ (((((exists pfa_gap_empty_executiontracestepsstepmultiplyleft. pfa_gap_empty_executiontracestepsstepmultiplyleft + S (pfh_before_empty_executiontracestepsstep) = (p)) /\ (((exists pfa_gap_empty_executiontracestepsstepmultiplyright. pfa_gap_empty_executiontracestepsstepmultiplyright + S (t) = (p)) /\ ((((exists pfa_gap_empty_executiontracestepsstepmultiplyresultbound. pfa_gap_empty_executiontracestepsstepmultiplyresultbound + S (pfh_product_empty_executiontracestepsstep) = (p)) /\ ((exists pfa_offset_left_empty_executiontracestepsstepmultiplyresultcongruence pfa_offset_right_empty_executiontracestepsstepmultiplyresultcongruence. ((pfh_before_empty_executiontracestepsstep) * (t)) + (p) * pfa_offset_left_empty_executiontracestepsstepmultiplyresultcongruence = (pfh_product_empty_executiontracestepsstep) + (p) * pfa_offset_right_empty_executiontracestepsstepmultiplyresultcongruence))))))))) /\ ((((exists pfa_gap_empty_executiontracestepsstepaddleft. pfa_gap_empty_executiontracestepsstepaddleft + S (pfh_product_empty_executiontracestepsstep) = (p)) /\ (((exists pfa_gap_empty_executiontracestepsstepaddright. pfa_gap_empty_executiontracestepsstepaddright + S (pfh_coefficient_empty_executiontracestepsstep) = (p)) /\ ((((exists pfa_gap_empty_executiontracestepsstepaddresultbound. pfa_gap_empty_executiontracestepsstepaddresultbound + S (pfh_after_empty_executiontracestepsstep) = (p)) /\ ((exists pfa_offset_left_empty_executiontracestepsstepaddresultcongruence pfa_offset_right_empty_executiontracestepsstepaddresultcongruence. ((pfh_product_empty_executiontracestepsstep) + (pfh_coefficient_empty_executiontracestepsstep)) + (p) * pfa_offset_left_empty_executiontracestepsstepaddresultcongruence = (pfh_after_empty_executiontracestepsstep) + (p) * pfa_offset_right_empty_executiontracestepsstepaddresultcongruence))))))))))))))))))))))))))) -> r=0

Complete tactic proof in conservative notation

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

19 script commands · 3 reading checkpoints · 0 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–6

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 t
  5. L5
    intro r
  6. L6
    intro h
02Separate the logical casesL7–11

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

  1. L7
    cases h
  2. L8
    cases h_witness
  3. L9
    cases h_witness_witness
  4. L10
    cases h_witness_witness_right
  5. L11
    cases h_witness_witness_right_right
03Use earlier factsL12–19

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

  1. L12
    specialize beta_at_unique (x)
  2. L13
    specialize beta_at_unique (x1)
  3. L14
    specialize beta_at_unique (0)
  4. L15
    specialize beta_at_unique (r)
  5. L16
    specialize beta_at_unique (0)
  6. L17
    apply beta_at_unique
  7. L18
    exact h_witness_witness_right_right_left
  8. L19
    exact h_witness_witness_right_left

Library-wide reading audit

Original defined command ledger · 19 lines
  1. 0001intro p
  2. 0002intro b
  3. 0003intro c
  4. 0004intro t
  5. 0005intro r
  6. 0006intro h
  7. 0007cases h
  8. 0008cases h_witness
  9. 0009cases h_witness_witness
  10. 0010cases h_witness_witness_right
  11. 0011cases h_witness_witness_right_right
  12. 0012specialize beta_at_unique (x)
  13. 0013specialize beta_at_unique (x1)
  14. 0014specialize beta_at_unique (0)
  15. 0015specialize beta_at_unique (r)
  16. 0016specialize beta_at_unique (0)
  17. 0017apply beta_at_unique
  18. 0018exact h_witness_witness_right_right_left
  19. 0019exact h_witness_witness_right_left