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.
Exact expanded first-order arithmetic statement
forall b c t l. exists ff_u_ph_root_trace ff_v_ph_root_trace. ((((exists fs_h_ph_root_trace_start. fs_h_ph_root_trace_start + S (0) = S ((S (0)) * ff_v_ph_root_trace)) /\ exists fs_q_ph_root_trace_start. ff_u_ph_root_trace = fs_q_ph_root_trace_start * S ((S (0)) * ff_v_ph_root_trace) + (0))) /\ forall ff_i_ph_root_trace_steps. (exists ph_bound_root_trace_steps. ph_bound_root_trace_steps + S ff_i_ph_root_trace_steps = l) -> exists ff_coefficient_ph_root_trace_steps ff_previous_ph_root_trace_steps ff_current_ph_root_trace_steps. ((((exists fs_h_ph_root_trace_steps_coefficient. fs_h_ph_root_trace_steps_coefficient + S (ff_coefficient_ph_root_trace_steps) = S ((S (ff_i_ph_root_trace_steps)) * c)) /\ exists fs_q_ph_root_trace_steps_coefficient. b = fs_q_ph_root_trace_steps_coefficient * S ((S (ff_i_ph_root_trace_steps)) * c) + (ff_coefficient_ph_root_trace_steps))) /\ ((((exists fs_h_ph_root_trace_steps_before. fs_h_ph_root_trace_steps_before + S (ff_previous_ph_root_trace_steps) = S ((S (ff_i_ph_root_trace_steps)) * ff_v_ph_root_trace)) /\ exists fs_q_ph_root_trace_steps_before. ff_u_ph_root_trace = fs_q_ph_root_trace_steps_before * S ((S (ff_i_ph_root_trace_steps)) * ff_v_ph_root_trace) + (ff_previous_ph_root_trace_steps))) /\ ((((exists fs_h_ph_root_trace_steps_after. fs_h_ph_root_trace_steps_after + S (ff_current_ph_root_trace_steps) = S ((S (S ff_i_ph_root_trace_steps)) * ff_v_ph_root_trace)) /\ exists fs_q_ph_root_trace_steps_after. ff_u_ph_root_trace = fs_q_ph_root_trace_steps_after * S ((S (S ff_i_ph_root_trace_steps)) * ff_v_ph_root_trace) + (ff_current_ph_root_trace_steps))) /\ ff_current_ph_root_trace_steps = ff_previous_ph_root_trace_steps * t + ff_coefficient_ph_root_trace_steps))))Constructive proof overview
Generated structural guide
Every beta-coded coefficient prefix has a complete constructive Horner trace.
The unchanged tactic script uses 11 declared prerequisites and contains 137 exact native proof lines.
Alpha v34 checked-use · first admitted v20 · independently kernel and Lean verified; not Stable
Proof neighborhood
Direct dependencies
beta_at_self_of_bound Stable theorem; checked-use authorized add_eq_zero_right Stable theorem; checked-use authorized succ_ne_zero Stable theorem; checked-use authorized beta_at_exists Stable theorem; checked-use authorized beta_prefix_extend Stable theorem; checked-use authorized zero_le Stable theorem; checked-use authorized succ_le_succ Stable theorem; checked-use authorized le_refl Stable theorem; checked-use authorized le_of_succ_le_succ Stable theorem; checked-use authorized le_eq_or_lt Stable theorem; checked-use authorized one_mul 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.
01Fix variables and assumptionsL1–3
02Induction on lL4–4
Split the argument into the base and successor obligations. The induction hypothesis is available only in the successor branch.
- L4
induction l
03Construct an explicit witnessL5–6
04Separate the logical casesL7–7
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L7
split
05Use earlier factsL8–12
06Calculate and transport equalitiesL13–13
Carry out the recorded arithmetic or equality steps; inspect the exact commands for their direction and premises.
- L13
rewrite one_mul
07Use earlier factsL14–18
08Fix variables and assumptionsL19–20
09Separate the logical casesL21–22
10Establish hsi0L23–30
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply add eq zero right.
11Establish htraceL31–32
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply IH.
12Separate the logical casesL33–35
13Establish hfactorL36–40
Establish this local claim before using it. It is not an additional assumption.
14Separate the logical casesL41–41
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L41
cases hfactor
15Establish hlastL42–46
Establish this local claim before using it. It is not an additional assumption.
16Separate the logical casesL47–47
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L47
cases hlast
17Establish hextL48–53
Establish this local claim before using it. It is not an additional assumption.
- L48
have hext : exists z v. ((((exists fs_h_trace_extension. fs_h_trace_extension + S (x3 * t + x2) = S ((S (S l)) * v)) /\ exists fs_q_trace_extension. z = fs_q_trace_extension * S ((S (S l)) * v) + (x3 * t + x2))) /\ forall i a. (exists h. h + S i = S l) -> (((exists fs_h_trace_old. fs_h_trace_old + S (a) = S ((S (i)) * x1)) /\ exists fs_q_trace_old. x = fs_q_trace_old * S ((S (i)) * x1) + (a))) -> (((exists fs_h_trace_new. fs_h_trace_new + S (a) = S ((S (i)) * v)) /\ exists fs_q_trace_new. z = fs_q_trace_new * S ((S (i)) * v) + (a)))) - L49
specialize beta_prefix_extend (S l) - L50
specialize beta_prefix_extend x - L51
specialize beta_prefix_extend x1 - L52
specialize beta_prefix_extend (x3 * t + x2) - L53
exact beta_prefix_extend
18Separate the logical casesL54–56
19Construct an explicit witnessL57–58
20Separate the logical casesL59–59
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L59
split
21Use earlier factsL60–62
22Establish h0L63–63
Establish this local claim before using it. It is not an additional assumption.
- L63
have h0 : exists h. h + S 0 = S l
23Establish hzeroL64–73
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply succ le succ.
24Fix variables and assumptionsL74–74
Work with arbitrary variables or the premises of the current implication.
- L74
intro hi
25Establish hilL75–79
26Establish hsplitL80–84
27Separate the logical casesL85–85
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L85
cases hsplit
28Construct an explicit witnessL86–88
29Separate the logical casesL89–89
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L89
split
30Calculate and transport equalitiesL90–91
31Use earlier factsL92–92
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L92
exact hfactor_witness
32Separate the logical casesL93–93
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L93
split
33Calculate and transport equalitiesL94–95
34Use earlier factsL96–101
35Separate the logical casesL102–102
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L102
split
36Calculate and transport equalitiesL103–104
37Use earlier factsL105–105
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L105
exact hext_witness_witness_left
38Calculate and transport equalitiesL106–106
Carry out the recorded arithmetic or equality steps; inspect the exact commands for their direction and premises.
- L106
refl
39Establish holdL107–110
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply htrace witness witness right.
- L107
have hold : exists p r s. ((((exists fs_h_ph_hold_coefficient. fs_h_ph_hold_coefficient + S (p) = S ((S (i)) * c)) /\ exists fs_q_ph_hold_coefficient. b = fs_q_ph_hold_coefficient * S ((S (i)) * c) + (p))) /\ ((((exists fs_h_ph_hold_previous. fs_h_ph_hold_previous + S (r) = S ((S (i)) * x1)) /\ exists fs_q_ph_hold_previous. x = fs_q_ph_hold_previous * S ((S (i)) * x1) + (r))) /\ ((((exists fs_h_ph_hold_current. fs_h_ph_hold_current + S (s) = S ((S (S i)) * x1)) /\ exists fs_q_ph_hold_current. x = fs_q_ph_hold_current * S ((S (S i)) * x1) + (s))) /\ s = r * t + p))) - L108
specialize htrace_witness_witness_right i - L109
apply htrace_witness_witness_right - L110
exact hsplit_right
40Separate the logical casesL111–116
41Construct an explicit witnessL117–119
42Separate the logical casesL120–120
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L120
split
43Use earlier factsL121–121
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L121
exact hold_witness_witness_witness_left
44Separate the logical casesL122–122
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L122
split
45Use earlier factsL123–127
46Separate the logical casesL128–128
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L128
split
47Use earlier factsL129–137
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L129
specialize hext_witness_witness_right (S i) - L130
specialize hext_witness_witness_right x8 - L131
apply hext_witness_witness_right - L132
specialize succ_le_succ (S i) - L133
specialize succ_le_succ l - L134
apply succ_le_succ - L135
exact hsplit_right - L136
exact hold_witness_witness_witness_right_right_left - L137
exact hold_witness_witness_witness_right_right_right
Original exact command ledger · 137 lines
- 0001
intro b - 0002
intro c - 0003
intro t - 0004
induction l - 0005
exists 0 - 0006
exists 1 - 0007
split - 0008
specialize beta_at_self_of_bound 1 - 0009
specialize beta_at_self_of_bound 0 - 0010
specialize beta_at_self_of_bound 0 - 0011
apply beta_at_self_of_bound - 0012
specialize one_mul 1 - 0013
rewrite one_mul - 0014
specialize succ_le_succ 0 - 0015
specialize succ_le_succ (S 0) - 0016
apply succ_le_succ - 0017
specialize zero_le (S 0) - 0018
exact zero_le - 0019
intro i - 0020
intro hi - 0021
exfalso - 0022
cases hi - 0023
have hsi0 : S i = 0 - 0024
specialize add_eq_zero_right x - 0025
specialize add_eq_zero_right (S i) - 0026
apply add_eq_zero_right - 0027
exact hi_witness - 0028
specialize succ_ne_zero i - 0029
apply succ_ne_zero - 0030
exact hsi0 - 0031
have htrace : exists ff_u_ph_induction ff_v_ph_induction. ((((exists fs_h_ph_induction_start. fs_h_ph_induction_start + S (0) = S ((S (0)) * ff_v_ph_induction)) /\ exists fs_q_ph_induction_start. ff_u_ph_induction = fs_q_ph_induction_start * S ((S (0)) * ff_v_ph_induction) + (0))) /\ forall ff_i_ph_induction_steps. (exists ph_bound_induction_steps. ph_bound_induction_steps + S ff_i_ph_induction_steps = l) -> exists ff_coefficient_ph_induction_steps ff_previous_ph_induction_steps ff_current_ph_induction_steps. ((((exists fs_h_ph_induction_steps_coefficient. fs_h_ph_induction_steps_coefficient + S (ff_coefficient_ph_induction_steps) = S ((S (ff_i_ph_induction_steps)) * c)) /\ exists fs_q_ph_induction_steps_coefficient. b = fs_q_ph_induction_steps_coefficient * S ((S (ff_i_ph_induction_steps)) * c) + (ff_coefficient_ph_induction_steps))) /\ ((((exists fs_h_ph_induction_steps_before. fs_h_ph_induction_steps_before + S (ff_previous_ph_induction_steps) = S ((S (ff_i_ph_induction_steps)) * ff_v_ph_induction)) /\ exists fs_q_ph_induction_steps_before. ff_u_ph_induction = fs_q_ph_induction_steps_before * S ((S (ff_i_ph_induction_steps)) * ff_v_ph_induction) + (ff_previous_ph_induction_steps))) /\ ((((exists fs_h_ph_induction_steps_after. fs_h_ph_induction_steps_after + S (ff_current_ph_induction_steps) = S ((S (S ff_i_ph_induction_steps)) * ff_v_ph_induction)) /\ exists fs_q_ph_induction_steps_after. ff_u_ph_induction = fs_q_ph_induction_steps_after * S ((S (S ff_i_ph_induction_steps)) * ff_v_ph_induction) + (ff_current_ph_induction_steps))) /\ ff_current_ph_induction_steps = ff_previous_ph_induction_steps * t + ff_coefficient_ph_induction_steps)))) - 0032
apply IH - 0033
cases htrace - 0034
cases htrace_witness - 0035
cases htrace_witness_witness - 0036
have hfactor : exists p. ((exists fs_h_trace_factor. fs_h_trace_factor + S (p) = S ((S (l)) * c)) /\ exists fs_q_trace_factor. b = fs_q_trace_factor * S ((S (l)) * c) + (p)) - 0037
specialize beta_at_exists b - 0038
specialize beta_at_exists c - 0039
specialize beta_at_exists l - 0040
exact beta_at_exists - 0041
cases hfactor - 0042
have hlast : exists r. ((exists fs_h_trace_last. fs_h_trace_last + S (r) = S ((S (l)) * x1)) /\ exists fs_q_trace_last. x = fs_q_trace_last * S ((S (l)) * x1) + (r)) - 0043
specialize beta_at_exists x - 0044
specialize beta_at_exists x1 - 0045
specialize beta_at_exists l - 0046
exact beta_at_exists - 0047
cases hlast - 0048
have hext : exists z v. ((((exists fs_h_trace_extension. fs_h_trace_extension + S (x3 * t + x2) = S ((S (S l)) * v)) /\ exists fs_q_trace_extension. z = fs_q_trace_extension * S ((S (S l)) * v) + (x3 * t + x2))) /\ forall i a. (exists h. h + S i = S l) -> (((exists fs_h_trace_old. fs_h_trace_old + S (a) = S ((S (i)) * x1)) /\ exists fs_q_trace_old. x = fs_q_trace_old * S ((S (i)) * x1) + (a))) -> (((exists fs_h_trace_new. fs_h_trace_new + S (a) = S ((S (i)) * v)) /\ exists fs_q_trace_new. z = fs_q_trace_new * S ((S (i)) * v) + (a)))) - 0049
specialize beta_prefix_extend (S l) - 0050
specialize beta_prefix_extend x - 0051
specialize beta_prefix_extend x1 - 0052
specialize beta_prefix_extend (x3 * t + x2) - 0053
exact beta_prefix_extend - 0054
cases hext - 0055
cases hext_witness - 0056
cases hext_witness_witness - 0057
exists x4 - 0058
exists x5 - 0059
split - 0060
specialize hext_witness_witness_right 0 - 0061
specialize hext_witness_witness_right 0 - 0062
apply hext_witness_witness_right - 0063
have h0 : exists h. h + S 0 = S l - 0064
have hzero : exists h. h + 0 = l - 0065
specialize zero_le l - 0066
exact zero_le - 0067
specialize succ_le_succ 0 - 0068
specialize succ_le_succ l - 0069
apply succ_le_succ - 0070
exact hzero - 0071
exact h0 - 0072
exact htrace_witness_witness_left - 0073
intro i - 0074
intro hi - 0075
have hil : exists h. h + i = l - 0076
specialize le_of_succ_le_succ i - 0077
specialize le_of_succ_le_succ l - 0078
apply le_of_succ_le_succ - 0079
exact hi - 0080
have hsplit : i = l \/ exists h. h + S i = l - 0081
specialize le_eq_or_lt i - 0082
specialize le_eq_or_lt l - 0083
apply le_eq_or_lt - 0084
exact hil - 0085
cases hsplit - 0086
exists x2 - 0087
exists x3 - 0088
exists x3 * t + x2 - 0089
split - 0090
rewrite hsplit_left - 0091
rewrite hsplit_left - 0092
exact hfactor_witness - 0093
split - 0094
rewrite hsplit_left - 0095
rewrite hsplit_left - 0096
specialize hext_witness_witness_right l - 0097
specialize hext_witness_witness_right x3 - 0098
apply hext_witness_witness_right - 0099
specialize le_refl (S l) - 0100
exact le_refl - 0101
exact hlast_witness - 0102
split - 0103
rewrite hsplit_left - 0104
rewrite hsplit_left - 0105
exact hext_witness_witness_left - 0106
refl - 0107
have hold : exists p r s. ((((exists fs_h_ph_hold_coefficient. fs_h_ph_hold_coefficient + S (p) = S ((S (i)) * c)) /\ exists fs_q_ph_hold_coefficient. b = fs_q_ph_hold_coefficient * S ((S (i)) * c) + (p))) /\ ((((exists fs_h_ph_hold_previous. fs_h_ph_hold_previous + S (r) = S ((S (i)) * x1)) /\ exists fs_q_ph_hold_previous. x = fs_q_ph_hold_previous * S ((S (i)) * x1) + (r))) /\ ((((exists fs_h_ph_hold_current. fs_h_ph_hold_current + S (s) = S ((S (S i)) * x1)) /\ exists fs_q_ph_hold_current. x = fs_q_ph_hold_current * S ((S (S i)) * x1) + (s))) /\ s = r * t + p))) - 0108
specialize htrace_witness_witness_right i - 0109
apply htrace_witness_witness_right - 0110
exact hsplit_right - 0111
cases hold - 0112
cases hold_witness - 0113
cases hold_witness_witness - 0114
cases hold_witness_witness_witness - 0115
cases hold_witness_witness_witness_right - 0116
cases hold_witness_witness_witness_right_right - 0117
exists x6 - 0118
exists x7 - 0119
exists x8 - 0120
split - 0121
exact hold_witness_witness_witness_left - 0122
split - 0123
specialize hext_witness_witness_right i - 0124
specialize hext_witness_witness_right x7 - 0125
apply hext_witness_witness_right - 0126
exact hi - 0127
exact hold_witness_witness_witness_right_left - 0128
split - 0129
specialize hext_witness_witness_right (S i) - 0130
specialize hext_witness_witness_right x8 - 0131
apply hext_witness_witness_right - 0132
specialize succ_le_succ (S i) - 0133
specialize succ_le_succ l - 0134
apply succ_le_succ - 0135
exact hsplit_right - 0136
exact hold_witness_witness_witness_right_right_left - 0137
exact hold_witness_witness_witness_right_right_right