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. ∀ k. ∀ j. ∀ c. ∀ F. ∀ K. ∀ J. k + j = n → Choose(n,k,c) → Factorial(n,F) → Factorial(k,K) → Factorial(j,J) → F = K · J · cEvery 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
4 occurrences
In local proof propositions
3 occurrences
Exact expanded native-PA statement
forall n k j c F K J. k + j = n -> (((exists bcf_lt_gap_bcfb_choose_out_of_range. bcf_lt_gap_bcfb_choose_out_of_range + S (n) = k) /\ c = 0) \/ ((exists bcf_le_gap_bcfb_choose_in_range. bcf_le_gap_bcfb_choose_in_range + (k) = n) /\ (exists bcf_row_code_code_bcfb_choose bcf_row_code_scale_bcfb_choose bcf_row_scale_code_bcfb_choose bcf_row_scale_scale_bcfb_choose bcf_row_code_bcfb_choose bcf_row_scale_bcfb_choose. ((forall bcf_row_index_bcfb_choose_table. (exists bcf_lt_gap_bcfb_choose_table_row_bound. bcf_lt_gap_bcfb_choose_table_row_bound + S (bcf_row_index_bcfb_choose_table) = S (n)) -> exists bcf_row_code_bcfb_choose_table bcf_row_scale_bcfb_choose_table. ((((exists bcf_height_bcfb_choose_table_decoded_row_code. bcf_height_bcfb_choose_table_decoded_row_code + S (bcf_row_code_bcfb_choose_table) = S ((S (bcf_row_index_bcfb_choose_table)) * bcf_row_code_scale_bcfb_choose)) /\ exists bcf_quotient_bcfb_choose_table_decoded_row_code. bcf_row_code_code_bcfb_choose = bcf_quotient_bcfb_choose_table_decoded_row_code * S ((S (bcf_row_index_bcfb_choose_table)) * bcf_row_code_scale_bcfb_choose) + (bcf_row_code_bcfb_choose_table))) /\ ((((exists bcf_height_bcfb_choose_table_decoded_row_scale. bcf_height_bcfb_choose_table_decoded_row_scale + S (bcf_row_scale_bcfb_choose_table) = S ((S (bcf_row_index_bcfb_choose_table)) * bcf_row_scale_scale_bcfb_choose)) /\ exists bcf_quotient_bcfb_choose_table_decoded_row_scale. bcf_row_scale_code_bcfb_choose = bcf_quotient_bcfb_choose_table_decoded_row_scale * S ((S (bcf_row_index_bcfb_choose_table)) * bcf_row_scale_scale_bcfb_choose) + (bcf_row_scale_bcfb_choose_table))) /\ ((bcf_row_index_bcfb_choose_table = 0 /\ (forall bcf_index_bcfb_choose_table_zero_row. (exists bcf_lt_gap_bcfb_choose_table_zero_row_bound. bcf_lt_gap_bcfb_choose_table_zero_row_bound + S (bcf_index_bcfb_choose_table_zero_row) = S (n)) -> exists bcf_value_bcfb_choose_table_zero_row. ((((exists bcf_height_bcfb_choose_table_zero_row_entry. bcf_height_bcfb_choose_table_zero_row_entry + S (bcf_value_bcfb_choose_table_zero_row) = S ((S (bcf_index_bcfb_choose_table_zero_row)) * bcf_row_scale_bcfb_choose_table)) /\ exists bcf_quotient_bcfb_choose_table_zero_row_entry. bcf_row_code_bcfb_choose_table = bcf_quotient_bcfb_choose_table_zero_row_entry * S ((S (bcf_index_bcfb_choose_table_zero_row)) * bcf_row_scale_bcfb_choose_table) + (bcf_value_bcfb_choose_table_zero_row))) /\ ((bcf_index_bcfb_choose_table_zero_row = 0 /\ bcf_value_bcfb_choose_table_zero_row = 1) \/ exists bcf_predecessor_bcfb_choose_table_zero_row. bcf_index_bcfb_choose_table_zero_row = S bcf_predecessor_bcfb_choose_table_zero_row /\ bcf_value_bcfb_choose_table_zero_row = 0)))) \/ exists bcf_predecessor_bcfb_choose_table bcf_previous_code_bcfb_choose_table bcf_previous_scale_bcfb_choose_table. bcf_row_index_bcfb_choose_table = S bcf_predecessor_bcfb_choose_table /\ ((((exists bcf_height_bcfb_choose_table_decoded_previous_code. bcf_height_bcfb_choose_table_decoded_previous_code + S (bcf_previous_code_bcfb_choose_table) = S ((S (bcf_predecessor_bcfb_choose_table)) * bcf_row_code_scale_bcfb_choose)) /\ exists bcf_quotient_bcfb_choose_table_decoded_previous_code. bcf_row_code_code_bcfb_choose = bcf_quotient_bcfb_choose_table_decoded_previous_code * S ((S (bcf_predecessor_bcfb_choose_table)) * bcf_row_code_scale_bcfb_choose) + (bcf_previous_code_bcfb_choose_table))) /\ ((((exists bcf_height_bcfb_choose_table_decoded_previous_scale. bcf_height_bcfb_choose_table_decoded_previous_scale + S (bcf_previous_scale_bcfb_choose_table) = S ((S (bcf_predecessor_bcfb_choose_table)) * bcf_row_scale_scale_bcfb_choose)) /\ exists bcf_quotient_bcfb_choose_table_decoded_previous_scale. bcf_row_scale_code_bcfb_choose = bcf_quotient_bcfb_choose_table_decoded_previous_scale * S ((S (bcf_predecessor_bcfb_choose_table)) * bcf_row_scale_scale_bcfb_choose) + (bcf_previous_scale_bcfb_choose_table))) /\ (forall bcf_index_bcfb_choose_table_row_step. (exists bcf_lt_gap_bcfb_choose_table_row_step_bound. bcf_lt_gap_bcfb_choose_table_row_step_bound + S (bcf_index_bcfb_choose_table_row_step) = S (n)) -> exists bcf_value_bcfb_choose_table_row_step. ((((exists bcf_height_bcfb_choose_table_row_step_entry. bcf_height_bcfb_choose_table_row_step_entry + S (bcf_value_bcfb_choose_table_row_step) = S ((S (bcf_index_bcfb_choose_table_row_step)) * bcf_row_scale_bcfb_choose_table)) /\ exists bcf_quotient_bcfb_choose_table_row_step_entry. bcf_row_code_bcfb_choose_table = bcf_quotient_bcfb_choose_table_row_step_entry * S ((S (bcf_index_bcfb_choose_table_row_step)) * bcf_row_scale_bcfb_choose_table) + (bcf_value_bcfb_choose_table_row_step))) /\ ((bcf_index_bcfb_choose_table_row_step = 0 /\ bcf_value_bcfb_choose_table_row_step = 1) \/ exists bcf_predecessor_bcfb_choose_table_row_step bcf_left_bcfb_choose_table_row_step bcf_right_bcfb_choose_table_row_step. bcf_index_bcfb_choose_table_row_step = S bcf_predecessor_bcfb_choose_table_row_step /\ ((((exists bcf_height_bcfb_choose_table_row_step_previous_left. bcf_height_bcfb_choose_table_row_step_previous_left + S (bcf_left_bcfb_choose_table_row_step) = S ((S (bcf_predecessor_bcfb_choose_table_row_step)) * bcf_previous_scale_bcfb_choose_table)) /\ exists bcf_quotient_bcfb_choose_table_row_step_previous_left. bcf_previous_code_bcfb_choose_table = bcf_quotient_bcfb_choose_table_row_step_previous_left * S ((S (bcf_predecessor_bcfb_choose_table_row_step)) * bcf_previous_scale_bcfb_choose_table) + (bcf_left_bcfb_choose_table_row_step))) /\ ((((exists bcf_height_bcfb_choose_table_row_step_previous_right. bcf_height_bcfb_choose_table_row_step_previous_right + S (bcf_right_bcfb_choose_table_row_step) = S ((S (S (bcf_predecessor_bcfb_choose_table_row_step))) * bcf_previous_scale_bcfb_choose_table)) /\ exists bcf_quotient_bcfb_choose_table_row_step_previous_right. bcf_previous_code_bcfb_choose_table = bcf_quotient_bcfb_choose_table_row_step_previous_right * S ((S (S (bcf_predecessor_bcfb_choose_table_row_step))) * bcf_previous_scale_bcfb_choose_table) + (bcf_right_bcfb_choose_table_row_step))) /\ bcf_value_bcfb_choose_table_row_step = bcf_left_bcfb_choose_table_row_step + bcf_right_bcfb_choose_table_row_step))))))))))) /\ ((((exists bcf_height_bcfb_choose_decoded_row_code. bcf_height_bcfb_choose_decoded_row_code + S (bcf_row_code_bcfb_choose) = S ((S (n)) * bcf_row_code_scale_bcfb_choose)) /\ exists bcf_quotient_bcfb_choose_decoded_row_code. bcf_row_code_code_bcfb_choose = bcf_quotient_bcfb_choose_decoded_row_code * S ((S (n)) * bcf_row_code_scale_bcfb_choose) + (bcf_row_code_bcfb_choose))) /\ ((((exists bcf_height_bcfb_choose_decoded_row_scale. bcf_height_bcfb_choose_decoded_row_scale + S (bcf_row_scale_bcfb_choose) = S ((S (n)) * bcf_row_scale_scale_bcfb_choose)) /\ exists bcf_quotient_bcfb_choose_decoded_row_scale. bcf_row_scale_code_bcfb_choose = bcf_quotient_bcfb_choose_decoded_row_scale * S ((S (n)) * bcf_row_scale_scale_bcfb_choose) + (bcf_row_scale_bcfb_choose))) /\ (((exists bcf_height_bcfb_choose_decoded_value. bcf_height_bcfb_choose_decoded_value + S (c) = S ((S (k)) * bcf_row_scale_bcfb_choose)) /\ exists bcf_quotient_bcfb_choose_decoded_value. bcf_row_code_bcfb_choose = bcf_quotient_bcfb_choose_decoded_value * S ((S (k)) * bcf_row_scale_bcfb_choose) + (c))))))))) -> (exists ff_b_bcfb_total ff_c_bcfb_total. ((forall ff_i_bcfb_total_range. (exists ff_lt_bcfb_total_range_bound. ff_lt_bcfb_total_range_bound + S ff_i_bcfb_total_range = n) -> (((exists ff_h_bcfb_total_range_decoded. ff_h_bcfb_total_range_decoded + S (1 + ff_i_bcfb_total_range) = S ((S (ff_i_bcfb_total_range)) * ff_c_bcfb_total)) /\ exists ff_q_bcfb_total_range_decoded. ff_b_bcfb_total = ff_q_bcfb_total_range_decoded * S ((S (ff_i_bcfb_total_range)) * ff_c_bcfb_total) + (1 + ff_i_bcfb_total_range)))) /\ (exists ff_u_bcfb_total_product ff_v_bcfb_total_product. ((((exists ff_h_bcfb_total_product_start. ff_h_bcfb_total_product_start + S (1) = S ((S (0)) * ff_v_bcfb_total_product)) /\ exists ff_q_bcfb_total_product_start. ff_u_bcfb_total_product = ff_q_bcfb_total_product_start * S ((S (0)) * ff_v_bcfb_total_product) + (1))) /\ ((((exists ff_h_bcfb_total_product_terminal. ff_h_bcfb_total_product_terminal + S (F) = S ((S (n)) * ff_v_bcfb_total_product)) /\ exists ff_q_bcfb_total_product_terminal. ff_u_bcfb_total_product = ff_q_bcfb_total_product_terminal * S ((S (n)) * ff_v_bcfb_total_product) + (F))) /\ forall ff_i_bcfb_total_product. (exists ff_lt_bcfb_total_product_bound. ff_lt_bcfb_total_product_bound + S ff_i_bcfb_total_product = n) -> exists ff_p_bcfb_total_product ff_r_bcfb_total_product ff_s_bcfb_total_product. ((((exists ff_h_bcfb_total_product_factor. ff_h_bcfb_total_product_factor + S (ff_p_bcfb_total_product) = S ((S (ff_i_bcfb_total_product)) * ff_c_bcfb_total)) /\ exists ff_q_bcfb_total_product_factor. ff_b_bcfb_total = ff_q_bcfb_total_product_factor * S ((S (ff_i_bcfb_total_product)) * ff_c_bcfb_total) + (ff_p_bcfb_total_product))) /\ ((((exists ff_h_bcfb_total_product_partial. ff_h_bcfb_total_product_partial + S (ff_r_bcfb_total_product) = S ((S (ff_i_bcfb_total_product)) * ff_v_bcfb_total_product)) /\ exists ff_q_bcfb_total_product_partial. ff_u_bcfb_total_product = ff_q_bcfb_total_product_partial * S ((S (ff_i_bcfb_total_product)) * ff_v_bcfb_total_product) + (ff_r_bcfb_total_product))) /\ ((((exists ff_h_bcfb_total_product_successor. ff_h_bcfb_total_product_successor + S (ff_s_bcfb_total_product) = S ((S (S ff_i_bcfb_total_product)) * ff_v_bcfb_total_product)) /\ exists ff_q_bcfb_total_product_successor. ff_u_bcfb_total_product = ff_q_bcfb_total_product_successor * S ((S (S ff_i_bcfb_total_product)) * ff_v_bcfb_total_product) + (ff_s_bcfb_total_product))) /\ ff_s_bcfb_total_product = ff_r_bcfb_total_product * ff_p_bcfb_total_product)))))))) -> (exists ff_b_bcfb_left ff_c_bcfb_left. ((forall ff_i_bcfb_left_range. (exists ff_lt_bcfb_left_range_bound. ff_lt_bcfb_left_range_bound + S ff_i_bcfb_left_range = k) -> (((exists ff_h_bcfb_left_range_decoded. ff_h_bcfb_left_range_decoded + S (1 + ff_i_bcfb_left_range) = S ((S (ff_i_bcfb_left_range)) * ff_c_bcfb_left)) /\ exists ff_q_bcfb_left_range_decoded. ff_b_bcfb_left = ff_q_bcfb_left_range_decoded * S ((S (ff_i_bcfb_left_range)) * ff_c_bcfb_left) + (1 + ff_i_bcfb_left_range)))) /\ (exists ff_u_bcfb_left_product ff_v_bcfb_left_product. ((((exists ff_h_bcfb_left_product_start. ff_h_bcfb_left_product_start + S (1) = S ((S (0)) * ff_v_bcfb_left_product)) /\ exists ff_q_bcfb_left_product_start. ff_u_bcfb_left_product = ff_q_bcfb_left_product_start * S ((S (0)) * ff_v_bcfb_left_product) + (1))) /\ ((((exists ff_h_bcfb_left_product_terminal. ff_h_bcfb_left_product_terminal + S (K) = S ((S (k)) * ff_v_bcfb_left_product)) /\ exists ff_q_bcfb_left_product_terminal. ff_u_bcfb_left_product = ff_q_bcfb_left_product_terminal * S ((S (k)) * ff_v_bcfb_left_product) + (K))) /\ forall ff_i_bcfb_left_product. (exists ff_lt_bcfb_left_product_bound. ff_lt_bcfb_left_product_bound + S ff_i_bcfb_left_product = k) -> exists ff_p_bcfb_left_product ff_r_bcfb_left_product ff_s_bcfb_left_product. ((((exists ff_h_bcfb_left_product_factor. ff_h_bcfb_left_product_factor + S (ff_p_bcfb_left_product) = S ((S (ff_i_bcfb_left_product)) * ff_c_bcfb_left)) /\ exists ff_q_bcfb_left_product_factor. ff_b_bcfb_left = ff_q_bcfb_left_product_factor * S ((S (ff_i_bcfb_left_product)) * ff_c_bcfb_left) + (ff_p_bcfb_left_product))) /\ ((((exists ff_h_bcfb_left_product_partial. ff_h_bcfb_left_product_partial + S (ff_r_bcfb_left_product) = S ((S (ff_i_bcfb_left_product)) * ff_v_bcfb_left_product)) /\ exists ff_q_bcfb_left_product_partial. ff_u_bcfb_left_product = ff_q_bcfb_left_product_partial * S ((S (ff_i_bcfb_left_product)) * ff_v_bcfb_left_product) + (ff_r_bcfb_left_product))) /\ ((((exists ff_h_bcfb_left_product_successor. ff_h_bcfb_left_product_successor + S (ff_s_bcfb_left_product) = S ((S (S ff_i_bcfb_left_product)) * ff_v_bcfb_left_product)) /\ exists ff_q_bcfb_left_product_successor. ff_u_bcfb_left_product = ff_q_bcfb_left_product_successor * S ((S (S ff_i_bcfb_left_product)) * ff_v_bcfb_left_product) + (ff_s_bcfb_left_product))) /\ ff_s_bcfb_left_product = ff_r_bcfb_left_product * ff_p_bcfb_left_product)))))))) -> (exists ff_b_bcfb_right ff_c_bcfb_right. ((forall ff_i_bcfb_right_range. (exists ff_lt_bcfb_right_range_bound. ff_lt_bcfb_right_range_bound + S ff_i_bcfb_right_range = j) -> (((exists ff_h_bcfb_right_range_decoded. ff_h_bcfb_right_range_decoded + S (1 + ff_i_bcfb_right_range) = S ((S (ff_i_bcfb_right_range)) * ff_c_bcfb_right)) /\ exists ff_q_bcfb_right_range_decoded. ff_b_bcfb_right = ff_q_bcfb_right_range_decoded * S ((S (ff_i_bcfb_right_range)) * ff_c_bcfb_right) + (1 + ff_i_bcfb_right_range)))) /\ (exists ff_u_bcfb_right_product ff_v_bcfb_right_product. ((((exists ff_h_bcfb_right_product_start. ff_h_bcfb_right_product_start + S (1) = S ((S (0)) * ff_v_bcfb_right_product)) /\ exists ff_q_bcfb_right_product_start. ff_u_bcfb_right_product = ff_q_bcfb_right_product_start * S ((S (0)) * ff_v_bcfb_right_product) + (1))) /\ ((((exists ff_h_bcfb_right_product_terminal. ff_h_bcfb_right_product_terminal + S (J) = S ((S (j)) * ff_v_bcfb_right_product)) /\ exists ff_q_bcfb_right_product_terminal. ff_u_bcfb_right_product = ff_q_bcfb_right_product_terminal * S ((S (j)) * ff_v_bcfb_right_product) + (J))) /\ forall ff_i_bcfb_right_product. (exists ff_lt_bcfb_right_product_bound. ff_lt_bcfb_right_product_bound + S ff_i_bcfb_right_product = j) -> exists ff_p_bcfb_right_product ff_r_bcfb_right_product ff_s_bcfb_right_product. ((((exists ff_h_bcfb_right_product_factor. ff_h_bcfb_right_product_factor + S (ff_p_bcfb_right_product) = S ((S (ff_i_bcfb_right_product)) * ff_c_bcfb_right)) /\ exists ff_q_bcfb_right_product_factor. ff_b_bcfb_right = ff_q_bcfb_right_product_factor * S ((S (ff_i_bcfb_right_product)) * ff_c_bcfb_right) + (ff_p_bcfb_right_product))) /\ ((((exists ff_h_bcfb_right_product_partial. ff_h_bcfb_right_product_partial + S (ff_r_bcfb_right_product) = S ((S (ff_i_bcfb_right_product)) * ff_v_bcfb_right_product)) /\ exists ff_q_bcfb_right_product_partial. ff_u_bcfb_right_product = ff_q_bcfb_right_product_partial * S ((S (ff_i_bcfb_right_product)) * ff_v_bcfb_right_product) + (ff_r_bcfb_right_product))) /\ ((((exists ff_h_bcfb_right_product_successor. ff_h_bcfb_right_product_successor + S (ff_s_bcfb_right_product) = S ((S (S ff_i_bcfb_right_product)) * ff_v_bcfb_right_product)) /\ exists ff_q_bcfb_right_product_successor. ff_u_bcfb_right_product = ff_q_bcfb_right_product_successor * S ((S (S ff_i_bcfb_right_product)) * ff_v_bcfb_right_product) + (ff_s_bcfb_right_product))) /\ ff_s_bcfb_right_product = ff_r_bcfb_right_product * ff_p_bcfb_right_product)))))))) -> F = (K * J) * cProof neighborhood
Direct theorem prerequisites
BT000A mul_one BT00T8 choose_exists BT00TK choose_self_of_eq BT00TT choose_weighted_vertical BT0090 factorial_functional BT0091 factorial_zero BT0092 factorial_succ_decompose BT00TV factorial_length_eq_transport BT00TW factorial_weighted_product_combineDirect 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
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 (9)
01Induction on nL1–2
02Induction on jL3–12
03Establish hkL13–17
04Establish hc_oneL18–24
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply choose self of eq.
05Establish hF_oneL25–30
06Establish hK_oneL31–36
07Establish hJ_oneL37–46
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply factorial zero.
08Use earlier factsL47–47
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L47
specialize mul_one 1
09Calculate and transport equalitiesL48–50
10Fix variables and assumptionsL51–55
11Calculate and transport equalitiesL56–56
Carry out the recorded arithmetic or equality steps; inspect the exact commands for their direction and premises.
- L56
rewrite PA4 at hsum
12Separate the logical casesL57–57
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L57
exfalso
13Use earlier factsL58–59
14Fix variables and assumptionsL60–60
Work with arbitrary variables or the premises of the current implication.
- L60
intro k
15Induction on jL61–70
16Establish hkL71–75
17Establish hc_oneL76–82
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply choose self of eq.
18Establish hJ_oneL83–88
19Establish hFKL89–98
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply factorial functional.
- L89
have hFK : F = K - L90
specialize factorial_functional (S n) - L91
specialize factorial_functional F - L92
specialize factorial_functional K - L93
apply factorial_functional - L94
exact hF - L95
specialize factorial_length_eq_transport k - L96
specialize factorial_length_eq_transport (S n) - L97
specialize factorial_length_eq_transport K - L98
apply factorial_length_eq_transport
20Use earlier factsL99–100
21Calculate and transport equalitiesL101–103
22Use earlier factsL104–104
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L104
specialize mul_one K
23Calculate and transport equalitiesL105–107
24Fix variables and assumptionsL108–116
25Establish hprevious_sumL117–122
26Establish ha_existsL123–126
Establish this local claim before using it. It is not an additional assumption.
- L123
have ha_exists : ∃ a. Choose(n,k,a)Definitions: Choose(n,k,a)Original native command in the exact edition - L124
specialize choose_exists n - L125
specialize choose_exists k - L126
exact choose_exists
27Separate the logical casesL127–127
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L127
cases ha_exists
28Establish hweightedL128–137
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply choose weighted vertical.
- L128
have hweighted : S j * c = S n * x - L129
specialize choose_weighted_vertical n - L130
specialize choose_weighted_vertical k - L131
specialize choose_weighted_vertical j - L132
specialize choose_weighted_vertical x - L133
specialize choose_weighted_vertical c - L134
apply choose_weighted_vertical - L135
exact hprevious_sum - L136
exact ha_exists_witness - L137
exact hchoose
29Establish hF_decompL138–144
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply factorial succ decompose.
- L138
have hF_decomp : ∃ f. Factorial(n,f) ∧ F = f · S nDefinitions: Factorial(n,f)Original native command in the exact edition - L139
specialize factorial_succ_decompose n - L140
specialize factorial_succ_decompose (S n) - L141
specialize factorial_succ_decompose F - L142
apply factorial_succ_decompose - L143
refl - L144
exact hF
30Separate the logical casesL145–146
31Establish hJ_decompL147–153
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply factorial succ decompose.
- L147
have hJ_decomp : ∃ r. Factorial(j,r) ∧ J = r · S jDefinitions: Factorial(j,r)Original native command in the exact edition - L148
specialize factorial_succ_decompose j - L149
specialize factorial_succ_decompose (S j) - L150
specialize factorial_succ_decompose J - L151
apply factorial_succ_decompose - L152
refl - L153
exact hJ
32Separate the logical casesL154–155
33Establish hbridgeL156–165
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply IH.
34Use earlier factsL166–175
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L166
exact hF_decomp_witness_left - L167
exact hK - L168
exact hJ_decomp_witness_left - L169
specialize factorial_weighted_product_combine (S j) - L170
specialize factorial_weighted_product_combine (S n) - L171
specialize factorial_weighted_product_combine x - L172
specialize factorial_weighted_product_combine c - L173
specialize factorial_weighted_product_combine x1 - L174
specialize factorial_weighted_product_combine K - L175
specialize factorial_weighted_product_combine x2
35Use earlier factsL176–182
Instantiate or apply named facts and discharge the corresponding proof obligations.
Original defined command ledger · 182 lines
- 0001
induction n - 0002
intro k - 0003
induction j - 0004
intro c - 0005
intro F - 0006
intro K - 0007
intro J - 0008
intro hsum - 0009
intro hchoose - 0010
intro hF - 0011
intro hK - 0012
intro hJ - 0013
have hk : k = 0 - 0014
trans k + 0 - 0015
symm - 0016
apply PA3 - 0017
exact hsum - 0018
have hc_one : c = 1 - 0019
specialize choose_self_of_eq 0 - 0020
specialize choose_self_of_eq k - 0021
specialize choose_self_of_eq c - 0022
apply choose_self_of_eq - 0023
exact hk - 0024
exact hchoose - 0025
have hF_one : F = 1 - 0026
specialize factorial_zero 0 - 0027
specialize factorial_zero F - 0028
apply factorial_zero - 0029
refl - 0030
exact hF - 0031
have hK_one : K = 1 - 0032
specialize factorial_zero k - 0033
specialize factorial_zero K - 0034
apply factorial_zero - 0035
exact hk - 0036
exact hK - 0037
have hJ_one : J = 1 - 0038
specialize factorial_zero 0 - 0039
specialize factorial_zero J - 0040
apply factorial_zero - 0041
refl - 0042
exact hJ - 0043
rewrite hF_one - 0044
rewrite hK_one - 0045
rewrite hJ_one - 0046
rewrite hc_one - 0047
specialize mul_one 1 - 0048
rewrite mul_one - 0049
rewrite mul_one - 0050
refl - 0051
intro c - 0052
intro F - 0053
intro K - 0054
intro J - 0055
intro hsum - 0056
rewrite PA4 at hsum - 0057
exfalso - 0058
apply PA1 - 0059
exact hsum - 0060
intro k - 0061
induction j - 0062
intro c - 0063
intro F - 0064
intro K - 0065
intro J - 0066
intro hsum - 0067
intro hchoose - 0068
intro hF - 0069
intro hK - 0070
intro hJ - 0071
have hk : k = S n - 0072
trans k + 0 - 0073
symm - 0074
apply PA3 - 0075
exact hsum - 0076
have hc_one : c = 1 - 0077
specialize choose_self_of_eq (S n) - 0078
specialize choose_self_of_eq k - 0079
specialize choose_self_of_eq c - 0080
apply choose_self_of_eq - 0081
exact hk - 0082
exact hchoose - 0083
have hJ_one : J = 1 - 0084
specialize factorial_zero 0 - 0085
specialize factorial_zero J - 0086
apply factorial_zero - 0087
refl - 0088
exact hJ - 0089
have hFK : F = K - 0090
specialize factorial_functional (S n) - 0091
specialize factorial_functional F - 0092
specialize factorial_functional K - 0093
apply factorial_functional - 0094
exact hF - 0095
specialize factorial_length_eq_transport k - 0096
specialize factorial_length_eq_transport (S n) - 0097
specialize factorial_length_eq_transport K - 0098
apply factorial_length_eq_transport - 0099
exact hk - 0100
exact hK - 0101
rewrite hFK - 0102
rewrite hJ_one - 0103
rewrite hc_one - 0104
specialize mul_one K - 0105
rewrite mul_one - 0106
rewrite mul_one - 0107
refl - 0108
intro c - 0109
intro F - 0110
intro K - 0111
intro J - 0112
intro hsum - 0113
intro hchoose - 0114
intro hF - 0115
intro hK - 0116
intro hJ - 0117
have hprevious_sum : k + j = n - 0118
apply PA2 - 0119
trans k + S j - 0120
symm - 0121
apply PA4 - 0122
exact hsum - 0123
have ha_exists : ∃ a. Choose(n,k,a)Exact native replay line
have ha_exists : exists a. (((exists bcf_lt_gap_bcfb_predecessor_choose_out_of_range. bcf_lt_gap_bcfb_predecessor_choose_out_of_range + S (n) = k) /\ a = 0) \/ ((exists bcf_le_gap_bcfb_predecessor_choose_in_range. bcf_le_gap_bcfb_predecessor_choose_in_range + (k) = n) /\ (exists bcf_row_code_code_bcfb_predecessor_choose bcf_row_code_scale_bcfb_predecessor_choose bcf_row_scale_code_bcfb_predecessor_choose bcf_row_scale_scale_bcfb_predecessor_choose bcf_row_code_bcfb_predecessor_choose bcf_row_scale_bcfb_predecessor_choose. ((forall bcf_row_index_bcfb_predecessor_choose_table. (exists bcf_lt_gap_bcfb_predecessor_choose_table_row_bound. bcf_lt_gap_bcfb_predecessor_choose_table_row_bound + S (bcf_row_index_bcfb_predecessor_choose_table) = S (n)) -> exists bcf_row_code_bcfb_predecessor_choose_table bcf_row_scale_bcfb_predecessor_choose_table. ((((exists bcf_height_bcfb_predecessor_choose_table_decoded_row_code. bcf_height_bcfb_predecessor_choose_table_decoded_row_code + S (bcf_row_code_bcfb_predecessor_choose_table) = S ((S (bcf_row_index_bcfb_predecessor_choose_table)) * bcf_row_code_scale_bcfb_predecessor_choose)) /\ exists bcf_quotient_bcfb_predecessor_choose_table_decoded_row_code. bcf_row_code_code_bcfb_predecessor_choose = bcf_quotient_bcfb_predecessor_choose_table_decoded_row_code * S ((S (bcf_row_index_bcfb_predecessor_choose_table)) * bcf_row_code_scale_bcfb_predecessor_choose) + (bcf_row_code_bcfb_predecessor_choose_table))) /\ ((((exists bcf_height_bcfb_predecessor_choose_table_decoded_row_scale. bcf_height_bcfb_predecessor_choose_table_decoded_row_scale + S (bcf_row_scale_bcfb_predecessor_choose_table) = S ((S (bcf_row_index_bcfb_predecessor_choose_table)) * bcf_row_scale_scale_bcfb_predecessor_choose)) /\ exists bcf_quotient_bcfb_predecessor_choose_table_decoded_row_scale. bcf_row_scale_code_bcfb_predecessor_choose = bcf_quotient_bcfb_predecessor_choose_table_decoded_row_scale * S ((S (bcf_row_index_bcfb_predecessor_choose_table)) * bcf_row_scale_scale_bcfb_predecessor_choose) + (bcf_row_scale_bcfb_predecessor_choose_table))) /\ ((bcf_row_index_bcfb_predecessor_choose_table = 0 /\ (forall bcf_index_bcfb_predecessor_choose_table_zero_row. (exists bcf_lt_gap_bcfb_predecessor_choose_table_zero_row_bound. bcf_lt_gap_bcfb_predecessor_choose_table_zero_row_bound + S (bcf_index_bcfb_predecessor_choose_table_zero_row) = S (n)) -> exists bcf_value_bcfb_predecessor_choose_table_zero_row. ((((exists bcf_height_bcfb_predecessor_choose_table_zero_row_entry. bcf_height_bcfb_predecessor_choose_table_zero_row_entry + S (bcf_value_bcfb_predecessor_choose_table_zero_row) = S ((S (bcf_index_bcfb_predecessor_choose_table_zero_row)) * bcf_row_scale_bcfb_predecessor_choose_table)) /\ exists bcf_quotient_bcfb_predecessor_choose_table_zero_row_entry. bcf_row_code_bcfb_predecessor_choose_table = bcf_quotient_bcfb_predecessor_choose_table_zero_row_entry * S ((S (bcf_index_bcfb_predecessor_choose_table_zero_row)) * bcf_row_scale_bcfb_predecessor_choose_table) + (bcf_value_bcfb_predecessor_choose_table_zero_row))) /\ ((bcf_index_bcfb_predecessor_choose_table_zero_row = 0 /\ bcf_value_bcfb_predecessor_choose_table_zero_row = 1) \/ exists bcf_predecessor_bcfb_predecessor_choose_table_zero_row. bcf_index_bcfb_predecessor_choose_table_zero_row = S bcf_predecessor_bcfb_predecessor_choose_table_zero_row /\ bcf_value_bcfb_predecessor_choose_table_zero_row = 0)))) \/ exists bcf_predecessor_bcfb_predecessor_choose_table bcf_previous_code_bcfb_predecessor_choose_table bcf_previous_scale_bcfb_predecessor_choose_table. bcf_row_index_bcfb_predecessor_choose_table = S bcf_predecessor_bcfb_predecessor_choose_table /\ ((((exists bcf_height_bcfb_predecessor_choose_table_decoded_previous_code. bcf_height_bcfb_predecessor_choose_table_decoded_previous_code + S (bcf_previous_code_bcfb_predecessor_choose_table) = S ((S (bcf_predecessor_bcfb_predecessor_choose_table)) * bcf_row_code_scale_bcfb_predecessor_choose)) /\ exists bcf_quotient_bcfb_predecessor_choose_table_decoded_previous_code. bcf_row_code_code_bcfb_predecessor_choose = bcf_quotient_bcfb_predecessor_choose_table_decoded_previous_code * S ((S (bcf_predecessor_bcfb_predecessor_choose_table)) * bcf_row_code_scale_bcfb_predecessor_choose) + (bcf_previous_code_bcfb_predecessor_choose_table))) /\ ((((exists bcf_height_bcfb_predecessor_choose_table_decoded_previous_scale. bcf_height_bcfb_predecessor_choose_table_decoded_previous_scale + S (bcf_previous_scale_bcfb_predecessor_choose_table) = S ((S (bcf_predecessor_bcfb_predecessor_choose_table)) * bcf_row_scale_scale_bcfb_predecessor_choose)) /\ exists bcf_quotient_bcfb_predecessor_choose_table_decoded_previous_scale. bcf_row_scale_code_bcfb_predecessor_choose = bcf_quotient_bcfb_predecessor_choose_table_decoded_previous_scale * S ((S (bcf_predecessor_bcfb_predecessor_choose_table)) * bcf_row_scale_scale_bcfb_predecessor_choose) + (bcf_previous_scale_bcfb_predecessor_choose_table))) /\ (forall bcf_index_bcfb_predecessor_choose_table_row_step. (exists bcf_lt_gap_bcfb_predecessor_choose_table_row_step_bound. bcf_lt_gap_bcfb_predecessor_choose_table_row_step_bound + S (bcf_index_bcfb_predecessor_choose_table_row_step) = S (n)) -> exists bcf_value_bcfb_predecessor_choose_table_row_step. ((((exists bcf_height_bcfb_predecessor_choose_table_row_step_entry. bcf_height_bcfb_predecessor_choose_table_row_step_entry + S (bcf_value_bcfb_predecessor_choose_table_row_step) = S ((S (bcf_index_bcfb_predecessor_choose_table_row_step)) * bcf_row_scale_bcfb_predecessor_choose_table)) /\ exists bcf_quotient_bcfb_predecessor_choose_table_row_step_entry. bcf_row_code_bcfb_predecessor_choose_table = bcf_quotient_bcfb_predecessor_choose_table_row_step_entry * S ((S (bcf_index_bcfb_predecessor_choose_table_row_step)) * bcf_row_scale_bcfb_predecessor_choose_table) + (bcf_value_bcfb_predecessor_choose_table_row_step))) /\ ((bcf_index_bcfb_predecessor_choose_table_row_step = 0 /\ bcf_value_bcfb_predecessor_choose_table_row_step = 1) \/ exists bcf_predecessor_bcfb_predecessor_choose_table_row_step bcf_left_bcfb_predecessor_choose_table_row_step bcf_right_bcfb_predecessor_choose_table_row_step. bcf_index_bcfb_predecessor_choose_table_row_step = S bcf_predecessor_bcfb_predecessor_choose_table_row_step /\ ((((exists bcf_height_bcfb_predecessor_choose_table_row_step_previous_left. bcf_height_bcfb_predecessor_choose_table_row_step_previous_left + S (bcf_left_bcfb_predecessor_choose_table_row_step) = S ((S (bcf_predecessor_bcfb_predecessor_choose_table_row_step)) * bcf_previous_scale_bcfb_predecessor_choose_table)) /\ exists bcf_quotient_bcfb_predecessor_choose_table_row_step_previous_left. bcf_previous_code_bcfb_predecessor_choose_table = bcf_quotient_bcfb_predecessor_choose_table_row_step_previous_left * S ((S (bcf_predecessor_bcfb_predecessor_choose_table_row_step)) * bcf_previous_scale_bcfb_predecessor_choose_table) + (bcf_left_bcfb_predecessor_choose_table_row_step))) /\ ((((exists bcf_height_bcfb_predecessor_choose_table_row_step_previous_right. bcf_height_bcfb_predecessor_choose_table_row_step_previous_right + S (bcf_right_bcfb_predecessor_choose_table_row_step) = S ((S (S (bcf_predecessor_bcfb_predecessor_choose_table_row_step))) * bcf_previous_scale_bcfb_predecessor_choose_table)) /\ exists bcf_quotient_bcfb_predecessor_choose_table_row_step_previous_right. bcf_previous_code_bcfb_predecessor_choose_table = bcf_quotient_bcfb_predecessor_choose_table_row_step_previous_right * S ((S (S (bcf_predecessor_bcfb_predecessor_choose_table_row_step))) * bcf_previous_scale_bcfb_predecessor_choose_table) + (bcf_right_bcfb_predecessor_choose_table_row_step))) /\ bcf_value_bcfb_predecessor_choose_table_row_step = bcf_left_bcfb_predecessor_choose_table_row_step + bcf_right_bcfb_predecessor_choose_table_row_step))))))))))) /\ ((((exists bcf_height_bcfb_predecessor_choose_decoded_row_code. bcf_height_bcfb_predecessor_choose_decoded_row_code + S (bcf_row_code_bcfb_predecessor_choose) = S ((S (n)) * bcf_row_code_scale_bcfb_predecessor_choose)) /\ exists bcf_quotient_bcfb_predecessor_choose_decoded_row_code. bcf_row_code_code_bcfb_predecessor_choose = bcf_quotient_bcfb_predecessor_choose_decoded_row_code * S ((S (n)) * bcf_row_code_scale_bcfb_predecessor_choose) + (bcf_row_code_bcfb_predecessor_choose))) /\ ((((exists bcf_height_bcfb_predecessor_choose_decoded_row_scale. bcf_height_bcfb_predecessor_choose_decoded_row_scale + S (bcf_row_scale_bcfb_predecessor_choose) = S ((S (n)) * bcf_row_scale_scale_bcfb_predecessor_choose)) /\ exists bcf_quotient_bcfb_predecessor_choose_decoded_row_scale. bcf_row_scale_code_bcfb_predecessor_choose = bcf_quotient_bcfb_predecessor_choose_decoded_row_scale * S ((S (n)) * bcf_row_scale_scale_bcfb_predecessor_choose) + (bcf_row_scale_bcfb_predecessor_choose))) /\ (((exists bcf_height_bcfb_predecessor_choose_decoded_value. bcf_height_bcfb_predecessor_choose_decoded_value + S (a) = S ((S (k)) * bcf_row_scale_bcfb_predecessor_choose)) /\ exists bcf_quotient_bcfb_predecessor_choose_decoded_value. bcf_row_code_bcfb_predecessor_choose = bcf_quotient_bcfb_predecessor_choose_decoded_value * S ((S (k)) * bcf_row_scale_bcfb_predecessor_choose) + (a))))))))) - 0124
specialize choose_exists n - 0125
specialize choose_exists k - 0126
exact choose_exists - 0127
cases ha_exists - 0128
have hweighted : S j * c = S n * x - 0129
specialize choose_weighted_vertical n - 0130
specialize choose_weighted_vertical k - 0131
specialize choose_weighted_vertical j - 0132
specialize choose_weighted_vertical x - 0133
specialize choose_weighted_vertical c - 0134
apply choose_weighted_vertical - 0135
exact hprevious_sum - 0136
exact ha_exists_witness - 0137
exact hchoose - 0138
have hF_decomp : ∃ f. Factorial(n,f) ∧ F = f · S nExact native replay line
have hF_decomp : exists f. (exists ff_b_bcfb_predecessor_total ff_c_bcfb_predecessor_total. ((forall ff_i_bcfb_predecessor_total_range. (exists ff_lt_bcfb_predecessor_total_range_bound. ff_lt_bcfb_predecessor_total_range_bound + S ff_i_bcfb_predecessor_total_range = n) -> (((exists ff_h_bcfb_predecessor_total_range_decoded. ff_h_bcfb_predecessor_total_range_decoded + S (1 + ff_i_bcfb_predecessor_total_range) = S ((S (ff_i_bcfb_predecessor_total_range)) * ff_c_bcfb_predecessor_total)) /\ exists ff_q_bcfb_predecessor_total_range_decoded. ff_b_bcfb_predecessor_total = ff_q_bcfb_predecessor_total_range_decoded * S ((S (ff_i_bcfb_predecessor_total_range)) * ff_c_bcfb_predecessor_total) + (1 + ff_i_bcfb_predecessor_total_range)))) /\ (exists ff_u_bcfb_predecessor_total_product ff_v_bcfb_predecessor_total_product. ((((exists ff_h_bcfb_predecessor_total_product_start. ff_h_bcfb_predecessor_total_product_start + S (1) = S ((S (0)) * ff_v_bcfb_predecessor_total_product)) /\ exists ff_q_bcfb_predecessor_total_product_start. ff_u_bcfb_predecessor_total_product = ff_q_bcfb_predecessor_total_product_start * S ((S (0)) * ff_v_bcfb_predecessor_total_product) + (1))) /\ ((((exists ff_h_bcfb_predecessor_total_product_terminal. ff_h_bcfb_predecessor_total_product_terminal + S (f) = S ((S (n)) * ff_v_bcfb_predecessor_total_product)) /\ exists ff_q_bcfb_predecessor_total_product_terminal. ff_u_bcfb_predecessor_total_product = ff_q_bcfb_predecessor_total_product_terminal * S ((S (n)) * ff_v_bcfb_predecessor_total_product) + (f))) /\ forall ff_i_bcfb_predecessor_total_product. (exists ff_lt_bcfb_predecessor_total_product_bound. ff_lt_bcfb_predecessor_total_product_bound + S ff_i_bcfb_predecessor_total_product = n) -> exists ff_p_bcfb_predecessor_total_product ff_r_bcfb_predecessor_total_product ff_s_bcfb_predecessor_total_product. ((((exists ff_h_bcfb_predecessor_total_product_factor. ff_h_bcfb_predecessor_total_product_factor + S (ff_p_bcfb_predecessor_total_product) = S ((S (ff_i_bcfb_predecessor_total_product)) * ff_c_bcfb_predecessor_total)) /\ exists ff_q_bcfb_predecessor_total_product_factor. ff_b_bcfb_predecessor_total = ff_q_bcfb_predecessor_total_product_factor * S ((S (ff_i_bcfb_predecessor_total_product)) * ff_c_bcfb_predecessor_total) + (ff_p_bcfb_predecessor_total_product))) /\ ((((exists ff_h_bcfb_predecessor_total_product_partial. ff_h_bcfb_predecessor_total_product_partial + S (ff_r_bcfb_predecessor_total_product) = S ((S (ff_i_bcfb_predecessor_total_product)) * ff_v_bcfb_predecessor_total_product)) /\ exists ff_q_bcfb_predecessor_total_product_partial. ff_u_bcfb_predecessor_total_product = ff_q_bcfb_predecessor_total_product_partial * S ((S (ff_i_bcfb_predecessor_total_product)) * ff_v_bcfb_predecessor_total_product) + (ff_r_bcfb_predecessor_total_product))) /\ ((((exists ff_h_bcfb_predecessor_total_product_successor. ff_h_bcfb_predecessor_total_product_successor + S (ff_s_bcfb_predecessor_total_product) = S ((S (S ff_i_bcfb_predecessor_total_product)) * ff_v_bcfb_predecessor_total_product)) /\ exists ff_q_bcfb_predecessor_total_product_successor. ff_u_bcfb_predecessor_total_product = ff_q_bcfb_predecessor_total_product_successor * S ((S (S ff_i_bcfb_predecessor_total_product)) * ff_v_bcfb_predecessor_total_product) + (ff_s_bcfb_predecessor_total_product))) /\ ff_s_bcfb_predecessor_total_product = ff_r_bcfb_predecessor_total_product * ff_p_bcfb_predecessor_total_product)))))))) /\ F = f * S n - 0139
specialize factorial_succ_decompose n - 0140
specialize factorial_succ_decompose (S n) - 0141
specialize factorial_succ_decompose F - 0142
apply factorial_succ_decompose - 0143
refl - 0144
exact hF - 0145
cases hF_decomp - 0146
cases hF_decomp_witness - 0147
have hJ_decomp : ∃ r. Factorial(j,r) ∧ J = r · S jExact native replay line
have hJ_decomp : exists r. (exists ff_b_bcfb_predecessor_right ff_c_bcfb_predecessor_right. ((forall ff_i_bcfb_predecessor_right_range. (exists ff_lt_bcfb_predecessor_right_range_bound. ff_lt_bcfb_predecessor_right_range_bound + S ff_i_bcfb_predecessor_right_range = j) -> (((exists ff_h_bcfb_predecessor_right_range_decoded. ff_h_bcfb_predecessor_right_range_decoded + S (1 + ff_i_bcfb_predecessor_right_range) = S ((S (ff_i_bcfb_predecessor_right_range)) * ff_c_bcfb_predecessor_right)) /\ exists ff_q_bcfb_predecessor_right_range_decoded. ff_b_bcfb_predecessor_right = ff_q_bcfb_predecessor_right_range_decoded * S ((S (ff_i_bcfb_predecessor_right_range)) * ff_c_bcfb_predecessor_right) + (1 + ff_i_bcfb_predecessor_right_range)))) /\ (exists ff_u_bcfb_predecessor_right_product ff_v_bcfb_predecessor_right_product. ((((exists ff_h_bcfb_predecessor_right_product_start. ff_h_bcfb_predecessor_right_product_start + S (1) = S ((S (0)) * ff_v_bcfb_predecessor_right_product)) /\ exists ff_q_bcfb_predecessor_right_product_start. ff_u_bcfb_predecessor_right_product = ff_q_bcfb_predecessor_right_product_start * S ((S (0)) * ff_v_bcfb_predecessor_right_product) + (1))) /\ ((((exists ff_h_bcfb_predecessor_right_product_terminal. ff_h_bcfb_predecessor_right_product_terminal + S (r) = S ((S (j)) * ff_v_bcfb_predecessor_right_product)) /\ exists ff_q_bcfb_predecessor_right_product_terminal. ff_u_bcfb_predecessor_right_product = ff_q_bcfb_predecessor_right_product_terminal * S ((S (j)) * ff_v_bcfb_predecessor_right_product) + (r))) /\ forall ff_i_bcfb_predecessor_right_product. (exists ff_lt_bcfb_predecessor_right_product_bound. ff_lt_bcfb_predecessor_right_product_bound + S ff_i_bcfb_predecessor_right_product = j) -> exists ff_p_bcfb_predecessor_right_product ff_r_bcfb_predecessor_right_product ff_s_bcfb_predecessor_right_product. ((((exists ff_h_bcfb_predecessor_right_product_factor. ff_h_bcfb_predecessor_right_product_factor + S (ff_p_bcfb_predecessor_right_product) = S ((S (ff_i_bcfb_predecessor_right_product)) * ff_c_bcfb_predecessor_right)) /\ exists ff_q_bcfb_predecessor_right_product_factor. ff_b_bcfb_predecessor_right = ff_q_bcfb_predecessor_right_product_factor * S ((S (ff_i_bcfb_predecessor_right_product)) * ff_c_bcfb_predecessor_right) + (ff_p_bcfb_predecessor_right_product))) /\ ((((exists ff_h_bcfb_predecessor_right_product_partial. ff_h_bcfb_predecessor_right_product_partial + S (ff_r_bcfb_predecessor_right_product) = S ((S (ff_i_bcfb_predecessor_right_product)) * ff_v_bcfb_predecessor_right_product)) /\ exists ff_q_bcfb_predecessor_right_product_partial. ff_u_bcfb_predecessor_right_product = ff_q_bcfb_predecessor_right_product_partial * S ((S (ff_i_bcfb_predecessor_right_product)) * ff_v_bcfb_predecessor_right_product) + (ff_r_bcfb_predecessor_right_product))) /\ ((((exists ff_h_bcfb_predecessor_right_product_successor. ff_h_bcfb_predecessor_right_product_successor + S (ff_s_bcfb_predecessor_right_product) = S ((S (S ff_i_bcfb_predecessor_right_product)) * ff_v_bcfb_predecessor_right_product)) /\ exists ff_q_bcfb_predecessor_right_product_successor. ff_u_bcfb_predecessor_right_product = ff_q_bcfb_predecessor_right_product_successor * S ((S (S ff_i_bcfb_predecessor_right_product)) * ff_v_bcfb_predecessor_right_product) + (ff_s_bcfb_predecessor_right_product))) /\ ff_s_bcfb_predecessor_right_product = ff_r_bcfb_predecessor_right_product * ff_p_bcfb_predecessor_right_product)))))))) /\ J = r * S j - 0148
specialize factorial_succ_decompose j - 0149
specialize factorial_succ_decompose (S j) - 0150
specialize factorial_succ_decompose J - 0151
apply factorial_succ_decompose - 0152
refl - 0153
exact hJ - 0154
cases hJ_decomp - 0155
cases hJ_decomp_witness - 0156
have hbridge : x1 = (K * x2) * x - 0157
specialize IH k - 0158
specialize IH j - 0159
specialize IH x - 0160
specialize IH x1 - 0161
specialize IH K - 0162
specialize IH x2 - 0163
apply IH - 0164
exact hprevious_sum - 0165
exact ha_exists_witness - 0166
exact hF_decomp_witness_left - 0167
exact hK - 0168
exact hJ_decomp_witness_left - 0169
specialize factorial_weighted_product_combine (S j) - 0170
specialize factorial_weighted_product_combine (S n) - 0171
specialize factorial_weighted_product_combine x - 0172
specialize factorial_weighted_product_combine c - 0173
specialize factorial_weighted_product_combine x1 - 0174
specialize factorial_weighted_product_combine K - 0175
specialize factorial_weighted_product_combine x2 - 0176
specialize factorial_weighted_product_combine F - 0177
specialize factorial_weighted_product_combine J - 0178
apply factorial_weighted_product_combine - 0179
exact hJ_decomp_witness_right - 0180
exact hF_decomp_witness_right - 0181
exact hweighted - 0182
exact hbridge