DL003D

matrix_rank_selector_decidable

A genuine finite matrix-selector relation, including every index bound and pairwise distinctness condition, is decidable.

Alpha v34 checked-use · first admitted v27 · independently kernel and Lean verified; not Stable

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.

This branch proves the finite determinant/rank/span substrate. It does not claim Smith or Hermite normal form, lattice index equals determinant, determinant multiplicativity, lattice reduction, or geometry-of-numbers theorems.

Exact theorem in conservative defined notation

∀ b. ∀ c. ∀ l. ∀ B. FiniteMatrixSelector(b,c,l,B) ∨ ¬FiniteMatrixSelector(b,c,l,B)

Every linked abbreviation expands hygienically to the identical original native formula.

Definition DAG

Actual proof prerequisites

Original expanded first-order 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)))

Complete tactic proof in conservative notation

All 31 original proof lines are preserved. Only local proposition formulas are abbreviated; every abbreviation has an exact binder-safe expansion check. The linked exact edition contains the unchanged replay script.

Read the argument

Proof checkpoints

31 script commands · 14 reading checkpoints · 2 local claims

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.

Definition notation is shown below. Open the paired exact edition for the original native formulas. Source pairing is not a new equivalence certificate.

Named ingredients (2)
01Fix variables and assumptionsL1–4

Work with arbitrary variables or the premises of the current implication.

  1. L1
    intro b
  2. L2
    intro c
  3. L3
    intro l
  4. L4
    intro B
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.

  1. L5
    have hbound : (∀ x. Lt(x,l) → ∃ y. BetaAt(b,c,x,y) ∧ Lt(y,B)) ∨ ¬(∀ x. Lt(x,l) → ∃ y. BetaAt(b,c,x,y) ∧ Lt(y,B))Definitions: Lt(x,l)BetaAt(b,c,x,y)Lt(y,B)Original native command in the exact edition
  2. L6
    specialize matrix_rank_bounded_prefix_decidable (b)
  3. L7
    specialize matrix_rank_bounded_prefix_decidable (c)
  4. L8
    specialize matrix_rank_bounded_prefix_decidable (l)
  5. L9
    specialize matrix_rank_bounded_prefix_decidable (B)
  6. L10
    apply matrix_rank_bounded_prefix_decidable
03Separate the logical casesL11–11

Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.

  1. 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.

  1. L12
    have hinjective : (∀ x. ∀ y. ∀ z. Lt(x,l) → Lt(y,l) → BetaAt(b,c,x,z) → BetaAt(b,c,y,z) → x = y) ∨ ¬(∀ x. ∀ y. ∀ z. Lt(x,l) → Lt(y,l) → BetaAt(b,c,x,z) → BetaAt(b,c,y,z) → x = y)Definitions: Lt(x,l)Lt(y,l)BetaAt(b,c,x,z)BetaAt(b,c,y,z)Original native command in the exact edition
  2. L13
    specialize matrix_rank_injective_prefix_decidable (b)
  3. L14
    specialize matrix_rank_injective_prefix_decidable (c)
  4. L15
    specialize matrix_rank_injective_prefix_decidable (l)
  5. L16
    apply matrix_rank_injective_prefix_decidable
05Separate the logical casesL17–19

Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.

  1. L17
    cases hinjective
  2. L18
    left
  3. L19
    split
06Use earlier factsL20–21

Instantiate or apply named facts and discharge the corresponding proof obligations.

  1. L20
    exact hbound_left
  2. L21
    exact hinjective_left
07Separate the logical casesL22–22

Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.

  1. L22
    right
08Fix variables and assumptionsL23–23

Work with arbitrary variables or the premises of the current implication.

  1. L23
    intro hselector
09Separate the logical casesL24–24

Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.

  1. L24
    cases hselector
10Use earlier factsL25–26

Instantiate or apply named facts and discharge the corresponding proof obligations.

  1. L25
    apply hinjective_right
  2. L26
    exact hselector_right
11Separate the logical casesL27–27

Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.

  1. L27
    right
12Fix variables and assumptionsL28–28

Work with arbitrary variables or the premises of the current implication.

  1. L28
    intro hselector
13Separate the logical casesL29–29

Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.

  1. L29
    cases hselector
14Use earlier factsL30–31

Instantiate or apply named facts and discharge the corresponding proof obligations.

  1. L30
    apply hbound_right
  2. L31
    exact hselector_left

Library-wide reading audit

Original defined command ledger · 31 lines
  1. 0001intro b
  2. 0002intro c
  3. 0003intro l
  4. 0004intro B
  5. 0005have hbound : (∀ x. Lt(x,l) → ∃ y. BetaAt(b,c,x,y)Lt(y,B)) ∨ ¬(∀ x. Lt(x,l) → ∃ y. BetaAt(b,c,x,y)Lt(y,B))
  6. 0006specialize matrix_rank_bounded_prefix_decidable (b)
  7. 0007specialize matrix_rank_bounded_prefix_decidable (c)
  8. 0008specialize matrix_rank_bounded_prefix_decidable (l)
  9. 0009specialize matrix_rank_bounded_prefix_decidable (B)
  10. 0010apply matrix_rank_bounded_prefix_decidable
  11. 0011cases hbound
  12. 0012have hinjective : (∀ x. ∀ y. ∀ z. Lt(x,l)Lt(y,l)BetaAt(b,c,x,z)BetaAt(b,c,y,z) → x = y) ∨ ¬(∀ x. ∀ y. ∀ z. Lt(x,l)Lt(y,l)BetaAt(b,c,x,z)BetaAt(b,c,y,z) → x = y)
  13. 0013specialize matrix_rank_injective_prefix_decidable (b)
  14. 0014specialize matrix_rank_injective_prefix_decidable (c)
  15. 0015specialize matrix_rank_injective_prefix_decidable (l)
  16. 0016apply matrix_rank_injective_prefix_decidable
  17. 0017cases hinjective
  18. 0018left
  19. 0019split
  20. 0020exact hbound_left
  21. 0021exact hinjective_left
  22. 0022right
  23. 0023intro hselector
  24. 0024cases hselector
  25. 0025apply hinjective_right
  26. 0026exact hselector_right
  27. 0027right
  28. 0028intro hselector
  29. 0029cases hselector
  30. 0030apply hbound_right
  31. 0031exact hselector_left