BT00TU · Bertrand theorem

central_binom_succ_recurrence

Alpha v34 checked-use theorem · independently kernel and Lean verified; not Stable

Successive central binomials satisfy the weighted recurrence.

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

∀ n. ∀ c. ∀ d. CentralBinom(n,c)CentralBinom(S n,d) → S n · d = 2 · S (n + n) · c

Every purple notation token opens its conservative definition. Expanding the displayed statement recovers the exact first-order Peano-arithmetic formula checked by the unchanged kernel.

Definitions used by this theorem

In the theorem statement

2 occurrences

In local proof propositions

1 occurrences

Exact expanded native-PA statement
forall n c d. (((exists bcf_lt_gap_bcbsr_predecessor_out_of_range. bcf_lt_gap_bcbsr_predecessor_out_of_range + S (n + n) = n) /\ c = 0) \/ ((exists bcf_le_gap_bcbsr_predecessor_in_range. bcf_le_gap_bcbsr_predecessor_in_range + (n) = n + n) /\ (exists bcf_row_code_code_bcbsr_predecessor bcf_row_code_scale_bcbsr_predecessor bcf_row_scale_code_bcbsr_predecessor bcf_row_scale_scale_bcbsr_predecessor bcf_row_code_bcbsr_predecessor bcf_row_scale_bcbsr_predecessor. ((forall bcf_row_index_bcbsr_predecessor_table. (exists bcf_lt_gap_bcbsr_predecessor_table_row_bound. bcf_lt_gap_bcbsr_predecessor_table_row_bound + S (bcf_row_index_bcbsr_predecessor_table) = S (n + n)) -> exists bcf_row_code_bcbsr_predecessor_table bcf_row_scale_bcbsr_predecessor_table. ((((exists bcf_height_bcbsr_predecessor_table_decoded_row_code. bcf_height_bcbsr_predecessor_table_decoded_row_code + S (bcf_row_code_bcbsr_predecessor_table) = S ((S (bcf_row_index_bcbsr_predecessor_table)) * bcf_row_code_scale_bcbsr_predecessor)) /\ exists bcf_quotient_bcbsr_predecessor_table_decoded_row_code. bcf_row_code_code_bcbsr_predecessor = bcf_quotient_bcbsr_predecessor_table_decoded_row_code * S ((S (bcf_row_index_bcbsr_predecessor_table)) * bcf_row_code_scale_bcbsr_predecessor) + (bcf_row_code_bcbsr_predecessor_table))) /\ ((((exists bcf_height_bcbsr_predecessor_table_decoded_row_scale. bcf_height_bcbsr_predecessor_table_decoded_row_scale + S (bcf_row_scale_bcbsr_predecessor_table) = S ((S (bcf_row_index_bcbsr_predecessor_table)) * bcf_row_scale_scale_bcbsr_predecessor)) /\ exists bcf_quotient_bcbsr_predecessor_table_decoded_row_scale. bcf_row_scale_code_bcbsr_predecessor = bcf_quotient_bcbsr_predecessor_table_decoded_row_scale * S ((S (bcf_row_index_bcbsr_predecessor_table)) * bcf_row_scale_scale_bcbsr_predecessor) + (bcf_row_scale_bcbsr_predecessor_table))) /\ ((bcf_row_index_bcbsr_predecessor_table = 0 /\ (forall bcf_index_bcbsr_predecessor_table_zero_row. (exists bcf_lt_gap_bcbsr_predecessor_table_zero_row_bound. bcf_lt_gap_bcbsr_predecessor_table_zero_row_bound + S (bcf_index_bcbsr_predecessor_table_zero_row) = S (n + n)) -> exists bcf_value_bcbsr_predecessor_table_zero_row. ((((exists bcf_height_bcbsr_predecessor_table_zero_row_entry. bcf_height_bcbsr_predecessor_table_zero_row_entry + S (bcf_value_bcbsr_predecessor_table_zero_row) = S ((S (bcf_index_bcbsr_predecessor_table_zero_row)) * bcf_row_scale_bcbsr_predecessor_table)) /\ exists bcf_quotient_bcbsr_predecessor_table_zero_row_entry. bcf_row_code_bcbsr_predecessor_table = bcf_quotient_bcbsr_predecessor_table_zero_row_entry * S ((S (bcf_index_bcbsr_predecessor_table_zero_row)) * bcf_row_scale_bcbsr_predecessor_table) + (bcf_value_bcbsr_predecessor_table_zero_row))) /\ ((bcf_index_bcbsr_predecessor_table_zero_row = 0 /\ bcf_value_bcbsr_predecessor_table_zero_row = 1) \/ exists bcf_predecessor_bcbsr_predecessor_table_zero_row. bcf_index_bcbsr_predecessor_table_zero_row = S bcf_predecessor_bcbsr_predecessor_table_zero_row /\ bcf_value_bcbsr_predecessor_table_zero_row = 0)))) \/ exists bcf_predecessor_bcbsr_predecessor_table bcf_previous_code_bcbsr_predecessor_table bcf_previous_scale_bcbsr_predecessor_table. bcf_row_index_bcbsr_predecessor_table = S bcf_predecessor_bcbsr_predecessor_table /\ ((((exists bcf_height_bcbsr_predecessor_table_decoded_previous_code. bcf_height_bcbsr_predecessor_table_decoded_previous_code + S (bcf_previous_code_bcbsr_predecessor_table) = S ((S (bcf_predecessor_bcbsr_predecessor_table)) * bcf_row_code_scale_bcbsr_predecessor)) /\ exists bcf_quotient_bcbsr_predecessor_table_decoded_previous_code. bcf_row_code_code_bcbsr_predecessor = bcf_quotient_bcbsr_predecessor_table_decoded_previous_code * S ((S (bcf_predecessor_bcbsr_predecessor_table)) * bcf_row_code_scale_bcbsr_predecessor) + (bcf_previous_code_bcbsr_predecessor_table))) /\ ((((exists bcf_height_bcbsr_predecessor_table_decoded_previous_scale. bcf_height_bcbsr_predecessor_table_decoded_previous_scale + S (bcf_previous_scale_bcbsr_predecessor_table) = S ((S (bcf_predecessor_bcbsr_predecessor_table)) * bcf_row_scale_scale_bcbsr_predecessor)) /\ exists bcf_quotient_bcbsr_predecessor_table_decoded_previous_scale. bcf_row_scale_code_bcbsr_predecessor = bcf_quotient_bcbsr_predecessor_table_decoded_previous_scale * S ((S (bcf_predecessor_bcbsr_predecessor_table)) * bcf_row_scale_scale_bcbsr_predecessor) + (bcf_previous_scale_bcbsr_predecessor_table))) /\ (forall bcf_index_bcbsr_predecessor_table_row_step. (exists bcf_lt_gap_bcbsr_predecessor_table_row_step_bound. bcf_lt_gap_bcbsr_predecessor_table_row_step_bound + S (bcf_index_bcbsr_predecessor_table_row_step) = S (n + n)) -> exists bcf_value_bcbsr_predecessor_table_row_step. ((((exists bcf_height_bcbsr_predecessor_table_row_step_entry. bcf_height_bcbsr_predecessor_table_row_step_entry + S (bcf_value_bcbsr_predecessor_table_row_step) = S ((S (bcf_index_bcbsr_predecessor_table_row_step)) * bcf_row_scale_bcbsr_predecessor_table)) /\ exists bcf_quotient_bcbsr_predecessor_table_row_step_entry. bcf_row_code_bcbsr_predecessor_table = bcf_quotient_bcbsr_predecessor_table_row_step_entry * S ((S (bcf_index_bcbsr_predecessor_table_row_step)) * bcf_row_scale_bcbsr_predecessor_table) + (bcf_value_bcbsr_predecessor_table_row_step))) /\ ((bcf_index_bcbsr_predecessor_table_row_step = 0 /\ bcf_value_bcbsr_predecessor_table_row_step = 1) \/ exists bcf_predecessor_bcbsr_predecessor_table_row_step bcf_left_bcbsr_predecessor_table_row_step bcf_right_bcbsr_predecessor_table_row_step. bcf_index_bcbsr_predecessor_table_row_step = S bcf_predecessor_bcbsr_predecessor_table_row_step /\ ((((exists bcf_height_bcbsr_predecessor_table_row_step_previous_left. bcf_height_bcbsr_predecessor_table_row_step_previous_left + S (bcf_left_bcbsr_predecessor_table_row_step) = S ((S (bcf_predecessor_bcbsr_predecessor_table_row_step)) * bcf_previous_scale_bcbsr_predecessor_table)) /\ exists bcf_quotient_bcbsr_predecessor_table_row_step_previous_left. bcf_previous_code_bcbsr_predecessor_table = bcf_quotient_bcbsr_predecessor_table_row_step_previous_left * S ((S (bcf_predecessor_bcbsr_predecessor_table_row_step)) * bcf_previous_scale_bcbsr_predecessor_table) + (bcf_left_bcbsr_predecessor_table_row_step))) /\ ((((exists bcf_height_bcbsr_predecessor_table_row_step_previous_right. bcf_height_bcbsr_predecessor_table_row_step_previous_right + S (bcf_right_bcbsr_predecessor_table_row_step) = S ((S (S (bcf_predecessor_bcbsr_predecessor_table_row_step))) * bcf_previous_scale_bcbsr_predecessor_table)) /\ exists bcf_quotient_bcbsr_predecessor_table_row_step_previous_right. bcf_previous_code_bcbsr_predecessor_table = bcf_quotient_bcbsr_predecessor_table_row_step_previous_right * S ((S (S (bcf_predecessor_bcbsr_predecessor_table_row_step))) * bcf_previous_scale_bcbsr_predecessor_table) + (bcf_right_bcbsr_predecessor_table_row_step))) /\ bcf_value_bcbsr_predecessor_table_row_step = bcf_left_bcbsr_predecessor_table_row_step + bcf_right_bcbsr_predecessor_table_row_step))))))))))) /\ ((((exists bcf_height_bcbsr_predecessor_decoded_row_code. bcf_height_bcbsr_predecessor_decoded_row_code + S (bcf_row_code_bcbsr_predecessor) = S ((S (n + n)) * bcf_row_code_scale_bcbsr_predecessor)) /\ exists bcf_quotient_bcbsr_predecessor_decoded_row_code. bcf_row_code_code_bcbsr_predecessor = bcf_quotient_bcbsr_predecessor_decoded_row_code * S ((S (n + n)) * bcf_row_code_scale_bcbsr_predecessor) + (bcf_row_code_bcbsr_predecessor))) /\ ((((exists bcf_height_bcbsr_predecessor_decoded_row_scale. bcf_height_bcbsr_predecessor_decoded_row_scale + S (bcf_row_scale_bcbsr_predecessor) = S ((S (n + n)) * bcf_row_scale_scale_bcbsr_predecessor)) /\ exists bcf_quotient_bcbsr_predecessor_decoded_row_scale. bcf_row_scale_code_bcbsr_predecessor = bcf_quotient_bcbsr_predecessor_decoded_row_scale * S ((S (n + n)) * bcf_row_scale_scale_bcbsr_predecessor) + (bcf_row_scale_bcbsr_predecessor))) /\ (((exists bcf_height_bcbsr_predecessor_decoded_value. bcf_height_bcbsr_predecessor_decoded_value + S (c) = S ((S (n)) * bcf_row_scale_bcbsr_predecessor)) /\ exists bcf_quotient_bcbsr_predecessor_decoded_value. bcf_row_code_bcbsr_predecessor = bcf_quotient_bcbsr_predecessor_decoded_value * S ((S (n)) * bcf_row_scale_bcbsr_predecessor) + (c))))))))) -> (((exists bcf_lt_gap_bcbsr_successor_out_of_range. bcf_lt_gap_bcbsr_successor_out_of_range + S (S n + S n) = S n) /\ d = 0) \/ ((exists bcf_le_gap_bcbsr_successor_in_range. bcf_le_gap_bcbsr_successor_in_range + (S n) = S n + S n) /\ (exists bcf_row_code_code_bcbsr_successor bcf_row_code_scale_bcbsr_successor bcf_row_scale_code_bcbsr_successor bcf_row_scale_scale_bcbsr_successor bcf_row_code_bcbsr_successor bcf_row_scale_bcbsr_successor. ((forall bcf_row_index_bcbsr_successor_table. (exists bcf_lt_gap_bcbsr_successor_table_row_bound. bcf_lt_gap_bcbsr_successor_table_row_bound + S (bcf_row_index_bcbsr_successor_table) = S (S n + S n)) -> exists bcf_row_code_bcbsr_successor_table bcf_row_scale_bcbsr_successor_table. ((((exists bcf_height_bcbsr_successor_table_decoded_row_code. bcf_height_bcbsr_successor_table_decoded_row_code + S (bcf_row_code_bcbsr_successor_table) = S ((S (bcf_row_index_bcbsr_successor_table)) * bcf_row_code_scale_bcbsr_successor)) /\ exists bcf_quotient_bcbsr_successor_table_decoded_row_code. bcf_row_code_code_bcbsr_successor = bcf_quotient_bcbsr_successor_table_decoded_row_code * S ((S (bcf_row_index_bcbsr_successor_table)) * bcf_row_code_scale_bcbsr_successor) + (bcf_row_code_bcbsr_successor_table))) /\ ((((exists bcf_height_bcbsr_successor_table_decoded_row_scale. bcf_height_bcbsr_successor_table_decoded_row_scale + S (bcf_row_scale_bcbsr_successor_table) = S ((S (bcf_row_index_bcbsr_successor_table)) * bcf_row_scale_scale_bcbsr_successor)) /\ exists bcf_quotient_bcbsr_successor_table_decoded_row_scale. bcf_row_scale_code_bcbsr_successor = bcf_quotient_bcbsr_successor_table_decoded_row_scale * S ((S (bcf_row_index_bcbsr_successor_table)) * bcf_row_scale_scale_bcbsr_successor) + (bcf_row_scale_bcbsr_successor_table))) /\ ((bcf_row_index_bcbsr_successor_table = 0 /\ (forall bcf_index_bcbsr_successor_table_zero_row. (exists bcf_lt_gap_bcbsr_successor_table_zero_row_bound. bcf_lt_gap_bcbsr_successor_table_zero_row_bound + S (bcf_index_bcbsr_successor_table_zero_row) = S (S n + S n)) -> exists bcf_value_bcbsr_successor_table_zero_row. ((((exists bcf_height_bcbsr_successor_table_zero_row_entry. bcf_height_bcbsr_successor_table_zero_row_entry + S (bcf_value_bcbsr_successor_table_zero_row) = S ((S (bcf_index_bcbsr_successor_table_zero_row)) * bcf_row_scale_bcbsr_successor_table)) /\ exists bcf_quotient_bcbsr_successor_table_zero_row_entry. bcf_row_code_bcbsr_successor_table = bcf_quotient_bcbsr_successor_table_zero_row_entry * S ((S (bcf_index_bcbsr_successor_table_zero_row)) * bcf_row_scale_bcbsr_successor_table) + (bcf_value_bcbsr_successor_table_zero_row))) /\ ((bcf_index_bcbsr_successor_table_zero_row = 0 /\ bcf_value_bcbsr_successor_table_zero_row = 1) \/ exists bcf_predecessor_bcbsr_successor_table_zero_row. bcf_index_bcbsr_successor_table_zero_row = S bcf_predecessor_bcbsr_successor_table_zero_row /\ bcf_value_bcbsr_successor_table_zero_row = 0)))) \/ exists bcf_predecessor_bcbsr_successor_table bcf_previous_code_bcbsr_successor_table bcf_previous_scale_bcbsr_successor_table. bcf_row_index_bcbsr_successor_table = S bcf_predecessor_bcbsr_successor_table /\ ((((exists bcf_height_bcbsr_successor_table_decoded_previous_code. bcf_height_bcbsr_successor_table_decoded_previous_code + S (bcf_previous_code_bcbsr_successor_table) = S ((S (bcf_predecessor_bcbsr_successor_table)) * bcf_row_code_scale_bcbsr_successor)) /\ exists bcf_quotient_bcbsr_successor_table_decoded_previous_code. bcf_row_code_code_bcbsr_successor = bcf_quotient_bcbsr_successor_table_decoded_previous_code * S ((S (bcf_predecessor_bcbsr_successor_table)) * bcf_row_code_scale_bcbsr_successor) + (bcf_previous_code_bcbsr_successor_table))) /\ ((((exists bcf_height_bcbsr_successor_table_decoded_previous_scale. bcf_height_bcbsr_successor_table_decoded_previous_scale + S (bcf_previous_scale_bcbsr_successor_table) = S ((S (bcf_predecessor_bcbsr_successor_table)) * bcf_row_scale_scale_bcbsr_successor)) /\ exists bcf_quotient_bcbsr_successor_table_decoded_previous_scale. bcf_row_scale_code_bcbsr_successor = bcf_quotient_bcbsr_successor_table_decoded_previous_scale * S ((S (bcf_predecessor_bcbsr_successor_table)) * bcf_row_scale_scale_bcbsr_successor) + (bcf_previous_scale_bcbsr_successor_table))) /\ (forall bcf_index_bcbsr_successor_table_row_step. (exists bcf_lt_gap_bcbsr_successor_table_row_step_bound. bcf_lt_gap_bcbsr_successor_table_row_step_bound + S (bcf_index_bcbsr_successor_table_row_step) = S (S n + S n)) -> exists bcf_value_bcbsr_successor_table_row_step. ((((exists bcf_height_bcbsr_successor_table_row_step_entry. bcf_height_bcbsr_successor_table_row_step_entry + S (bcf_value_bcbsr_successor_table_row_step) = S ((S (bcf_index_bcbsr_successor_table_row_step)) * bcf_row_scale_bcbsr_successor_table)) /\ exists bcf_quotient_bcbsr_successor_table_row_step_entry. bcf_row_code_bcbsr_successor_table = bcf_quotient_bcbsr_successor_table_row_step_entry * S ((S (bcf_index_bcbsr_successor_table_row_step)) * bcf_row_scale_bcbsr_successor_table) + (bcf_value_bcbsr_successor_table_row_step))) /\ ((bcf_index_bcbsr_successor_table_row_step = 0 /\ bcf_value_bcbsr_successor_table_row_step = 1) \/ exists bcf_predecessor_bcbsr_successor_table_row_step bcf_left_bcbsr_successor_table_row_step bcf_right_bcbsr_successor_table_row_step. bcf_index_bcbsr_successor_table_row_step = S bcf_predecessor_bcbsr_successor_table_row_step /\ ((((exists bcf_height_bcbsr_successor_table_row_step_previous_left. bcf_height_bcbsr_successor_table_row_step_previous_left + S (bcf_left_bcbsr_successor_table_row_step) = S ((S (bcf_predecessor_bcbsr_successor_table_row_step)) * bcf_previous_scale_bcbsr_successor_table)) /\ exists bcf_quotient_bcbsr_successor_table_row_step_previous_left. bcf_previous_code_bcbsr_successor_table = bcf_quotient_bcbsr_successor_table_row_step_previous_left * S ((S (bcf_predecessor_bcbsr_successor_table_row_step)) * bcf_previous_scale_bcbsr_successor_table) + (bcf_left_bcbsr_successor_table_row_step))) /\ ((((exists bcf_height_bcbsr_successor_table_row_step_previous_right. bcf_height_bcbsr_successor_table_row_step_previous_right + S (bcf_right_bcbsr_successor_table_row_step) = S ((S (S (bcf_predecessor_bcbsr_successor_table_row_step))) * bcf_previous_scale_bcbsr_successor_table)) /\ exists bcf_quotient_bcbsr_successor_table_row_step_previous_right. bcf_previous_code_bcbsr_successor_table = bcf_quotient_bcbsr_successor_table_row_step_previous_right * S ((S (S (bcf_predecessor_bcbsr_successor_table_row_step))) * bcf_previous_scale_bcbsr_successor_table) + (bcf_right_bcbsr_successor_table_row_step))) /\ bcf_value_bcbsr_successor_table_row_step = bcf_left_bcbsr_successor_table_row_step + bcf_right_bcbsr_successor_table_row_step))))))))))) /\ ((((exists bcf_height_bcbsr_successor_decoded_row_code. bcf_height_bcbsr_successor_decoded_row_code + S (bcf_row_code_bcbsr_successor) = S ((S (S n + S n)) * bcf_row_code_scale_bcbsr_successor)) /\ exists bcf_quotient_bcbsr_successor_decoded_row_code. bcf_row_code_code_bcbsr_successor = bcf_quotient_bcbsr_successor_decoded_row_code * S ((S (S n + S n)) * bcf_row_code_scale_bcbsr_successor) + (bcf_row_code_bcbsr_successor))) /\ ((((exists bcf_height_bcbsr_successor_decoded_row_scale. bcf_height_bcbsr_successor_decoded_row_scale + S (bcf_row_scale_bcbsr_successor) = S ((S (S n + S n)) * bcf_row_scale_scale_bcbsr_successor)) /\ exists bcf_quotient_bcbsr_successor_decoded_row_scale. bcf_row_scale_code_bcbsr_successor = bcf_quotient_bcbsr_successor_decoded_row_scale * S ((S (S n + S n)) * bcf_row_scale_scale_bcbsr_successor) + (bcf_row_scale_bcbsr_successor))) /\ (((exists bcf_height_bcbsr_successor_decoded_value. bcf_height_bcbsr_successor_decoded_value + S (d) = S ((S (S n)) * bcf_row_scale_bcbsr_successor)) /\ exists bcf_quotient_bcbsr_successor_decoded_value. bcf_row_code_bcbsr_successor = bcf_quotient_bcbsr_successor_decoded_value * S ((S (S n)) * bcf_row_scale_bcbsr_successor) + (d))))))))) -> S n * d = (2 * S (n + n)) * c

