HL000B

beta_horner_root_mod_transport

An actual polynomial root transports to every congruent natural point.

Alpha v34 checked-use · first admitted v27 · 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. Exact original first-admission records.

The derivative-nonzero criterion supplies no inverse or power witness: both are constructed. Roots may be arbitrary natural representatives of signed integer polynomials. Singular-root classification and p-adic completion are separate milestones.

Exact theorem in conservative defined notation

∀ b. ∀ c. ∀ a. ∀ r. ∀ l. ∀ m. ModEq(m,a,r)HornerRootModulo(b,c,a,l,m)HornerRootModulo(b,c,r,l,m)

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

Definition DAG

Actual proof prerequisites

beta_horner_eval_exists · checked external prerequisitebeta_horner_eval_mod_congruence · checked external prerequisitemod_eq_trans · checked external prerequisitemod_eq_symm · checked external prerequisite
Original expanded first-order statement
forall b c a r l m. (exists hgcrt_mod_left_hpl_mod hgcrt_mod_right_hpl_mod. a + m * hgcrt_mod_left_hpl_mod = r + m * hgcrt_mod_right_hpl_mod) -> (exists hpl_value_root. ((exists ff_u_ph_hpl_root ff_v_ph_hpl_root. ((((exists fs_h_ph_hpl_root_body_start. fs_h_ph_hpl_root_body_start + S (0) = S ((S (0)) * ff_v_ph_hpl_root)) /\ exists fs_q_ph_hpl_root_body_start. ff_u_ph_hpl_root = fs_q_ph_hpl_root_body_start * S ((S (0)) * ff_v_ph_hpl_root) + (0))) /\ ((((exists fs_h_ph_hpl_root_body_terminal. fs_h_ph_hpl_root_body_terminal + S (hpl_value_root) = S ((S (l)) * ff_v_ph_hpl_root)) /\ exists fs_q_ph_hpl_root_body_terminal. ff_u_ph_hpl_root = fs_q_ph_hpl_root_body_terminal * S ((S (l)) * ff_v_ph_hpl_root) + (hpl_value_root))) /\ forall ff_i_ph_hpl_root_body_steps. (exists ph_bound_hpl_root_body_steps. ph_bound_hpl_root_body_steps + S ff_i_ph_hpl_root_body_steps = l) -> exists ff_coefficient_ph_hpl_root_body_steps ff_previous_ph_hpl_root_body_steps ff_current_ph_hpl_root_body_steps. ((((exists fs_h_ph_hpl_root_body_steps_coefficient. fs_h_ph_hpl_root_body_steps_coefficient + S (ff_coefficient_ph_hpl_root_body_steps) = S ((S (ff_i_ph_hpl_root_body_steps)) * c)) /\ exists fs_q_ph_hpl_root_body_steps_coefficient. b = fs_q_ph_hpl_root_body_steps_coefficient * S ((S (ff_i_ph_hpl_root_body_steps)) * c) + (ff_coefficient_ph_hpl_root_body_steps))) /\ ((((exists fs_h_ph_hpl_root_body_steps_before. fs_h_ph_hpl_root_body_steps_before + S (ff_previous_ph_hpl_root_body_steps) = S ((S (ff_i_ph_hpl_root_body_steps)) * ff_v_ph_hpl_root)) /\ exists fs_q_ph_hpl_root_body_steps_before. ff_u_ph_hpl_root = fs_q_ph_hpl_root_body_steps_before * S ((S (ff_i_ph_hpl_root_body_steps)) * ff_v_ph_hpl_root) + (ff_previous_ph_hpl_root_body_steps))) /\ ((((exists fs_h_ph_hpl_root_body_steps_after. fs_h_ph_hpl_root_body_steps_after + S (ff_current_ph_hpl_root_body_steps) = S ((S (S ff_i_ph_hpl_root_body_steps)) * ff_v_ph_hpl_root)) /\ exists fs_q_ph_hpl_root_body_steps_after. ff_u_ph_hpl_root = fs_q_ph_hpl_root_body_steps_after * S ((S (S ff_i_ph_hpl_root_body_steps)) * ff_v_ph_hpl_root) + (ff_current_ph_hpl_root_body_steps))) /\ ff_current_ph_hpl_root_body_steps = ff_previous_ph_hpl_root_body_steps * a + ff_coefficient_ph_hpl_root_body_steps)))))) /\ (exists hgcrt_mod_left_hpl_root hgcrt_mod_right_hpl_root. hpl_value_root + m * hgcrt_mod_left_hpl_root = 0 + m * hgcrt_mod_right_hpl_root))) -> (exists hpl_value_root. ((exists ff_u_ph_hpl_root ff_v_ph_hpl_root. ((((exists fs_h_ph_hpl_root_body_start. fs_h_ph_hpl_root_body_start + S (0) = S ((S (0)) * ff_v_ph_hpl_root)) /\ exists fs_q_ph_hpl_root_body_start. ff_u_ph_hpl_root = fs_q_ph_hpl_root_body_start * S ((S (0)) * ff_v_ph_hpl_root) + (0))) /\ ((((exists fs_h_ph_hpl_root_body_terminal. fs_h_ph_hpl_root_body_terminal + S (hpl_value_root) = S ((S (l)) * ff_v_ph_hpl_root)) /\ exists fs_q_ph_hpl_root_body_terminal. ff_u_ph_hpl_root = fs_q_ph_hpl_root_body_terminal * S ((S (l)) * ff_v_ph_hpl_root) + (hpl_value_root))) /\ forall ff_i_ph_hpl_root_body_steps. (exists ph_bound_hpl_root_body_steps. ph_bound_hpl_root_body_steps + S ff_i_ph_hpl_root_body_steps = l) -> exists ff_coefficient_ph_hpl_root_body_steps ff_previous_ph_hpl_root_body_steps ff_current_ph_hpl_root_body_steps. ((((exists fs_h_ph_hpl_root_body_steps_coefficient. fs_h_ph_hpl_root_body_steps_coefficient + S (ff_coefficient_ph_hpl_root_body_steps) = S ((S (ff_i_ph_hpl_root_body_steps)) * c)) /\ exists fs_q_ph_hpl_root_body_steps_coefficient. b = fs_q_ph_hpl_root_body_steps_coefficient * S ((S (ff_i_ph_hpl_root_body_steps)) * c) + (ff_coefficient_ph_hpl_root_body_steps))) /\ ((((exists fs_h_ph_hpl_root_body_steps_before. fs_h_ph_hpl_root_body_steps_before + S (ff_previous_ph_hpl_root_body_steps) = S ((S (ff_i_ph_hpl_root_body_steps)) * ff_v_ph_hpl_root)) /\ exists fs_q_ph_hpl_root_body_steps_before. ff_u_ph_hpl_root = fs_q_ph_hpl_root_body_steps_before * S ((S (ff_i_ph_hpl_root_body_steps)) * ff_v_ph_hpl_root) + (ff_previous_ph_hpl_root_body_steps))) /\ ((((exists fs_h_ph_hpl_root_body_steps_after. fs_h_ph_hpl_root_body_steps_after + S (ff_current_ph_hpl_root_body_steps) = S ((S (S ff_i_ph_hpl_root_body_steps)) * ff_v_ph_hpl_root)) /\ exists fs_q_ph_hpl_root_body_steps_after. ff_u_ph_hpl_root = fs_q_ph_hpl_root_body_steps_after * S ((S (S ff_i_ph_hpl_root_body_steps)) * ff_v_ph_hpl_root) + (ff_current_ph_hpl_root_body_steps))) /\ ff_current_ph_hpl_root_body_steps = ff_previous_ph_hpl_root_body_steps * r + ff_coefficient_ph_hpl_root_body_steps)))))) /\ (exists hgcrt_mod_left_hpl_root hgcrt_mod_right_hpl_root. hpl_value_root + m * hgcrt_mod_left_hpl_root = 0 + m * hgcrt_mod_right_hpl_root)))

