BT00SM

pow_mul_exp_from_total

Alpha body-checked ยท checked-use disabled

Iterated powers multiply exponents using a supplied totality proof.

Exact expanded PA statement

forall a e f p x y z. (forall bpt_a_mul_exp bpt_e_mul_exp. exists bpt_x_mul_exp. (exists ff_b_bpt_value_mul_exp ff_c_bpt_value_mul_exp. ((forall ff_i_bpt_value_mul_exp_repeat. (exists ff_lt_bpt_value_mul_exp_repeat_bound. ff_lt_bpt_value_mul_exp_repeat_bound + S ff_i_bpt_value_mul_exp_repeat = bpt_e_mul_exp) -> (((exists ff_h_bpt_value_mul_exp_repeat_decoded. ff_h_bpt_value_mul_exp_repeat_decoded + S (bpt_a_mul_exp) = S ((S (ff_i_bpt_value_mul_exp_repeat)) * ff_c_bpt_value_mul_exp)) /\ exists ff_q_bpt_value_mul_exp_repeat_decoded. ff_b_bpt_value_mul_exp = ff_q_bpt_value_mul_exp_repeat_decoded * S ((S (ff_i_bpt_value_mul_exp_repeat)) * ff_c_bpt_value_mul_exp) + (bpt_a_mul_exp)))) /\ (exists ff_u_bpt_value_mul_exp_product ff_v_bpt_value_mul_exp_product. ((((exists ff_h_bpt_value_mul_exp_product_start. ff_h_bpt_value_mul_exp_product_start + S (1) = S ((S (0)) * ff_v_bpt_value_mul_exp_product)) /\ exists ff_q_bpt_value_mul_exp_product_start. ff_u_bpt_value_mul_exp_product = ff_q_bpt_value_mul_exp_product_start * S ((S (0)) * ff_v_bpt_value_mul_exp_product) + (1))) /\ ((((exists ff_h_bpt_value_mul_exp_product_terminal. ff_h_bpt_value_mul_exp_product_terminal + S (bpt_x_mul_exp) = S ((S (bpt_e_mul_exp)) * ff_v_bpt_value_mul_exp_product)) /\ exists ff_q_bpt_value_mul_exp_product_terminal. ff_u_bpt_value_mul_exp_product = ff_q_bpt_value_mul_exp_product_terminal * S ((S (bpt_e_mul_exp)) * ff_v_bpt_value_mul_exp_product) + (bpt_x_mul_exp))) /\ forall ff_i_bpt_value_mul_exp_product. (exists ff_lt_bpt_value_mul_exp_product_bound. ff_lt_bpt_value_mul_exp_product_bound + S ff_i_bpt_value_mul_exp_product = bpt_e_mul_exp) -> exists ff_p_bpt_value_mul_exp_product ff_r_bpt_value_mul_exp_product ff_s_bpt_value_mul_exp_product. ((((exists ff_h_bpt_value_mul_exp_product_factor. ff_h_bpt_value_mul_exp_product_factor + S (ff_p_bpt_value_mul_exp_product) = S ((S (ff_i_bpt_value_mul_exp_product)) * ff_c_bpt_value_mul_exp)) /\ exists ff_q_bpt_value_mul_exp_product_factor. ff_b_bpt_value_mul_exp = ff_q_bpt_value_mul_exp_product_factor * S ((S (ff_i_bpt_value_mul_exp_product)) * ff_c_bpt_value_mul_exp) + (ff_p_bpt_value_mul_exp_product))) /\ ((((exists ff_h_bpt_value_mul_exp_product_partial. ff_h_bpt_value_mul_exp_product_partial + S (ff_r_bpt_value_mul_exp_product) = S ((S (ff_i_bpt_value_mul_exp_product)) * ff_v_bpt_value_mul_exp_product)) /\ exists ff_q_bpt_value_mul_exp_product_partial. ff_u_bpt_value_mul_exp_product = ff_q_bpt_value_mul_exp_product_partial * S ((S (ff_i_bpt_value_mul_exp_product)) * ff_v_bpt_value_mul_exp_product) + (ff_r_bpt_value_mul_exp_product))) /\ ((((exists ff_h_bpt_value_mul_exp_product_successor. ff_h_bpt_value_mul_exp_product_successor + S (ff_s_bpt_value_mul_exp_product) = S ((S (S ff_i_bpt_value_mul_exp_product)) * ff_v_bpt_value_mul_exp_product)) /\ exists ff_q_bpt_value_mul_exp_product_successor. ff_u_bpt_value_mul_exp_product = ff_q_bpt_value_mul_exp_product_successor * S ((S (S ff_i_bpt_value_mul_exp_product)) * ff_v_bpt_value_mul_exp_product) + (ff_s_bpt_value_mul_exp_product))) /\ ff_s_bpt_value_mul_exp_product = ff_r_bpt_value_mul_exp_product * ff_p_bpt_value_mul_exp_product))))))))) -> p = e * f -> (exists ff_b_bpt_mul_base ff_c_bpt_mul_base. ((forall ff_i_bpt_mul_base_repeat. (exists ff_lt_bpt_mul_base_repeat_bound. ff_lt_bpt_mul_base_repeat_bound + S ff_i_bpt_mul_base_repeat = e) -> (((exists ff_h_bpt_mul_base_repeat_decoded. ff_h_bpt_mul_base_repeat_decoded + S (a) = S ((S (ff_i_bpt_mul_base_repeat)) * ff_c_bpt_mul_base)) /\ exists ff_q_bpt_mul_base_repeat_decoded. ff_b_bpt_mul_base = ff_q_bpt_mul_base_repeat_decoded * S ((S (ff_i_bpt_mul_base_repeat)) * ff_c_bpt_mul_base) + (a)))) /\ (exists ff_u_bpt_mul_base_product ff_v_bpt_mul_base_product. ((((exists ff_h_bpt_mul_base_product_start. ff_h_bpt_mul_base_product_start + S (1) = S ((S (0)) * ff_v_bpt_mul_base_product)) /\ exists ff_q_bpt_mul_base_product_start. ff_u_bpt_mul_base_product = ff_q_bpt_mul_base_product_start * S ((S (0)) * ff_v_bpt_mul_base_product) + (1))) /\ ((((exists ff_h_bpt_mul_base_product_terminal. ff_h_bpt_mul_base_product_terminal + S (x) = S ((S (e)) * ff_v_bpt_mul_base_product)) /\ exists ff_q_bpt_mul_base_product_terminal. ff_u_bpt_mul_base_product = ff_q_bpt_mul_base_product_terminal * S ((S (e)) * ff_v_bpt_mul_base_product) + (x))) /\ forall ff_i_bpt_mul_base_product. (exists ff_lt_bpt_mul_base_product_bound. ff_lt_bpt_mul_base_product_bound + S ff_i_bpt_mul_base_product = e) -> exists ff_p_bpt_mul_base_product ff_r_bpt_mul_base_product ff_s_bpt_mul_base_product. ((((exists ff_h_bpt_mul_base_product_factor. ff_h_bpt_mul_base_product_factor + S (ff_p_bpt_mul_base_product) = S ((S (ff_i_bpt_mul_base_product)) * ff_c_bpt_mul_base)) /\ exists ff_q_bpt_mul_base_product_factor. ff_b_bpt_mul_base = ff_q_bpt_mul_base_product_factor * S ((S (ff_i_bpt_mul_base_product)) * ff_c_bpt_mul_base) + (ff_p_bpt_mul_base_product))) /\ ((((exists ff_h_bpt_mul_base_product_partial. ff_h_bpt_mul_base_product_partial + S (ff_r_bpt_mul_base_product) = S ((S (ff_i_bpt_mul_base_product)) * ff_v_bpt_mul_base_product)) /\ exists ff_q_bpt_mul_base_product_partial. ff_u_bpt_mul_base_product = ff_q_bpt_mul_base_product_partial * S ((S (ff_i_bpt_mul_base_product)) * ff_v_bpt_mul_base_product) + (ff_r_bpt_mul_base_product))) /\ ((((exists ff_h_bpt_mul_base_product_successor. ff_h_bpt_mul_base_product_successor + S (ff_s_bpt_mul_base_product) = S ((S (S ff_i_bpt_mul_base_product)) * ff_v_bpt_mul_base_product)) /\ exists ff_q_bpt_mul_base_product_successor. ff_u_bpt_mul_base_product = ff_q_bpt_mul_base_product_successor * S ((S (S ff_i_bpt_mul_base_product)) * ff_v_bpt_mul_base_product) + (ff_s_bpt_mul_base_product))) /\ ff_s_bpt_mul_base_product = ff_r_bpt_mul_base_product * ff_p_bpt_mul_base_product)))))))) -> (exists ff_b_bpt_mul_outer ff_c_bpt_mul_outer. ((forall ff_i_bpt_mul_outer_repeat. (exists ff_lt_bpt_mul_outer_repeat_bound. ff_lt_bpt_mul_outer_repeat_bound + S ff_i_bpt_mul_outer_repeat = f) -> (((exists ff_h_bpt_mul_outer_repeat_decoded. ff_h_bpt_mul_outer_repeat_decoded + S (x) = S ((S (ff_i_bpt_mul_outer_repeat)) * ff_c_bpt_mul_outer)) /\ exists ff_q_bpt_mul_outer_repeat_decoded. ff_b_bpt_mul_outer = ff_q_bpt_mul_outer_repeat_decoded * S ((S (ff_i_bpt_mul_outer_repeat)) * ff_c_bpt_mul_outer) + (x)))) /\ (exists ff_u_bpt_mul_outer_product ff_v_bpt_mul_outer_product. ((((exists ff_h_bpt_mul_outer_product_start. ff_h_bpt_mul_outer_product_start + S (1) = S ((S (0)) * ff_v_bpt_mul_outer_product)) /\ exists ff_q_bpt_mul_outer_product_start. ff_u_bpt_mul_outer_product = ff_q_bpt_mul_outer_product_start * S ((S (0)) * ff_v_bpt_mul_outer_product) + (1))) /\ ((((exists ff_h_bpt_mul_outer_product_terminal. ff_h_bpt_mul_outer_product_terminal + S (y) = S ((S (f)) * ff_v_bpt_mul_outer_product)) /\ exists ff_q_bpt_mul_outer_product_terminal. ff_u_bpt_mul_outer_product = ff_q_bpt_mul_outer_product_terminal * S ((S (f)) * ff_v_bpt_mul_outer_product) + (y))) /\ forall ff_i_bpt_mul_outer_product. (exists ff_lt_bpt_mul_outer_product_bound. ff_lt_bpt_mul_outer_product_bound + S ff_i_bpt_mul_outer_product = f) -> exists ff_p_bpt_mul_outer_product ff_r_bpt_mul_outer_product ff_s_bpt_mul_outer_product. ((((exists ff_h_bpt_mul_outer_product_factor. ff_h_bpt_mul_outer_product_factor + S (ff_p_bpt_mul_outer_product) = S ((S (ff_i_bpt_mul_outer_product)) * ff_c_bpt_mul_outer)) /\ exists ff_q_bpt_mul_outer_product_factor. ff_b_bpt_mul_outer = ff_q_bpt_mul_outer_product_factor * S ((S (ff_i_bpt_mul_outer_product)) * ff_c_bpt_mul_outer) + (ff_p_bpt_mul_outer_product))) /\ ((((exists ff_h_bpt_mul_outer_product_partial. ff_h_bpt_mul_outer_product_partial + S (ff_r_bpt_mul_outer_product) = S ((S (ff_i_bpt_mul_outer_product)) * ff_v_bpt_mul_outer_product)) /\ exists ff_q_bpt_mul_outer_product_partial. ff_u_bpt_mul_outer_product = ff_q_bpt_mul_outer_product_partial * S ((S (ff_i_bpt_mul_outer_product)) * ff_v_bpt_mul_outer_product) + (ff_r_bpt_mul_outer_product))) /\ ((((exists ff_h_bpt_mul_outer_product_successor. ff_h_bpt_mul_outer_product_successor + S (ff_s_bpt_mul_outer_product) = S ((S (S ff_i_bpt_mul_outer_product)) * ff_v_bpt_mul_outer_product)) /\ exists ff_q_bpt_mul_outer_product_successor. ff_u_bpt_mul_outer_product = ff_q_bpt_mul_outer_product_successor * S ((S (S ff_i_bpt_mul_outer_product)) * ff_v_bpt_mul_outer_product) + (ff_s_bpt_mul_outer_product))) /\ ff_s_bpt_mul_outer_product = ff_r_bpt_mul_outer_product * ff_p_bpt_mul_outer_product)))))))) -> (exists ff_b_bpt_mul_total ff_c_bpt_mul_total. ((forall ff_i_bpt_mul_total_repeat. (exists ff_lt_bpt_mul_total_repeat_bound. ff_lt_bpt_mul_total_repeat_bound + S ff_i_bpt_mul_total_repeat = p) -> (((exists ff_h_bpt_mul_total_repeat_decoded. ff_h_bpt_mul_total_repeat_decoded + S (a) = S ((S (ff_i_bpt_mul_total_repeat)) * ff_c_bpt_mul_total)) /\ exists ff_q_bpt_mul_total_repeat_decoded. ff_b_bpt_mul_total = ff_q_bpt_mul_total_repeat_decoded * S ((S (ff_i_bpt_mul_total_repeat)) * ff_c_bpt_mul_total) + (a)))) /\ (exists ff_u_bpt_mul_total_product ff_v_bpt_mul_total_product. ((((exists ff_h_bpt_mul_total_product_start. ff_h_bpt_mul_total_product_start + S (1) = S ((S (0)) * ff_v_bpt_mul_total_product)) /\ exists ff_q_bpt_mul_total_product_start. ff_u_bpt_mul_total_product = ff_q_bpt_mul_total_product_start * S ((S (0)) * ff_v_bpt_mul_total_product) + (1))) /\ ((((exists ff_h_bpt_mul_total_product_terminal. ff_h_bpt_mul_total_product_terminal + S (z) = S ((S (p)) * ff_v_bpt_mul_total_product)) /\ exists ff_q_bpt_mul_total_product_terminal. ff_u_bpt_mul_total_product = ff_q_bpt_mul_total_product_terminal * S ((S (p)) * ff_v_bpt_mul_total_product) + (z))) /\ forall ff_i_bpt_mul_total_product. (exists ff_lt_bpt_mul_total_product_bound. ff_lt_bpt_mul_total_product_bound + S ff_i_bpt_mul_total_product = p) -> exists ff_p_bpt_mul_total_product ff_r_bpt_mul_total_product ff_s_bpt_mul_total_product. ((((exists ff_h_bpt_mul_total_product_factor. ff_h_bpt_mul_total_product_factor + S (ff_p_bpt_mul_total_product) = S ((S (ff_i_bpt_mul_total_product)) * ff_c_bpt_mul_total)) /\ exists ff_q_bpt_mul_total_product_factor. ff_b_bpt_mul_total = ff_q_bpt_mul_total_product_factor * S ((S (ff_i_bpt_mul_total_product)) * ff_c_bpt_mul_total) + (ff_p_bpt_mul_total_product))) /\ ((((exists ff_h_bpt_mul_total_product_partial. ff_h_bpt_mul_total_product_partial + S (ff_r_bpt_mul_total_product) = S ((S (ff_i_bpt_mul_total_product)) * ff_v_bpt_mul_total_product)) /\ exists ff_q_bpt_mul_total_product_partial. ff_u_bpt_mul_total_product = ff_q_bpt_mul_total_product_partial * S ((S (ff_i_bpt_mul_total_product)) * ff_v_bpt_mul_total_product) + (ff_r_bpt_mul_total_product))) /\ ((((exists ff_h_bpt_mul_total_product_successor. ff_h_bpt_mul_total_product_successor + S (ff_s_bpt_mul_total_product) = S ((S (S ff_i_bpt_mul_total_product)) * ff_v_bpt_mul_total_product)) /\ exists ff_q_bpt_mul_total_product_successor. ff_u_bpt_mul_total_product = ff_q_bpt_mul_total_product_successor * S ((S (S ff_i_bpt_mul_total_product)) * ff_v_bpt_mul_total_product) + (ff_s_bpt_mul_total_product))) /\ ff_s_bpt_mul_total_product = ff_r_bpt_mul_total_product * ff_p_bpt_mul_total_product)))))))) -> y = z