Proof neighborhood

Direct theorem prerequisites

Direct theorem dependents

Definition-aware tactic body

Only local propositions introduced by have or suffices are compacted. Every changed line has an exact-AST conservative-expansion receipt; the kernel still receives the immutable original tactic script.

Read the argument

Proof checkpoints

36 script commands · 12 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 (5)
01Fix variables and assumptionsL1–5

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

  1. L1
    intro n
  2. L2
    intro c
  3. L3
    intro d
  4. L4
    intro hpredecessor
  5. L5
    intro hsuccessor
02Establish hmiddleL6–10

Establish this local claim before using it. It is not an additional assumption. The following proof commands apply central binom succ double middle.

  1. L6
    have hmiddle : ∃ m. Choose(S (n + n),n,m) ∧ d = m + mDefinitions: Choose(S (n + n),n,m)Original native command in the exact edition
  2. L7
    specialize central_binom_succ_double_middle n
  3. L8
    specialize central_binom_succ_double_middle d
  4. L9
    apply central_binom_succ_double_middle
  5. L10
    exact hsuccessor
03Separate the logical casesL11–12

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

  1. L11
    cases hmiddle
  2. L12
    cases hmiddle_witness
04Establish hweightedL13–22

Establish this local claim before using it. It is not an additional assumption. The following proof commands apply choose weighted vertical.

  1. L13
    have hweighted : S n * x = S (n + n) * c
  2. L14
    specialize choose_weighted_vertical (n + n)
  3. L15
    specialize choose_weighted_vertical n
  4. L16
    specialize choose_weighted_vertical n
  5. L17
    specialize choose_weighted_vertical c
  6. L18
    specialize choose_weighted_vertical x
  7. L19
    apply choose_weighted_vertical
  8. L20
    refl
  9. L21
    exact hpredecessor
  10. L22
    exact hmiddle_witness_left
