Current library: Alpha v34, 4,223 checked-use theorems; Stable remains 432. Historical first admissions, original proof editions, and non-admitted aliases are preserved. Exact original first-admission records.
Exact expanded PA statement
forall mb mc sb sc tb tc l M Sprod T. (forall fpmp_index_product_alignment fpmp_left_product_alignment fpmp_right_product_alignment fpmp_target_product_alignment. (exists fpmp_gap_product_alignment. fpmp_gap_product_alignment + S fpmp_index_product_alignment = l) -> (((exists ff_h_fpmp_product_alignment_left. ff_h_fpmp_product_alignment_left + S (fpmp_left_product_alignment) = S ((S (fpmp_index_product_alignment)) * mc)) /\ exists ff_q_fpmp_product_alignment_left. mb = ff_q_fpmp_product_alignment_left * S ((S (fpmp_index_product_alignment)) * mc) + (fpmp_left_product_alignment))) -> (((exists ff_h_fpmp_product_alignment_right. ff_h_fpmp_product_alignment_right + S (fpmp_right_product_alignment) = S ((S (fpmp_index_product_alignment)) * sc)) /\ exists ff_q_fpmp_product_alignment_right. sb = ff_q_fpmp_product_alignment_right * S ((S (fpmp_index_product_alignment)) * sc) + (fpmp_right_product_alignment))) -> (((exists ff_h_fpmp_product_alignment_target. ff_h_fpmp_product_alignment_target + S (fpmp_target_product_alignment) = S ((S (fpmp_index_product_alignment)) * tc)) /\ exists ff_q_fpmp_product_alignment_target. tb = ff_q_fpmp_product_alignment_target * S ((S (fpmp_index_product_alignment)) * tc) + (fpmp_target_product_alignment))) -> fpmp_target_product_alignment = fpmp_left_product_alignment * fpmp_right_product_alignment) -> (exists ff_u_product_left ff_v_product_left. ((((exists ff_h_product_left_start. ff_h_product_left_start + S (1) = S ((S (0)) * ff_v_product_left)) /\ exists ff_q_product_left_start. ff_u_product_left = ff_q_product_left_start * S ((S (0)) * ff_v_product_left) + (1))) /\ ((((exists ff_h_product_left_terminal. ff_h_product_left_terminal + S (M) = S ((S (l)) * ff_v_product_left)) /\ exists ff_q_product_left_terminal. ff_u_product_left = ff_q_product_left_terminal * S ((S (l)) * ff_v_product_left) + (M))) /\ forall ff_i_product_left. (exists ff_lt_product_left_bound. ff_lt_product_left_bound + S ff_i_product_left = l) -> exists ff_p_product_left ff_r_product_left ff_s_product_left. ((((exists ff_h_product_left_factor. ff_h_product_left_factor + S (ff_p_product_left) = S ((S (ff_i_product_left)) * mc)) /\ exists ff_q_product_left_factor. mb = ff_q_product_left_factor * S ((S (ff_i_product_left)) * mc) + (ff_p_product_left))) /\ ((((exists ff_h_product_left_partial. ff_h_product_left_partial + S (ff_r_product_left) = S ((S (ff_i_product_left)) * ff_v_product_left)) /\ exists ff_q_product_left_partial. ff_u_product_left = ff_q_product_left_partial * S ((S (ff_i_product_left)) * ff_v_product_left) + (ff_r_product_left))) /\ ((((exists ff_h_product_left_successor. ff_h_product_left_successor + S (ff_s_product_left) = S ((S (S ff_i_product_left)) * ff_v_product_left)) /\ exists ff_q_product_left_successor. ff_u_product_left = ff_q_product_left_successor * S ((S (S ff_i_product_left)) * ff_v_product_left) + (ff_s_product_left))) /\ ff_s_product_left = ff_r_product_left * ff_p_product_left)))))) -> (exists ff_u_product_right ff_v_product_right. ((((exists ff_h_product_right_start. ff_h_product_right_start + S (1) = S ((S (0)) * ff_v_product_right)) /\ exists ff_q_product_right_start. ff_u_product_right = ff_q_product_right_start * S ((S (0)) * ff_v_product_right) + (1))) /\ ((((exists ff_h_product_right_terminal. ff_h_product_right_terminal + S (Sprod) = S ((S (l)) * ff_v_product_right)) /\ exists ff_q_product_right_terminal. ff_u_product_right = ff_q_product_right_terminal * S ((S (l)) * ff_v_product_right) + (Sprod))) /\ forall ff_i_product_right. (exists ff_lt_product_right_bound. ff_lt_product_right_bound + S ff_i_product_right = l) -> exists ff_p_product_right ff_r_product_right ff_s_product_right. ((((exists ff_h_product_right_factor. ff_h_product_right_factor + S (ff_p_product_right) = S ((S (ff_i_product_right)) * sc)) /\ exists ff_q_product_right_factor. sb = ff_q_product_right_factor * S ((S (ff_i_product_right)) * sc) + (ff_p_product_right))) /\ ((((exists ff_h_product_right_partial. ff_h_product_right_partial + S (ff_r_product_right) = S ((S (ff_i_product_right)) * ff_v_product_right)) /\ exists ff_q_product_right_partial. ff_u_product_right = ff_q_product_right_partial * S ((S (ff_i_product_right)) * ff_v_product_right) + (ff_r_product_right))) /\ ((((exists ff_h_product_right_successor. ff_h_product_right_successor + S (ff_s_product_right) = S ((S (S ff_i_product_right)) * ff_v_product_right)) /\ exists ff_q_product_right_successor. ff_u_product_right = ff_q_product_right_successor * S ((S (S ff_i_product_right)) * ff_v_product_right) + (ff_s_product_right))) /\ ff_s_product_right = ff_r_product_right * ff_p_product_right)))))) -> (exists ff_u_product_target ff_v_product_target. ((((exists ff_h_product_target_start. ff_h_product_target_start + S (1) = S ((S (0)) * ff_v_product_target)) /\ exists ff_q_product_target_start. ff_u_product_target = ff_q_product_target_start * S ((S (0)) * ff_v_product_target) + (1))) /\ ((((exists ff_h_product_target_terminal. ff_h_product_target_terminal + S (T) = S ((S (l)) * ff_v_product_target)) /\ exists ff_q_product_target_terminal. ff_u_product_target = ff_q_product_target_terminal * S ((S (l)) * ff_v_product_target) + (T))) /\ forall ff_i_product_target. (exists ff_lt_product_target_bound. ff_lt_product_target_bound + S ff_i_product_target = l) -> exists ff_p_product_target ff_r_product_target ff_s_product_target. ((((exists ff_h_product_target_factor. ff_h_product_target_factor + S (ff_p_product_target) = S ((S (ff_i_product_target)) * tc)) /\ exists ff_q_product_target_factor. tb = ff_q_product_target_factor * S ((S (ff_i_product_target)) * tc) + (ff_p_product_target))) /\ ((((exists ff_h_product_target_partial. ff_h_product_target_partial + S (ff_r_product_target) = S ((S (ff_i_product_target)) * ff_v_product_target)) /\ exists ff_q_product_target_partial. ff_u_product_target = ff_q_product_target_partial * S ((S (ff_i_product_target)) * ff_v_product_target) + (ff_r_product_target))) /\ ((((exists ff_h_product_target_successor. ff_h_product_target_successor + S (ff_s_product_target) = S ((S (S ff_i_product_target)) * ff_v_product_target)) /\ exists ff_q_product_target_successor. ff_u_product_target = ff_q_product_target_successor * S ((S (S ff_i_product_target)) * ff_v_product_target) + (ff_s_product_target))) /\ ff_s_product_target = ff_r_product_target * ff_p_product_target)))))) -> T = M * SprodStructural proof guide
Generated structural guide
Pointwise products of synchronized beta prefixes multiply their exact finite products.
Use the direct prerequisites beta_product_zero, beta_product_succ_decompose, beta_pointwise_mul_prefix_drop_last, le_refl, one_mul, mul_assoc, mul_comm as previously established PA formulas.
The proof proceeds by structural induction (1), case analysis (12), intermediate claims (10), equality transport (8), certified simplification (1).
Referenced ingredients
Proof neighborhood
Direct dependencies
PA0049 beta_product_zero PA004A beta_product_succ_decompose PA007M beta_pointwise_mul_prefix_drop_last PA001A le_refl PA000M one_mul PA000B mul_assoc PA000H mul_commDirect dependents
Formal native tactic body
Dependencies are introduced as named hypotheses before line 1. Linked names are exact direct references. This Alpha-v25 checked-use theorem is independently kernel-checked when replayed; it is not a Stable theorem.
Read the argument
Proof checkpoints
This is a reading aid, not a new proof or a proof-tree certificate. Checkpoint groups are consecutive commands, not inferred branch boundaries. Every step links to the preserved script.
Named ingredients (5)
01Fix variables and assumptionsL1–6
02Induction on lL7–14
03Establish hM1L15–20
04Establish hS1L21–26
05Establish hT1L27–36
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply beta product zero.
06Calculate and transport equalitiesL37–37
Carry out the recorded arithmetic or equality steps; inspect the exact commands for their direction and premises.
- L37
symm
07Use earlier factsL38–38
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L38
exact one_mul
08Fix variables and assumptionsL39–45
09Establish hMdL46–52
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply beta product succ decompose.
- L46
have hMd : ∃ fpmp_factor_product_left_decomposition. ∃ fpmp_prefix_product_left_decomposition. BetaAt(mb,mc,l,fpmp_factor_product_left_decomposition) ∧ (Product(mb,mc,l,fpmp_prefix_product_left_decomposition) ∧ M = fpmp_prefix_product_left_decomposition · fpmp_factor_product_left_decomposition)Definitions: BetaAtProduct - L47
specialize beta_product_succ_decompose mb - L48
specialize beta_product_succ_decompose mc - L49
specialize beta_product_succ_decompose l - L50
specialize beta_product_succ_decompose M - L51
apply beta_product_succ_decompose - L52
exact hM
10Separate the logical casesL53–56
11Establish hSdL57–63
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply beta product succ decompose.
- L57
have hSd : ∃ fpmp_factor_product_right_decomposition. ∃ fpmp_prefix_product_right_decomposition. BetaAt(sb,sc,l,fpmp_factor_product_right_decomposition) ∧ (Product(sb,sc,l,fpmp_prefix_product_right_decomposition) ∧ Sprod = fpmp_prefix_product_right_decomposition · fpmp_factor_product_right_decomposition)Definitions: BetaAtProduct - L58
specialize beta_product_succ_decompose sb - L59
specialize beta_product_succ_decompose sc - L60
specialize beta_product_succ_decompose l - L61
specialize beta_product_succ_decompose Sprod - L62
apply beta_product_succ_decompose - L63
exact hS
12Separate the logical casesL64–67
13Establish hTdL68–74
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply beta product succ decompose.
- L68
have hTd : ∃ fpmp_factor_product_target_decomposition. ∃ fpmp_prefix_product_target_decomposition. BetaAt(tb,tc,l,fpmp_factor_product_target_decomposition) ∧ (Product(tb,tc,l,fpmp_prefix_product_target_decomposition) ∧ T = fpmp_prefix_product_target_decomposition · fpmp_factor_product_target_decomposition)Definitions: BetaAtProduct - L69
specialize beta_product_succ_decompose tb - L70
specialize beta_product_succ_decompose tc - L71
specialize beta_product_succ_decompose l - L72
specialize beta_product_succ_decompose T - L73
apply beta_product_succ_decompose - L74
exact hT
14Separate the logical casesL75–78
15Establish hprefix_alignmentL79–88
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply beta pointwise mul prefix drop last.
- L79
have hprefix_alignment : ∀ fpmp_index_product_restricted. ∀ fpmp_left_product_restricted. ∀ fpmp_right_product_restricted. ∀ fpmp_target_product_restricted. Lt(fpmp_index_product_restricted,l) → BetaAt(mb,mc,fpmp_index_product_restricted,fpmp_left_product_restricted) → BetaAt(sb,sc,fpmp_index_product_restricted,fpmp_right_product_restricted) → BetaAt(tb,tc,fpmp_index_product_restricted,fpmp_target_product_restricted) → fpmp_target_product_restricted = fpmp_left_product_restricted · fpmp_right_product_restrictedDefinitions: LtBetaAt - L80
specialize beta_pointwise_mul_prefix_drop_last mb - L81
specialize beta_pointwise_mul_prefix_drop_last mc - L82
specialize beta_pointwise_mul_prefix_drop_last sb - L83
specialize beta_pointwise_mul_prefix_drop_last sc - L84
specialize beta_pointwise_mul_prefix_drop_last tb - L85
specialize beta_pointwise_mul_prefix_drop_last tc - L86
specialize beta_pointwise_mul_prefix_drop_last l - L87
apply beta_pointwise_mul_prefix_drop_last - L88
exact haligned
16Establish hprefixL89–97
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply IH.
17Establish hentryL98–107
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply haligned.
18Use earlier factsL108–108
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L108
exact hTd_witness_witness_left
19Establish hshuffleL109–116
Establish this local claim before using it. It is not an additional assumption.
Original exact command ledger · 116 lines
- 0001
intro mb - 0002
intro mc - 0003
intro sb - 0004
intro sc - 0005
intro tb - 0006
intro tc - 0007
induction l - 0008
intro M - 0009
intro Sprod - 0010
intro T - 0011
intro haligned - 0012
intro hM - 0013
intro hS - 0014
intro hT - 0015
have hM1 : M = 1 - 0016
specialize beta_product_zero mb - 0017
specialize beta_product_zero mc - 0018
specialize beta_product_zero M - 0019
apply beta_product_zero - 0020
exact hM - 0021
have hS1 : Sprod = 1 - 0022
specialize beta_product_zero sb - 0023
specialize beta_product_zero sc - 0024
specialize beta_product_zero Sprod - 0025
apply beta_product_zero - 0026
exact hS - 0027
have hT1 : T = 1 - 0028
specialize beta_product_zero tb - 0029
specialize beta_product_zero tc - 0030
specialize beta_product_zero T - 0031
apply beta_product_zero - 0032
exact hT - 0033
rewrite hM1 - 0034
rewrite hS1 - 0035
rewrite hT1 - 0036
specialize one_mul 1 - 0037
symm - 0038
exact one_mul - 0039
intro M - 0040
intro Sprod - 0041
intro T - 0042
intro haligned - 0043
intro hM - 0044
intro hS - 0045
intro hT - 0046
have hMd : exists fpmp_factor_product_left_decomposition fpmp_prefix_product_left_decomposition. (((exists ff_h_product_left_decomposition_entry. ff_h_product_left_decomposition_entry + S (fpmp_factor_product_left_decomposition) = S ((S (l)) * mc)) /\ exists ff_q_product_left_decomposition_entry. mb = ff_q_product_left_decomposition_entry * S ((S (l)) * mc) + (fpmp_factor_product_left_decomposition))) /\ ((exists ff_u_product_left_decomposition_product ff_v_product_left_decomposition_product. ((((exists ff_h_product_left_decomposition_product_start. ff_h_product_left_decomposition_product_start + S (1) = S ((S (0)) * ff_v_product_left_decomposition_product)) /\ exists ff_q_product_left_decomposition_product_start. ff_u_product_left_decomposition_product = ff_q_product_left_decomposition_product_start * S ((S (0)) * ff_v_product_left_decomposition_product) + (1))) /\ ((((exists ff_h_product_left_decomposition_product_terminal. ff_h_product_left_decomposition_product_terminal + S (fpmp_prefix_product_left_decomposition) = S ((S (l)) * ff_v_product_left_decomposition_product)) /\ exists ff_q_product_left_decomposition_product_terminal. ff_u_product_left_decomposition_product = ff_q_product_left_decomposition_product_terminal * S ((S (l)) * ff_v_product_left_decomposition_product) + (fpmp_prefix_product_left_decomposition))) /\ forall ff_i_product_left_decomposition_product. (exists ff_lt_product_left_decomposition_product_bound. ff_lt_product_left_decomposition_product_bound + S ff_i_product_left_decomposition_product = l) -> exists ff_p_product_left_decomposition_product ff_r_product_left_decomposition_product ff_s_product_left_decomposition_product. ((((exists ff_h_product_left_decomposition_product_factor. ff_h_product_left_decomposition_product_factor + S (ff_p_product_left_decomposition_product) = S ((S (ff_i_product_left_decomposition_product)) * mc)) /\ exists ff_q_product_left_decomposition_product_factor. mb = ff_q_product_left_decomposition_product_factor * S ((S (ff_i_product_left_decomposition_product)) * mc) + (ff_p_product_left_decomposition_product))) /\ ((((exists ff_h_product_left_decomposition_product_partial. ff_h_product_left_decomposition_product_partial + S (ff_r_product_left_decomposition_product) = S ((S (ff_i_product_left_decomposition_product)) * ff_v_product_left_decomposition_product)) /\ exists ff_q_product_left_decomposition_product_partial. ff_u_product_left_decomposition_product = ff_q_product_left_decomposition_product_partial * S ((S (ff_i_product_left_decomposition_product)) * ff_v_product_left_decomposition_product) + (ff_r_product_left_decomposition_product))) /\ ((((exists ff_h_product_left_decomposition_product_successor. ff_h_product_left_decomposition_product_successor + S (ff_s_product_left_decomposition_product) = S ((S (S ff_i_product_left_decomposition_product)) * ff_v_product_left_decomposition_product)) /\ exists ff_q_product_left_decomposition_product_successor. ff_u_product_left_decomposition_product = ff_q_product_left_decomposition_product_successor * S ((S (S ff_i_product_left_decomposition_product)) * ff_v_product_left_decomposition_product) + (ff_s_product_left_decomposition_product))) /\ ff_s_product_left_decomposition_product = ff_r_product_left_decomposition_product * ff_p_product_left_decomposition_product)))))) /\ M = fpmp_prefix_product_left_decomposition * fpmp_factor_product_left_decomposition) - 0047
specialize beta_product_succ_decompose mb - 0048
specialize beta_product_succ_decompose mc - 0049
specialize beta_product_succ_decompose l - 0050
specialize beta_product_succ_decompose M - 0051
apply beta_product_succ_decompose - 0052
exact hM - 0053
cases hMd - 0054
cases hMd_witness - 0055
cases hMd_witness_witness - 0056
cases hMd_witness_witness_right - 0057
have hSd : exists fpmp_factor_product_right_decomposition fpmp_prefix_product_right_decomposition. (((exists ff_h_product_right_decomposition_entry. ff_h_product_right_decomposition_entry + S (fpmp_factor_product_right_decomposition) = S ((S (l)) * sc)) /\ exists ff_q_product_right_decomposition_entry. sb = ff_q_product_right_decomposition_entry * S ((S (l)) * sc) + (fpmp_factor_product_right_decomposition))) /\ ((exists ff_u_product_right_decomposition_product ff_v_product_right_decomposition_product. ((((exists ff_h_product_right_decomposition_product_start. ff_h_product_right_decomposition_product_start + S (1) = S ((S (0)) * ff_v_product_right_decomposition_product)) /\ exists ff_q_product_right_decomposition_product_start. ff_u_product_right_decomposition_product = ff_q_product_right_decomposition_product_start * S ((S (0)) * ff_v_product_right_decomposition_product) + (1))) /\ ((((exists ff_h_product_right_decomposition_product_terminal. ff_h_product_right_decomposition_product_terminal + S (fpmp_prefix_product_right_decomposition) = S ((S (l)) * ff_v_product_right_decomposition_product)) /\ exists ff_q_product_right_decomposition_product_terminal. ff_u_product_right_decomposition_product = ff_q_product_right_decomposition_product_terminal * S ((S (l)) * ff_v_product_right_decomposition_product) + (fpmp_prefix_product_right_decomposition))) /\ forall ff_i_product_right_decomposition_product. (exists ff_lt_product_right_decomposition_product_bound. ff_lt_product_right_decomposition_product_bound + S ff_i_product_right_decomposition_product = l) -> exists ff_p_product_right_decomposition_product ff_r_product_right_decomposition_product ff_s_product_right_decomposition_product. ((((exists ff_h_product_right_decomposition_product_factor. ff_h_product_right_decomposition_product_factor + S (ff_p_product_right_decomposition_product) = S ((S (ff_i_product_right_decomposition_product)) * sc)) /\ exists ff_q_product_right_decomposition_product_factor. sb = ff_q_product_right_decomposition_product_factor * S ((S (ff_i_product_right_decomposition_product)) * sc) + (ff_p_product_right_decomposition_product))) /\ ((((exists ff_h_product_right_decomposition_product_partial. ff_h_product_right_decomposition_product_partial + S (ff_r_product_right_decomposition_product) = S ((S (ff_i_product_right_decomposition_product)) * ff_v_product_right_decomposition_product)) /\ exists ff_q_product_right_decomposition_product_partial. ff_u_product_right_decomposition_product = ff_q_product_right_decomposition_product_partial * S ((S (ff_i_product_right_decomposition_product)) * ff_v_product_right_decomposition_product) + (ff_r_product_right_decomposition_product))) /\ ((((exists ff_h_product_right_decomposition_product_successor. ff_h_product_right_decomposition_product_successor + S (ff_s_product_right_decomposition_product) = S ((S (S ff_i_product_right_decomposition_product)) * ff_v_product_right_decomposition_product)) /\ exists ff_q_product_right_decomposition_product_successor. ff_u_product_right_decomposition_product = ff_q_product_right_decomposition_product_successor * S ((S (S ff_i_product_right_decomposition_product)) * ff_v_product_right_decomposition_product) + (ff_s_product_right_decomposition_product))) /\ ff_s_product_right_decomposition_product = ff_r_product_right_decomposition_product * ff_p_product_right_decomposition_product)))))) /\ Sprod = fpmp_prefix_product_right_decomposition * fpmp_factor_product_right_decomposition) - 0058
specialize beta_product_succ_decompose sb - 0059
specialize beta_product_succ_decompose sc - 0060
specialize beta_product_succ_decompose l - 0061
specialize beta_product_succ_decompose Sprod - 0062
apply beta_product_succ_decompose - 0063
exact hS - 0064
cases hSd - 0065
cases hSd_witness - 0066
cases hSd_witness_witness - 0067
cases hSd_witness_witness_right - 0068
have hTd : exists fpmp_factor_product_target_decomposition fpmp_prefix_product_target_decomposition. (((exists ff_h_product_target_decomposition_entry. ff_h_product_target_decomposition_entry + S (fpmp_factor_product_target_decomposition) = S ((S (l)) * tc)) /\ exists ff_q_product_target_decomposition_entry. tb = ff_q_product_target_decomposition_entry * S ((S (l)) * tc) + (fpmp_factor_product_target_decomposition))) /\ ((exists ff_u_product_target_decomposition_product ff_v_product_target_decomposition_product. ((((exists ff_h_product_target_decomposition_product_start. ff_h_product_target_decomposition_product_start + S (1) = S ((S (0)) * ff_v_product_target_decomposition_product)) /\ exists ff_q_product_target_decomposition_product_start. ff_u_product_target_decomposition_product = ff_q_product_target_decomposition_product_start * S ((S (0)) * ff_v_product_target_decomposition_product) + (1))) /\ ((((exists ff_h_product_target_decomposition_product_terminal. ff_h_product_target_decomposition_product_terminal + S (fpmp_prefix_product_target_decomposition) = S ((S (l)) * ff_v_product_target_decomposition_product)) /\ exists ff_q_product_target_decomposition_product_terminal. ff_u_product_target_decomposition_product = ff_q_product_target_decomposition_product_terminal * S ((S (l)) * ff_v_product_target_decomposition_product) + (fpmp_prefix_product_target_decomposition))) /\ forall ff_i_product_target_decomposition_product. (exists ff_lt_product_target_decomposition_product_bound. ff_lt_product_target_decomposition_product_bound + S ff_i_product_target_decomposition_product = l) -> exists ff_p_product_target_decomposition_product ff_r_product_target_decomposition_product ff_s_product_target_decomposition_product. ((((exists ff_h_product_target_decomposition_product_factor. ff_h_product_target_decomposition_product_factor + S (ff_p_product_target_decomposition_product) = S ((S (ff_i_product_target_decomposition_product)) * tc)) /\ exists ff_q_product_target_decomposition_product_factor. tb = ff_q_product_target_decomposition_product_factor * S ((S (ff_i_product_target_decomposition_product)) * tc) + (ff_p_product_target_decomposition_product))) /\ ((((exists ff_h_product_target_decomposition_product_partial. ff_h_product_target_decomposition_product_partial + S (ff_r_product_target_decomposition_product) = S ((S (ff_i_product_target_decomposition_product)) * ff_v_product_target_decomposition_product)) /\ exists ff_q_product_target_decomposition_product_partial. ff_u_product_target_decomposition_product = ff_q_product_target_decomposition_product_partial * S ((S (ff_i_product_target_decomposition_product)) * ff_v_product_target_decomposition_product) + (ff_r_product_target_decomposition_product))) /\ ((((exists ff_h_product_target_decomposition_product_successor. ff_h_product_target_decomposition_product_successor + S (ff_s_product_target_decomposition_product) = S ((S (S ff_i_product_target_decomposition_product)) * ff_v_product_target_decomposition_product)) /\ exists ff_q_product_target_decomposition_product_successor. ff_u_product_target_decomposition_product = ff_q_product_target_decomposition_product_successor * S ((S (S ff_i_product_target_decomposition_product)) * ff_v_product_target_decomposition_product) + (ff_s_product_target_decomposition_product))) /\ ff_s_product_target_decomposition_product = ff_r_product_target_decomposition_product * ff_p_product_target_decomposition_product)))))) /\ T = fpmp_prefix_product_target_decomposition * fpmp_factor_product_target_decomposition) - 0069
specialize beta_product_succ_decompose tb - 0070
specialize beta_product_succ_decompose tc - 0071
specialize beta_product_succ_decompose l - 0072
specialize beta_product_succ_decompose T - 0073
apply beta_product_succ_decompose - 0074
exact hT - 0075
cases hTd - 0076
cases hTd_witness - 0077
cases hTd_witness_witness - 0078
cases hTd_witness_witness_right - 0079
have hprefix_alignment : forall fpmp_index_product_restricted fpmp_left_product_restricted fpmp_right_product_restricted fpmp_target_product_restricted. (exists fpmp_gap_product_restricted. fpmp_gap_product_restricted + S fpmp_index_product_restricted = l) -> (((exists ff_h_fpmp_product_restricted_left. ff_h_fpmp_product_restricted_left + S (fpmp_left_product_restricted) = S ((S (fpmp_index_product_restricted)) * mc)) /\ exists ff_q_fpmp_product_restricted_left. mb = ff_q_fpmp_product_restricted_left * S ((S (fpmp_index_product_restricted)) * mc) + (fpmp_left_product_restricted))) -> (((exists ff_h_fpmp_product_restricted_right. ff_h_fpmp_product_restricted_right + S (fpmp_right_product_restricted) = S ((S (fpmp_index_product_restricted)) * sc)) /\ exists ff_q_fpmp_product_restricted_right. sb = ff_q_fpmp_product_restricted_right * S ((S (fpmp_index_product_restricted)) * sc) + (fpmp_right_product_restricted))) -> (((exists ff_h_fpmp_product_restricted_target. ff_h_fpmp_product_restricted_target + S (fpmp_target_product_restricted) = S ((S (fpmp_index_product_restricted)) * tc)) /\ exists ff_q_fpmp_product_restricted_target. tb = ff_q_fpmp_product_restricted_target * S ((S (fpmp_index_product_restricted)) * tc) + (fpmp_target_product_restricted))) -> fpmp_target_product_restricted = fpmp_left_product_restricted * fpmp_right_product_restricted - 0080
specialize beta_pointwise_mul_prefix_drop_last mb - 0081
specialize beta_pointwise_mul_prefix_drop_last mc - 0082
specialize beta_pointwise_mul_prefix_drop_last sb - 0083
specialize beta_pointwise_mul_prefix_drop_last sc - 0084
specialize beta_pointwise_mul_prefix_drop_last tb - 0085
specialize beta_pointwise_mul_prefix_drop_last tc - 0086
specialize beta_pointwise_mul_prefix_drop_last l - 0087
apply beta_pointwise_mul_prefix_drop_last - 0088
exact haligned - 0089
have hprefix : x5 = x1 * x3 - 0090
specialize IH x1 - 0091
specialize IH x3 - 0092
specialize IH x5 - 0093
apply IH - 0094
exact hprefix_alignment - 0095
exact hMd_witness_witness_right_left - 0096
exact hSd_witness_witness_right_left - 0097
exact hTd_witness_witness_right_left - 0098
have hentry : x4 = x * x2 - 0099
specialize haligned l - 0100
specialize haligned x - 0101
specialize haligned x2 - 0102
specialize haligned x4 - 0103
apply haligned - 0104
specialize le_refl (S l) - 0105
exact le_refl - 0106
exact hMd_witness_witness_left - 0107
exact hSd_witness_witness_left - 0108
exact hTd_witness_witness_left - 0109
have hshuffle : (x1 * x3) * (x * x2) = (x1 * x) * (x3 * x2) - 0110
simp [mul_assoc, mul_comm] - 0111
rewrite hTd_witness_witness_right_right - 0112
rewrite hMd_witness_witness_right_right - 0113
rewrite hSd_witness_witness_right_right - 0114
rewrite hprefix - 0115
rewrite hentry - 0116
exact hshuffle