Exact expanded PA statement
forall b c l P n F. n = S (S l) -> (forall wtp_range_index_wer_range_two. (exists wtp_range_gap_wer_range_two. wtp_range_gap_wer_range_two + S wtp_range_index_wer_range_two = l) -> (((exists ff_h_wer_range_two_decoded. ff_h_wer_range_two_decoded + S (2 + wtp_range_index_wer_range_two) = S ((S (wtp_range_index_wer_range_two)) * c)) /\ exists ff_q_wer_range_two_decoded. b = ff_q_wer_range_two_decoded * S ((S (wtp_range_index_wer_range_two)) * c) + (2 + wtp_range_index_wer_range_two)))) -> (exists ff_u_wer_range_two_product ff_v_wer_range_two_product. ((((exists ff_h_wer_range_two_product_start. ff_h_wer_range_two_product_start + S (1) = S ((S (0)) * ff_v_wer_range_two_product)) /\ exists ff_q_wer_range_two_product_start. ff_u_wer_range_two_product = ff_q_wer_range_two_product_start * S ((S (0)) * ff_v_wer_range_two_product) + (1))) /\ ((((exists ff_h_wer_range_two_product_terminal. ff_h_wer_range_two_product_terminal + S (P) = S ((S (l)) * ff_v_wer_range_two_product)) /\ exists ff_q_wer_range_two_product_terminal. ff_u_wer_range_two_product = ff_q_wer_range_two_product_terminal * S ((S (l)) * ff_v_wer_range_two_product) + (P))) /\ forall ff_i_wer_range_two_product. (exists ff_lt_wer_range_two_product_bound. ff_lt_wer_range_two_product_bound + S ff_i_wer_range_two_product = l) -> exists ff_p_wer_range_two_product ff_r_wer_range_two_product ff_s_wer_range_two_product. ((((exists ff_h_wer_range_two_product_factor. ff_h_wer_range_two_product_factor + S (ff_p_wer_range_two_product) = S ((S (ff_i_wer_range_two_product)) * c)) /\ exists ff_q_wer_range_two_product_factor. b = ff_q_wer_range_two_product_factor * S ((S (ff_i_wer_range_two_product)) * c) + (ff_p_wer_range_two_product))) /\ ((((exists ff_h_wer_range_two_product_partial. ff_h_wer_range_two_product_partial + S (ff_r_wer_range_two_product) = S ((S (ff_i_wer_range_two_product)) * ff_v_wer_range_two_product)) /\ exists ff_q_wer_range_two_product_partial. ff_u_wer_range_two_product = ff_q_wer_range_two_product_partial * S ((S (ff_i_wer_range_two_product)) * ff_v_wer_range_two_product) + (ff_r_wer_range_two_product))) /\ ((((exists ff_h_wer_range_two_product_successor. ff_h_wer_range_two_product_successor + S (ff_s_wer_range_two_product) = S ((S (S ff_i_wer_range_two_product)) * ff_v_wer_range_two_product)) /\ exists ff_q_wer_range_two_product_successor. ff_u_wer_range_two_product = ff_q_wer_range_two_product_successor * S ((S (S ff_i_wer_range_two_product)) * ff_v_wer_range_two_product) + (ff_s_wer_range_two_product))) /\ ff_s_wer_range_two_product = ff_r_wer_range_two_product * ff_p_wer_range_two_product)))))) -> (exists ff_b_wer_endpoint ff_c_wer_endpoint. ((forall ff_i_wer_endpoint_range. (exists ff_lt_wer_endpoint_range_bound. ff_lt_wer_endpoint_range_bound + S ff_i_wer_endpoint_range = n) -> (((exists ff_h_wer_endpoint_range_decoded. ff_h_wer_endpoint_range_decoded + S (1 + ff_i_wer_endpoint_range) = S ((S (ff_i_wer_endpoint_range)) * ff_c_wer_endpoint)) /\ exists ff_q_wer_endpoint_range_decoded. ff_b_wer_endpoint = ff_q_wer_endpoint_range_decoded * S ((S (ff_i_wer_endpoint_range)) * ff_c_wer_endpoint) + (1 + ff_i_wer_endpoint_range)))) /\ (exists ff_u_wer_endpoint_product ff_v_wer_endpoint_product. ((((exists ff_h_wer_endpoint_product_start. ff_h_wer_endpoint_product_start + S (1) = S ((S (0)) * ff_v_wer_endpoint_product)) /\ exists ff_q_wer_endpoint_product_start. ff_u_wer_endpoint_product = ff_q_wer_endpoint_product_start * S ((S (0)) * ff_v_wer_endpoint_product) + (1))) /\ ((((exists ff_h_wer_endpoint_product_terminal. ff_h_wer_endpoint_product_terminal + S (F) = S ((S (n)) * ff_v_wer_endpoint_product)) /\ exists ff_q_wer_endpoint_product_terminal. ff_u_wer_endpoint_product = ff_q_wer_endpoint_product_terminal * S ((S (n)) * ff_v_wer_endpoint_product) + (F))) /\ forall ff_i_wer_endpoint_product. (exists ff_lt_wer_endpoint_product_bound. ff_lt_wer_endpoint_product_bound + S ff_i_wer_endpoint_product = n) -> exists ff_p_wer_endpoint_product ff_r_wer_endpoint_product ff_s_wer_endpoint_product. ((((exists ff_h_wer_endpoint_product_factor. ff_h_wer_endpoint_product_factor + S (ff_p_wer_endpoint_product) = S ((S (ff_i_wer_endpoint_product)) * ff_c_wer_endpoint)) /\ exists ff_q_wer_endpoint_product_factor. ff_b_wer_endpoint = ff_q_wer_endpoint_product_factor * S ((S (ff_i_wer_endpoint_product)) * ff_c_wer_endpoint) + (ff_p_wer_endpoint_product))) /\ ((((exists ff_h_wer_endpoint_product_partial. ff_h_wer_endpoint_product_partial + S (ff_r_wer_endpoint_product) = S ((S (ff_i_wer_endpoint_product)) * ff_v_wer_endpoint_product)) /\ exists ff_q_wer_endpoint_product_partial. ff_u_wer_endpoint_product = ff_q_wer_endpoint_product_partial * S ((S (ff_i_wer_endpoint_product)) * ff_v_wer_endpoint_product) + (ff_r_wer_endpoint_product))) /\ ((((exists ff_h_wer_endpoint_product_successor. ff_h_wer_endpoint_product_successor + S (ff_s_wer_endpoint_product) = S ((S (S ff_i_wer_endpoint_product)) * ff_v_wer_endpoint_product)) /\ exists ff_q_wer_endpoint_product_successor. ff_u_wer_endpoint_product = ff_q_wer_endpoint_product_successor * S ((S (S ff_i_wer_endpoint_product)) * ff_v_wer_endpoint_product) + (ff_s_wer_endpoint_product))) /\ ff_s_wer_endpoint_product = ff_r_wer_endpoint_product * ff_p_wer_endpoint_product)))))))) -> F = P * nStructural proof guide
Generated structural guide
Restore the final factor l+2 after the leading unit has been absorbed.
Use the direct prerequisites beta_range_two_product_is_factorial_succ, factorial_succ_decompose, factorial_functional, mul_congr as previously established PA formulas.
The proof proceeds by case analysis (2), intermediate claims (3).
Referenced ingredients
Proof neighborhood
Direct dependencies
PA00BG beta_range_two_product_is_factorial_succ PA0065 factorial_succ_decompose PA006B factorial_functional PA0050 mul_congrDirect dependents
Formal native tactic body
Dependencies are introduced as named hypotheses before line 1. Linked names are exact direct references. This Alpha-v16 checked-use theorem is independently kernel-checked when replayed; it is not a Stable theorem.
- 0001
intro b - 0002
intro c - 0003
intro l - 0004
intro P - 0005
intro n - 0006
intro F - 0007
intro hterminal - 0008
intro hrange - 0009
intro hproduct - 0010
intro hfactorial - 0011
have hprefix_factorial : exists wer_factor_code_wer_endpoint_prefix_factorial wer_factor_scale_wer_endpoint_prefix_factorial. ((forall wer_range_index_wer_endpoint_prefix_factorial_range. (exists wer_range_gap_wer_endpoint_prefix_factorial_range. wer_range_gap_wer_endpoint_prefix_factorial_range + S wer_range_index_wer_endpoint_prefix_factorial_range = S l) -> (((exists ff_h_wer_endpoint_prefix_factorial_range_decoded. ff_h_wer_endpoint_prefix_factorial_range_decoded + S (1 + wer_range_index_wer_endpoint_prefix_factorial_range) = S ((S (wer_range_index_wer_endpoint_prefix_factorial_range)) * wer_factor_scale_wer_endpoint_prefix_factorial)) /\ exists ff_q_wer_endpoint_prefix_factorial_range_decoded. wer_factor_code_wer_endpoint_prefix_factorial = ff_q_wer_endpoint_prefix_factorial_range_decoded * S ((S (wer_range_index_wer_endpoint_prefix_factorial_range)) * wer_factor_scale_wer_endpoint_prefix_factorial) + (1 + wer_range_index_wer_endpoint_prefix_factorial_range)))) /\ (exists ff_u_wer_endpoint_prefix_factorial_product ff_v_wer_endpoint_prefix_factorial_product. ((((exists ff_h_wer_endpoint_prefix_factorial_product_start. ff_h_wer_endpoint_prefix_factorial_product_start + S (1) = S ((S (0)) * ff_v_wer_endpoint_prefix_factorial_product)) /\ exists ff_q_wer_endpoint_prefix_factorial_product_start. ff_u_wer_endpoint_prefix_factorial_product = ff_q_wer_endpoint_prefix_factorial_product_start * S ((S (0)) * ff_v_wer_endpoint_prefix_factorial_product) + (1))) /\ ((((exists ff_h_wer_endpoint_prefix_factorial_product_terminal. ff_h_wer_endpoint_prefix_factorial_product_terminal + S (P) = S ((S (S l)) * ff_v_wer_endpoint_prefix_factorial_product)) /\ exists ff_q_wer_endpoint_prefix_factorial_product_terminal. ff_u_wer_endpoint_prefix_factorial_product = ff_q_wer_endpoint_prefix_factorial_product_terminal * S ((S (S l)) * ff_v_wer_endpoint_prefix_factorial_product) + (P))) /\ forall ff_i_wer_endpoint_prefix_factorial_product. (exists ff_lt_wer_endpoint_prefix_factorial_product_bound. ff_lt_wer_endpoint_prefix_factorial_product_bound + S ff_i_wer_endpoint_prefix_factorial_product = S l) -> exists ff_p_wer_endpoint_prefix_factorial_product ff_r_wer_endpoint_prefix_factorial_product ff_s_wer_endpoint_prefix_factorial_product. ((((exists ff_h_wer_endpoint_prefix_factorial_product_factor. ff_h_wer_endpoint_prefix_factorial_product_factor + S (ff_p_wer_endpoint_prefix_factorial_product) = S ((S (ff_i_wer_endpoint_prefix_factorial_product)) * wer_factor_scale_wer_endpoint_prefix_factorial)) /\ exists ff_q_wer_endpoint_prefix_factorial_product_factor. wer_factor_code_wer_endpoint_prefix_factorial = ff_q_wer_endpoint_prefix_factorial_product_factor * S ((S (ff_i_wer_endpoint_prefix_factorial_product)) * wer_factor_scale_wer_endpoint_prefix_factorial) + (ff_p_wer_endpoint_prefix_factorial_product))) /\ ((((exists ff_h_wer_endpoint_prefix_factorial_product_partial. ff_h_wer_endpoint_prefix_factorial_product_partial + S (ff_r_wer_endpoint_prefix_factorial_product) = S ((S (ff_i_wer_endpoint_prefix_factorial_product)) * ff_v_wer_endpoint_prefix_factorial_product)) /\ exists ff_q_wer_endpoint_prefix_factorial_product_partial. ff_u_wer_endpoint_prefix_factorial_product = ff_q_wer_endpoint_prefix_factorial_product_partial * S ((S (ff_i_wer_endpoint_prefix_factorial_product)) * ff_v_wer_endpoint_prefix_factorial_product) + (ff_r_wer_endpoint_prefix_factorial_product))) /\ ((((exists ff_h_wer_endpoint_prefix_factorial_product_successor. ff_h_wer_endpoint_prefix_factorial_product_successor + S (ff_s_wer_endpoint_prefix_factorial_product) = S ((S (S ff_i_wer_endpoint_prefix_factorial_product)) * ff_v_wer_endpoint_prefix_factorial_product)) /\ exists ff_q_wer_endpoint_prefix_factorial_product_successor. ff_u_wer_endpoint_prefix_factorial_product = ff_q_wer_endpoint_prefix_factorial_product_successor * S ((S (S ff_i_wer_endpoint_prefix_factorial_product)) * ff_v_wer_endpoint_prefix_factorial_product) + (ff_s_wer_endpoint_prefix_factorial_product))) /\ ff_s_wer_endpoint_prefix_factorial_product = ff_r_wer_endpoint_prefix_factorial_product * ff_p_wer_endpoint_prefix_factorial_product))))))) - 0012
specialize beta_range_two_product_is_factorial_succ l - 0013
specialize beta_range_two_product_is_factorial_succ b - 0014
specialize beta_range_two_product_is_factorial_succ c - 0015
specialize beta_range_two_product_is_factorial_succ P - 0016
apply beta_range_two_product_is_factorial_succ - 0017
exact hrange - 0018
exact hproduct - 0019
have hdecomp : exists R. ((exists wer_factor_code_wer_endpoint_previous_factorial wer_factor_scale_wer_endpoint_previous_factorial. ((forall wer_range_index_wer_endpoint_previous_factorial_range. (exists wer_range_gap_wer_endpoint_previous_factorial_range. wer_range_gap_wer_endpoint_previous_factorial_range + S wer_range_index_wer_endpoint_previous_factorial_range = S l) -> (((exists ff_h_wer_endpoint_previous_factorial_range_decoded. ff_h_wer_endpoint_previous_factorial_range_decoded + S (1 + wer_range_index_wer_endpoint_previous_factorial_range) = S ((S (wer_range_index_wer_endpoint_previous_factorial_range)) * wer_factor_scale_wer_endpoint_previous_factorial)) /\ exists ff_q_wer_endpoint_previous_factorial_range_decoded. wer_factor_code_wer_endpoint_previous_factorial = ff_q_wer_endpoint_previous_factorial_range_decoded * S ((S (wer_range_index_wer_endpoint_previous_factorial_range)) * wer_factor_scale_wer_endpoint_previous_factorial) + (1 + wer_range_index_wer_endpoint_previous_factorial_range)))) /\ (exists ff_u_wer_endpoint_previous_factorial_product ff_v_wer_endpoint_previous_factorial_product. ((((exists ff_h_wer_endpoint_previous_factorial_product_start. ff_h_wer_endpoint_previous_factorial_product_start + S (1) = S ((S (0)) * ff_v_wer_endpoint_previous_factorial_product)) /\ exists ff_q_wer_endpoint_previous_factorial_product_start. ff_u_wer_endpoint_previous_factorial_product = ff_q_wer_endpoint_previous_factorial_product_start * S ((S (0)) * ff_v_wer_endpoint_previous_factorial_product) + (1))) /\ ((((exists ff_h_wer_endpoint_previous_factorial_product_terminal. ff_h_wer_endpoint_previous_factorial_product_terminal + S (R) = S ((S (S l)) * ff_v_wer_endpoint_previous_factorial_product)) /\ exists ff_q_wer_endpoint_previous_factorial_product_terminal. ff_u_wer_endpoint_previous_factorial_product = ff_q_wer_endpoint_previous_factorial_product_terminal * S ((S (S l)) * ff_v_wer_endpoint_previous_factorial_product) + (R))) /\ forall ff_i_wer_endpoint_previous_factorial_product. (exists ff_lt_wer_endpoint_previous_factorial_product_bound. ff_lt_wer_endpoint_previous_factorial_product_bound + S ff_i_wer_endpoint_previous_factorial_product = S l) -> exists ff_p_wer_endpoint_previous_factorial_product ff_r_wer_endpoint_previous_factorial_product ff_s_wer_endpoint_previous_factorial_product. ((((exists ff_h_wer_endpoint_previous_factorial_product_factor. ff_h_wer_endpoint_previous_factorial_product_factor + S (ff_p_wer_endpoint_previous_factorial_product) = S ((S (ff_i_wer_endpoint_previous_factorial_product)) * wer_factor_scale_wer_endpoint_previous_factorial)) /\ exists ff_q_wer_endpoint_previous_factorial_product_factor. wer_factor_code_wer_endpoint_previous_factorial = ff_q_wer_endpoint_previous_factorial_product_factor * S ((S (ff_i_wer_endpoint_previous_factorial_product)) * wer_factor_scale_wer_endpoint_previous_factorial) + (ff_p_wer_endpoint_previous_factorial_product))) /\ ((((exists ff_h_wer_endpoint_previous_factorial_product_partial. ff_h_wer_endpoint_previous_factorial_product_partial + S (ff_r_wer_endpoint_previous_factorial_product) = S ((S (ff_i_wer_endpoint_previous_factorial_product)) * ff_v_wer_endpoint_previous_factorial_product)) /\ exists ff_q_wer_endpoint_previous_factorial_product_partial. ff_u_wer_endpoint_previous_factorial_product = ff_q_wer_endpoint_previous_factorial_product_partial * S ((S (ff_i_wer_endpoint_previous_factorial_product)) * ff_v_wer_endpoint_previous_factorial_product) + (ff_r_wer_endpoint_previous_factorial_product))) /\ ((((exists ff_h_wer_endpoint_previous_factorial_product_successor. ff_h_wer_endpoint_previous_factorial_product_successor + S (ff_s_wer_endpoint_previous_factorial_product) = S ((S (S ff_i_wer_endpoint_previous_factorial_product)) * ff_v_wer_endpoint_previous_factorial_product)) /\ exists ff_q_wer_endpoint_previous_factorial_product_successor. ff_u_wer_endpoint_previous_factorial_product = ff_q_wer_endpoint_previous_factorial_product_successor * S ((S (S ff_i_wer_endpoint_previous_factorial_product)) * ff_v_wer_endpoint_previous_factorial_product) + (ff_s_wer_endpoint_previous_factorial_product))) /\ ff_s_wer_endpoint_previous_factorial_product = ff_r_wer_endpoint_previous_factorial_product * ff_p_wer_endpoint_previous_factorial_product)))))))) /\ F = R * S (S l)) - 0020
specialize factorial_succ_decompose (S l) - 0021
specialize factorial_succ_decompose n - 0022
specialize factorial_succ_decompose F - 0023
apply factorial_succ_decompose - 0024
exact hterminal - 0025
exact hfactorial - 0026
cases hdecomp - 0027
cases hdecomp_witness - 0028
have hpref : P = x - 0029
specialize factorial_functional (S l) - 0030
specialize factorial_functional P - 0031
specialize factorial_functional x - 0032
apply factorial_functional - 0033
exact hprefix_factorial - 0034
exact hdecomp_witness_left - 0035
trans x * S (S l) - 0036
exact hdecomp_witness_right - 0037
trans P * S (S l) - 0038
apply mul_congr - 0039
symm - 0040
exact hpref - 0041
refl - 0042
apply mul_congr - 0043
refl - 0044
symm - 0045
exact hterminal