05Calculate and transport equalitiesL23–24

Carry out the recorded arithmetic or equality steps; inspect the exact commands for their direction and premises.

  1. L23
    rewrite hmiddle_witness_right
  2. L24
    trans S n * x + S n * x
06Use earlier factsL25–25

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

  1. L25
    apply mul_add
07Calculate and transport equalitiesL26–28

Carry out the recorded arithmetic or equality steps; inspect the exact commands for their direction and premises.

  1. L26
    rewrite hweighted
  2. L27
    rewrite hweighted
  3. L28
    trans 2 * (S (n + n) * c)
08Use earlier factsL29–29

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

  1. L29
    specialize two_mul_eq_add_self (S (n + n) * c)
09Calculate and transport equalitiesL30–30

Carry out the recorded arithmetic or equality steps; inspect the exact commands for their direction and premises.

  1. L30
    symm
10Use earlier factsL31–34

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

  1. L31
    exact two_mul_eq_add_self
  2. L32
    specialize mul_assoc 2
  3. L33
    specialize mul_assoc (S (n + n))
  4. L34
    specialize mul_assoc c
11Calculate and transport equalitiesL35–35

Carry out the recorded arithmetic or equality steps; inspect the exact commands for their direction and premises.

  1. L35
    symm
12Use earlier factsL36–36

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

  1. L36
    exact mul_assoc

