PA007O

beta_pointwise_mul_product_exists

Alpha v16 checked-use theorem · independently closed; not Stable

The pointwise-product code has a Product equal to the product of the two source Products.

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

Direct 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.

  1. 0001intro mb
  2. 0002intro mc
  3. 0003intro sb
  4. 0004intro sc
  5. 0005intro l
  6. 0006intro M
  7. 0007intro Sprod
  8. 0008intro hM
  9. 0009intro hS
  10. 0010have 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)
  11. 0011specialize beta_pointwise_mul_prefix_exists mb
  12. 0012specialize beta_pointwise_mul_prefix_exists mc
  13. 0013specialize beta_pointwise_mul_prefix_exists sb
  14. 0014specialize beta_pointwise_mul_prefix_exists sc
  15. 0015specialize beta_pointwise_mul_prefix_exists l
  16. 0016exact beta_pointwise_mul_prefix_exists
  17. 0017cases halignment_exists
  18. 0018cases halignment_exists_witness
  19. 0019have 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))))))
  20. 0020specialize beta_product_exists x
  21. 0021specialize beta_product_exists x1
  22. 0022specialize beta_product_exists l
  23. 0023exact beta_product_exists
  24. 0024cases htarget_product_exists
  25. 0025have hequal : x2 = M * Sprod
  26. 0026specialize beta_product_pointwise_mul_exact mb
  27. 0027specialize beta_product_pointwise_mul_exact mc
  28. 0028specialize beta_product_pointwise_mul_exact sb
  29. 0029specialize beta_product_pointwise_mul_exact sc
  30. 0030specialize beta_product_pointwise_mul_exact x
  31. 0031specialize beta_product_pointwise_mul_exact x1
  32. 0032specialize beta_product_pointwise_mul_exact l
  33. 0033specialize beta_product_pointwise_mul_exact M
  34. 0034specialize beta_product_pointwise_mul_exact Sprod
  35. 0035specialize beta_product_pointwise_mul_exact x2
  36. 0036apply beta_product_pointwise_mul_exact
  37. 0037exact halignment_exists_witness_witness
  38. 0038exact hM
  39. 0039exact hS
  40. 0040exact htarget_product_exists_witness
  41. 0041exists x
  42. 0042exists x1
  43. 0043exists x2
  44. 0044split
  45. 0045exact halignment_exists_witness_witness
  46. 0046split
  47. 0047exact htarget_product_exists_witness
  48. 0048exact hequal