Structural proof guide

Iterated powers multiply exponents using a supplied totality proof.

Direct prerequisites: pow_zero, pow_successor_decompose, pow_add. The authored body proceeds by structural induction (1), case analysis (3), intermediate claims (7), equality transport (5).

Proof neighborhood

Direct dependencies

Direct dependents

Formal native tactic body

Dependencies are hypotheses of this body receipt. The focused endpoint audits separately check the complete empty-context certificates.

  1. 0001intro a
  2. 0002intro e
  3. 0003induction f
  4. 0004intro p
  5. 0005intro x
  6. 0006intro y
  7. 0007intro z
  8. 0008intro htotal
  9. 0009intro hp
  10. 0010intro hx
  11. 0011intro hy
  12. 0012intro hz
  13. 0013rewrite PA5 at hp
  14. 0014rewrite hp at hz
  15. 0015rewrite hp at hz
  16. 0016rewrite hp at hz
  17. 0017rewrite hp at hz
  18. 0018have hy1 : y = 1
  19. 0019specialize pow_zero x
  20. 0020specialize pow_zero 0
  21. 0021specialize pow_zero y
  22. 0022apply pow_zero
  23. 0023refl
  24. 0024exact hy
  25. 0025have hz1 : z = 1
  26. 0026specialize pow_zero a
  27. 0027specialize pow_zero 0
  28. 0028specialize pow_zero z
  29. 0029apply pow_zero
  30. 0030refl
  31. 0031exact hz
  32. 0032trans 1
  33. 0033exact hy1
  34. 0034symm
  35. 0035exact hz1
  36. 0036intro p
  37. 0037intro x
  38. 0038intro y
  39. 0039intro z
  40. 0040intro htotal
  41. 0041intro hp
  42. 0042intro hx
  43. 0043intro hy
  44. 0044intro hz
  45. 0045have hy_step : exists r. (exists ff_b_bpt_mul_y_prefix ff_c_bpt_mul_y_prefix. ((forall ff_i_bpt_mul_y_prefix_repeat. (exists ff_lt_bpt_mul_y_prefix_repeat_bound. ff_lt_bpt_mul_y_prefix_repeat_bound + S ff_i_bpt_mul_y_prefix_repeat = f) -> (((exists ff_h_bpt_mul_y_prefix_repeat_decoded. ff_h_bpt_mul_y_prefix_repeat_decoded + S (x) = S ((S (ff_i_bpt_mul_y_prefix_repeat)) * ff_c_bpt_mul_y_prefix)) /\ exists ff_q_bpt_mul_y_prefix_repeat_decoded. ff_b_bpt_mul_y_prefix = ff_q_bpt_mul_y_prefix_repeat_decoded * S ((S (ff_i_bpt_mul_y_prefix_repeat)) * ff_c_bpt_mul_y_prefix) + (x)))) /\ (exists ff_u_bpt_mul_y_prefix_product ff_v_bpt_mul_y_prefix_product. ((((exists ff_h_bpt_mul_y_prefix_product_start. ff_h_bpt_mul_y_prefix_product_start + S (1) = S ((S (0)) * ff_v_bpt_mul_y_prefix_product)) /\ exists ff_q_bpt_mul_y_prefix_product_start. ff_u_bpt_mul_y_prefix_product = ff_q_bpt_mul_y_prefix_product_start * S ((S (0)) * ff_v_bpt_mul_y_prefix_product) + (1))) /\ ((((exists ff_h_bpt_mul_y_prefix_product_terminal. ff_h_bpt_mul_y_prefix_product_terminal + S (r) = S ((S (f)) * ff_v_bpt_mul_y_prefix_product)) /\ exists ff_q_bpt_mul_y_prefix_product_terminal. ff_u_bpt_mul_y_prefix_product = ff_q_bpt_mul_y_prefix_product_terminal * S ((S (f)) * ff_v_bpt_mul_y_prefix_product) + (r))) /\ forall ff_i_bpt_mul_y_prefix_product. (exists ff_lt_bpt_mul_y_prefix_product_bound. ff_lt_bpt_mul_y_prefix_product_bound + S ff_i_bpt_mul_y_prefix_product = f) -> exists ff_p_bpt_mul_y_prefix_product ff_r_bpt_mul_y_prefix_product ff_s_bpt_mul_y_prefix_product. ((((exists ff_h_bpt_mul_y_prefix_product_factor. ff_h_bpt_mul_y_prefix_product_factor + S (ff_p_bpt_mul_y_prefix_product) = S ((S (ff_i_bpt_mul_y_prefix_product)) * ff_c_bpt_mul_y_prefix)) /\ exists ff_q_bpt_mul_y_prefix_product_factor. ff_b_bpt_mul_y_prefix = ff_q_bpt_mul_y_prefix_product_factor * S ((S (ff_i_bpt_mul_y_prefix_product)) * ff_c_bpt_mul_y_prefix) + (ff_p_bpt_mul_y_prefix_product))) /\ ((((exists ff_h_bpt_mul_y_prefix_product_partial. ff_h_bpt_mul_y_prefix_product_partial + S (ff_r_bpt_mul_y_prefix_product) = S ((S (ff_i_bpt_mul_y_prefix_product)) * ff_v_bpt_mul_y_prefix_product)) /\ exists ff_q_bpt_mul_y_prefix_product_partial. ff_u_bpt_mul_y_prefix_product = ff_q_bpt_mul_y_prefix_product_partial * S ((S (ff_i_bpt_mul_y_prefix_product)) * ff_v_bpt_mul_y_prefix_product) + (ff_r_bpt_mul_y_prefix_product))) /\ ((((exists ff_h_bpt_mul_y_prefix_product_successor. ff_h_bpt_mul_y_prefix_product_successor + S (ff_s_bpt_mul_y_prefix_product) = S ((S (S ff_i_bpt_mul_y_prefix_product)) * ff_v_bpt_mul_y_prefix_product)) /\ exists ff_q_bpt_mul_y_prefix_product_successor. ff_u_bpt_mul_y_prefix_product = ff_q_bpt_mul_y_prefix_product_successor * S ((S (S ff_i_bpt_mul_y_prefix_product)) * ff_v_bpt_mul_y_prefix_product) + (ff_s_bpt_mul_y_prefix_product))) /\ ff_s_bpt_mul_y_prefix_product = ff_r_bpt_mul_y_prefix_product * ff_p_bpt_mul_y_prefix_product)))))))) /\ y = r * x
  46. 0046specialize pow_successor_decompose x
  47. 0047specialize pow_successor_decompose f
  48. 0048specialize pow_successor_decompose (S f)
  49. 0049specialize pow_successor_decompose y
  50. 0050apply pow_successor_decompose
  51. 0051refl
  52. 0052exact hy
  53. 0053cases hy_step
  54. 0054cases hy_step_witness
  55. 0055have hqpow : exists r. (exists pa_b_bpt_mul_total_prefix pa_c_bpt_mul_total_prefix. ((forall pa_i_bpt_mul_total_prefix_repeat. (exists pa_lt_bpt_mul_total_prefix_repeat_bound. pa_lt_bpt_mul_total_prefix_repeat_bound + S pa_i_bpt_mul_total_prefix_repeat = e * f) -> (((exists pa_h_bpt_mul_total_prefix_repeat_decoded. pa_h_bpt_mul_total_prefix_repeat_decoded + S (a) = S ((S (pa_i_bpt_mul_total_prefix_repeat)) * pa_c_bpt_mul_total_prefix)) /\ exists pa_q_bpt_mul_total_prefix_repeat_decoded. pa_b_bpt_mul_total_prefix = pa_q_bpt_mul_total_prefix_repeat_decoded * S ((S (pa_i_bpt_mul_total_prefix_repeat)) * pa_c_bpt_mul_total_prefix) + (a)))) /\ (exists pa_u_bpt_mul_total_prefix_product pa_v_bpt_mul_total_prefix_product. ((((exists pa_h_bpt_mul_total_prefix_product_start. pa_h_bpt_mul_total_prefix_product_start + S (1) = S ((S (0)) * pa_v_bpt_mul_total_prefix_product)) /\ exists pa_q_bpt_mul_total_prefix_product_start. pa_u_bpt_mul_total_prefix_product = pa_q_bpt_mul_total_prefix_product_start * S ((S (0)) * pa_v_bpt_mul_total_prefix_product) + (1))) /\ ((((exists pa_h_bpt_mul_total_prefix_product_terminal. pa_h_bpt_mul_total_prefix_product_terminal + S (r) = S ((S (e * f)) * pa_v_bpt_mul_total_prefix_product)) /\ exists pa_q_bpt_mul_total_prefix_product_terminal. pa_u_bpt_mul_total_prefix_product = pa_q_bpt_mul_total_prefix_product_terminal * S ((S (e * f)) * pa_v_bpt_mul_total_prefix_product) + (r))) /\ forall pa_i_bpt_mul_total_prefix_product. (exists pa_lt_bpt_mul_total_prefix_product_bound. pa_lt_bpt_mul_total_prefix_product_bound + S pa_i_bpt_mul_total_prefix_product = e * f) -> exists pa_p_bpt_mul_total_prefix_product pa_r_bpt_mul_total_prefix_product pa_s_bpt_mul_total_prefix_product. ((((exists pa_h_bpt_mul_total_prefix_product_factor. pa_h_bpt_mul_total_prefix_product_factor + S (pa_p_bpt_mul_total_prefix_product) = S ((S (pa_i_bpt_mul_total_prefix_product)) * pa_c_bpt_mul_total_prefix)) /\ exists pa_q_bpt_mul_total_prefix_product_factor. pa_b_bpt_mul_total_prefix = pa_q_bpt_mul_total_prefix_product_factor * S ((S (pa_i_bpt_mul_total_prefix_product)) * pa_c_bpt_mul_total_prefix) + (pa_p_bpt_mul_total_prefix_product))) /\ ((((exists pa_h_bpt_mul_total_prefix_product_partial. pa_h_bpt_mul_total_prefix_product_partial + S (pa_r_bpt_mul_total_prefix_product) = S ((S (pa_i_bpt_mul_total_prefix_product)) * pa_v_bpt_mul_total_prefix_product)) /\ exists pa_q_bpt_mul_total_prefix_product_partial. pa_u_bpt_mul_total_prefix_product = pa_q_bpt_mul_total_prefix_product_partial * S ((S (pa_i_bpt_mul_total_prefix_product)) * pa_v_bpt_mul_total_prefix_product) + (pa_r_bpt_mul_total_prefix_product))) /\ ((((exists pa_h_bpt_mul_total_prefix_product_successor. pa_h_bpt_mul_total_prefix_product_successor + S (pa_s_bpt_mul_total_prefix_product) = S ((S (S pa_i_bpt_mul_total_prefix_product)) * pa_v_bpt_mul_total_prefix_product)) /\ exists pa_q_bpt_mul_total_prefix_product_successor. pa_u_bpt_mul_total_prefix_product = pa_q_bpt_mul_total_prefix_product_successor * S ((S (S pa_i_bpt_mul_total_prefix_product)) * pa_v_bpt_mul_total_prefix_product) + (pa_s_bpt_mul_total_prefix_product))) /\ pa_s_bpt_mul_total_prefix_product = pa_r_bpt_mul_total_prefix_product * pa_p_bpt_mul_total_prefix_product))))))))
  56. 0056specialize htotal a
  57. 0057specialize htotal (e * f)
  58. 0058exact htotal
  59. 0059cases hqpow
  60. 0060have hprefix : x1 = x2
  61. 0061specialize IH (e * f)
  62. 0062specialize IH x
  63. 0063specialize IH x1
  64. 0064specialize IH x2
  65. 0065apply IH
  66. 0066exact htotal
  67. 0067refl
  68. 0068exact hx
  69. 0069exact hy_step_witness_left
  70. 0070exact hqpow_witness
  71. 0071have hpsum : p = (e * f) + e
  72. 0072trans e * S f
  73. 0073exact hp
  74. 0074apply PA6
  75. 0075have hproduct : z = x2 * x
  76. 0076specialize pow_add a
  77. 0077specialize pow_add (e * f)
  78. 0078specialize pow_add e
  79. 0079specialize pow_add p
  80. 0080specialize pow_add x2
  81. 0081specialize pow_add x
  82. 0082specialize pow_add z
  83. 0083apply pow_add
  84. 0084exact hpsum
  85. 0085exact hqpow_witness
  86. 0086exact hx
  87. 0087exact hz
  88. 0088trans x1 * x
  89. 0089exact hy_step_witness_right
  90. 0090trans x2 * x
  91. 0091congr
  92. 0092exact hprefix
  93. 0093refl
  94. 0094symm
  95. 0095exact hproduct