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.
Statement with defined notation
∀ b. ∀ c. ∀ l. ∃ fs_u_trace. ∃ fs_v_trace. BetaAt(fs_u_trace,fs_v_trace,0,0) ∧ (∀ x. Lt(x,l) → ∃ y. ∃ z. ∃ n. BetaAt(b,c,x,y) ∧ (BetaAt(fs_u_trace,fs_v_trace,x,z) ∧ (BetaAt(fs_u_trace,fs_v_trace,S x,n) ∧ n = z + y)))Every purple notation token opens its conservative definition. Expanding the displayed statement recovers the exact first-order Peano-arithmetic formula checked by the unchanged kernel.
Definitions used by this theorem
In the theorem statement
5 occurrences
In local proof propositions
18 occurrences
Exact expanded native-PA statement
forall b c l. exists fs_u_trace fs_v_trace. ((((exists fs_h_trace_start. fs_h_trace_start + S (0) = S ((S (0)) * fs_v_trace)) /\ exists fs_q_trace_start. fs_u_trace = fs_q_trace_start * S ((S (0)) * fs_v_trace) + (0))) /\ forall fs_i_trace_steps. (exists fs_lt_trace_steps_bound. fs_lt_trace_steps_bound + S fs_i_trace_steps = l) -> exists fs_a_trace_steps fs_r_trace_steps fs_s_trace_steps. ((((exists fs_h_trace_steps_summand. fs_h_trace_steps_summand + S (fs_a_trace_steps) = S ((S (fs_i_trace_steps)) * c)) /\ exists fs_q_trace_steps_summand. b = fs_q_trace_steps_summand * S ((S (fs_i_trace_steps)) * c) + (fs_a_trace_steps))) /\ ((((exists fs_h_trace_steps_partial. fs_h_trace_steps_partial + S (fs_r_trace_steps) = S ((S (fs_i_trace_steps)) * fs_v_trace)) /\ exists fs_q_trace_steps_partial. fs_u_trace = fs_q_trace_steps_partial * S ((S (fs_i_trace_steps)) * fs_v_trace) + (fs_r_trace_steps))) /\ ((((exists fs_h_trace_steps_successor. fs_h_trace_steps_successor + S (fs_s_trace_steps) = S ((S (S fs_i_trace_steps)) * fs_v_trace)) /\ exists fs_q_trace_steps_successor. fs_u_trace = fs_q_trace_steps_successor * S ((S (S fs_i_trace_steps)) * fs_v_trace) + (fs_s_trace_steps))) /\ fs_s_trace_steps = fs_r_trace_steps + fs_a_trace_steps))))Proof neighborhood
Direct theorem prerequisites
BT0040 beta_at_self_of_bound BT000L add_eq_zero_right BT000C succ_ne_zero BT0041 beta_at_exists BT005D beta_prefix_extend BT000W zero_le BT0016 succ_le_succ BT000E le_refl BT0017 le_of_succ_le_succ BT001C le_eq_or_lt BT0009 one_mulDirect theorem dependents
Definition-aware tactic body
Only local propositions introduced by have or suffices are compacted. Every changed line has an exact-AST conservative-expansion receipt; the kernel still receives the immutable original tactic 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 (11)
01Fix variables and assumptionsL1–2
02Induction on lL3–3
Split the argument into the base and successor obligations. The induction hypothesis is available only in the successor branch.
- L3
induction l
03Construct an explicit witnessL4–5
04Separate the logical casesL6–6
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L6
split
05Use earlier factsL7–11
06Calculate and transport equalitiesL12–12
Carry out the recorded arithmetic or equality steps; inspect the exact commands for their direction and premises.
- L12
rewrite one_mul
07Use earlier factsL13–17
08Fix variables and assumptionsL18–19
09Separate the logical casesL20–21
10Establish hsi0L22–29
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply add eq zero right.
11Establish htraceL30–31
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply IH.
- L30
have htrace : ∃ fs_u_induction. ∃ fs_v_induction. BetaAt(fs_u_induction,fs_v_induction,0,0) ∧ (∀ x. Lt(x,l) → ∃ y. ∃ z. ∃ n. BetaAt(b,c,x,y) ∧ (BetaAt(fs_u_induction,fs_v_induction,x,z) ∧ (BetaAt(fs_u_induction,fs_v_induction,S x,n) ∧ n = z + y)))Definitions: BetaAt(fs_u_induction,fs_v_induction,0,0)Lt(x,l)BetaAt(b,c,x,y)BetaAt(fs_u_induction,fs_v_induction,x,z)BetaAt(fs_u_induction,fs_v_induction,S x,n)Original native command in the exact edition - L31
apply IH
12Separate the logical casesL32–34
13Establish hfactorL35–39
Establish this local claim before using it. It is not an additional assumption.
- L35
have hfactor : ∃ p. BetaAt(b,c,l,p)Definitions: BetaAt(b,c,l,p)Original native command in the exact edition - L36
specialize beta_at_exists b - L37
specialize beta_at_exists c - L38
specialize beta_at_exists l - L39
exact beta_at_exists
14Separate the logical casesL40–40
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L40
cases hfactor
15Establish hlastL41–45
Establish this local claim before using it. It is not an additional assumption.
- L41
have hlast : ∃ r. BetaAt(x,x1,l,r)Definitions: BetaAt(x,x1,l,r)Original native command in the exact edition - L42
specialize beta_at_exists x - L43
specialize beta_at_exists x1 - L44
specialize beta_at_exists l - L45
exact beta_at_exists
16Separate the logical casesL46–46
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L46
cases hlast
17Establish hextL47–52
Establish this local claim before using it. It is not an additional assumption.
- L47
have hext : ∃ z. ∃ v. BetaAt(z,v,S l,x3 + x2) ∧ (∀ y. ∀ n. Lt(y,S l) → BetaAt(x,x1,y,n) → BetaAt(z,v,y,n))Definitions: BetaAt(z,v,S l,x3 + x2)Lt(y,S l)BetaAt(x,x1,y,n)BetaAt(z,v,y,n)Original native command in the exact edition - L48
specialize beta_prefix_extend (S l) - L49
specialize beta_prefix_extend x - L50
specialize beta_prefix_extend x1 - L51
specialize beta_prefix_extend (x3 + x2) - L52
exact beta_prefix_extend
18Separate the logical casesL53–55
19Construct an explicit witnessL56–57
20Separate the logical casesL58–58
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L58
split
21Use earlier factsL59–61
22Establish h0L62–62
Establish this local claim before using it. It is not an additional assumption.
23Establish hzeroL63–72
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply succ le succ.
24Fix variables and assumptionsL73–73
Work with arbitrary variables or the premises of the current implication.
- L73
intro hi
25Establish hilL74–78
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply le of succ le succ.
26Establish hsplitL79–83
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply le eq or lt.
27Separate the logical casesL84–84
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L84
cases hsplit
28Construct an explicit witnessL85–87
29Separate the logical casesL88–88
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L88
split
30Calculate and transport equalitiesL89–90
31Use earlier factsL91–91
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L91
exact hfactor_witness
32Separate the logical casesL92–92
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L92
split
33Calculate and transport equalitiesL93–94
34Use earlier factsL95–100
35Separate the logical casesL101–101
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L101
split
36Calculate and transport equalitiesL102–103
37Use earlier factsL104–104
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L104
exact hext_witness_witness_left
38Calculate and transport equalitiesL105–105
Carry out the recorded arithmetic or equality steps; inspect the exact commands for their direction and premises.
- L105
refl
39Establish holdL106–109
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply htrace witness witness right.
- L106
have hold : ∃ p. ∃ r. ∃ s. BetaAt(b,c,i,p) ∧ (BetaAt(x,x1,i,r) ∧ (BetaAt(x,x1,S i,s) ∧ s = r + p))Definitions: BetaAt(b,c,i,p)BetaAt(x,x1,i,r)BetaAt(x,x1,S i,s)Original native command in the exact edition - L107
specialize htrace_witness_witness_right i - L108
apply htrace_witness_witness_right - L109
exact hsplit_right
40Separate the logical casesL110–115
41Construct an explicit witnessL116–118
42Separate the logical casesL119–119
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L119
split
43Use earlier factsL120–120
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L120
exact hold_witness_witness_witness_left
44Separate the logical casesL121–121
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L121
split
45Use earlier factsL122–126
46Separate the logical casesL127–127
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L127
split
47Use earlier factsL128–136
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L128
specialize hext_witness_witness_right (S i) - L129
specialize hext_witness_witness_right x8 - L130
apply hext_witness_witness_right - L131
specialize succ_le_succ (S i) - L132
specialize succ_le_succ l - L133
apply succ_le_succ - L134
exact hsplit_right - L135
exact hold_witness_witness_witness_right_right_left - L136
exact hold_witness_witness_witness_right_right_right
Original defined command ledger · 136 lines
- 0001
intro b - 0002
intro c - 0003
induction l - 0004
exists 0 - 0005
exists 1 - 0006
split - 0007
specialize beta_at_self_of_bound 1 - 0008
specialize beta_at_self_of_bound 0 - 0009
specialize beta_at_self_of_bound 0 - 0010
apply beta_at_self_of_bound - 0011
specialize one_mul 1 - 0012
rewrite one_mul - 0013
specialize succ_le_succ 0 - 0014
specialize succ_le_succ (S 0) - 0015
apply succ_le_succ - 0016
specialize zero_le (S 0) - 0017
exact zero_le - 0018
intro i - 0019
intro hi - 0020
exfalso - 0021
cases hi - 0022
have hsi0 : S i = 0 - 0023
specialize add_eq_zero_right x - 0024
specialize add_eq_zero_right (S i) - 0025
apply add_eq_zero_right - 0026
exact hi_witness - 0027
specialize succ_ne_zero i - 0028
apply succ_ne_zero - 0029
exact hsi0 - 0030
have htrace : ∃ fs_u_induction. ∃ fs_v_induction. BetaAt(fs_u_induction,fs_v_induction,0,0) ∧ (∀ x. Lt(x,l) → ∃ y. ∃ z. ∃ n. BetaAt(b,c,x,y) ∧ (BetaAt(fs_u_induction,fs_v_induction,x,z) ∧ (BetaAt(fs_u_induction,fs_v_induction,S x,n) ∧ n = z + y)))Exact native replay line
have htrace : exists fs_u_induction fs_v_induction. ((((exists fs_h_induction_start. fs_h_induction_start + S (0) = S ((S (0)) * fs_v_induction)) /\ exists fs_q_induction_start. fs_u_induction = fs_q_induction_start * S ((S (0)) * fs_v_induction) + (0))) /\ forall fs_i_induction_steps. (exists fs_lt_induction_steps_bound. fs_lt_induction_steps_bound + S fs_i_induction_steps = l) -> exists fs_a_induction_steps fs_r_induction_steps fs_s_induction_steps. ((((exists fs_h_induction_steps_summand. fs_h_induction_steps_summand + S (fs_a_induction_steps) = S ((S (fs_i_induction_steps)) * c)) /\ exists fs_q_induction_steps_summand. b = fs_q_induction_steps_summand * S ((S (fs_i_induction_steps)) * c) + (fs_a_induction_steps))) /\ ((((exists fs_h_induction_steps_partial. fs_h_induction_steps_partial + S (fs_r_induction_steps) = S ((S (fs_i_induction_steps)) * fs_v_induction)) /\ exists fs_q_induction_steps_partial. fs_u_induction = fs_q_induction_steps_partial * S ((S (fs_i_induction_steps)) * fs_v_induction) + (fs_r_induction_steps))) /\ ((((exists fs_h_induction_steps_successor. fs_h_induction_steps_successor + S (fs_s_induction_steps) = S ((S (S fs_i_induction_steps)) * fs_v_induction)) /\ exists fs_q_induction_steps_successor. fs_u_induction = fs_q_induction_steps_successor * S ((S (S fs_i_induction_steps)) * fs_v_induction) + (fs_s_induction_steps))) /\ fs_s_induction_steps = fs_r_induction_steps + fs_a_induction_steps)))) - 0031
apply IH - 0032
cases htrace - 0033
cases htrace_witness - 0034
cases htrace_witness_witness - 0035
have hfactor : ∃ p. BetaAt(b,c,l,p)Exact native replay line
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)) - 0036
specialize beta_at_exists b - 0037
specialize beta_at_exists c - 0038
specialize beta_at_exists l - 0039
exact beta_at_exists - 0040
cases hfactor - 0041
have hlast : ∃ r. BetaAt(x,x1,l,r)Exact native replay line
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)) - 0042
specialize beta_at_exists x - 0043
specialize beta_at_exists x1 - 0044
specialize beta_at_exists l - 0045
exact beta_at_exists - 0046
cases hlast - 0047
have hext : ∃ z. ∃ v. BetaAt(z,v,S l,x3 + x2) ∧ (∀ y. ∀ n. Lt(y,S l) → BetaAt(x,x1,y,n) → BetaAt(z,v,y,n))Exact native replay line
have hext : exists z v. ((((exists fs_h_trace_extension. fs_h_trace_extension + S (x3 + x2) = S ((S (S l)) * v)) /\ exists fs_q_trace_extension. z = fs_q_trace_extension * S ((S (S l)) * v) + (x3 + 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)))) - 0048
specialize beta_prefix_extend (S l) - 0049
specialize beta_prefix_extend x - 0050
specialize beta_prefix_extend x1 - 0051
specialize beta_prefix_extend (x3 + x2) - 0052
exact beta_prefix_extend - 0053
cases hext - 0054
cases hext_witness - 0055
cases hext_witness_witness - 0056
exists x4 - 0057
exists x5 - 0058
split - 0059
specialize hext_witness_witness_right 0 - 0060
specialize hext_witness_witness_right 0 - 0061
apply hext_witness_witness_right - 0062
have h0 : Lt(0,S l)Exact native replay line
have h0 : exists h. h + S 0 = S l - 0063
have hzero : Le(0,l)Exact native replay line
have hzero : exists h. h + 0 = l - 0064
specialize zero_le l - 0065
exact zero_le - 0066
specialize succ_le_succ 0 - 0067
specialize succ_le_succ l - 0068
apply succ_le_succ - 0069
exact hzero - 0070
exact h0 - 0071
exact htrace_witness_witness_left - 0072
intro i - 0073
intro hi - 0074
have hil : Le(i,l)Exact native replay line
have hil : exists h. h + i = l - 0075
specialize le_of_succ_le_succ i - 0076
specialize le_of_succ_le_succ l - 0077
apply le_of_succ_le_succ - 0078
exact hi - 0079
have hsplit : i = l ∨ Lt(i,l)Exact native replay line
have hsplit : i = l \/ exists h. h + S i = l - 0080
specialize le_eq_or_lt i - 0081
specialize le_eq_or_lt l - 0082
apply le_eq_or_lt - 0083
exact hil - 0084
cases hsplit - 0085
exists x2 - 0086
exists x3 - 0087
exists x3 + x2 - 0088
split - 0089
rewrite hsplit_left - 0090
rewrite hsplit_left - 0091
exact hfactor_witness - 0092
split - 0093
rewrite hsplit_left - 0094
rewrite hsplit_left - 0095
specialize hext_witness_witness_right l - 0096
specialize hext_witness_witness_right x3 - 0097
apply hext_witness_witness_right - 0098
specialize le_refl (S l) - 0099
exact le_refl - 0100
exact hlast_witness - 0101
split - 0102
rewrite hsplit_left - 0103
rewrite hsplit_left - 0104
exact hext_witness_witness_left - 0105
refl - 0106
have hold : ∃ p. ∃ r. ∃ s. BetaAt(b,c,i,p) ∧ (BetaAt(x,x1,i,r) ∧ (BetaAt(x,x1,S i,s) ∧ s = r + p))Exact native replay line
have hold : exists p r s. ((((exists fs_h_trace_hold_factor. fs_h_trace_hold_factor + S (p) = S ((S (i)) * c)) /\ exists fs_q_trace_hold_factor. b = fs_q_trace_hold_factor * S ((S (i)) * c) + (p))) /\ ((((exists fs_h_trace_hold_partial. fs_h_trace_hold_partial + S (r) = S ((S (i)) * x1)) /\ exists fs_q_trace_hold_partial. x = fs_q_trace_hold_partial * S ((S (i)) * x1) + (r))) /\ ((((exists fs_h_trace_hold_successor. fs_h_trace_hold_successor + S (s) = S ((S (S i)) * x1)) /\ exists fs_q_trace_hold_successor. x = fs_q_trace_hold_successor * S ((S (S i)) * x1) + (s))) /\ s = r + p))) - 0107
specialize htrace_witness_witness_right i - 0108
apply htrace_witness_witness_right - 0109
exact hsplit_right - 0110
cases hold - 0111
cases hold_witness - 0112
cases hold_witness_witness - 0113
cases hold_witness_witness_witness - 0114
cases hold_witness_witness_witness_right - 0115
cases hold_witness_witness_witness_right_right - 0116
exists x6 - 0117
exists x7 - 0118
exists x8 - 0119
split - 0120
exact hold_witness_witness_witness_left - 0121
split - 0122
specialize hext_witness_witness_right i - 0123
specialize hext_witness_witness_right x7 - 0124
apply hext_witness_witness_right - 0125
exact hi - 0126
exact hold_witness_witness_witness_right_left - 0127
split - 0128
specialize hext_witness_witness_right (S i) - 0129
specialize hext_witness_witness_right x8 - 0130
apply hext_witness_witness_right - 0131
specialize succ_le_succ (S i) - 0132
specialize succ_le_succ l - 0133
apply succ_le_succ - 0134
exact hsplit_right - 0135
exact hold_witness_witness_witness_right_right_left - 0136
exact hold_witness_witness_witness_right_right_right