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.
Historical partial components only: this chapter proves exact natural polynomial Taylor remainders, bounded corrections, and one-step divisibility lifts. G095 is now closed in the separate Alpha-v27 hensel-lifting branch for integer polynomials, unrestricted input roots, unique canonical representatives, and every positive prime power. Full G095 proof · Alpha v27
Exact theorem in conservative defined notation
∀ b. ∀ c. ∀ m. ∀ t. ∀ s. ∀ l. ∀ n. ∀ z. ModEq(m,t,s) → Horner(b,c,t,l,n) → Horner(b,c,s,l,z) → ModEq(m,n,z)
Every linked abbreviation expands hygienically to the identical original native formula.
Definition DAG
Actual proof prerequisites
Complete unchanged native tactic proof
All 89 lines are the exact independently kernel-checked original script.
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–5
02Induction on lL6–11
03Establish hzero_leftL12–18
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply beta horner eval empty.
04Establish hzero_rightL19–28
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply beta horner eval empty.
05Use earlier factsL29–30
06Fix variables and assumptionsL31–35
07Establish hfirstL36–43
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply beta horner eval successor decompose.
- L36
have hfirst : ∃ a. ∃ r. Beta(b,c,l,a) ∧ (Horner(b,c,t,l,r) ∧ n = r · t + a)Definitions: BetaHornerOriginal native command in the exact edition - L37
specialize beta_horner_eval_successor_decompose b - L38
specialize beta_horner_eval_successor_decompose c - L39
specialize beta_horner_eval_successor_decompose t - L40
specialize beta_horner_eval_successor_decompose l - L41
specialize beta_horner_eval_successor_decompose n - L42
apply beta_horner_eval_successor_decompose - L43
exact hleft
08Separate the logical casesL44–47
09Establish hsecondL48–55
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply beta horner eval successor decompose.
- L48
have hsecond : ∃ a. ∃ r. Beta(b,c,l,a) ∧ (Horner(b,c,s,l,r) ∧ z = r · s + a)Definitions: BetaHornerOriginal native command in the exact edition - L49
specialize beta_horner_eval_successor_decompose b - L50
specialize beta_horner_eval_successor_decompose c - L51
specialize beta_horner_eval_successor_decompose s - L52
specialize beta_horner_eval_successor_decompose l - L53
specialize beta_horner_eval_successor_decompose z - L54
apply beta_horner_eval_successor_decompose - L55
exact hright
10Separate the logical casesL56–59
11Establish hcoefficientL60–68
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply beta at unique.
12Establish hprefixL69–75
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply IH.
- L69
have hprefix : exists hgcrt_mod_left_pth_eval_prefix hgcrt_mod_right_pth_eval_prefix. x1 + m * hgcrt_mod_left_pth_eval_prefix = x3 + m * hgcrt_mod_right_pth_eval_prefix - L70
specialize IH x1 - L71
specialize IH x3 - L72
apply IH - L73
exact hbase - L74
exact hfirst_witness_witness_right_left - L75
exact hsecond_witness_witness_right_left
13Establish hstepL76–85
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply horner mod congruence successor step.
- L76
have hstep : exists hgcrt_mod_left_pth_eval_step hgcrt_mod_right_pth_eval_step. (x1 * t + x) + m * hgcrt_mod_left_pth_eval_step = (x3 * s + x) + m * hgcrt_mod_right_pth_eval_step - L77
specialize horner_mod_congruence_successor_step m - L78
specialize horner_mod_congruence_successor_step t - L79
specialize horner_mod_congruence_successor_step s - L80
specialize horner_mod_congruence_successor_step x1 - L81
specialize horner_mod_congruence_successor_step x3 - L82
specialize horner_mod_congruence_successor_step x - L83
apply horner_mod_congruence_successor_step - L84
exact hbase - L85
exact hprefix
14Calculate and transport equalitiesL86–88
15Use earlier factsL89–89
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L89
exact hstep
Original defined command ledger · 89 lines
- 0001
intro b - 0002
intro c - 0003
intro m - 0004
intro t - 0005
intro s - 0006
induction l - 0007
intro n - 0008
intro z - 0009
intro hbase - 0010
intro hleft - 0011
intro hright - 0012
have hzero_left : n = 0 - 0013
specialize beta_horner_eval_empty b - 0014
specialize beta_horner_eval_empty c - 0015
specialize beta_horner_eval_empty t - 0016
specialize beta_horner_eval_empty n - 0017
apply beta_horner_eval_empty - 0018
exact hleft - 0019
have hzero_right : z = 0 - 0020
specialize beta_horner_eval_empty b - 0021
specialize beta_horner_eval_empty c - 0022
specialize beta_horner_eval_empty s - 0023
specialize beta_horner_eval_empty z - 0024
apply beta_horner_eval_empty - 0025
exact hright - 0026
rewrite hzero_left - 0027
rewrite hzero_right - 0028
specialize mod_eq_refl m - 0029
specialize mod_eq_refl 0 - 0030
apply mod_eq_refl - 0031
intro n - 0032
intro z - 0033
intro hbase - 0034
intro hleft - 0035
intro hright - 0036
have hfirst : exists a r. ((((exists fs_h_pth_eval_first_coefficient. fs_h_pth_eval_first_coefficient + S (a) = S ((S (l)) * c)) /\ exists fs_q_pth_eval_first_coefficient. b = fs_q_pth_eval_first_coefficient * S ((S (l)) * c) + (a))) /\ ((exists ff_u_ph_pth_eval_first_prefix ff_v_ph_pth_eval_first_prefix. ((((exists fs_h_ph_pth_eval_first_prefix_body_start. fs_h_ph_pth_eval_first_prefix_body_start + S (0) = S ((S (0)) * ff_v_ph_pth_eval_first_prefix)) /\ exists fs_q_ph_pth_eval_first_prefix_body_start. ff_u_ph_pth_eval_first_prefix = fs_q_ph_pth_eval_first_prefix_body_start * S ((S (0)) * ff_v_ph_pth_eval_first_prefix) + (0))) /\ ((((exists fs_h_ph_pth_eval_first_prefix_body_terminal. fs_h_ph_pth_eval_first_prefix_body_terminal + S (r) = S ((S (l)) * ff_v_ph_pth_eval_first_prefix)) /\ exists fs_q_ph_pth_eval_first_prefix_body_terminal. ff_u_ph_pth_eval_first_prefix = fs_q_ph_pth_eval_first_prefix_body_terminal * S ((S (l)) * ff_v_ph_pth_eval_first_prefix) + (r))) /\ forall ff_i_ph_pth_eval_first_prefix_body_steps. (exists ph_bound_pth_eval_first_prefix_body_steps. ph_bound_pth_eval_first_prefix_body_steps + S ff_i_ph_pth_eval_first_prefix_body_steps = l) -> exists ff_coefficient_ph_pth_eval_first_prefix_body_steps ff_previous_ph_pth_eval_first_prefix_body_steps ff_current_ph_pth_eval_first_prefix_body_steps. ((((exists fs_h_ph_pth_eval_first_prefix_body_steps_coefficient. fs_h_ph_pth_eval_first_prefix_body_steps_coefficient + S (ff_coefficient_ph_pth_eval_first_prefix_body_steps) = S ((S (ff_i_ph_pth_eval_first_prefix_body_steps)) * c)) /\ exists fs_q_ph_pth_eval_first_prefix_body_steps_coefficient. b = fs_q_ph_pth_eval_first_prefix_body_steps_coefficient * S ((S (ff_i_ph_pth_eval_first_prefix_body_steps)) * c) + (ff_coefficient_ph_pth_eval_first_prefix_body_steps))) /\ ((((exists fs_h_ph_pth_eval_first_prefix_body_steps_before. fs_h_ph_pth_eval_first_prefix_body_steps_before + S (ff_previous_ph_pth_eval_first_prefix_body_steps) = S ((S (ff_i_ph_pth_eval_first_prefix_body_steps)) * ff_v_ph_pth_eval_first_prefix)) /\ exists fs_q_ph_pth_eval_first_prefix_body_steps_before. ff_u_ph_pth_eval_first_prefix = fs_q_ph_pth_eval_first_prefix_body_steps_before * S ((S (ff_i_ph_pth_eval_first_prefix_body_steps)) * ff_v_ph_pth_eval_first_prefix) + (ff_previous_ph_pth_eval_first_prefix_body_steps))) /\ ((((exists fs_h_ph_pth_eval_first_prefix_body_steps_after. fs_h_ph_pth_eval_first_prefix_body_steps_after + S (ff_current_ph_pth_eval_first_prefix_body_steps) = S ((S (S ff_i_ph_pth_eval_first_prefix_body_steps)) * ff_v_ph_pth_eval_first_prefix)) /\ exists fs_q_ph_pth_eval_first_prefix_body_steps_after. ff_u_ph_pth_eval_first_prefix = fs_q_ph_pth_eval_first_prefix_body_steps_after * S ((S (S ff_i_ph_pth_eval_first_prefix_body_steps)) * ff_v_ph_pth_eval_first_prefix) + (ff_current_ph_pth_eval_first_prefix_body_steps))) /\ ff_current_ph_pth_eval_first_prefix_body_steps = ff_previous_ph_pth_eval_first_prefix_body_steps * t + ff_coefficient_ph_pth_eval_first_prefix_body_steps)))))) /\ n = r * t + a)) - 0037
specialize beta_horner_eval_successor_decompose b - 0038
specialize beta_horner_eval_successor_decompose c - 0039
specialize beta_horner_eval_successor_decompose t - 0040
specialize beta_horner_eval_successor_decompose l - 0041
specialize beta_horner_eval_successor_decompose n - 0042
apply beta_horner_eval_successor_decompose - 0043
exact hleft - 0044
cases hfirst - 0045
cases hfirst_witness - 0046
cases hfirst_witness_witness - 0047
cases hfirst_witness_witness_right - 0048
have hsecond : exists a r. ((((exists fs_h_pth_eval_second_coefficient. fs_h_pth_eval_second_coefficient + S (a) = S ((S (l)) * c)) /\ exists fs_q_pth_eval_second_coefficient. b = fs_q_pth_eval_second_coefficient * S ((S (l)) * c) + (a))) /\ ((exists ff_u_ph_pth_eval_second_prefix ff_v_ph_pth_eval_second_prefix. ((((exists fs_h_ph_pth_eval_second_prefix_body_start. fs_h_ph_pth_eval_second_prefix_body_start + S (0) = S ((S (0)) * ff_v_ph_pth_eval_second_prefix)) /\ exists fs_q_ph_pth_eval_second_prefix_body_start. ff_u_ph_pth_eval_second_prefix = fs_q_ph_pth_eval_second_prefix_body_start * S ((S (0)) * ff_v_ph_pth_eval_second_prefix) + (0))) /\ ((((exists fs_h_ph_pth_eval_second_prefix_body_terminal. fs_h_ph_pth_eval_second_prefix_body_terminal + S (r) = S ((S (l)) * ff_v_ph_pth_eval_second_prefix)) /\ exists fs_q_ph_pth_eval_second_prefix_body_terminal. ff_u_ph_pth_eval_second_prefix = fs_q_ph_pth_eval_second_prefix_body_terminal * S ((S (l)) * ff_v_ph_pth_eval_second_prefix) + (r))) /\ forall ff_i_ph_pth_eval_second_prefix_body_steps. (exists ph_bound_pth_eval_second_prefix_body_steps. ph_bound_pth_eval_second_prefix_body_steps + S ff_i_ph_pth_eval_second_prefix_body_steps = l) -> exists ff_coefficient_ph_pth_eval_second_prefix_body_steps ff_previous_ph_pth_eval_second_prefix_body_steps ff_current_ph_pth_eval_second_prefix_body_steps. ((((exists fs_h_ph_pth_eval_second_prefix_body_steps_coefficient. fs_h_ph_pth_eval_second_prefix_body_steps_coefficient + S (ff_coefficient_ph_pth_eval_second_prefix_body_steps) = S ((S (ff_i_ph_pth_eval_second_prefix_body_steps)) * c)) /\ exists fs_q_ph_pth_eval_second_prefix_body_steps_coefficient. b = fs_q_ph_pth_eval_second_prefix_body_steps_coefficient * S ((S (ff_i_ph_pth_eval_second_prefix_body_steps)) * c) + (ff_coefficient_ph_pth_eval_second_prefix_body_steps))) /\ ((((exists fs_h_ph_pth_eval_second_prefix_body_steps_before. fs_h_ph_pth_eval_second_prefix_body_steps_before + S (ff_previous_ph_pth_eval_second_prefix_body_steps) = S ((S (ff_i_ph_pth_eval_second_prefix_body_steps)) * ff_v_ph_pth_eval_second_prefix)) /\ exists fs_q_ph_pth_eval_second_prefix_body_steps_before. ff_u_ph_pth_eval_second_prefix = fs_q_ph_pth_eval_second_prefix_body_steps_before * S ((S (ff_i_ph_pth_eval_second_prefix_body_steps)) * ff_v_ph_pth_eval_second_prefix) + (ff_previous_ph_pth_eval_second_prefix_body_steps))) /\ ((((exists fs_h_ph_pth_eval_second_prefix_body_steps_after. fs_h_ph_pth_eval_second_prefix_body_steps_after + S (ff_current_ph_pth_eval_second_prefix_body_steps) = S ((S (S ff_i_ph_pth_eval_second_prefix_body_steps)) * ff_v_ph_pth_eval_second_prefix)) /\ exists fs_q_ph_pth_eval_second_prefix_body_steps_after. ff_u_ph_pth_eval_second_prefix = fs_q_ph_pth_eval_second_prefix_body_steps_after * S ((S (S ff_i_ph_pth_eval_second_prefix_body_steps)) * ff_v_ph_pth_eval_second_prefix) + (ff_current_ph_pth_eval_second_prefix_body_steps))) /\ ff_current_ph_pth_eval_second_prefix_body_steps = ff_previous_ph_pth_eval_second_prefix_body_steps * s + ff_coefficient_ph_pth_eval_second_prefix_body_steps)))))) /\ z = r * s + a)) - 0049
specialize beta_horner_eval_successor_decompose b - 0050
specialize beta_horner_eval_successor_decompose c - 0051
specialize beta_horner_eval_successor_decompose s - 0052
specialize beta_horner_eval_successor_decompose l - 0053
specialize beta_horner_eval_successor_decompose z - 0054
apply beta_horner_eval_successor_decompose - 0055
exact hright - 0056
cases hsecond - 0057
cases hsecond_witness - 0058
cases hsecond_witness_witness - 0059
cases hsecond_witness_witness_right - 0060
have hcoefficient : x = x2 - 0061
specialize beta_at_unique b - 0062
specialize beta_at_unique c - 0063
specialize beta_at_unique l - 0064
specialize beta_at_unique x - 0065
specialize beta_at_unique x2 - 0066
apply beta_at_unique - 0067
exact hfirst_witness_witness_left - 0068
exact hsecond_witness_witness_left - 0069
have hprefix : exists hgcrt_mod_left_pth_eval_prefix hgcrt_mod_right_pth_eval_prefix. x1 + m * hgcrt_mod_left_pth_eval_prefix = x3 + m * hgcrt_mod_right_pth_eval_prefix - 0070
specialize IH x1 - 0071
specialize IH x3 - 0072
apply IH - 0073
exact hbase - 0074
exact hfirst_witness_witness_right_left - 0075
exact hsecond_witness_witness_right_left - 0076
have hstep : exists hgcrt_mod_left_pth_eval_step hgcrt_mod_right_pth_eval_step. (x1 * t + x) + m * hgcrt_mod_left_pth_eval_step = (x3 * s + x) + m * hgcrt_mod_right_pth_eval_step - 0077
specialize horner_mod_congruence_successor_step m - 0078
specialize horner_mod_congruence_successor_step t - 0079
specialize horner_mod_congruence_successor_step s - 0080
specialize horner_mod_congruence_successor_step x1 - 0081
specialize horner_mod_congruence_successor_step x3 - 0082
specialize horner_mod_congruence_successor_step x - 0083
apply horner_mod_congruence_successor_step - 0084
exact hbase - 0085
exact hprefix - 0086
rewrite hfirst_witness_witness_right_right - 0087
rewrite hsecond_witness_witness_right_right - 0088
rewrite <- hcoefficient - 0089
exact hstep