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
∀ mb. ∀ mc. ∀ H. ∀ l. (∀ x. Lt(x,l) → ∃ y. BetaAt(mb,mc,x,y) ∧ (Lt(0,y) ∧ Le(y,H))) → ∃ x. ∃ y. ∀ z. ∀ n. Lt(z,l) → BetaAt(mb,mc,z,S n) → BetaAt(x,y,z,n)Every purple notation token opens its conservative definition. This is a reading surface; the compiler expands the statement before the unchanged kernel checks it.
Definitions used by this theorem
In the theorem statement
7 occurrences
In local proof propositions
11 occurrences
Exact expanded native-PA statement
forall mb mc H l. (forall gmp_index_predecessor_recode_range. (exists gsp_lt_gap_predecessor_recode_range_index_bound. gsp_lt_gap_predecessor_recode_range_index_bound + S gmp_index_predecessor_recode_range = l) -> exists gmp_magnitude_predecessor_recode_range. ((((exists ff_h_gmp_predecessor_recode_range_decoded. ff_h_gmp_predecessor_recode_range_decoded + S (gmp_magnitude_predecessor_recode_range) = S ((S (gmp_index_predecessor_recode_range)) * mc)) /\ exists ff_q_gmp_predecessor_recode_range_decoded. mb = ff_q_gmp_predecessor_recode_range_decoded * S ((S (gmp_index_predecessor_recode_range)) * mc) + (gmp_magnitude_predecessor_recode_range))) /\ ((exists gsp_lt_gap_predecessor_recode_range_positive. gsp_lt_gap_predecessor_recode_range_positive + S 0 = gmp_magnitude_predecessor_recode_range) /\ (exists gsp_le_gap_predecessor_recode_range_bounded. gsp_le_gap_predecessor_recode_range_bounded + gmp_magnitude_predecessor_recode_range = H)))) -> (exists rb rc. (forall gmp_index_predecessor_recode_result gmp_predecessor_predecessor_recode_result. (exists gsp_lt_gap_predecessor_recode_result_index_bound. gsp_lt_gap_predecessor_recode_result_index_bound + S gmp_index_predecessor_recode_result = l) -> (((exists gsp_beta_height_gmp_predecessor_recode_result_source. gsp_beta_height_gmp_predecessor_recode_result_source + S (S gmp_predecessor_predecessor_recode_result) = S ((S (gmp_index_predecessor_recode_result)) * mc)) /\ exists gsp_beta_quotient_gmp_predecessor_recode_result_source. mb = gsp_beta_quotient_gmp_predecessor_recode_result_source * S ((S (gmp_index_predecessor_recode_result)) * mc) + (S gmp_predecessor_predecessor_recode_result))) -> (((exists ff_h_gmp_predecessor_recode_result_target. ff_h_gmp_predecessor_recode_result_target + S (gmp_predecessor_predecessor_recode_result) = S ((S (gmp_index_predecessor_recode_result)) * rc)) /\ exists ff_q_gmp_predecessor_recode_result_target. rb = ff_q_gmp_predecessor_recode_result_target * S ((S (gmp_index_predecessor_recode_result)) * rc) + (gmp_predecessor_predecessor_recode_result)))))Proof neighborhood
Direct theorem prerequisites
PA0004 add_eq_zero_right PA0005 succ_ne_zero PA002O le_succ PA001A le_refl PA003U ne_zero_of_one_le PA001V nonzero_is_succ PA003D finite_lt_succ_eq_or_lt PA002F beta_at_unique PA003V succ_injective PA002X beta_prefix_extendDirect theorem dependents
Definition-aware tactic body
Only local propositions introduced by have or suffices are compacted. The untrusted compiler re-expands each one before the original tactic script is replayed; defined notation is never accepted by the kernel. Open the exact replay line beneath every changed 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.
Named ingredients (10)
01Fix variables and assumptionsL1–3
02Induction on lL4–5
03Construct an explicit witnessL6–7
04Fix variables and assumptionsL8–11
05Separate the logical casesL12–13
06Establish hsiL14–22
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply add eq zero right.
07Establish hprevious_rangeL23–31
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply hrange.
- L23
have hprevious_range : ∀ gmp_index_predecessor_recode_previous_range. Lt(gmp_index_predecessor_recode_previous_range,l) → ∃ x. BetaAt(mb,mc,gmp_index_predecessor_recode_previous_range,x) ∧ (Lt(0,x) ∧ Le(x,H))Definitions: Lt(gmp_index_predecessor_recode_previous_range,l)BetaAt(mb,mc,gmp_index_predecessor_recode_previous_range,x)Lt(0,x)Le(x,H)Original native command in the exact edition - L24
intro i - L25
intro hi - L26
specialize hrange i - L27
apply hrange - L28
specialize le_succ (S i) - L29
specialize le_succ l - L30
apply le_succ - L31
exact hi
08Establish hpreviousL32–34
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply IH.
- L32
have hprevious : ∃ rb. ∃ rc. ∀ x. ∀ y. Lt(x,l) → BetaAt(mb,mc,x,S y) → BetaAt(rb,rc,x,y)Definitions: Lt(x,l)BetaAt(mb,mc,x,S y)BetaAt(rb,rc,x,y)Original native command in the exact edition - L33
apply IH - L34
exact hprevious_range
09Separate the logical casesL35–36
10Establish hlastL37–41
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply hrange.
- L37
have hlast : ∃ m. BetaAt(mb,mc,l,m) ∧ (Lt(0,m) ∧ Le(m,H))Definitions: BetaAt(mb,mc,l,m)Lt(0,m)Le(m,H)Original native command in the exact edition - L38
specialize hrange l - L39
apply hrange - L40
specialize le_refl (S l) - L41
exact le_refl
11Separate the logical casesL42–44
12Establish hlast0L45–50
13Establish hlast_predecessorL51–54
14Separate the logical casesL55–55
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L55
cases hlast_predecessor
15Use earlier factsL56–59
16Separate the logical casesL60–62
17Construct an explicit witnessL63–64
18Fix variables and assumptionsL65–68
19Establish hsplitL69–73
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply finite lt succ eq or lt.
20Separate the logical casesL74–74
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L74
cases hsplit
21Establish hsource_valueL75–84
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply beta at unique.
22Use earlier factsL85–85
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L85
exact hlast_witness_left
23Establish hrvalueL86–95
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply succ injective.
24Calculate and transport equalitiesL96–96
Carry out the recorded arithmetic or equality steps; inspect the exact commands for their direction and premises.
- L96
rewrite hrvalue
25Use earlier factsL97–106
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L97
exact beta_prefix_extend_witness_witness_left - L98
specialize beta_prefix_extend_witness_witness_right i - L99
specialize beta_prefix_extend_witness_witness_right r - L100
apply beta_prefix_extend_witness_witness_right - L101
exact hsplit_right - L102
specialize hprevious_witness_witness i - L103
specialize hprevious_witness_witness r - L104
apply hprevious_witness_witness - L105
exact hsplit_right - L106
exact hsource
Original defined command ledger · 106 lines
- 0001
intro mb - 0002
intro mc - 0003
intro H - 0004
induction l - 0005
intro hrange - 0006
exists 0 - 0007
exists 0 - 0008
intro i - 0009
intro r - 0010
intro hi - 0011
intro hsource - 0012
exfalso - 0013
cases hi - 0014
have hsi : S i = 0 - 0015
specialize add_eq_zero_right x - 0016
specialize add_eq_zero_right (S i) - 0017
apply add_eq_zero_right - 0018
exact hi_witness - 0019
specialize succ_ne_zero i - 0020
apply succ_ne_zero - 0021
exact hsi - 0022
intro hrange - 0023
have hprevious_range : ∀ gmp_index_predecessor_recode_previous_range. Lt(gmp_index_predecessor_recode_previous_range,l) → ∃ x. BetaAt(mb,mc,gmp_index_predecessor_recode_previous_range,x) ∧ (Lt(0,x) ∧ Le(x,H))Exact native replay line
have hprevious_range : forall gmp_index_predecessor_recode_previous_range. (exists gsp_lt_gap_predecessor_recode_previous_range_index_bound. gsp_lt_gap_predecessor_recode_previous_range_index_bound + S gmp_index_predecessor_recode_previous_range = l) -> exists gmp_magnitude_predecessor_recode_previous_range. ((((exists ff_h_gmp_predecessor_recode_previous_range_decoded. ff_h_gmp_predecessor_recode_previous_range_decoded + S (gmp_magnitude_predecessor_recode_previous_range) = S ((S (gmp_index_predecessor_recode_previous_range)) * mc)) /\ exists ff_q_gmp_predecessor_recode_previous_range_decoded. mb = ff_q_gmp_predecessor_recode_previous_range_decoded * S ((S (gmp_index_predecessor_recode_previous_range)) * mc) + (gmp_magnitude_predecessor_recode_previous_range))) /\ ((exists gsp_lt_gap_predecessor_recode_previous_range_positive. gsp_lt_gap_predecessor_recode_previous_range_positive + S 0 = gmp_magnitude_predecessor_recode_previous_range) /\ (exists gsp_le_gap_predecessor_recode_previous_range_bounded. gsp_le_gap_predecessor_recode_previous_range_bounded + gmp_magnitude_predecessor_recode_previous_range = H))) - 0024
intro i - 0025
intro hi - 0026
specialize hrange i - 0027
apply hrange - 0028
specialize le_succ (S i) - 0029
specialize le_succ l - 0030
apply le_succ - 0031
exact hi - 0032
have hprevious : ∃ rb. ∃ rc. ∀ x. ∀ y. Lt(x,l) → BetaAt(mb,mc,x,S y) → BetaAt(rb,rc,x,y)Exact native replay line
have hprevious : exists rb rc. (forall gmp_index_predecessor_recode_previous_result gmp_predecessor_predecessor_recode_previous_result. (exists gsp_lt_gap_predecessor_recode_previous_result_index_bound. gsp_lt_gap_predecessor_recode_previous_result_index_bound + S gmp_index_predecessor_recode_previous_result = l) -> (((exists gsp_beta_height_gmp_predecessor_recode_previous_result_source. gsp_beta_height_gmp_predecessor_recode_previous_result_source + S (S gmp_predecessor_predecessor_recode_previous_result) = S ((S (gmp_index_predecessor_recode_previous_result)) * mc)) /\ exists gsp_beta_quotient_gmp_predecessor_recode_previous_result_source. mb = gsp_beta_quotient_gmp_predecessor_recode_previous_result_source * S ((S (gmp_index_predecessor_recode_previous_result)) * mc) + (S gmp_predecessor_predecessor_recode_previous_result))) -> (((exists ff_h_gmp_predecessor_recode_previous_result_target. ff_h_gmp_predecessor_recode_previous_result_target + S (gmp_predecessor_predecessor_recode_previous_result) = S ((S (gmp_index_predecessor_recode_previous_result)) * rc)) /\ exists ff_q_gmp_predecessor_recode_previous_result_target. rb = ff_q_gmp_predecessor_recode_previous_result_target * S ((S (gmp_index_predecessor_recode_previous_result)) * rc) + (gmp_predecessor_predecessor_recode_previous_result)))) - 0033
apply IH - 0034
exact hprevious_range - 0035
cases hprevious - 0036
cases hprevious_witness - 0037
have hlast : ∃ m. BetaAt(mb,mc,l,m) ∧ (Lt(0,m) ∧ Le(m,H))Exact native replay line
have hlast : exists m. (((exists ff_h_gmp_predecessor_recode_last_entry. ff_h_gmp_predecessor_recode_last_entry + S (m) = S ((S (l)) * mc)) /\ exists ff_q_gmp_predecessor_recode_last_entry. mb = ff_q_gmp_predecessor_recode_last_entry * S ((S (l)) * mc) + (m))) /\ ((exists gsp_lt_gap_predecessor_recode_last_positive. gsp_lt_gap_predecessor_recode_last_positive + S 0 = m) /\ (exists gsp_le_gap_predecessor_recode_last_bounded. gsp_le_gap_predecessor_recode_last_bounded + m = H)) - 0038
specialize hrange l - 0039
apply hrange - 0040
specialize le_refl (S l) - 0041
exact le_refl - 0042
cases hlast - 0043
cases hlast_witness - 0044
cases hlast_witness_right - 0045
have hlast0 : ~(x2 = 0) - 0046
intro hlastzero - 0047
specialize ne_zero_of_one_le x2 - 0048
apply ne_zero_of_one_le - 0049
exact hlast_witness_right_left - 0050
exact hlastzero - 0051
have hlast_predecessor : exists r. x2 = S r - 0052
specialize nonzero_is_succ x2 - 0053
apply nonzero_is_succ - 0054
exact hlast0 - 0055
cases hlast_predecessor - 0056
specialize beta_prefix_extend l - 0057
specialize beta_prefix_extend x - 0058
specialize beta_prefix_extend x1 - 0059
specialize beta_prefix_extend x3 - 0060
cases beta_prefix_extend - 0061
cases beta_prefix_extend_witness - 0062
cases beta_prefix_extend_witness_witness - 0063
exists x4 - 0064
exists x5 - 0065
intro i - 0066
intro r - 0067
intro hi - 0068
intro hsource - 0069
have hsplit : i = l ∨ Lt(i,l)Exact native replay line
have hsplit : i = l \/ exists gap. gap + S i = l - 0070
specialize finite_lt_succ_eq_or_lt l - 0071
specialize finite_lt_succ_eq_or_lt i - 0072
apply finite_lt_succ_eq_or_lt - 0073
exact hi - 0074
cases hsplit - 0075
have hsource_value : S r = x2 - 0076
specialize beta_at_unique mb - 0077
specialize beta_at_unique mc - 0078
specialize beta_at_unique l - 0079
specialize beta_at_unique (S r) - 0080
specialize beta_at_unique x2 - 0081
apply beta_at_unique - 0082
rewrite hsplit_left at hsource - 0083
rewrite hsplit_left at hsource - 0084
exact hsource - 0085
exact hlast_witness_left - 0086
have hrvalue : r = x3 - 0087
specialize succ_injective r - 0088
specialize succ_injective x3 - 0089
apply succ_injective - 0090
trans x2 - 0091
exact hsource_value - 0092
exact hlast_predecessor_witness - 0093
rewrite hsplit_left - 0094
rewrite hsplit_left - 0095
rewrite hrvalue - 0096
rewrite hrvalue - 0097
exact beta_prefix_extend_witness_witness_left - 0098
specialize beta_prefix_extend_witness_witness_right i - 0099
specialize beta_prefix_extend_witness_witness_right r - 0100
apply beta_prefix_extend_witness_witness_right - 0101
exact hsplit_right - 0102
specialize hprevious_witness_witness i - 0103
specialize hprevious_witness_witness r - 0104
apply hprevious_witness_witness - 0105
exact hsplit_right - 0106
exact hsource