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 PA statement
forall q k. (exists b c. (forall eis_index_initial_segment_exists_result. (exists eis_lt_gap_initial_segment_exists_result_bound. eis_lt_gap_initial_segment_exists_result_bound + S (eis_index_initial_segment_exists_result) = k) -> exists eis_bit_initial_segment_exists_result. ((((exists ff_h_eis_initial_segment_exists_result_decoded. ff_h_eis_initial_segment_exists_result_decoded + S (eis_bit_initial_segment_exists_result) = S ((S (eis_index_initial_segment_exists_result)) * c)) /\ exists ff_q_eis_initial_segment_exists_result_decoded. b = ff_q_eis_initial_segment_exists_result_decoded * S ((S (eis_index_initial_segment_exists_result)) * c) + (eis_bit_initial_segment_exists_result))) /\ (((eis_bit_initial_segment_exists_result = 1 /\ (exists eis_le_gap_initial_segment_exists_result_choice_inside. eis_le_gap_initial_segment_exists_result_choice_inside + (S eis_index_initial_segment_exists_result) = q)) \/ (eis_bit_initial_segment_exists_result = 0 /\ (exists eis_lt_gap_initial_segment_exists_result_choice_outside. eis_lt_gap_initial_segment_exists_result_choice_outside + S (q) = S eis_index_initial_segment_exists_result)))))))Structural proof guide
Every threshold and finite length has an exact beta-coded indicator.
Direct prerequisites: add_eq_zero_right, succ_ne_zero, eisenstein_initial_segment_indicator_choice, eisenstein_initial_segment_prefix_extend. The authored body proceeds by structural induction (1), case analysis (3), intermediate claims (4).
Proof neighborhood
Direct dependencies
BT000L add_eq_zero_right BT000C succ_ne_zero BT00SD eisenstein_initial_segment_indicator_choice BT00SE eisenstein_initial_segment_prefix_extendDirect dependents
Formal native tactic body
Dependencies are hypotheses of the historical Alpha-v12 body receipt. The complete historical Alpha-v18 proof bundle independently checks every dependency; current Alpha v25 preserves that checked theorem use without changing 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.
Named ingredients (4)
01Fix variables and assumptionsL1–1
Work with arbitrary variables or the premises of the current implication.
- L1
intro q
02Induction on kL2–2
Split the argument into the base and successor obligations. The induction hypothesis is available only in the successor branch.
- L2
induction k
03Construct an explicit witnessL3–4
04Fix variables and assumptionsL5–6
05Separate the logical casesL7–8
06Establish hsjL9–16
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply add eq zero right.
07Establish hpreviousL17–18
08Separate the logical casesL19–20
09Establish hlastL21–24
Establish this local claim before using it. It is not an additional assumption.
- L21
have hlast : exists bit. (((bit = 1 /\ (exists eis_le_gap_initial_segment_exists_last_inside. eis_le_gap_initial_segment_exists_last_inside + (S k) = q)) \/ (bit = 0 /\ (exists eis_lt_gap_initial_segment_exists_last_outside. eis_lt_gap_initial_segment_exists_last_outside + S (q) = S k)))) - L22
specialize eisenstein_initial_segment_indicator_choice q - L23
specialize eisenstein_initial_segment_indicator_choice k - L24
exact eisenstein_initial_segment_indicator_choice
10Establish hnextL25–33
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply eisenstein initial segment prefix extend.
- L25
- L26
specialize eisenstein_initial_segment_prefix_extend q - L27
specialize eisenstein_initial_segment_prefix_extend x - L28
specialize eisenstein_initial_segment_prefix_extend x1 - L29
specialize eisenstein_initial_segment_prefix_extend k - L30
apply eisenstein_initial_segment_prefix_extend - L31
exact hprevious_witness_witness - L32
exact hlast - L33
exact hnext
Original exact command ledger · 33 lines
- 0001
intro q - 0002
induction k - 0003
exists 0 - 0004
exists 0 - 0005
intro j - 0006
intro hj - 0007
exfalso - 0008
cases hj - 0009
have hsj : S j = 0 - 0010
specialize add_eq_zero_right x - 0011
specialize add_eq_zero_right (S j) - 0012
apply add_eq_zero_right - 0013
exact hj_witness - 0014
specialize succ_ne_zero j - 0015
apply succ_ne_zero - 0016
exact hsj - 0017
have hprevious : exists b c. (forall eis_index_initial_segment_exists_previous. (exists eis_lt_gap_initial_segment_exists_previous_bound. eis_lt_gap_initial_segment_exists_previous_bound + S (eis_index_initial_segment_exists_previous) = k) -> exists eis_bit_initial_segment_exists_previous. ((((exists ff_h_eis_initial_segment_exists_previous_decoded. ff_h_eis_initial_segment_exists_previous_decoded + S (eis_bit_initial_segment_exists_previous) = S ((S (eis_index_initial_segment_exists_previous)) * c)) /\ exists ff_q_eis_initial_segment_exists_previous_decoded. b = ff_q_eis_initial_segment_exists_previous_decoded * S ((S (eis_index_initial_segment_exists_previous)) * c) + (eis_bit_initial_segment_exists_previous))) /\ (((eis_bit_initial_segment_exists_previous = 1 /\ (exists eis_le_gap_initial_segment_exists_previous_choice_inside. eis_le_gap_initial_segment_exists_previous_choice_inside + (S eis_index_initial_segment_exists_previous) = q)) \/ (eis_bit_initial_segment_exists_previous = 0 /\ (exists eis_lt_gap_initial_segment_exists_previous_choice_outside. eis_lt_gap_initial_segment_exists_previous_choice_outside + S (q) = S eis_index_initial_segment_exists_previous)))))) - 0018
exact IH - 0019
cases hprevious - 0020
cases hprevious_witness - 0021
have hlast : exists bit. (((bit = 1 /\ (exists eis_le_gap_initial_segment_exists_last_inside. eis_le_gap_initial_segment_exists_last_inside + (S k) = q)) \/ (bit = 0 /\ (exists eis_lt_gap_initial_segment_exists_last_outside. eis_lt_gap_initial_segment_exists_last_outside + S (q) = S k)))) - 0022
specialize eisenstein_initial_segment_indicator_choice q - 0023
specialize eisenstein_initial_segment_indicator_choice k - 0024
exact eisenstein_initial_segment_indicator_choice - 0025
have hnext : exists b c. (forall eis_index_initial_segment_exists_successor. (exists eis_lt_gap_initial_segment_exists_successor_bound. eis_lt_gap_initial_segment_exists_successor_bound + S (eis_index_initial_segment_exists_successor) = S k) -> exists eis_bit_initial_segment_exists_successor. ((((exists ff_h_eis_initial_segment_exists_successor_decoded. ff_h_eis_initial_segment_exists_successor_decoded + S (eis_bit_initial_segment_exists_successor) = S ((S (eis_index_initial_segment_exists_successor)) * c)) /\ exists ff_q_eis_initial_segment_exists_successor_decoded. b = ff_q_eis_initial_segment_exists_successor_decoded * S ((S (eis_index_initial_segment_exists_successor)) * c) + (eis_bit_initial_segment_exists_successor))) /\ (((eis_bit_initial_segment_exists_successor = 1 /\ (exists eis_le_gap_initial_segment_exists_successor_choice_inside. eis_le_gap_initial_segment_exists_successor_choice_inside + (S eis_index_initial_segment_exists_successor) = q)) \/ (eis_bit_initial_segment_exists_successor = 0 /\ (exists eis_lt_gap_initial_segment_exists_successor_choice_outside. eis_lt_gap_initial_segment_exists_successor_choice_outside + S (q) = S eis_index_initial_segment_exists_successor)))))) - 0026
specialize eisenstein_initial_segment_prefix_extend q - 0027
specialize eisenstein_initial_segment_prefix_extend x - 0028
specialize eisenstein_initial_segment_prefix_extend x1 - 0029
specialize eisenstein_initial_segment_prefix_extend k - 0030
apply eisenstein_initial_segment_prefix_extend - 0031
exact hprevious_witness_witness - 0032
exact hlast - 0033
exact hnext