Library-wide reading audit

Original defined command ledger · 36 lines
  1. 0001intro n
  2. 0002intro c
  3. 0003intro d
  4. 0004intro hpredecessor
  5. 0005intro hsuccessor
  6. 0006have hmiddle : ∃ m. Choose(S (n + n),n,m) ∧ d = m + m
    Exact native replay linehave hmiddle : exists m. ((((exists bcf_lt_gap_bcbsr_middle_out_of_range. bcf_lt_gap_bcbsr_middle_out_of_range + S (S (n + n)) = n) /\ m = 0) \/ ((exists bcf_le_gap_bcbsr_middle_in_range. bcf_le_gap_bcbsr_middle_in_range + (n) = S (n + n)) /\ (exists bcf_row_code_code_bcbsr_middle bcf_row_code_scale_bcbsr_middle bcf_row_scale_code_bcbsr_middle bcf_row_scale_scale_bcbsr_middle bcf_row_code_bcbsr_middle bcf_row_scale_bcbsr_middle. ((forall bcf_row_index_bcbsr_middle_table. (exists bcf_lt_gap_bcbsr_middle_table_row_bound. bcf_lt_gap_bcbsr_middle_table_row_bound + S (bcf_row_index_bcbsr_middle_table) = S (S (n + n))) -> exists bcf_row_code_bcbsr_middle_table bcf_row_scale_bcbsr_middle_table. ((((exists bcf_height_bcbsr_middle_table_decoded_row_code. bcf_height_bcbsr_middle_table_decoded_row_code + S (bcf_row_code_bcbsr_middle_table) = S ((S (bcf_row_index_bcbsr_middle_table)) * bcf_row_code_scale_bcbsr_middle)) /\ exists bcf_quotient_bcbsr_middle_table_decoded_row_code. bcf_row_code_code_bcbsr_middle = bcf_quotient_bcbsr_middle_table_decoded_row_code * S ((S (bcf_row_index_bcbsr_middle_table)) * bcf_row_code_scale_bcbsr_middle) + (bcf_row_code_bcbsr_middle_table))) /\ ((((exists bcf_height_bcbsr_middle_table_decoded_row_scale. bcf_height_bcbsr_middle_table_decoded_row_scale + S (bcf_row_scale_bcbsr_middle_table) = S ((S (bcf_row_index_bcbsr_middle_table)) * bcf_row_scale_scale_bcbsr_middle)) /\ exists bcf_quotient_bcbsr_middle_table_decoded_row_scale. bcf_row_scale_code_bcbsr_middle = bcf_quotient_bcbsr_middle_table_decoded_row_scale * S ((S (bcf_row_index_bcbsr_middle_table)) * bcf_row_scale_scale_bcbsr_middle) + (bcf_row_scale_bcbsr_middle_table))) /\ ((bcf_row_index_bcbsr_middle_table = 0 /\ (forall bcf_index_bcbsr_middle_table_zero_row. (exists bcf_lt_gap_bcbsr_middle_table_zero_row_bound. bcf_lt_gap_bcbsr_middle_table_zero_row_bound + S (bcf_index_bcbsr_middle_table_zero_row) = S (S (n + n))) -> exists bcf_value_bcbsr_middle_table_zero_row. ((((exists bcf_height_bcbsr_middle_table_zero_row_entry. bcf_height_bcbsr_middle_table_zero_row_entry + S (bcf_value_bcbsr_middle_table_zero_row) = S ((S (bcf_index_bcbsr_middle_table_zero_row)) * bcf_row_scale_bcbsr_middle_table)) /\ exists bcf_quotient_bcbsr_middle_table_zero_row_entry. bcf_row_code_bcbsr_middle_table = bcf_quotient_bcbsr_middle_table_zero_row_entry * S ((S (bcf_index_bcbsr_middle_table_zero_row)) * bcf_row_scale_bcbsr_middle_table) + (bcf_value_bcbsr_middle_table_zero_row))) /\ ((bcf_index_bcbsr_middle_table_zero_row = 0 /\ bcf_value_bcbsr_middle_table_zero_row = 1) \/ exists bcf_predecessor_bcbsr_middle_table_zero_row. bcf_index_bcbsr_middle_table_zero_row = S bcf_predecessor_bcbsr_middle_table_zero_row /\ bcf_value_bcbsr_middle_table_zero_row = 0)))) \/ exists bcf_predecessor_bcbsr_middle_table bcf_previous_code_bcbsr_middle_table bcf_previous_scale_bcbsr_middle_table. bcf_row_index_bcbsr_middle_table = S bcf_predecessor_bcbsr_middle_table /\ ((((exists bcf_height_bcbsr_middle_table_decoded_previous_code. bcf_height_bcbsr_middle_table_decoded_previous_code + S (bcf_previous_code_bcbsr_middle_table) = S ((S (bcf_predecessor_bcbsr_middle_table)) * bcf_row_code_scale_bcbsr_middle)) /\ exists bcf_quotient_bcbsr_middle_table_decoded_previous_code. bcf_row_code_code_bcbsr_middle = bcf_quotient_bcbsr_middle_table_decoded_previous_code * S ((S (bcf_predecessor_bcbsr_middle_table)) * bcf_row_code_scale_bcbsr_middle) + (bcf_previous_code_bcbsr_middle_table))) /\ ((((exists bcf_height_bcbsr_middle_table_decoded_previous_scale. bcf_height_bcbsr_middle_table_decoded_previous_scale + S (bcf_previous_scale_bcbsr_middle_table) = S ((S (bcf_predecessor_bcbsr_middle_table)) * bcf_row_scale_scale_bcbsr_middle)) /\ exists bcf_quotient_bcbsr_middle_table_decoded_previous_scale. bcf_row_scale_code_bcbsr_middle = bcf_quotient_bcbsr_middle_table_decoded_previous_scale * S ((S (bcf_predecessor_bcbsr_middle_table)) * bcf_row_scale_scale_bcbsr_middle) + (bcf_previous_scale_bcbsr_middle_table))) /\ (forall bcf_index_bcbsr_middle_table_row_step. (exists bcf_lt_gap_bcbsr_middle_table_row_step_bound. bcf_lt_gap_bcbsr_middle_table_row_step_bound + S (bcf_index_bcbsr_middle_table_row_step) = S (S (n + n))) -> exists bcf_value_bcbsr_middle_table_row_step. ((((exists bcf_height_bcbsr_middle_table_row_step_entry. bcf_height_bcbsr_middle_table_row_step_entry + S (bcf_value_bcbsr_middle_table_row_step) = S ((S (bcf_index_bcbsr_middle_table_row_step)) * bcf_row_scale_bcbsr_middle_table)) /\ exists bcf_quotient_bcbsr_middle_table_row_step_entry. bcf_row_code_bcbsr_middle_table = bcf_quotient_bcbsr_middle_table_row_step_entry * S ((S (bcf_index_bcbsr_middle_table_row_step)) * bcf_row_scale_bcbsr_middle_table) + (bcf_value_bcbsr_middle_table_row_step))) /\ ((bcf_index_bcbsr_middle_table_row_step = 0 /\ bcf_value_bcbsr_middle_table_row_step = 1) \/ exists bcf_predecessor_bcbsr_middle_table_row_step bcf_left_bcbsr_middle_table_row_step bcf_right_bcbsr_middle_table_row_step. bcf_index_bcbsr_middle_table_row_step = S bcf_predecessor_bcbsr_middle_table_row_step /\ ((((exists bcf_height_bcbsr_middle_table_row_step_previous_left. bcf_height_bcbsr_middle_table_row_step_previous_left + S (bcf_left_bcbsr_middle_table_row_step) = S ((S (bcf_predecessor_bcbsr_middle_table_row_step)) * bcf_previous_scale_bcbsr_middle_table)) /\ exists bcf_quotient_bcbsr_middle_table_row_step_previous_left. bcf_previous_code_bcbsr_middle_table = bcf_quotient_bcbsr_middle_table_row_step_previous_left * S ((S (bcf_predecessor_bcbsr_middle_table_row_step)) * bcf_previous_scale_bcbsr_middle_table) + (bcf_left_bcbsr_middle_table_row_step))) /\ ((((exists bcf_height_bcbsr_middle_table_row_step_previous_right. bcf_height_bcbsr_middle_table_row_step_previous_right + S (bcf_right_bcbsr_middle_table_row_step) = S ((S (S (bcf_predecessor_bcbsr_middle_table_row_step))) * bcf_previous_scale_bcbsr_middle_table)) /\ exists bcf_quotient_bcbsr_middle_table_row_step_previous_right. bcf_previous_code_bcbsr_middle_table = bcf_quotient_bcbsr_middle_table_row_step_previous_right * S ((S (S (bcf_predecessor_bcbsr_middle_table_row_step))) * bcf_previous_scale_bcbsr_middle_table) + (bcf_right_bcbsr_middle_table_row_step))) /\ bcf_value_bcbsr_middle_table_row_step = bcf_left_bcbsr_middle_table_row_step + bcf_right_bcbsr_middle_table_row_step))))))))))) /\ ((((exists bcf_height_bcbsr_middle_decoded_row_code. bcf_height_bcbsr_middle_decoded_row_code + S (bcf_row_code_bcbsr_middle) = S ((S (S (n + n))) * bcf_row_code_scale_bcbsr_middle)) /\ exists bcf_quotient_bcbsr_middle_decoded_row_code. bcf_row_code_code_bcbsr_middle = bcf_quotient_bcbsr_middle_decoded_row_code * S ((S (S (n + n))) * bcf_row_code_scale_bcbsr_middle) + (bcf_row_code_bcbsr_middle))) /\ ((((exists bcf_height_bcbsr_middle_decoded_row_scale. bcf_height_bcbsr_middle_decoded_row_scale + S (bcf_row_scale_bcbsr_middle) = S ((S (S (n + n))) * bcf_row_scale_scale_bcbsr_middle)) /\ exists bcf_quotient_bcbsr_middle_decoded_row_scale. bcf_row_scale_code_bcbsr_middle = bcf_quotient_bcbsr_middle_decoded_row_scale * S ((S (S (n + n))) * bcf_row_scale_scale_bcbsr_middle) + (bcf_row_scale_bcbsr_middle))) /\ (((exists bcf_height_bcbsr_middle_decoded_value. bcf_height_bcbsr_middle_decoded_value + S (m) = S ((S (n)) * bcf_row_scale_bcbsr_middle)) /\ exists bcf_quotient_bcbsr_middle_decoded_value. bcf_row_code_bcbsr_middle = bcf_quotient_bcbsr_middle_decoded_value * S ((S (n)) * bcf_row_scale_bcbsr_middle) + (m))))))))) /\ d = m + m)
  7. 0007specialize central_binom_succ_double_middle n
  8. 0008specialize central_binom_succ_double_middle d
  9. 0009apply central_binom_succ_double_middle
  10. 0010exact hsuccessor
  11. 0011cases hmiddle
  12. 0012cases hmiddle_witness
  13. 0013have hweighted : S n * x = S (n + n) * c
  14. 0014specialize choose_weighted_vertical (n + n)
  15. 0015specialize choose_weighted_vertical n
  16. 0016specialize choose_weighted_vertical n
  17. 0017specialize choose_weighted_vertical c
  18. 0018specialize choose_weighted_vertical x
  19. 0019apply choose_weighted_vertical
  20. 0020refl
  21. 0021exact hpredecessor
  22. 0022exact hmiddle_witness_left
  23. 0023rewrite hmiddle_witness_right
  24. 0024trans S n * x + S n * x
  25. 0025apply mul_add
  26. 0026rewrite hweighted
  27. 0027rewrite hweighted
  28. 0028trans 2 * (S (n + n) * c)
  29. 0029specialize two_mul_eq_add_self (S (n + n) * c)
  30. 0030symm
  31. 0031exact two_mul_eq_add_self
  32. 0032specialize mul_assoc 2
  33. 0033specialize mul_assoc (S (n + n))
  34. 0034specialize mul_assoc c
  35. 0035symm
  36. 0036exact mul_assoc