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 first-order arithmetic statement
forall b c l B. (((forall fom_index_mrf_selector_yesbound. (exists fom_gap_mrf_selector_yesbound_index_bound. fom_gap_mrf_selector_yesbound_index_bound + S (fom_index_mrf_selector_yesbound) = l) -> exists fom_value_mrf_selector_yesbound. ((((exists fom_beta_height_mrf_selector_yesbound_entry. fom_beta_height_mrf_selector_yesbound_entry + S (fom_value_mrf_selector_yesbound) = S ((S (fom_index_mrf_selector_yesbound)) * c)) /\ exists fom_beta_quotient_mrf_selector_yesbound_entry. b = fom_beta_quotient_mrf_selector_yesbound_entry * S ((S (fom_index_mrf_selector_yesbound)) * c) + (fom_value_mrf_selector_yesbound))) /\ (exists fom_gap_mrf_selector_yesbound_value_bound. fom_gap_mrf_selector_yesbound_value_bound + S (fom_value_mrf_selector_yesbound) = B))) /\ (forall mdr_i_selector_yesdistinct mdr_j_selector_yesdistinct mdr_a_selector_yesdistinct. (exists mdr_gap_selector_yesdistincti. mdr_gap_selector_yesdistincti + S (mdr_i_selector_yesdistinct) = (l)) -> (exists mdr_gap_selector_yesdistinctj. mdr_gap_selector_yesdistinctj + S (mdr_j_selector_yesdistinct) = (l)) -> (((exists ff_h_mdr_selector_yesdistinctfirst. ff_h_mdr_selector_yesdistinctfirst + S (mdr_a_selector_yesdistinct) = S ((S (mdr_i_selector_yesdistinct)) * c)) /\ exists ff_q_mdr_selector_yesdistinctfirst. b = ff_q_mdr_selector_yesdistinctfirst * S ((S (mdr_i_selector_yesdistinct)) * c) + (mdr_a_selector_yesdistinct))) -> (((exists ff_h_mdr_selector_yesdistinctsecond. ff_h_mdr_selector_yesdistinctsecond + S (mdr_a_selector_yesdistinct) = S ((S (mdr_j_selector_yesdistinct)) * c)) /\ exists ff_q_mdr_selector_yesdistinctsecond. b = ff_q_mdr_selector_yesdistinctsecond * S ((S (mdr_j_selector_yesdistinct)) * c) + (mdr_a_selector_yesdistinct))) -> mdr_i_selector_yesdistinct = mdr_j_selector_yesdistinct))) \/ ~(((forall fom_index_mrf_selector_nobound. (exists fom_gap_mrf_selector_nobound_index_bound. fom_gap_mrf_selector_nobound_index_bound + S (fom_index_mrf_selector_nobound) = l) -> exists fom_value_mrf_selector_nobound. ((((exists fom_beta_height_mrf_selector_nobound_entry. fom_beta_height_mrf_selector_nobound_entry + S (fom_value_mrf_selector_nobound) = S ((S (fom_index_mrf_selector_nobound)) * c)) /\ exists fom_beta_quotient_mrf_selector_nobound_entry. b = fom_beta_quotient_mrf_selector_nobound_entry * S ((S (fom_index_mrf_selector_nobound)) * c) + (fom_value_mrf_selector_nobound))) /\ (exists fom_gap_mrf_selector_nobound_value_bound. fom_gap_mrf_selector_nobound_value_bound + S (fom_value_mrf_selector_nobound) = B))) /\ (forall mdr_i_selector_nodistinct mdr_j_selector_nodistinct mdr_a_selector_nodistinct. (exists mdr_gap_selector_nodistincti. mdr_gap_selector_nodistincti + S (mdr_i_selector_nodistinct) = (l)) -> (exists mdr_gap_selector_nodistinctj. mdr_gap_selector_nodistinctj + S (mdr_j_selector_nodistinct) = (l)) -> (((exists ff_h_mdr_selector_nodistinctfirst. ff_h_mdr_selector_nodistinctfirst + S (mdr_a_selector_nodistinct) = S ((S (mdr_i_selector_nodistinct)) * c)) /\ exists ff_q_mdr_selector_nodistinctfirst. b = ff_q_mdr_selector_nodistinctfirst * S ((S (mdr_i_selector_nodistinct)) * c) + (mdr_a_selector_nodistinct))) -> (((exists ff_h_mdr_selector_nodistinctsecond. ff_h_mdr_selector_nodistinctsecond + S (mdr_a_selector_nodistinct) = S ((S (mdr_j_selector_nodistinct)) * c)) /\ exists ff_q_mdr_selector_nodistinctsecond. b = ff_q_mdr_selector_nodistinctsecond * S ((S (mdr_j_selector_nodistinct)) * c) + (mdr_a_selector_nodistinct))) -> mdr_i_selector_nodistinct = mdr_j_selector_nodistinct)))Constructive proof overview
Generated structural guide
A genuine finite matrix-selector relation, including every index bound and pairwise distinctness condition, is decidable.
The unchanged tactic script uses 2 declared prerequisites and contains 31 exact native proof lines.
Alpha v34 checked-use · first admitted v27 · independently kernel and Lean verified; not Stable
Proof neighborhood
Direct dependencies
Direct dependents
Formal native tactic body
Dependencies are introduced as named hypotheses before line 1. Local theorem links identify exact declared prerequisites. This exact body belongs to a complete independently kernel-checked constructive proof bundle and has Alpha checked-use authority; it does not imply 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 (2)
01Fix variables and assumptionsL1–4
02Establish hboundL5–10
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply matrix rank bounded prefix decidable.
03Separate the logical casesL11–11
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L11
cases hbound
04Establish hinjectiveL12–16
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply matrix rank injective prefix decidable.
05Separate the logical casesL17–19
06Use earlier factsL20–21
07Separate the logical casesL22–22
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L22
right
08Fix variables and assumptionsL23–23
Work with arbitrary variables or the premises of the current implication.
- L23
intro hselector
09Separate the logical casesL24–24
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L24
cases hselector
10Use earlier factsL25–26
11Separate the logical casesL27–27
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L27
right
12Fix variables and assumptionsL28–28
Work with arbitrary variables or the premises of the current implication.
- L28
intro hselector
13Separate the logical casesL29–29
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L29
cases hselector
Original exact command ledger · 31 lines
- 0001
intro b - 0002
intro c - 0003
intro l - 0004
intro B - 0005
have hbound : (forall fom_index_mrf_select_bound_yes. (exists fom_gap_mrf_select_bound_yes_index_bound. fom_gap_mrf_select_bound_yes_index_bound + S (fom_index_mrf_select_bound_yes) = l) -> exists fom_value_mrf_select_bound_yes. ((((exists fom_beta_height_mrf_select_bound_yes_entry. fom_beta_height_mrf_select_bound_yes_entry + S (fom_value_mrf_select_bound_yes) = S ((S (fom_index_mrf_select_bound_yes)) * c)) /\ exists fom_beta_quotient_mrf_select_bound_yes_entry. b = fom_beta_quotient_mrf_select_bound_yes_entry * S ((S (fom_index_mrf_select_bound_yes)) * c) + (fom_value_mrf_select_bound_yes))) /\ (exists fom_gap_mrf_select_bound_yes_value_bound. fom_gap_mrf_select_bound_yes_value_bound + S (fom_value_mrf_select_bound_yes) = B))) \/ ~(forall fom_index_mrf_select_bound_no. (exists fom_gap_mrf_select_bound_no_index_bound. fom_gap_mrf_select_bound_no_index_bound + S (fom_index_mrf_select_bound_no) = l) -> exists fom_value_mrf_select_bound_no. ((((exists fom_beta_height_mrf_select_bound_no_entry. fom_beta_height_mrf_select_bound_no_entry + S (fom_value_mrf_select_bound_no) = S ((S (fom_index_mrf_select_bound_no)) * c)) /\ exists fom_beta_quotient_mrf_select_bound_no_entry. b = fom_beta_quotient_mrf_select_bound_no_entry * S ((S (fom_index_mrf_select_bound_no)) * c) + (fom_value_mrf_select_bound_no))) /\ (exists fom_gap_mrf_select_bound_no_value_bound. fom_gap_mrf_select_bound_no_value_bound + S (fom_value_mrf_select_bound_no) = B))) - 0006
specialize matrix_rank_bounded_prefix_decidable (b) - 0007
specialize matrix_rank_bounded_prefix_decidable (c) - 0008
specialize matrix_rank_bounded_prefix_decidable (l) - 0009
specialize matrix_rank_bounded_prefix_decidable (B) - 0010
apply matrix_rank_bounded_prefix_decidable - 0011
cases hbound - 0012
have hinjective : (forall mdr_i_select_inj_yes mdr_j_select_inj_yes mdr_a_select_inj_yes. (exists mdr_gap_select_inj_yesi. mdr_gap_select_inj_yesi + S (mdr_i_select_inj_yes) = (l)) -> (exists mdr_gap_select_inj_yesj. mdr_gap_select_inj_yesj + S (mdr_j_select_inj_yes) = (l)) -> (((exists ff_h_mdr_select_inj_yesfirst. ff_h_mdr_select_inj_yesfirst + S (mdr_a_select_inj_yes) = S ((S (mdr_i_select_inj_yes)) * c)) /\ exists ff_q_mdr_select_inj_yesfirst. b = ff_q_mdr_select_inj_yesfirst * S ((S (mdr_i_select_inj_yes)) * c) + (mdr_a_select_inj_yes))) -> (((exists ff_h_mdr_select_inj_yessecond. ff_h_mdr_select_inj_yessecond + S (mdr_a_select_inj_yes) = S ((S (mdr_j_select_inj_yes)) * c)) /\ exists ff_q_mdr_select_inj_yessecond. b = ff_q_mdr_select_inj_yessecond * S ((S (mdr_j_select_inj_yes)) * c) + (mdr_a_select_inj_yes))) -> mdr_i_select_inj_yes = mdr_j_select_inj_yes) \/ ~(forall mdr_i_select_inj_no mdr_j_select_inj_no mdr_a_select_inj_no. (exists mdr_gap_select_inj_noi. mdr_gap_select_inj_noi + S (mdr_i_select_inj_no) = (l)) -> (exists mdr_gap_select_inj_noj. mdr_gap_select_inj_noj + S (mdr_j_select_inj_no) = (l)) -> (((exists ff_h_mdr_select_inj_nofirst. ff_h_mdr_select_inj_nofirst + S (mdr_a_select_inj_no) = S ((S (mdr_i_select_inj_no)) * c)) /\ exists ff_q_mdr_select_inj_nofirst. b = ff_q_mdr_select_inj_nofirst * S ((S (mdr_i_select_inj_no)) * c) + (mdr_a_select_inj_no))) -> (((exists ff_h_mdr_select_inj_nosecond. ff_h_mdr_select_inj_nosecond + S (mdr_a_select_inj_no) = S ((S (mdr_j_select_inj_no)) * c)) /\ exists ff_q_mdr_select_inj_nosecond. b = ff_q_mdr_select_inj_nosecond * S ((S (mdr_j_select_inj_no)) * c) + (mdr_a_select_inj_no))) -> mdr_i_select_inj_no = mdr_j_select_inj_no) - 0013
specialize matrix_rank_injective_prefix_decidable (b) - 0014
specialize matrix_rank_injective_prefix_decidable (c) - 0015
specialize matrix_rank_injective_prefix_decidable (l) - 0016
apply matrix_rank_injective_prefix_decidable - 0017
cases hinjective - 0018
left - 0019
split - 0020
exact hbound_left - 0021
exact hinjective_left - 0022
right - 0023
intro hselector - 0024
cases hselector - 0025
apply hinjective_right - 0026
exact hselector_right - 0027
right - 0028
intro hselector - 0029
cases hselector - 0030
apply hbound_right - 0031
exact hselector_left