Complete tactic proof in conservative notation

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

42 script commands · 9 reading checkpoints · 1 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–8

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

  1. L1
    intro b
  2. L2
    intro c
  3. L3
    intro a
  4. L4
    intro r
  5. L5
    intro l
  6. L6
    intro m
  7. L7
    intro hmod
  8. L8
    intro hroot
02Separate the logical casesL9–10

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

  1. L9
    cases hroot
  2. L10
    cases hroot_witness
03Establish hvalueL11–16

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

  1. L11
    have hvalue : ∃ v. Horner(b,c,r,l,v)Definitions: Horner(b,c,r,l,v)Original native command in the exact edition
  2. L12
    specialize beta_horner_eval_exists b
  3. L13
    specialize beta_horner_eval_exists c
  4. L14
    specialize beta_horner_eval_exists r
  5. L15
    specialize beta_horner_eval_exists l
  6. L16
    apply beta_horner_eval_exists
04Separate the logical casesL17–17

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

  1. L17
    cases hvalue
05Construct an explicit witnessL18–18

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

  1. L18
    exists x1
06Separate the logical casesL19–19

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

  1. L19
    split
07Use earlier factsL20–29

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

  1. L20
    exact hvalue_witness
  2. L21
    specialize mod_eq_trans m
  3. L22
    specialize mod_eq_trans x1
  4. L23
    specialize mod_eq_trans x
  5. L24
    specialize mod_eq_trans 0
  6. L25
    apply mod_eq_trans
  7. L26
    specialize mod_eq_symm m
  8. L27
    specialize mod_eq_symm x
  9. L28
    specialize mod_eq_symm x1
  10. L29
    apply mod_eq_symm
