Exact expanded PA statement
forall mb mc sb sc l M Sprod. (exists ff_u_recode_package_left_product ff_v_recode_package_left_product. ((((exists ff_h_recode_package_left_product_start. ff_h_recode_package_left_product_start + S (1) = S ((S (0)) * ff_v_recode_package_left_product)) /\ exists ff_q_recode_package_left_product_start. ff_u_recode_package_left_product = ff_q_recode_package_left_product_start * S ((S (0)) * ff_v_recode_package_left_product) + (1))) /\ ((((exists ff_h_recode_package_left_product_terminal. ff_h_recode_package_left_product_terminal + S (M) = S ((S (l)) * ff_v_recode_package_left_product)) /\ exists ff_q_recode_package_left_product_terminal. ff_u_recode_package_left_product = ff_q_recode_package_left_product_terminal * S ((S (l)) * ff_v_recode_package_left_product) + (M))) /\ forall ff_i_recode_package_left_product. (exists ff_lt_recode_package_left_product_bound. ff_lt_recode_package_left_product_bound + S ff_i_recode_package_left_product = l) -> exists ff_p_recode_package_left_product ff_r_recode_package_left_product ff_s_recode_package_left_product. ((((exists ff_h_recode_package_left_product_factor. ff_h_recode_package_left_product_factor + S (ff_p_recode_package_left_product) = S ((S (ff_i_recode_package_left_product)) * mc)) /\ exists ff_q_recode_package_left_product_factor. mb = ff_q_recode_package_left_product_factor * S ((S (ff_i_recode_package_left_product)) * mc) + (ff_p_recode_package_left_product))) /\ ((((exists ff_h_recode_package_left_product_partial. ff_h_recode_package_left_product_partial + S (ff_r_recode_package_left_product) = S ((S (ff_i_recode_package_left_product)) * ff_v_recode_package_left_product)) /\ exists ff_q_recode_package_left_product_partial. ff_u_recode_package_left_product = ff_q_recode_package_left_product_partial * S ((S (ff_i_recode_package_left_product)) * ff_v_recode_package_left_product) + (ff_r_recode_package_left_product))) /\ ((((exists ff_h_recode_package_left_product_successor. ff_h_recode_package_left_product_successor + S (ff_s_recode_package_left_product) = S ((S (S ff_i_recode_package_left_product)) * ff_v_recode_package_left_product)) /\ exists ff_q_recode_package_left_product_successor. ff_u_recode_package_left_product = ff_q_recode_package_left_product_successor * S ((S (S ff_i_recode_package_left_product)) * ff_v_recode_package_left_product) + (ff_s_recode_package_left_product))) /\ ff_s_recode_package_left_product = ff_r_recode_package_left_product * ff_p_recode_package_left_product)))))) -> (exists ff_u_recode_package_right_product ff_v_recode_package_right_product. ((((exists ff_h_recode_package_right_product_start. ff_h_recode_package_right_product_start + S (1) = S ((S (0)) * ff_v_recode_package_right_product)) /\ exists ff_q_recode_package_right_product_start. ff_u_recode_package_right_product = ff_q_recode_package_right_product_start * S ((S (0)) * ff_v_recode_package_right_product) + (1))) /\ ((((exists ff_h_recode_package_right_product_terminal. ff_h_recode_package_right_product_terminal + S (Sprod) = S ((S (l)) * ff_v_recode_package_right_product)) /\ exists ff_q_recode_package_right_product_terminal. ff_u_recode_package_right_product = ff_q_recode_package_right_product_terminal * S ((S (l)) * ff_v_recode_package_right_product) + (Sprod))) /\ forall ff_i_recode_package_right_product. (exists ff_lt_recode_package_right_product_bound. ff_lt_recode_package_right_product_bound + S ff_i_recode_package_right_product = l) -> exists ff_p_recode_package_right_product ff_r_recode_package_right_product ff_s_recode_package_right_product. ((((exists ff_h_recode_package_right_product_factor. ff_h_recode_package_right_product_factor + S (ff_p_recode_package_right_product) = S ((S (ff_i_recode_package_right_product)) * sc)) /\ exists ff_q_recode_package_right_product_factor. sb = ff_q_recode_package_right_product_factor * S ((S (ff_i_recode_package_right_product)) * sc) + (ff_p_recode_package_right_product))) /\ ((((exists ff_h_recode_package_right_product_partial. ff_h_recode_package_right_product_partial + S (ff_r_recode_package_right_product) = S ((S (ff_i_recode_package_right_product)) * ff_v_recode_package_right_product)) /\ exists ff_q_recode_package_right_product_partial. ff_u_recode_package_right_product = ff_q_recode_package_right_product_partial * S ((S (ff_i_recode_package_right_product)) * ff_v_recode_package_right_product) + (ff_r_recode_package_right_product))) /\ ((((exists ff_h_recode_package_right_product_successor. ff_h_recode_package_right_product_successor + S (ff_s_recode_package_right_product) = S ((S (S ff_i_recode_package_right_product)) * ff_v_recode_package_right_product)) /\ exists ff_q_recode_package_right_product_successor. ff_u_recode_package_right_product = ff_q_recode_package_right_product_successor * S ((S (S ff_i_recode_package_right_product)) * ff_v_recode_package_right_product) + (ff_s_recode_package_right_product))) /\ ff_s_recode_package_right_product = ff_r_recode_package_right_product * ff_p_recode_package_right_product)))))) -> (exists tb tc T. ((forall fpmp_index_recode_package_alignment fpmp_left_recode_package_alignment fpmp_right_recode_package_alignment fpmp_target_recode_package_alignment. (exists fpmp_gap_recode_package_alignment. fpmp_gap_recode_package_alignment + S fpmp_index_recode_package_alignment = l) -> (((exists ff_h_fpmp_recode_package_alignment_left. ff_h_fpmp_recode_package_alignment_left + S (fpmp_left_recode_package_alignment) = S ((S (fpmp_index_recode_package_alignment)) * mc)) /\ exists ff_q_fpmp_recode_package_alignment_left. mb = ff_q_fpmp_recode_package_alignment_left * S ((S (fpmp_index_recode_package_alignment)) * mc) + (fpmp_left_recode_package_alignment))) -> (((exists ff_h_fpmp_recode_package_alignment_right. ff_h_fpmp_recode_package_alignment_right + S (fpmp_right_recode_package_alignment) = S ((S (fpmp_index_recode_package_alignment)) * sc)) /\ exists ff_q_fpmp_recode_package_alignment_right. sb = ff_q_fpmp_recode_package_alignment_right * S ((S (fpmp_index_recode_package_alignment)) * sc) + (fpmp_right_recode_package_alignment))) -> (((exists ff_h_fpmp_recode_package_alignment_target. ff_h_fpmp_recode_package_alignment_target + S (fpmp_target_recode_package_alignment) = S ((S (fpmp_index_recode_package_alignment)) * tc)) /\ exists ff_q_fpmp_recode_package_alignment_target. tb = ff_q_fpmp_recode_package_alignment_target * S ((S (fpmp_index_recode_package_alignment)) * tc) + (fpmp_target_recode_package_alignment))) -> fpmp_target_recode_package_alignment = fpmp_left_recode_package_alignment * fpmp_right_recode_package_alignment) /\ ((exists ff_u_recode_package_target_product ff_v_recode_package_target_product. ((((exists ff_h_recode_package_target_product_start. ff_h_recode_package_target_product_start + S (1) = S ((S (0)) * ff_v_recode_package_target_product)) /\ exists ff_q_recode_package_target_product_start. ff_u_recode_package_target_product = ff_q_recode_package_target_product_start * S ((S (0)) * ff_v_recode_package_target_product) + (1))) /\ ((((exists ff_h_recode_package_target_product_terminal. ff_h_recode_package_target_product_terminal + S (T) = S ((S (l)) * ff_v_recode_package_target_product)) /\ exists ff_q_recode_package_target_product_terminal. ff_u_recode_package_target_product = ff_q_recode_package_target_product_terminal * S ((S (l)) * ff_v_recode_package_target_product) + (T))) /\ forall ff_i_recode_package_target_product. (exists ff_lt_recode_package_target_product_bound. ff_lt_recode_package_target_product_bound + S ff_i_recode_package_target_product = l) -> exists ff_p_recode_package_target_product ff_r_recode_package_target_product ff_s_recode_package_target_product. ((((exists ff_h_recode_package_target_product_factor. ff_h_recode_package_target_product_factor + S (ff_p_recode_package_target_product) = S ((S (ff_i_recode_package_target_product)) * tc)) /\ exists ff_q_recode_package_target_product_factor. tb = ff_q_recode_package_target_product_factor * S ((S (ff_i_recode_package_target_product)) * tc) + (ff_p_recode_package_target_product))) /\ ((((exists ff_h_recode_package_target_product_partial. ff_h_recode_package_target_product_partial + S (ff_r_recode_package_target_product) = S ((S (ff_i_recode_package_target_product)) * ff_v_recode_package_target_product)) /\ exists ff_q_recode_package_target_product_partial. ff_u_recode_package_target_product = ff_q_recode_package_target_product_partial * S ((S (ff_i_recode_package_target_product)) * ff_v_recode_package_target_product) + (ff_r_recode_package_target_product))) /\ ((((exists ff_h_recode_package_target_product_successor. ff_h_recode_package_target_product_successor + S (ff_s_recode_package_target_product) = S ((S (S ff_i_recode_package_target_product)) * ff_v_recode_package_target_product)) /\ exists ff_q_recode_package_target_product_successor. ff_u_recode_package_target_product = ff_q_recode_package_target_product_successor * S ((S (S ff_i_recode_package_target_product)) * ff_v_recode_package_target_product) + (ff_s_recode_package_target_product))) /\ ff_s_recode_package_target_product = ff_r_recode_package_target_product * ff_p_recode_package_target_product)))))) /\ T = M * Sprod)))Structural proof guide
Generated structural guide
The pointwise-product code has a Product equal to the product of the two source Products.
Use the direct prerequisites beta_pointwise_mul_prefix_exists, beta_product_exists, beta_product_pointwise_mul_exact as previously established PA formulas.
The proof proceeds by case analysis (3), intermediate claims (3).
Referenced ingredients
Proof neighborhood
Direct dependencies
PA007L beta_pointwise_mul_prefix_exists PA003X beta_product_exists PA007N beta_product_pointwise_mul_exactDirect 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 mb - 0002
intro mc - 0003
intro sb - 0004
intro sc - 0005
intro l - 0006
intro M - 0007
intro Sprod - 0008
intro hM - 0009
intro hS - 0010
have halignment_exists : exists tb tc. (forall fpmp_index_recode_package_alignment_exists fpmp_left_recode_package_alignment_exists fpmp_right_recode_package_alignment_exists fpmp_target_recode_package_alignment_exists. (exists fpmp_gap_recode_package_alignment_exists. fpmp_gap_recode_package_alignment_exists + S fpmp_index_recode_package_alignment_exists = l) -> (((exists ff_h_fpmp_recode_package_alignment_exists_left. ff_h_fpmp_recode_package_alignment_exists_left + S (fpmp_left_recode_package_alignment_exists) = S ((S (fpmp_index_recode_package_alignment_exists)) * mc)) /\ exists ff_q_fpmp_recode_package_alignment_exists_left. mb = ff_q_fpmp_recode_package_alignment_exists_left * S ((S (fpmp_index_recode_package_alignment_exists)) * mc) + (fpmp_left_recode_package_alignment_exists))) -> (((exists ff_h_fpmp_recode_package_alignment_exists_right. ff_h_fpmp_recode_package_alignment_exists_right + S (fpmp_right_recode_package_alignment_exists) = S ((S (fpmp_index_recode_package_alignment_exists)) * sc)) /\ exists ff_q_fpmp_recode_package_alignment_exists_right. sb = ff_q_fpmp_recode_package_alignment_exists_right * S ((S (fpmp_index_recode_package_alignment_exists)) * sc) + (fpmp_right_recode_package_alignment_exists))) -> (((exists ff_h_fpmp_recode_package_alignment_exists_target. ff_h_fpmp_recode_package_alignment_exists_target + S (fpmp_target_recode_package_alignment_exists) = S ((S (fpmp_index_recode_package_alignment_exists)) * tc)) /\ exists ff_q_fpmp_recode_package_alignment_exists_target. tb = ff_q_fpmp_recode_package_alignment_exists_target * S ((S (fpmp_index_recode_package_alignment_exists)) * tc) + (fpmp_target_recode_package_alignment_exists))) -> fpmp_target_recode_package_alignment_exists = fpmp_left_recode_package_alignment_exists * fpmp_right_recode_package_alignment_exists) - 0011
specialize beta_pointwise_mul_prefix_exists mb - 0012
specialize beta_pointwise_mul_prefix_exists mc - 0013
specialize beta_pointwise_mul_prefix_exists sb - 0014
specialize beta_pointwise_mul_prefix_exists sc - 0015
specialize beta_pointwise_mul_prefix_exists l - 0016
exact beta_pointwise_mul_prefix_exists - 0017
cases halignment_exists - 0018
cases halignment_exists_witness - 0019
have htarget_product_exists : exists T. (exists ff_u_recode_package_target_exists ff_v_recode_package_target_exists. ((((exists ff_h_recode_package_target_exists_start. ff_h_recode_package_target_exists_start + S (1) = S ((S (0)) * ff_v_recode_package_target_exists)) /\ exists ff_q_recode_package_target_exists_start. ff_u_recode_package_target_exists = ff_q_recode_package_target_exists_start * S ((S (0)) * ff_v_recode_package_target_exists) + (1))) /\ ((((exists ff_h_recode_package_target_exists_terminal. ff_h_recode_package_target_exists_terminal + S (T) = S ((S (l)) * ff_v_recode_package_target_exists)) /\ exists ff_q_recode_package_target_exists_terminal. ff_u_recode_package_target_exists = ff_q_recode_package_target_exists_terminal * S ((S (l)) * ff_v_recode_package_target_exists) + (T))) /\ forall ff_i_recode_package_target_exists. (exists ff_lt_recode_package_target_exists_bound. ff_lt_recode_package_target_exists_bound + S ff_i_recode_package_target_exists = l) -> exists ff_p_recode_package_target_exists ff_r_recode_package_target_exists ff_s_recode_package_target_exists. ((((exists ff_h_recode_package_target_exists_factor. ff_h_recode_package_target_exists_factor + S (ff_p_recode_package_target_exists) = S ((S (ff_i_recode_package_target_exists)) * x1)) /\ exists ff_q_recode_package_target_exists_factor. x = ff_q_recode_package_target_exists_factor * S ((S (ff_i_recode_package_target_exists)) * x1) + (ff_p_recode_package_target_exists))) /\ ((((exists ff_h_recode_package_target_exists_partial. ff_h_recode_package_target_exists_partial + S (ff_r_recode_package_target_exists) = S ((S (ff_i_recode_package_target_exists)) * ff_v_recode_package_target_exists)) /\ exists ff_q_recode_package_target_exists_partial. ff_u_recode_package_target_exists = ff_q_recode_package_target_exists_partial * S ((S (ff_i_recode_package_target_exists)) * ff_v_recode_package_target_exists) + (ff_r_recode_package_target_exists))) /\ ((((exists ff_h_recode_package_target_exists_successor. ff_h_recode_package_target_exists_successor + S (ff_s_recode_package_target_exists) = S ((S (S ff_i_recode_package_target_exists)) * ff_v_recode_package_target_exists)) /\ exists ff_q_recode_package_target_exists_successor. ff_u_recode_package_target_exists = ff_q_recode_package_target_exists_successor * S ((S (S ff_i_recode_package_target_exists)) * ff_v_recode_package_target_exists) + (ff_s_recode_package_target_exists))) /\ ff_s_recode_package_target_exists = ff_r_recode_package_target_exists * ff_p_recode_package_target_exists)))))) - 0020
specialize beta_product_exists x - 0021
specialize beta_product_exists x1 - 0022
specialize beta_product_exists l - 0023
exact beta_product_exists - 0024
cases htarget_product_exists - 0025
have hequal : x2 = M * Sprod - 0026
specialize beta_product_pointwise_mul_exact mb - 0027
specialize beta_product_pointwise_mul_exact mc - 0028
specialize beta_product_pointwise_mul_exact sb - 0029
specialize beta_product_pointwise_mul_exact sc - 0030
specialize beta_product_pointwise_mul_exact x - 0031
specialize beta_product_pointwise_mul_exact x1 - 0032
specialize beta_product_pointwise_mul_exact l - 0033
specialize beta_product_pointwise_mul_exact M - 0034
specialize beta_product_pointwise_mul_exact Sprod - 0035
specialize beta_product_pointwise_mul_exact x2 - 0036
apply beta_product_pointwise_mul_exact - 0037
exact halignment_exists_witness_witness - 0038
exact hM - 0039
exact hS - 0040
exact htarget_product_exists_witness - 0041
exists x - 0042
exists x1 - 0043
exists x2 - 0044
split - 0045
exact halignment_exists_witness_witness - 0046
split - 0047
exact htarget_product_exists_witness - 0048
exact hequal