Exact expanded 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) * cStructural proof guide
Complementary factorials represent each constructive Choose value.
Direct prerequisites: mul_one, choose_exists, choose_self_of_eq, choose_weighted_vertical, factorial_functional, factorial_zero, factorial_succ_decompose, factorial_length_eq_transport, factorial_weighted_product_combine. The authored body proceeds by structural induction (3), case analysis (5), intermediate claims (15), equality transport (12).
Proof neighborhood
Direct dependencies
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 dependents
Formal native tactic body
Dependencies are hypotheses of this body receipt. The focused endpoint audits separately check the complete empty-context certificates.
- 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 : 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 : 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 : 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