08Use earlier factsL30–39

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

  1. L30
    specialize beta_horner_eval_mod_congruence b
  2. L31
    specialize beta_horner_eval_mod_congruence c
  3. L32
    specialize beta_horner_eval_mod_congruence m
  4. L33
    specialize beta_horner_eval_mod_congruence a
  5. L34
    specialize beta_horner_eval_mod_congruence r
  6. L35
    specialize beta_horner_eval_mod_congruence l
  7. L36
    specialize beta_horner_eval_mod_congruence x
  8. L37
    specialize beta_horner_eval_mod_congruence x1
  9. L38
    apply beta_horner_eval_mod_congruence
  10. L39
    exact hmod
09Use earlier factsL40–42

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

  1. L40
    exact hroot_witness_left
  2. L41
    exact hvalue_witness
  3. L42
    exact hroot_witness_right

Library-wide reading audit

Original defined command ledger · 42 lines
  1. 0001intro b
  2. 0002intro c
  3. 0003intro a
  4. 0004intro r
  5. 0005intro l
  6. 0006intro m
  7. 0007intro hmod
  8. 0008intro hroot
  9. 0009cases hroot
  10. 0010cases hroot_witness
  11. 0011have hvalue : ∃ v. Horner(b,c,r,l,v)
  12. 0012specialize beta_horner_eval_exists b
  13. 0013specialize beta_horner_eval_exists c
  14. 0014specialize beta_horner_eval_exists r
  15. 0015specialize beta_horner_eval_exists l
  16. 0016apply beta_horner_eval_exists
  17. 0017cases hvalue
  18. 0018exists x1
  19. 0019split
  20. 0020exact hvalue_witness
  21. 0021specialize mod_eq_trans m
  22. 0022specialize mod_eq_trans x1
  23. 0023specialize mod_eq_trans x
  24. 0024specialize mod_eq_trans 0
  25. 0025apply mod_eq_trans
  26. 0026specialize mod_eq_symm m
  27. 0027specialize mod_eq_symm x
  28. 0028specialize mod_eq_symm x1
  29. 0029apply mod_eq_symm
  30. 0030specialize beta_horner_eval_mod_congruence b
  31. 0031specialize beta_horner_eval_mod_congruence c
  32. 0032specialize beta_horner_eval_mod_congruence m
  33. 0033specialize beta_horner_eval_mod_congruence a
  34. 0034specialize beta_horner_eval_mod_congruence r
  35. 0035specialize beta_horner_eval_mod_congruence l
  36. 0036specialize beta_horner_eval_mod_congruence x
  37. 0037specialize beta_horner_eval_mod_congruence x1
  38. 0038apply beta_horner_eval_mod_congruence
  39. 0039exact hmod
  40. 0040exact hroot_witness_left
  41. 0041exact hvalue_witness
  42. 0042exact hroot_witness_right