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
∀ l. ∀ p. ∀ b. ∀ c. ∀ z. ∀ t. ∀ n. ∀ k. ∀ P. Product(b,c,l,P) → BetaAt(z,t,0,n) → BetaAt(z,t,l,k) → (∀ x. ∀ y. ∀ m. ∀ i. Lt(x,l) → BetaAt(z,t,x,y) → BetaAt(z,t,S x,m) → BetaAt(b,c,x,i) → ModEq(p,y,m · i)) → ModEq(p,n,k · P)Every purple notation token opens its conservative definition. This reading surface never changes the unchanged intuitionistic kernel or confers checked-use authority.
Definitions used by this theorem
In the theorem statement
In local proof propositions
Exact expanded first-order statement
forall l p b c z t n k P. (exists ff_u_lmd_fold_product ff_v_lmd_fold_product. ((((exists ff_h_lmd_fold_product_start. ff_h_lmd_fold_product_start + S (1) = S ((S (0)) * ff_v_lmd_fold_product)) /\ exists ff_q_lmd_fold_product_start. ff_u_lmd_fold_product = ff_q_lmd_fold_product_start * S ((S (0)) * ff_v_lmd_fold_product) + (1))) /\ ((((exists ff_h_lmd_fold_product_terminal. ff_h_lmd_fold_product_terminal + S (P) = S ((S (l)) * ff_v_lmd_fold_product)) /\ exists ff_q_lmd_fold_product_terminal. ff_u_lmd_fold_product = ff_q_lmd_fold_product_terminal * S ((S (l)) * ff_v_lmd_fold_product) + (P))) /\ forall ff_i_lmd_fold_product. (exists ff_lt_lmd_fold_product_bound. ff_lt_lmd_fold_product_bound + S ff_i_lmd_fold_product = l) -> exists ff_p_lmd_fold_product ff_r_lmd_fold_product ff_s_lmd_fold_product. ((((exists ff_h_lmd_fold_product_factor. ff_h_lmd_fold_product_factor + S (ff_p_lmd_fold_product) = S ((S (ff_i_lmd_fold_product)) * c)) /\ exists ff_q_lmd_fold_product_factor. b = ff_q_lmd_fold_product_factor * S ((S (ff_i_lmd_fold_product)) * c) + (ff_p_lmd_fold_product))) /\ ((((exists ff_h_lmd_fold_product_partial. ff_h_lmd_fold_product_partial + S (ff_r_lmd_fold_product) = S ((S (ff_i_lmd_fold_product)) * ff_v_lmd_fold_product)) /\ exists ff_q_lmd_fold_product_partial. ff_u_lmd_fold_product = ff_q_lmd_fold_product_partial * S ((S (ff_i_lmd_fold_product)) * ff_v_lmd_fold_product) + (ff_r_lmd_fold_product))) /\ ((((exists ff_h_lmd_fold_product_successor. ff_h_lmd_fold_product_successor + S (ff_s_lmd_fold_product) = S ((S (S ff_i_lmd_fold_product)) * ff_v_lmd_fold_product)) /\ exists ff_q_lmd_fold_product_successor. ff_u_lmd_fold_product = ff_q_lmd_fold_product_successor * S ((S (S ff_i_lmd_fold_product)) * ff_v_lmd_fold_product) + (ff_s_lmd_fold_product))) /\ ff_s_lmd_fold_product = ff_r_lmd_fold_product * ff_p_lmd_fold_product)))))) -> (((exists ff_h_lmd_fold_start. ff_h_lmd_fold_start + S (n) = S ((S (0)) * t)) /\ exists ff_q_lmd_fold_start. z = ff_q_lmd_fold_start * S ((S (0)) * t) + (n))) -> (((exists ff_h_lmd_fold_terminal. ff_h_lmd_fold_terminal + S (k) = S ((S (l)) * t)) /\ exists ff_q_lmd_fold_terminal. z = ff_q_lmd_fold_terminal * S ((S (l)) * t) + (k))) -> (forall lmd_step_index_fold_trace lmd_step_source_fold_trace lmd_step_successor_fold_trace lmd_step_factor_fold_trace. (exists lmd_gap_fold_trace_bound. lmd_gap_fold_trace_bound + S (lmd_step_index_fold_trace) = (l)) -> (((exists ff_h_lmd_fold_trace_source. ff_h_lmd_fold_trace_source + S (lmd_step_source_fold_trace) = S ((S (lmd_step_index_fold_trace)) * t)) /\ exists ff_q_lmd_fold_trace_source. z = ff_q_lmd_fold_trace_source * S ((S (lmd_step_index_fold_trace)) * t) + (lmd_step_source_fold_trace))) -> (((exists ff_h_lmd_fold_trace_successor. ff_h_lmd_fold_trace_successor + S (lmd_step_successor_fold_trace) = S ((S (S lmd_step_index_fold_trace)) * t)) /\ exists ff_q_lmd_fold_trace_successor. z = ff_q_lmd_fold_trace_successor * S ((S (S lmd_step_index_fold_trace)) * t) + (lmd_step_successor_fold_trace))) -> (((exists ff_h_lmd_fold_trace_factor. ff_h_lmd_fold_trace_factor + S (lmd_step_factor_fold_trace) = S ((S (lmd_step_index_fold_trace)) * c)) /\ exists ff_q_lmd_fold_trace_factor. b = ff_q_lmd_fold_trace_factor * S ((S (lmd_step_index_fold_trace)) * c) + (lmd_step_factor_fold_trace))) -> (exists lmd_mod_left_fold_trace_congruence lmd_mod_right_fold_trace_congruence. (lmd_step_source_fold_trace) + (p) * lmd_mod_left_fold_trace_congruence = (lmd_step_successor_fold_trace * lmd_step_factor_fold_trace) + (p) * lmd_mod_right_fold_trace_congruence)) -> (exists lmd_mod_left_fold_result lmd_mod_right_fold_result. (n) + (p) * lmd_mod_left_fold_result = (k * P) + (p) * lmd_mod_right_fold_result)Proof neighborhood
Direct theorem prerequisites
Direct theorem dependents
Definition-aware tactic body
Only propositions whose conservative expansion has been checked for exact first-order equivalence are compacted. Every changed line retains its immutable exact replay command.
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–1
Work with arbitrary variables or the premises of the current implication.
- L1
intro l
02Induction on lL2–11
03Fix variables and assumptionsL12–14
04Establish honeL15–20
05Establish hequalL21–29
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply beta at unique.
06Establish hrightL30–39
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply mul one.
07Fix variables and assumptionsL40–49
08Fix variables and assumptionsL50–51
09Establish hdecompositionL52–58
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply beta product succ decompose.
- L52
have hdecomposition : ∃ D. ∃ R. BetaAt(b,c,l,D) ∧ (Product(b,c,l,R) ∧ P = R · D)Definitions: BetaAt(b,c,l,D)Product(b,c,l,R)Original native command in the exact edition - L53
specialize beta_product_succ_decompose b - L54
specialize beta_product_succ_decompose c - L55
specialize beta_product_succ_decompose l - L56
specialize beta_product_succ_decompose P - L57
apply beta_product_succ_decompose - L58
exact hproduct
10Separate the logical casesL59–62
11Establish hmiddleL63–67
Establish this local claim before using it. It is not an additional assumption.
- L63
have hmiddle : ∃ q. BetaAt(z,t,l,q)Definitions: BetaAt(z,t,l,q)Original native command in the exact edition - L64
specialize beta_at_exists z - L65
specialize beta_at_exists t - L66
specialize beta_at_exists l - L67
exact beta_at_exists
12Separate the logical casesL68–68
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L68
cases hmiddle
13Establish hrestrictedL69–78
Establish this local claim before using it. It is not an additional assumption.
- L69
have hrestricted : ∀ lmd_step_index_fold_restricted. ∀ lmd_step_source_fold_restricted. ∀ lmd_step_successor_fold_restricted. ∀ lmd_step_factor_fold_restricted. Lt(lmd_step_index_fold_restricted,l) → BetaAt(z,t,lmd_step_index_fold_restricted,lmd_step_source_fold_restricted) → BetaAt(z,t,S lmd_step_index_fold_restricted,lmd_step_successor_fold_restricted) → BetaAt(b,c,lmd_step_index_fold_restricted,lmd_step_factor_fold_restricted) → ModEq(p,lmd_step_source_fold_restricted,lmd_step_successor_fold_restricted · lmd_step_factor_fold_restricted)Definitions: Lt(lmd_step_index_fold_restricted,l)BetaAt(z,t,lmd_step_index_fold_restricted,lmd_step_source_fold_restricted)BetaAt(z,t,S lmd_step_index_fold_restricted,lmd_step_successor_fold_restricted)BetaAt(b,c,lmd_step_index_fold_restricted,lmd_step_factor_fold_restricted)ModEq(p,lmd_step_source_fold_restricted,lmd_step_successor_fold_restricted · lmd_step_factor_fold_restricted)Original native command in the exact edition - L70
intro i - L71
intro A - L72
intro K - L73
intro D - L74
intro hi - L75
intro hA - L76
intro hK - L77
intro hD - L78
specialize htrace i
14Use earlier factsL79–88
Instantiate or apply named facts and discharge the corresponding proof obligations.
15Use earlier factsL89–92
16Establish hbeforeL93–102
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply IH.
17Use earlier factsL103–106
18Establish hlastL107–112
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply htrace.
- L107
have hlast : ModEq(p,x2,k · x)Definitions: ModEq(p,x2,k · x)Original native command in the exact edition - L108
specialize htrace l - L109
specialize htrace x2 - L110
specialize htrace k - L111
specialize htrace x - L112
apply htrace
19Construct an explicit witnessL113–113
Supply the displayed value, then prove that it has the required property.
- L113
exists 0
20Use earlier factsL114–117
21Establish hscaledL118–124
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply mod eq mul right.
- L118
have hscaled : ModEq(p,x2 · x1,k · x · x1)Definitions: ModEq(p,x2 · x1,k · x · x1)Original native command in the exact edition - L119
specialize mod_eq_mul_right p - L120
specialize mod_eq_mul_right x2 - L121
specialize mod_eq_mul_right (k * x) - L122
specialize mod_eq_mul_right x1 - L123
apply mod_eq_mul_right - L124
exact hlast
22Establish hcombinedL125–132
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply mod eq trans.
- L125
have hcombined : ModEq(p,n,k · x · x1)Definitions: ModEq(p,n,k · x · x1)Original native command in the exact edition - L126
specialize mod_eq_trans p - L127
specialize mod_eq_trans n - L128
specialize mod_eq_trans (x2 * x1) - L129
specialize mod_eq_trans ((k * x) * x1) - L130
apply mod_eq_trans - L131
exact hbefore - L132
exact hscaled
23Establish htargetL133–142
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply mul assoc.
24Use earlier factsL143–143
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L143
exact hcombined
Original defined command ledger · 143 lines
- 0001
intro l - 0002
induction l - 0003
intro p - 0004
intro b - 0005
intro c - 0006
intro z - 0007
intro t - 0008
intro n - 0009
intro k - 0010
intro P - 0011
intro hproduct - 0012
intro hstart - 0013
intro hterminal - 0014
intro htrace - 0015
have hone : P = 1 - 0016
specialize beta_product_zero b - 0017
specialize beta_product_zero c - 0018
specialize beta_product_zero P - 0019
apply beta_product_zero - 0020
exact hproduct - 0021
have hequal : n = k - 0022
specialize beta_at_unique z - 0023
specialize beta_at_unique t - 0024
specialize beta_at_unique 0 - 0025
specialize beta_at_unique n - 0026
specialize beta_at_unique k - 0027
apply beta_at_unique - 0028
exact hstart - 0029
exact hterminal - 0030
have hright : k * P = n - 0031
rewrite hone - 0032
trans k - 0033
apply mul_one - 0034
symm - 0035
exact hequal - 0036
rewrite hright - 0037
specialize mod_eq_refl p - 0038
specialize mod_eq_refl n - 0039
exact mod_eq_refl - 0040
intro p - 0041
intro b - 0042
intro c - 0043
intro z - 0044
intro t - 0045
intro n - 0046
intro k - 0047
intro P - 0048
intro hproduct - 0049
intro hstart - 0050
intro hterminal - 0051
intro htrace - 0052
have hdecomposition : ∃ D. ∃ R. BetaAt(b,c,l,D) ∧ (Product(b,c,l,R) ∧ P = R · D)Exact native replay line
have hdecomposition : exists D R. ((((exists ff_h_lmd_fold_last_factor. ff_h_lmd_fold_last_factor + S (D) = S ((S (l)) * c)) /\ exists ff_q_lmd_fold_last_factor. b = ff_q_lmd_fold_last_factor * S ((S (l)) * c) + (D))) /\ ((exists ff_u_lmd_fold_previous ff_v_lmd_fold_previous. ((((exists ff_h_lmd_fold_previous_start. ff_h_lmd_fold_previous_start + S (1) = S ((S (0)) * ff_v_lmd_fold_previous)) /\ exists ff_q_lmd_fold_previous_start. ff_u_lmd_fold_previous = ff_q_lmd_fold_previous_start * S ((S (0)) * ff_v_lmd_fold_previous) + (1))) /\ ((((exists ff_h_lmd_fold_previous_terminal. ff_h_lmd_fold_previous_terminal + S (R) = S ((S (l)) * ff_v_lmd_fold_previous)) /\ exists ff_q_lmd_fold_previous_terminal. ff_u_lmd_fold_previous = ff_q_lmd_fold_previous_terminal * S ((S (l)) * ff_v_lmd_fold_previous) + (R))) /\ forall ff_i_lmd_fold_previous. (exists ff_lt_lmd_fold_previous_bound. ff_lt_lmd_fold_previous_bound + S ff_i_lmd_fold_previous = l) -> exists ff_p_lmd_fold_previous ff_r_lmd_fold_previous ff_s_lmd_fold_previous. ((((exists ff_h_lmd_fold_previous_factor. ff_h_lmd_fold_previous_factor + S (ff_p_lmd_fold_previous) = S ((S (ff_i_lmd_fold_previous)) * c)) /\ exists ff_q_lmd_fold_previous_factor. b = ff_q_lmd_fold_previous_factor * S ((S (ff_i_lmd_fold_previous)) * c) + (ff_p_lmd_fold_previous))) /\ ((((exists ff_h_lmd_fold_previous_partial. ff_h_lmd_fold_previous_partial + S (ff_r_lmd_fold_previous) = S ((S (ff_i_lmd_fold_previous)) * ff_v_lmd_fold_previous)) /\ exists ff_q_lmd_fold_previous_partial. ff_u_lmd_fold_previous = ff_q_lmd_fold_previous_partial * S ((S (ff_i_lmd_fold_previous)) * ff_v_lmd_fold_previous) + (ff_r_lmd_fold_previous))) /\ ((((exists ff_h_lmd_fold_previous_successor. ff_h_lmd_fold_previous_successor + S (ff_s_lmd_fold_previous) = S ((S (S ff_i_lmd_fold_previous)) * ff_v_lmd_fold_previous)) /\ exists ff_q_lmd_fold_previous_successor. ff_u_lmd_fold_previous = ff_q_lmd_fold_previous_successor * S ((S (S ff_i_lmd_fold_previous)) * ff_v_lmd_fold_previous) + (ff_s_lmd_fold_previous))) /\ ff_s_lmd_fold_previous = ff_r_lmd_fold_previous * ff_p_lmd_fold_previous)))))) /\ P = R * D)) - 0053
specialize beta_product_succ_decompose b - 0054
specialize beta_product_succ_decompose c - 0055
specialize beta_product_succ_decompose l - 0056
specialize beta_product_succ_decompose P - 0057
apply beta_product_succ_decompose - 0058
exact hproduct - 0059
cases hdecomposition - 0060
cases hdecomposition_witness - 0061
cases hdecomposition_witness_witness - 0062
cases hdecomposition_witness_witness_right - 0063
have hmiddle : ∃ q. BetaAt(z,t,l,q)Exact native replay line
have hmiddle : exists q. (((exists ff_h_lmd_fold_middle. ff_h_lmd_fold_middle + S (q) = S ((S (l)) * t)) /\ exists ff_q_lmd_fold_middle. z = ff_q_lmd_fold_middle * S ((S (l)) * t) + (q))) - 0064
specialize beta_at_exists z - 0065
specialize beta_at_exists t - 0066
specialize beta_at_exists l - 0067
exact beta_at_exists - 0068
cases hmiddle - 0069
have hrestricted : ∀ lmd_step_index_fold_restricted. ∀ lmd_step_source_fold_restricted. ∀ lmd_step_successor_fold_restricted. ∀ lmd_step_factor_fold_restricted. Lt(lmd_step_index_fold_restricted,l) → BetaAt(z,t,lmd_step_index_fold_restricted,lmd_step_source_fold_restricted) → BetaAt(z,t,S lmd_step_index_fold_restricted,lmd_step_successor_fold_restricted) → BetaAt(b,c,lmd_step_index_fold_restricted,lmd_step_factor_fold_restricted) → ModEq(p,lmd_step_source_fold_restricted,lmd_step_successor_fold_restricted · lmd_step_factor_fold_restricted)Exact native replay line
have hrestricted : forall lmd_step_index_fold_restricted lmd_step_source_fold_restricted lmd_step_successor_fold_restricted lmd_step_factor_fold_restricted. (exists lmd_gap_fold_restricted_bound. lmd_gap_fold_restricted_bound + S (lmd_step_index_fold_restricted) = (l)) -> (((exists ff_h_lmd_fold_restricted_source. ff_h_lmd_fold_restricted_source + S (lmd_step_source_fold_restricted) = S ((S (lmd_step_index_fold_restricted)) * t)) /\ exists ff_q_lmd_fold_restricted_source. z = ff_q_lmd_fold_restricted_source * S ((S (lmd_step_index_fold_restricted)) * t) + (lmd_step_source_fold_restricted))) -> (((exists ff_h_lmd_fold_restricted_successor. ff_h_lmd_fold_restricted_successor + S (lmd_step_successor_fold_restricted) = S ((S (S lmd_step_index_fold_restricted)) * t)) /\ exists ff_q_lmd_fold_restricted_successor. z = ff_q_lmd_fold_restricted_successor * S ((S (S lmd_step_index_fold_restricted)) * t) + (lmd_step_successor_fold_restricted))) -> (((exists ff_h_lmd_fold_restricted_factor. ff_h_lmd_fold_restricted_factor + S (lmd_step_factor_fold_restricted) = S ((S (lmd_step_index_fold_restricted)) * c)) /\ exists ff_q_lmd_fold_restricted_factor. b = ff_q_lmd_fold_restricted_factor * S ((S (lmd_step_index_fold_restricted)) * c) + (lmd_step_factor_fold_restricted))) -> (exists lmd_mod_left_fold_restricted_congruence lmd_mod_right_fold_restricted_congruence. (lmd_step_source_fold_restricted) + (p) * lmd_mod_left_fold_restricted_congruence = (lmd_step_successor_fold_restricted * lmd_step_factor_fold_restricted) + (p) * lmd_mod_right_fold_restricted_congruence) - 0070
intro i - 0071
intro A - 0072
intro K - 0073
intro D - 0074
intro hi - 0075
intro hA - 0076
intro hK - 0077
intro hD - 0078
specialize htrace i - 0079
specialize htrace A - 0080
specialize htrace K - 0081
specialize htrace D - 0082
apply htrace - 0083
specialize lt_of_lt_of_le i - 0084
specialize lt_of_lt_of_le l - 0085
specialize lt_of_lt_of_le (S l) - 0086
apply lt_of_lt_of_le - 0087
exact hi - 0088
specialize le_succ_self l - 0089
exact le_succ_self - 0090
exact hA - 0091
exact hK - 0092
exact hD - 0093
have hbefore : ModEq(p,n,x2 · x1)Exact native replay line
have hbefore : (exists lmd_mod_left_fold_before lmd_mod_right_fold_before. (n) + (p) * lmd_mod_left_fold_before = (x2 * x1) + (p) * lmd_mod_right_fold_before) - 0094
specialize IH p - 0095
specialize IH b - 0096
specialize IH c - 0097
specialize IH z - 0098
specialize IH t - 0099
specialize IH n - 0100
specialize IH x2 - 0101
specialize IH x1 - 0102
apply IH - 0103
exact hdecomposition_witness_witness_right_left - 0104
exact hstart - 0105
exact hmiddle_witness - 0106
exact hrestricted - 0107
have hlast : ModEq(p,x2,k · x)Exact native replay line
have hlast : (exists lmd_mod_left_fold_last lmd_mod_right_fold_last. (x2) + (p) * lmd_mod_left_fold_last = (k * x) + (p) * lmd_mod_right_fold_last) - 0108
specialize htrace l - 0109
specialize htrace x2 - 0110
specialize htrace k - 0111
specialize htrace x - 0112
apply htrace - 0113
exists 0 - 0114
apply zero_add - 0115
exact hmiddle_witness - 0116
exact hterminal - 0117
exact hdecomposition_witness_witness_left - 0118
have hscaled : ModEq(p,x2 · x1,k · x · x1)Exact native replay line
have hscaled : (exists lmd_mod_left_fold_scaled lmd_mod_right_fold_scaled. (x2 * x1) + (p) * lmd_mod_left_fold_scaled = ((k * x) * x1) + (p) * lmd_mod_right_fold_scaled) - 0119
specialize mod_eq_mul_right p - 0120
specialize mod_eq_mul_right x2 - 0121
specialize mod_eq_mul_right (k * x) - 0122
specialize mod_eq_mul_right x1 - 0123
apply mod_eq_mul_right - 0124
exact hlast - 0125
have hcombined : ModEq(p,n,k · x · x1)Exact native replay line
have hcombined : (exists lmd_mod_left_fold_combined lmd_mod_right_fold_combined. (n) + (p) * lmd_mod_left_fold_combined = ((k * x) * x1) + (p) * lmd_mod_right_fold_combined) - 0126
specialize mod_eq_trans p - 0127
specialize mod_eq_trans n - 0128
specialize mod_eq_trans (x2 * x1) - 0129
specialize mod_eq_trans ((k * x) * x1) - 0130
apply mod_eq_trans - 0131
exact hbefore - 0132
exact hscaled - 0133
have htarget : (k * x) * x1 = k * P - 0134
trans k * (x * x1) - 0135
apply mul_assoc - 0136
trans k * (x1 * x) - 0137
congr - 0138
refl - 0139
apply mul_comm - 0140
rewrite hdecomposition_witness_witness_right_right - 0141
refl - 0142
rewrite <- htarget - 0143
exact hcombined