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
∀ p. ∀ q. ∀ i. ∀ l. (∀ x. Lt(x,l) → ∃ y. y = 0 ∧ (Lt(q · S i,p · S x) ∧ ¬Lt(p · S x,q · S i)) ∨ y = 1 ∧ (Lt(p · S x,q · S i) ∧ ¬Lt(q · S i,p · S x))) → ∃ x. ∃ y. ∀ z. Lt(z,l) → ∃ n. BetaAt(x,y,z,n) ∧ (n = 0 ∧ (Lt(q · S i,p · S z) ∧ ¬Lt(p · S z,q · S i)) ∨ n = 1 ∧ (Lt(p · S z,q · S i) ∧ ¬Lt(q · S i,p · S z)))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
11 occurrences
In local proof propositions
21 occurrences
Exact expanded native-PA statement
forall p q i l. (forall eri_column_row_indicator_exists_all. (exists eri_gap_row_indicator_exists_all_bound. eri_gap_row_indicator_exists_all_bound + S (eri_column_row_indicator_exists_all) = l) -> exists eri_bit_row_indicator_exists_all. (((eri_bit_row_indicator_exists_all = 0 /\ ((exists eri_gap_row_indicator_exists_all_choice_left. eri_gap_row_indicator_exists_all_choice_left + S (q * S i) = p * S eri_column_row_indicator_exists_all) /\ ~(exists eri_gap_row_indicator_exists_all_choice_right. eri_gap_row_indicator_exists_all_choice_right + S (p * S eri_column_row_indicator_exists_all) = q * S i))) \/ (eri_bit_row_indicator_exists_all = 1 /\ ((exists eri_gap_row_indicator_exists_all_choice_right. eri_gap_row_indicator_exists_all_choice_right + S (p * S eri_column_row_indicator_exists_all) = q * S i) /\ ~(exists eri_gap_row_indicator_exists_all_choice_left. eri_gap_row_indicator_exists_all_choice_left + S (q * S i) = p * S eri_column_row_indicator_exists_all)))))) -> (exists rb rc. (forall eri_column_row_indicator_exists_result. (exists eri_gap_row_indicator_exists_result_bound. eri_gap_row_indicator_exists_result_bound + S (eri_column_row_indicator_exists_result) = l) -> exists eri_bit_row_indicator_exists_result. ((((exists ff_h_eri_row_indicator_exists_result_decoded. ff_h_eri_row_indicator_exists_result_decoded + S (eri_bit_row_indicator_exists_result) = S ((S (eri_column_row_indicator_exists_result)) * rc)) /\ exists ff_q_eri_row_indicator_exists_result_decoded. rb = ff_q_eri_row_indicator_exists_result_decoded * S ((S (eri_column_row_indicator_exists_result)) * rc) + (eri_bit_row_indicator_exists_result))) /\ (((eri_bit_row_indicator_exists_result = 0 /\ ((exists eri_gap_row_indicator_exists_result_choice_left. eri_gap_row_indicator_exists_result_choice_left + S (q * S i) = p * S eri_column_row_indicator_exists_result) /\ ~(exists eri_gap_row_indicator_exists_result_choice_right. eri_gap_row_indicator_exists_result_choice_right + S (p * S eri_column_row_indicator_exists_result) = q * S i))) \/ (eri_bit_row_indicator_exists_result = 1 /\ ((exists eri_gap_row_indicator_exists_result_choice_right. eri_gap_row_indicator_exists_result_choice_right + S (p * S eri_column_row_indicator_exists_result) = q * S i) /\ ~(exists eri_gap_row_indicator_exists_result_choice_left. eri_gap_row_indicator_exists_result_choice_left + S (q * S i) = p * S eri_column_row_indicator_exists_result))))))))Proof neighborhood
Direct theorem prerequisites
PA0004 add_eq_zero_right PA0005 succ_ne_zero PA002O le_succ PA001A le_refl PA00DC eisenstein_row_indicator_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 (5)
01Fix variables and assumptionsL1–3
02Induction on lL4–5
03Construct an explicit witnessL6–7
04Fix variables and assumptionsL8–9
05Separate the logical casesL10–11
06Establish hsjL12–20
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply add eq zero right.
07Establish hprevious_choicesL21–29
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply hchoices.
- L21
have hprevious_choices : ∀ eri_column_row_indicator_exists_previous_choices. Lt(eri_column_row_indicator_exists_previous_choices,l) → ∃ x. x = 0 ∧ (Lt(q · S i,p · S eri_column_row_indicator_exists_previous_choices) ∧ ¬Lt(p · S eri_column_row_indicator_exists_previous_choices,q · S i)) ∨ x = 1 ∧ (Lt(p · S eri_column_row_indicator_exists_previous_choices,q · S i) ∧ ¬Lt(q · S i,p · S eri_column_row_indicator_exists_previous_choices))Definitions: Lt(eri_column_row_indicator_exists_previous_choices,l)Lt(q · S i,p · S eri_column_row_indicator_exists_previous_choices)Lt(p · S eri_column_row_indicator_exists_previous_choices,q · S i)Original native command in the exact edition - L22
intro j - L23
intro hj - L24
specialize hchoices j - L25
apply hchoices - L26
specialize le_succ (S j) - L27
specialize le_succ l - L28
apply le_succ - L29
exact hj
08Establish hpreviousL30–32
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply IH.
- L30
have hprevious : ∃ rb. ∃ rc. ∀ x. Lt(x,l) → ∃ y. BetaAt(rb,rc,x,y) ∧ (y = 0 ∧ (Lt(q · S i,p · S x) ∧ ¬Lt(p · S x,q · S i)) ∨ y = 1 ∧ (Lt(p · S x,q · S i) ∧ ¬Lt(q · S i,p · S x)))Definitions: Lt(x,l)BetaAt(rb,rc,x,y)Lt(q · S i,p · S x)Lt(p · S x,q · S i)Original native command in the exact edition - L31
apply IH - L32
exact hprevious_choices
09Separate the logical casesL33–34
10Establish hlastL35–39
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply hchoices.
- L35
have hlast : ∃ bit. bit = 0 ∧ (Lt(q · S i,p · S l) ∧ ¬Lt(p · S l,q · S i)) ∨ bit = 1 ∧ (Lt(p · S l,q · S i) ∧ ¬Lt(q · S i,p · S l))Definitions: Lt(q · S i,p · S l)Lt(p · S l,q · S i)Original native command in the exact edition - L36
specialize hchoices l - L37
apply hchoices - L38
specialize le_refl (S l) - L39
exact le_refl
11Establish hnextL40–49
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply eisenstein row indicator prefix extend.
- L40
have hnext : ∃ rb. ∃ rc. ∀ x. Lt(x,S l) → ∃ y. BetaAt(rb,rc,x,y) ∧ (y = 0 ∧ (Lt(q · S i,p · S x) ∧ ¬Lt(p · S x,q · S i)) ∨ y = 1 ∧ (Lt(p · S x,q · S i) ∧ ¬Lt(q · S i,p · S x)))Definitions: Lt(x,S l)BetaAt(rb,rc,x,y)Lt(q · S i,p · S x)Lt(p · S x,q · S i)Original native command in the exact edition - L41
specialize eisenstein_row_indicator_prefix_extend p - L42
specialize eisenstein_row_indicator_prefix_extend q - L43
specialize eisenstein_row_indicator_prefix_extend i - L44
specialize eisenstein_row_indicator_prefix_extend x - L45
specialize eisenstein_row_indicator_prefix_extend x1 - L46
specialize eisenstein_row_indicator_prefix_extend l - L47
apply eisenstein_row_indicator_prefix_extend - L48
exact hprevious_witness_witness - L49
exact hlast
12Use earlier factsL50–50
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L50
exact hnext
Original defined command ledger · 50 lines
- 0001
intro p - 0002
intro q - 0003
intro i - 0004
induction l - 0005
intro hchoices - 0006
exists 0 - 0007
exists 0 - 0008
intro j - 0009
intro hj - 0010
exfalso - 0011
cases hj - 0012
have hsj : S j = 0 - 0013
specialize add_eq_zero_right x - 0014
specialize add_eq_zero_right (S j) - 0015
apply add_eq_zero_right - 0016
exact hj_witness - 0017
specialize succ_ne_zero j - 0018
apply succ_ne_zero - 0019
exact hsj - 0020
intro hchoices - 0021
have hprevious_choices : ∀ eri_column_row_indicator_exists_previous_choices. Lt(eri_column_row_indicator_exists_previous_choices,l) → ∃ x. x = 0 ∧ (Lt(q · S i,p · S eri_column_row_indicator_exists_previous_choices) ∧ ¬Lt(p · S eri_column_row_indicator_exists_previous_choices,q · S i)) ∨ x = 1 ∧ (Lt(p · S eri_column_row_indicator_exists_previous_choices,q · S i) ∧ ¬Lt(q · S i,p · S eri_column_row_indicator_exists_previous_choices))Exact native replay line
have hprevious_choices : forall eri_column_row_indicator_exists_previous_choices. (exists eri_gap_row_indicator_exists_previous_choices_bound. eri_gap_row_indicator_exists_previous_choices_bound + S (eri_column_row_indicator_exists_previous_choices) = l) -> exists eri_bit_row_indicator_exists_previous_choices. (((eri_bit_row_indicator_exists_previous_choices = 0 /\ ((exists eri_gap_row_indicator_exists_previous_choices_choice_left. eri_gap_row_indicator_exists_previous_choices_choice_left + S (q * S i) = p * S eri_column_row_indicator_exists_previous_choices) /\ ~(exists eri_gap_row_indicator_exists_previous_choices_choice_right. eri_gap_row_indicator_exists_previous_choices_choice_right + S (p * S eri_column_row_indicator_exists_previous_choices) = q * S i))) \/ (eri_bit_row_indicator_exists_previous_choices = 1 /\ ((exists eri_gap_row_indicator_exists_previous_choices_choice_right. eri_gap_row_indicator_exists_previous_choices_choice_right + S (p * S eri_column_row_indicator_exists_previous_choices) = q * S i) /\ ~(exists eri_gap_row_indicator_exists_previous_choices_choice_left. eri_gap_row_indicator_exists_previous_choices_choice_left + S (q * S i) = p * S eri_column_row_indicator_exists_previous_choices))))) - 0022
intro j - 0023
intro hj - 0024
specialize hchoices j - 0025
apply hchoices - 0026
specialize le_succ (S j) - 0027
specialize le_succ l - 0028
apply le_succ - 0029
exact hj - 0030
have hprevious : ∃ rb. ∃ rc. ∀ x. Lt(x,l) → ∃ y. BetaAt(rb,rc,x,y) ∧ (y = 0 ∧ (Lt(q · S i,p · S x) ∧ ¬Lt(p · S x,q · S i)) ∨ y = 1 ∧ (Lt(p · S x,q · S i) ∧ ¬Lt(q · S i,p · S x)))Exact native replay line
have hprevious : exists rb rc. (forall eri_column_row_indicator_exists_previous_prefix. (exists eri_gap_row_indicator_exists_previous_prefix_bound. eri_gap_row_indicator_exists_previous_prefix_bound + S (eri_column_row_indicator_exists_previous_prefix) = l) -> exists eri_bit_row_indicator_exists_previous_prefix. ((((exists ff_h_eri_row_indicator_exists_previous_prefix_decoded. ff_h_eri_row_indicator_exists_previous_prefix_decoded + S (eri_bit_row_indicator_exists_previous_prefix) = S ((S (eri_column_row_indicator_exists_previous_prefix)) * rc)) /\ exists ff_q_eri_row_indicator_exists_previous_prefix_decoded. rb = ff_q_eri_row_indicator_exists_previous_prefix_decoded * S ((S (eri_column_row_indicator_exists_previous_prefix)) * rc) + (eri_bit_row_indicator_exists_previous_prefix))) /\ (((eri_bit_row_indicator_exists_previous_prefix = 0 /\ ((exists eri_gap_row_indicator_exists_previous_prefix_choice_left. eri_gap_row_indicator_exists_previous_prefix_choice_left + S (q * S i) = p * S eri_column_row_indicator_exists_previous_prefix) /\ ~(exists eri_gap_row_indicator_exists_previous_prefix_choice_right. eri_gap_row_indicator_exists_previous_prefix_choice_right + S (p * S eri_column_row_indicator_exists_previous_prefix) = q * S i))) \/ (eri_bit_row_indicator_exists_previous_prefix = 1 /\ ((exists eri_gap_row_indicator_exists_previous_prefix_choice_right. eri_gap_row_indicator_exists_previous_prefix_choice_right + S (p * S eri_column_row_indicator_exists_previous_prefix) = q * S i) /\ ~(exists eri_gap_row_indicator_exists_previous_prefix_choice_left. eri_gap_row_indicator_exists_previous_prefix_choice_left + S (q * S i) = p * S eri_column_row_indicator_exists_previous_prefix))))))) - 0031
apply IH - 0032
exact hprevious_choices - 0033
cases hprevious - 0034
cases hprevious_witness - 0035
have hlast : ∃ bit. bit = 0 ∧ (Lt(q · S i,p · S l) ∧ ¬Lt(p · S l,q · S i)) ∨ bit = 1 ∧ (Lt(p · S l,q · S i) ∧ ¬Lt(q · S i,p · S l))Exact native replay line
have hlast : exists bit. (((bit = 0 /\ ((exists eri_gap_row_indicator_exists_last_choice_left. eri_gap_row_indicator_exists_last_choice_left + S (q * S i) = p * S l) /\ ~(exists eri_gap_row_indicator_exists_last_choice_right. eri_gap_row_indicator_exists_last_choice_right + S (p * S l) = q * S i))) \/ (bit = 1 /\ ((exists eri_gap_row_indicator_exists_last_choice_right. eri_gap_row_indicator_exists_last_choice_right + S (p * S l) = q * S i) /\ ~(exists eri_gap_row_indicator_exists_last_choice_left. eri_gap_row_indicator_exists_last_choice_left + S (q * S i) = p * S l))))) - 0036
specialize hchoices l - 0037
apply hchoices - 0038
specialize le_refl (S l) - 0039
exact le_refl - 0040
have hnext : ∃ rb. ∃ rc. ∀ x. Lt(x,S l) → ∃ y. BetaAt(rb,rc,x,y) ∧ (y = 0 ∧ (Lt(q · S i,p · S x) ∧ ¬Lt(p · S x,q · S i)) ∨ y = 1 ∧ (Lt(p · S x,q · S i) ∧ ¬Lt(q · S i,p · S x)))Exact native replay line
have hnext : exists rb rc. (forall eri_column_row_indicator_exists_successor_prefix. (exists eri_gap_row_indicator_exists_successor_prefix_bound. eri_gap_row_indicator_exists_successor_prefix_bound + S (eri_column_row_indicator_exists_successor_prefix) = S l) -> exists eri_bit_row_indicator_exists_successor_prefix. ((((exists ff_h_eri_row_indicator_exists_successor_prefix_decoded. ff_h_eri_row_indicator_exists_successor_prefix_decoded + S (eri_bit_row_indicator_exists_successor_prefix) = S ((S (eri_column_row_indicator_exists_successor_prefix)) * rc)) /\ exists ff_q_eri_row_indicator_exists_successor_prefix_decoded. rb = ff_q_eri_row_indicator_exists_successor_prefix_decoded * S ((S (eri_column_row_indicator_exists_successor_prefix)) * rc) + (eri_bit_row_indicator_exists_successor_prefix))) /\ (((eri_bit_row_indicator_exists_successor_prefix = 0 /\ ((exists eri_gap_row_indicator_exists_successor_prefix_choice_left. eri_gap_row_indicator_exists_successor_prefix_choice_left + S (q * S i) = p * S eri_column_row_indicator_exists_successor_prefix) /\ ~(exists eri_gap_row_indicator_exists_successor_prefix_choice_right. eri_gap_row_indicator_exists_successor_prefix_choice_right + S (p * S eri_column_row_indicator_exists_successor_prefix) = q * S i))) \/ (eri_bit_row_indicator_exists_successor_prefix = 1 /\ ((exists eri_gap_row_indicator_exists_successor_prefix_choice_right. eri_gap_row_indicator_exists_successor_prefix_choice_right + S (p * S eri_column_row_indicator_exists_successor_prefix) = q * S i) /\ ~(exists eri_gap_row_indicator_exists_successor_prefix_choice_left. eri_gap_row_indicator_exists_successor_prefix_choice_left + S (q * S i) = p * S eri_column_row_indicator_exists_successor_prefix))))))) - 0041
specialize eisenstein_row_indicator_prefix_extend p - 0042
specialize eisenstein_row_indicator_prefix_extend q - 0043
specialize eisenstein_row_indicator_prefix_extend i - 0044
specialize eisenstein_row_indicator_prefix_extend x - 0045
specialize eisenstein_row_indicator_prefix_extend x1 - 0046
specialize eisenstein_row_indicator_prefix_extend l - 0047
apply eisenstein_row_indicator_prefix_extend - 0048
exact hprevious_witness_witness - 0049
exact hlast - 0050
exact hnext