Exact expanded PA statement
forall l r s b c z d p q. (forall fp_i_reindex_bounded. (exists fp_gap_reindex_bounded_index. fp_gap_reindex_bounded_index + S fp_i_reindex_bounded = l) -> exists fp_value_reindex_bounded. ((((exists ff_h_reindex_bounded_entry. ff_h_reindex_bounded_entry + S (fp_value_reindex_bounded) = S ((S (fp_i_reindex_bounded)) * s)) /\ exists ff_q_reindex_bounded_entry. r = ff_q_reindex_bounded_entry * S ((S (fp_i_reindex_bounded)) * s) + (fp_value_reindex_bounded))) /\ (exists fp_gap_reindex_bounded_value. fp_gap_reindex_bounded_value + S fp_value_reindex_bounded = l))) -> (forall fp_i_reindex_injective fp_j_reindex_injective fp_value_reindex_injective. (exists fp_gap_reindex_injective_i. fp_gap_reindex_injective_i + S fp_i_reindex_injective = l) -> (exists fp_gap_reindex_injective_j. fp_gap_reindex_injective_j + S fp_j_reindex_injective = l) -> (((exists ff_h_reindex_injective_left. ff_h_reindex_injective_left + S (fp_value_reindex_injective) = S ((S (fp_i_reindex_injective)) * s)) /\ exists ff_q_reindex_injective_left. r = ff_q_reindex_injective_left * S ((S (fp_i_reindex_injective)) * s) + (fp_value_reindex_injective))) -> (((exists ff_h_reindex_injective_right. ff_h_reindex_injective_right + S (fp_value_reindex_injective) = S ((S (fp_j_reindex_injective)) * s)) /\ exists ff_q_reindex_injective_right. r = ff_q_reindex_injective_right * S ((S (fp_j_reindex_injective)) * s) + (fp_value_reindex_injective))) -> fp_i_reindex_injective = fp_j_reindex_injective) -> (forall fpr_i_reindex_aligned fpr_j_reindex_aligned fpr_x_reindex_aligned. (exists fpr_h_reindex_aligned. fpr_h_reindex_aligned + S fpr_i_reindex_aligned = l) -> (((exists ff_h_reindex_aligned_map. ff_h_reindex_aligned_map + S (fpr_j_reindex_aligned) = S ((S (fpr_i_reindex_aligned)) * s)) /\ exists ff_q_reindex_aligned_map. r = ff_q_reindex_aligned_map * S ((S (fpr_i_reindex_aligned)) * s) + (fpr_j_reindex_aligned))) -> (((exists ff_h_reindex_aligned_source. ff_h_reindex_aligned_source + S (fpr_x_reindex_aligned) = S ((S (fpr_j_reindex_aligned)) * c)) /\ exists ff_q_reindex_aligned_source. b = ff_q_reindex_aligned_source * S ((S (fpr_j_reindex_aligned)) * c) + (fpr_x_reindex_aligned))) -> (((exists ff_h_reindex_aligned_target. ff_h_reindex_aligned_target + S (fpr_x_reindex_aligned) = S ((S (fpr_i_reindex_aligned)) * d)) /\ exists ff_q_reindex_aligned_target. z = ff_q_reindex_aligned_target * S ((S (fpr_i_reindex_aligned)) * d) + (fpr_x_reindex_aligned)))) -> (exists ff_u_reindex_source_product ff_v_reindex_source_product. ((((exists ff_h_reindex_source_product_start. ff_h_reindex_source_product_start + S (1) = S ((S (0)) * ff_v_reindex_source_product)) /\ exists ff_q_reindex_source_product_start. ff_u_reindex_source_product = ff_q_reindex_source_product_start * S ((S (0)) * ff_v_reindex_source_product) + (1))) /\ ((((exists ff_h_reindex_source_product_terminal. ff_h_reindex_source_product_terminal + S (p) = S ((S (l)) * ff_v_reindex_source_product)) /\ exists ff_q_reindex_source_product_terminal. ff_u_reindex_source_product = ff_q_reindex_source_product_terminal * S ((S (l)) * ff_v_reindex_source_product) + (p))) /\ forall ff_i_reindex_source_product. (exists ff_lt_reindex_source_product_bound. ff_lt_reindex_source_product_bound + S ff_i_reindex_source_product = l) -> exists ff_p_reindex_source_product ff_r_reindex_source_product ff_s_reindex_source_product. ((((exists ff_h_reindex_source_product_factor. ff_h_reindex_source_product_factor + S (ff_p_reindex_source_product) = S ((S (ff_i_reindex_source_product)) * c)) /\ exists ff_q_reindex_source_product_factor. b = ff_q_reindex_source_product_factor * S ((S (ff_i_reindex_source_product)) * c) + (ff_p_reindex_source_product))) /\ ((((exists ff_h_reindex_source_product_partial. ff_h_reindex_source_product_partial + S (ff_r_reindex_source_product) = S ((S (ff_i_reindex_source_product)) * ff_v_reindex_source_product)) /\ exists ff_q_reindex_source_product_partial. ff_u_reindex_source_product = ff_q_reindex_source_product_partial * S ((S (ff_i_reindex_source_product)) * ff_v_reindex_source_product) + (ff_r_reindex_source_product))) /\ ((((exists ff_h_reindex_source_product_successor. ff_h_reindex_source_product_successor + S (ff_s_reindex_source_product) = S ((S (S ff_i_reindex_source_product)) * ff_v_reindex_source_product)) /\ exists ff_q_reindex_source_product_successor. ff_u_reindex_source_product = ff_q_reindex_source_product_successor * S ((S (S ff_i_reindex_source_product)) * ff_v_reindex_source_product) + (ff_s_reindex_source_product))) /\ ff_s_reindex_source_product = ff_r_reindex_source_product * ff_p_reindex_source_product)))))) -> (exists ff_u_reindex_target_product ff_v_reindex_target_product. ((((exists ff_h_reindex_target_product_start. ff_h_reindex_target_product_start + S (1) = S ((S (0)) * ff_v_reindex_target_product)) /\ exists ff_q_reindex_target_product_start. ff_u_reindex_target_product = ff_q_reindex_target_product_start * S ((S (0)) * ff_v_reindex_target_product) + (1))) /\ ((((exists ff_h_reindex_target_product_terminal. ff_h_reindex_target_product_terminal + S (q) = S ((S (l)) * ff_v_reindex_target_product)) /\ exists ff_q_reindex_target_product_terminal. ff_u_reindex_target_product = ff_q_reindex_target_product_terminal * S ((S (l)) * ff_v_reindex_target_product) + (q))) /\ forall ff_i_reindex_target_product. (exists ff_lt_reindex_target_product_bound. ff_lt_reindex_target_product_bound + S ff_i_reindex_target_product = l) -> exists ff_p_reindex_target_product ff_r_reindex_target_product ff_s_reindex_target_product. ((((exists ff_h_reindex_target_product_factor. ff_h_reindex_target_product_factor + S (ff_p_reindex_target_product) = S ((S (ff_i_reindex_target_product)) * d)) /\ exists ff_q_reindex_target_product_factor. z = ff_q_reindex_target_product_factor * S ((S (ff_i_reindex_target_product)) * d) + (ff_p_reindex_target_product))) /\ ((((exists ff_h_reindex_target_product_partial. ff_h_reindex_target_product_partial + S (ff_r_reindex_target_product) = S ((S (ff_i_reindex_target_product)) * ff_v_reindex_target_product)) /\ exists ff_q_reindex_target_product_partial. ff_u_reindex_target_product = ff_q_reindex_target_product_partial * S ((S (ff_i_reindex_target_product)) * ff_v_reindex_target_product) + (ff_r_reindex_target_product))) /\ ((((exists ff_h_reindex_target_product_successor. ff_h_reindex_target_product_successor + S (ff_s_reindex_target_product) = S ((S (S ff_i_reindex_target_product)) * ff_v_reindex_target_product)) /\ exists ff_q_reindex_target_product_successor. ff_u_reindex_target_product = ff_q_reindex_target_product_successor * S ((S (S ff_i_reindex_target_product)) * ff_v_reindex_target_product) + (ff_s_reindex_target_product))) /\ ff_s_reindex_target_product = ff_r_reindex_target_product * ff_p_reindex_target_product)))))) -> p = qStructural proof guide
Generated structural guide
A bounded injective beta-coded reindexing preserves the exact finite product.
Use the direct prerequisites finite_bounded_injective_surjective, finite_lt_succ_eq_or_lt, finite_fixed_last_prefix_bounded, finite_injective_prefix_succ, beta_prefix_swap_last_from_entries, finite_swap_last_bounded, finite_swap_last_injective, beta_product_swap_last_invariant, beta_product_zero, beta_product_exists, beta_at_exists, beta_at_unique, beta_reindex_alignment_swap_last, beta_product_reindex_fixed_last, le_refl, le_succ as previously established PA formulas.
The proof proceeds by structural induction (1), case analysis (16), intermediate claims (30), equality transport (4).
Referenced ingredients
PA004W finite_bounded_injective_surjective PA003D finite_lt_succ_eq_or_lt PA004X finite_fixed_last_prefix_bounded PA004Q finite_injective_prefix_succ PA004K beta_prefix_swap_last_from_entries PA004M finite_swap_last_bounded PA004O finite_swap_last_injective PA0053 beta_product_swap_last_invariant PA0049 beta_product_zero PA003X beta_product_exists PA0029 beta_at_exists PA002F beta_at_unique PA0054 beta_reindex_alignment_swap_last PA007W beta_product_reindex_fixed_last PA001A le_refl PA002O le_succProof neighborhood
Direct dependencies
PA004W finite_bounded_injective_surjective PA003D finite_lt_succ_eq_or_lt PA004X finite_fixed_last_prefix_bounded PA004Q finite_injective_prefix_succ PA004K beta_prefix_swap_last_from_entries PA004M finite_swap_last_bounded PA004O finite_swap_last_injective PA0053 beta_product_swap_last_invariant PA0049 beta_product_zero PA003X beta_product_exists PA0029 beta_at_exists PA002F beta_at_unique PA0054 beta_reindex_alignment_swap_last PA007W beta_product_reindex_fixed_last PA001A le_refl PA002O le_succDirect 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
induction l - 0002
intro r - 0003
intro s - 0004
intro b - 0005
intro c - 0006
intro z - 0007
intro d - 0008
intro p - 0009
intro q - 0010
intro hbounded - 0011
intro hinjective - 0012
intro haligned - 0013
intro hsource_product - 0014
intro htarget_product - 0015
have hp : p = 1 - 0016
specialize beta_product_zero b - 0017
specialize beta_product_zero c - 0018
specialize beta_product_zero p - 0019
apply beta_product_zero - 0020
exact hsource_product - 0021
have hq : q = 1 - 0022
specialize beta_product_zero z - 0023
specialize beta_product_zero d - 0024
specialize beta_product_zero q - 0025
apply beta_product_zero - 0026
exact htarget_product - 0027
trans 1 - 0028
exact hp - 0029
symm - 0030
exact hq - 0031
intro r - 0032
intro s - 0033
intro b - 0034
intro c - 0035
intro z - 0036
intro d - 0037
intro p - 0038
intro q - 0039
intro hbounded - 0040
intro hinjective - 0041
intro haligned - 0042
intro hsource_product - 0043
intro htarget_product - 0044
have hsurjective : forall fp_value_reindex_surjective_succ. (exists fp_gap_reindex_surjective_succ_value. fp_gap_reindex_surjective_succ_value + S fp_value_reindex_surjective_succ = S l) -> exists fp_i_reindex_surjective_succ. ((exists fp_gap_reindex_surjective_succ_index. fp_gap_reindex_surjective_succ_index + S fp_i_reindex_surjective_succ = S l) /\ (((exists ff_h_reindex_surjective_succ_entry. ff_h_reindex_surjective_succ_entry + S (fp_value_reindex_surjective_succ) = S ((S (fp_i_reindex_surjective_succ)) * s)) /\ exists ff_q_reindex_surjective_succ_entry. r = ff_q_reindex_surjective_succ_entry * S ((S (fp_i_reindex_surjective_succ)) * s) + (fp_value_reindex_surjective_succ)))) - 0045
specialize finite_bounded_injective_surjective (S l) - 0046
specialize finite_bounded_injective_surjective r - 0047
specialize finite_bounded_injective_surjective s - 0048
apply finite_bounded_injective_surjective - 0049
exact hbounded - 0050
exact hinjective - 0051
have hlast_bound : exists h. h + S l = S l - 0052
specialize le_refl (S l) - 0053
exact le_refl - 0054
have hpreimage : exists k. ((exists h. h + S k = S l) /\ (((exists ff_h_reindex_map_preimage. ff_h_reindex_map_preimage + S (l) = S ((S (k)) * s)) /\ exists ff_q_reindex_map_preimage. r = ff_q_reindex_map_preimage * S ((S (k)) * s) + (l)))) - 0055
specialize hsurjective l - 0056
apply hsurjective - 0057
exact hlast_bound - 0058
cases hpreimage - 0059
cases hpreimage_witness - 0060
have hsource_last : exists a. (((exists ff_h_reindex_source_last. ff_h_reindex_source_last + S (a) = S ((S (l)) * c)) /\ exists ff_q_reindex_source_last. b = ff_q_reindex_source_last * S ((S (l)) * c) + (a))) - 0061
specialize beta_at_exists b - 0062
specialize beta_at_exists c - 0063
specialize beta_at_exists l - 0064
exact beta_at_exists - 0065
cases hsource_last - 0066
have htarget_at_preimage : ((exists ff_h_reindex_target_preimage. ff_h_reindex_target_preimage + S (x1) = S ((S (x)) * d)) /\ exists ff_q_reindex_target_preimage. z = ff_q_reindex_target_preimage * S ((S (x)) * d) + (x1)) - 0067
specialize haligned x - 0068
specialize haligned l - 0069
specialize haligned x1 - 0070
apply haligned - 0071
exact hpreimage_witness_left - 0072
exact hpreimage_witness_right - 0073
exact hsource_last_witness - 0074
have hsplit : x = l \/ exists h. h + S x = l - 0075
specialize finite_lt_succ_eq_or_lt l - 0076
specialize finite_lt_succ_eq_or_lt x - 0077
apply finite_lt_succ_eq_or_lt - 0078
exact hpreimage_witness_left - 0079
cases hsplit - 0080
have hmap_last : ((exists ff_h_reindex_map_last. ff_h_reindex_map_last + S (l) = S ((S (l)) * s)) /\ exists ff_q_reindex_map_last. r = ff_q_reindex_map_last * S ((S (l)) * s) + (l)) - 0081
rewrite hsplit_left at hpreimage_witness_right - 0082
rewrite hsplit_left at hpreimage_witness_right - 0083
exact hpreimage_witness_right - 0084
have hbounded_prefix : forall fp_i_reindex_bounded_prefix. (exists fp_gap_reindex_bounded_prefix_index. fp_gap_reindex_bounded_prefix_index + S fp_i_reindex_bounded_prefix = l) -> exists fp_value_reindex_bounded_prefix. ((((exists ff_h_reindex_bounded_prefix_entry. ff_h_reindex_bounded_prefix_entry + S (fp_value_reindex_bounded_prefix) = S ((S (fp_i_reindex_bounded_prefix)) * s)) /\ exists ff_q_reindex_bounded_prefix_entry. r = ff_q_reindex_bounded_prefix_entry * S ((S (fp_i_reindex_bounded_prefix)) * s) + (fp_value_reindex_bounded_prefix))) /\ (exists fp_gap_reindex_bounded_prefix_value. fp_gap_reindex_bounded_prefix_value + S fp_value_reindex_bounded_prefix = l)) - 0085
specialize finite_fixed_last_prefix_bounded r - 0086
specialize finite_fixed_last_prefix_bounded s - 0087
specialize finite_fixed_last_prefix_bounded l - 0088
apply finite_fixed_last_prefix_bounded - 0089
exact hbounded - 0090
exact hinjective - 0091
exact hmap_last - 0092
have hinjective_prefix : forall fp_i_reindex_injective_prefix fp_j_reindex_injective_prefix fp_value_reindex_injective_prefix. (exists fp_gap_reindex_injective_prefix_i. fp_gap_reindex_injective_prefix_i + S fp_i_reindex_injective_prefix = l) -> (exists fp_gap_reindex_injective_prefix_j. fp_gap_reindex_injective_prefix_j + S fp_j_reindex_injective_prefix = l) -> (((exists ff_h_reindex_injective_prefix_left. ff_h_reindex_injective_prefix_left + S (fp_value_reindex_injective_prefix) = S ((S (fp_i_reindex_injective_prefix)) * s)) /\ exists ff_q_reindex_injective_prefix_left. r = ff_q_reindex_injective_prefix_left * S ((S (fp_i_reindex_injective_prefix)) * s) + (fp_value_reindex_injective_prefix))) -> (((exists ff_h_reindex_injective_prefix_right. ff_h_reindex_injective_prefix_right + S (fp_value_reindex_injective_prefix) = S ((S (fp_j_reindex_injective_prefix)) * s)) /\ exists ff_q_reindex_injective_prefix_right. r = ff_q_reindex_injective_prefix_right * S ((S (fp_j_reindex_injective_prefix)) * s) + (fp_value_reindex_injective_prefix))) -> fp_i_reindex_injective_prefix = fp_j_reindex_injective_prefix - 0093
specialize finite_injective_prefix_succ r - 0094
specialize finite_injective_prefix_succ s - 0095
specialize finite_injective_prefix_succ l - 0096
specialize finite_injective_prefix_succ (S l) - 0097
apply finite_injective_prefix_succ - 0098
refl - 0099
exact hinjective - 0100
have haligned_prefix : forall fpr_i_reindex_aligned_prefix fpr_j_reindex_aligned_prefix fpr_x_reindex_aligned_prefix. (exists fpr_h_reindex_aligned_prefix. fpr_h_reindex_aligned_prefix + S fpr_i_reindex_aligned_prefix = l) -> (((exists ff_h_reindex_aligned_prefix_map. ff_h_reindex_aligned_prefix_map + S (fpr_j_reindex_aligned_prefix) = S ((S (fpr_i_reindex_aligned_prefix)) * s)) /\ exists ff_q_reindex_aligned_prefix_map. r = ff_q_reindex_aligned_prefix_map * S ((S (fpr_i_reindex_aligned_prefix)) * s) + (fpr_j_reindex_aligned_prefix))) -> (((exists ff_h_reindex_aligned_prefix_source. ff_h_reindex_aligned_prefix_source + S (fpr_x_reindex_aligned_prefix) = S ((S (fpr_j_reindex_aligned_prefix)) * c)) /\ exists ff_q_reindex_aligned_prefix_source. b = ff_q_reindex_aligned_prefix_source * S ((S (fpr_j_reindex_aligned_prefix)) * c) + (fpr_x_reindex_aligned_prefix))) -> (((exists ff_h_reindex_aligned_prefix_target. ff_h_reindex_aligned_prefix_target + S (fpr_x_reindex_aligned_prefix) = S ((S (fpr_i_reindex_aligned_prefix)) * d)) /\ exists ff_q_reindex_aligned_prefix_target. z = ff_q_reindex_aligned_prefix_target * S ((S (fpr_i_reindex_aligned_prefix)) * d) + (fpr_x_reindex_aligned_prefix))) - 0101
intro i - 0102
intro j - 0103
intro a - 0104
intro hi - 0105
intro hmap - 0106
intro hsource - 0107
specialize haligned i - 0108
specialize haligned j - 0109
specialize haligned a - 0110
apply haligned - 0111
specialize le_succ (S i) - 0112
specialize le_succ l - 0113
apply le_succ - 0114
exact hi - 0115
exact hmap - 0116
exact hsource - 0117
have hprefix_products_equal : forall u v. (exists ff_u_reindex_source_prefix_product ff_v_reindex_source_prefix_product. ((((exists ff_h_reindex_source_prefix_product_start. ff_h_reindex_source_prefix_product_start + S (1) = S ((S (0)) * ff_v_reindex_source_prefix_product)) /\ exists ff_q_reindex_source_prefix_product_start. ff_u_reindex_source_prefix_product = ff_q_reindex_source_prefix_product_start * S ((S (0)) * ff_v_reindex_source_prefix_product) + (1))) /\ ((((exists ff_h_reindex_source_prefix_product_terminal. ff_h_reindex_source_prefix_product_terminal + S (u) = S ((S (l)) * ff_v_reindex_source_prefix_product)) /\ exists ff_q_reindex_source_prefix_product_terminal. ff_u_reindex_source_prefix_product = ff_q_reindex_source_prefix_product_terminal * S ((S (l)) * ff_v_reindex_source_prefix_product) + (u))) /\ forall ff_i_reindex_source_prefix_product. (exists ff_lt_reindex_source_prefix_product_bound. ff_lt_reindex_source_prefix_product_bound + S ff_i_reindex_source_prefix_product = l) -> exists ff_p_reindex_source_prefix_product ff_r_reindex_source_prefix_product ff_s_reindex_source_prefix_product. ((((exists ff_h_reindex_source_prefix_product_factor. ff_h_reindex_source_prefix_product_factor + S (ff_p_reindex_source_prefix_product) = S ((S (ff_i_reindex_source_prefix_product)) * c)) /\ exists ff_q_reindex_source_prefix_product_factor. b = ff_q_reindex_source_prefix_product_factor * S ((S (ff_i_reindex_source_prefix_product)) * c) + (ff_p_reindex_source_prefix_product))) /\ ((((exists ff_h_reindex_source_prefix_product_partial. ff_h_reindex_source_prefix_product_partial + S (ff_r_reindex_source_prefix_product) = S ((S (ff_i_reindex_source_prefix_product)) * ff_v_reindex_source_prefix_product)) /\ exists ff_q_reindex_source_prefix_product_partial. ff_u_reindex_source_prefix_product = ff_q_reindex_source_prefix_product_partial * S ((S (ff_i_reindex_source_prefix_product)) * ff_v_reindex_source_prefix_product) + (ff_r_reindex_source_prefix_product))) /\ ((((exists ff_h_reindex_source_prefix_product_successor. ff_h_reindex_source_prefix_product_successor + S (ff_s_reindex_source_prefix_product) = S ((S (S ff_i_reindex_source_prefix_product)) * ff_v_reindex_source_prefix_product)) /\ exists ff_q_reindex_source_prefix_product_successor. ff_u_reindex_source_prefix_product = ff_q_reindex_source_prefix_product_successor * S ((S (S ff_i_reindex_source_prefix_product)) * ff_v_reindex_source_prefix_product) + (ff_s_reindex_source_prefix_product))) /\ ff_s_reindex_source_prefix_product = ff_r_reindex_source_prefix_product * ff_p_reindex_source_prefix_product)))))) -> (exists ff_u_reindex_target_prefix_product ff_v_reindex_target_prefix_product. ((((exists ff_h_reindex_target_prefix_product_start. ff_h_reindex_target_prefix_product_start + S (1) = S ((S (0)) * ff_v_reindex_target_prefix_product)) /\ exists ff_q_reindex_target_prefix_product_start. ff_u_reindex_target_prefix_product = ff_q_reindex_target_prefix_product_start * S ((S (0)) * ff_v_reindex_target_prefix_product) + (1))) /\ ((((exists ff_h_reindex_target_prefix_product_terminal. ff_h_reindex_target_prefix_product_terminal + S (v) = S ((S (l)) * ff_v_reindex_target_prefix_product)) /\ exists ff_q_reindex_target_prefix_product_terminal. ff_u_reindex_target_prefix_product = ff_q_reindex_target_prefix_product_terminal * S ((S (l)) * ff_v_reindex_target_prefix_product) + (v))) /\ forall ff_i_reindex_target_prefix_product. (exists ff_lt_reindex_target_prefix_product_bound. ff_lt_reindex_target_prefix_product_bound + S ff_i_reindex_target_prefix_product = l) -> exists ff_p_reindex_target_prefix_product ff_r_reindex_target_prefix_product ff_s_reindex_target_prefix_product. ((((exists ff_h_reindex_target_prefix_product_factor. ff_h_reindex_target_prefix_product_factor + S (ff_p_reindex_target_prefix_product) = S ((S (ff_i_reindex_target_prefix_product)) * d)) /\ exists ff_q_reindex_target_prefix_product_factor. z = ff_q_reindex_target_prefix_product_factor * S ((S (ff_i_reindex_target_prefix_product)) * d) + (ff_p_reindex_target_prefix_product))) /\ ((((exists ff_h_reindex_target_prefix_product_partial. ff_h_reindex_target_prefix_product_partial + S (ff_r_reindex_target_prefix_product) = S ((S (ff_i_reindex_target_prefix_product)) * ff_v_reindex_target_prefix_product)) /\ exists ff_q_reindex_target_prefix_product_partial. ff_u_reindex_target_prefix_product = ff_q_reindex_target_prefix_product_partial * S ((S (ff_i_reindex_target_prefix_product)) * ff_v_reindex_target_prefix_product) + (ff_r_reindex_target_prefix_product))) /\ ((((exists ff_h_reindex_target_prefix_product_successor. ff_h_reindex_target_prefix_product_successor + S (ff_s_reindex_target_prefix_product) = S ((S (S ff_i_reindex_target_prefix_product)) * ff_v_reindex_target_prefix_product)) /\ exists ff_q_reindex_target_prefix_product_successor. ff_u_reindex_target_prefix_product = ff_q_reindex_target_prefix_product_successor * S ((S (S ff_i_reindex_target_prefix_product)) * ff_v_reindex_target_prefix_product) + (ff_s_reindex_target_prefix_product))) /\ ff_s_reindex_target_prefix_product = ff_r_reindex_target_prefix_product * ff_p_reindex_target_prefix_product)))))) -> u = v - 0118
intro u - 0119
intro v - 0120
intro hsource_prefix_product - 0121
intro htarget_prefix_product - 0122
specialize IH r - 0123
specialize IH s - 0124
specialize IH b - 0125
specialize IH c - 0126
specialize IH z - 0127
specialize IH d - 0128
specialize IH u - 0129
specialize IH v - 0130
apply IH - 0131
exact hbounded_prefix - 0132
exact hinjective_prefix - 0133
exact haligned_prefix - 0134
exact hsource_prefix_product - 0135
exact htarget_prefix_product - 0136
specialize beta_product_reindex_fixed_last r - 0137
specialize beta_product_reindex_fixed_last s - 0138
specialize beta_product_reindex_fixed_last b - 0139
specialize beta_product_reindex_fixed_last c - 0140
specialize beta_product_reindex_fixed_last z - 0141
specialize beta_product_reindex_fixed_last d - 0142
specialize beta_product_reindex_fixed_last l - 0143
specialize beta_product_reindex_fixed_last p - 0144
specialize beta_product_reindex_fixed_last q - 0145
apply beta_product_reindex_fixed_last - 0146
exact haligned - 0147
exact hmap_last - 0148
exact hsource_product - 0149
exact htarget_product - 0150
exact hprefix_products_equal - 0151
have hmap_last_decoded : exists m. (((exists ff_h_reindex_map_decoded_last. ff_h_reindex_map_decoded_last + S (m) = S ((S (l)) * s)) /\ exists ff_q_reindex_map_decoded_last. r = ff_q_reindex_map_decoded_last * S ((S (l)) * s) + (m))) - 0152
specialize beta_at_exists r - 0153
specialize beta_at_exists s - 0154
specialize beta_at_exists l - 0155
exact beta_at_exists - 0156
cases hmap_last_decoded - 0157
have htarget_last_decoded : exists w. (((exists ff_h_reindex_target_decoded_last. ff_h_reindex_target_decoded_last + S (w) = S ((S (l)) * d)) /\ exists ff_q_reindex_target_decoded_last. z = ff_q_reindex_target_decoded_last * S ((S (l)) * d) + (w))) - 0158
specialize beta_at_exists z - 0159
specialize beta_at_exists d - 0160
specialize beta_at_exists l - 0161
exact beta_at_exists - 0162
cases htarget_last_decoded - 0163
have hmap_swap : exists rm sm. (((exists ff_h_reindex_map_swap_i. ff_h_reindex_map_swap_i + S (x2) = S ((S (x)) * sm)) /\ exists ff_q_reindex_map_swap_i. rm = ff_q_reindex_map_swap_i * S ((S (x)) * sm) + (x2))) /\ ((((exists ff_h_reindex_map_swap_last. ff_h_reindex_map_swap_last + S (l) = S ((S (l)) * sm)) /\ exists ff_q_reindex_map_swap_last. rm = ff_q_reindex_map_swap_last * S ((S (l)) * sm) + (l))) /\ forall j a. (exists h. h + S j = S l) -> ~(j = x) -> ~(j = l) -> (((exists ff_h_reindex_map_swap_old. ff_h_reindex_map_swap_old + S (a) = S ((S (j)) * s)) /\ exists ff_q_reindex_map_swap_old. r = ff_q_reindex_map_swap_old * S ((S (j)) * s) + (a))) -> (((exists ff_h_reindex_map_swap_new. ff_h_reindex_map_swap_new + S (a) = S ((S (j)) * sm)) /\ exists ff_q_reindex_map_swap_new. rm = ff_q_reindex_map_swap_new * S ((S (j)) * sm) + (a)))) - 0164
specialize beta_prefix_swap_last_from_entries r - 0165
specialize beta_prefix_swap_last_from_entries s - 0166
specialize beta_prefix_swap_last_from_entries l - 0167
specialize beta_prefix_swap_last_from_entries x - 0168
specialize beta_prefix_swap_last_from_entries l - 0169
specialize beta_prefix_swap_last_from_entries x2 - 0170
apply beta_prefix_swap_last_from_entries - 0171
exact hsplit_right - 0172
exact hpreimage_witness_right - 0173
exact hmap_last_decoded_witness - 0174
cases hmap_swap - 0175
cases hmap_swap_witness - 0176
cases hmap_swap_witness_witness - 0177
cases hmap_swap_witness_witness_right - 0178
have htarget_swap : exists tz td. (((exists ff_h_reindex_target_swap_i. ff_h_reindex_target_swap_i + S (x3) = S ((S (x)) * td)) /\ exists ff_q_reindex_target_swap_i. tz = ff_q_reindex_target_swap_i * S ((S (x)) * td) + (x3))) /\ ((((exists ff_h_reindex_target_swap_last. ff_h_reindex_target_swap_last + S (x1) = S ((S (l)) * td)) /\ exists ff_q_reindex_target_swap_last. tz = ff_q_reindex_target_swap_last * S ((S (l)) * td) + (x1))) /\ forall j a. (exists h. h + S j = S l) -> ~(j = x) -> ~(j = l) -> (((exists ff_h_reindex_target_swap_old. ff_h_reindex_target_swap_old + S (a) = S ((S (j)) * d)) /\ exists ff_q_reindex_target_swap_old. z = ff_q_reindex_target_swap_old * S ((S (j)) * d) + (a))) -> (((exists ff_h_reindex_target_swap_new. ff_h_reindex_target_swap_new + S (a) = S ((S (j)) * td)) /\ exists ff_q_reindex_target_swap_new. tz = ff_q_reindex_target_swap_new * S ((S (j)) * td) + (a)))) - 0179
specialize beta_prefix_swap_last_from_entries z - 0180
specialize beta_prefix_swap_last_from_entries d - 0181
specialize beta_prefix_swap_last_from_entries l - 0182
specialize beta_prefix_swap_last_from_entries x - 0183
specialize beta_prefix_swap_last_from_entries x1 - 0184
specialize beta_prefix_swap_last_from_entries x3 - 0185
apply beta_prefix_swap_last_from_entries - 0186
exact hsplit_right - 0187
exact htarget_at_preimage - 0188
exact htarget_last_decoded_witness - 0189
cases htarget_swap - 0190
cases htarget_swap_witness - 0191
cases htarget_swap_witness_witness - 0192
cases htarget_swap_witness_witness_right - 0193
have hswapped_bounded : forall fp_i_reindex_swapped_bounded. (exists fp_gap_reindex_swapped_bounded_index. fp_gap_reindex_swapped_bounded_index + S fp_i_reindex_swapped_bounded = S l) -> exists fp_value_reindex_swapped_bounded. ((((exists ff_h_reindex_swapped_bounded_entry. ff_h_reindex_swapped_bounded_entry + S (fp_value_reindex_swapped_bounded) = S ((S (fp_i_reindex_swapped_bounded)) * x5)) /\ exists ff_q_reindex_swapped_bounded_entry. x4 = ff_q_reindex_swapped_bounded_entry * S ((S (fp_i_reindex_swapped_bounded)) * x5) + (fp_value_reindex_swapped_bounded))) /\ (exists fp_gap_reindex_swapped_bounded_value. fp_gap_reindex_swapped_bounded_value + S fp_value_reindex_swapped_bounded = S l)) - 0194
specialize finite_swap_last_bounded r - 0195
specialize finite_swap_last_bounded s - 0196
specialize finite_swap_last_bounded x4 - 0197
specialize finite_swap_last_bounded x5 - 0198
specialize finite_swap_last_bounded l - 0199
specialize finite_swap_last_bounded (S l) - 0200
specialize finite_swap_last_bounded x - 0201
specialize finite_swap_last_bounded l - 0202
specialize finite_swap_last_bounded x2 - 0203
apply finite_swap_last_bounded - 0204
refl - 0205
exact hsplit_right - 0206
exact hbounded - 0207
exact hpreimage_witness_right - 0208
exact hmap_last_decoded_witness - 0209
exact hmap_swap_witness_witness_left - 0210
exact hmap_swap_witness_witness_right_left - 0211
exact hmap_swap_witness_witness_right_right - 0212
have hswapped_injective : forall fp_i_reindex_swapped_injective fp_j_reindex_swapped_injective fp_value_reindex_swapped_injective. (exists fp_gap_reindex_swapped_injective_i. fp_gap_reindex_swapped_injective_i + S fp_i_reindex_swapped_injective = S l) -> (exists fp_gap_reindex_swapped_injective_j. fp_gap_reindex_swapped_injective_j + S fp_j_reindex_swapped_injective = S l) -> (((exists ff_h_reindex_swapped_injective_left. ff_h_reindex_swapped_injective_left + S (fp_value_reindex_swapped_injective) = S ((S (fp_i_reindex_swapped_injective)) * x5)) /\ exists ff_q_reindex_swapped_injective_left. x4 = ff_q_reindex_swapped_injective_left * S ((S (fp_i_reindex_swapped_injective)) * x5) + (fp_value_reindex_swapped_injective))) -> (((exists ff_h_reindex_swapped_injective_right. ff_h_reindex_swapped_injective_right + S (fp_value_reindex_swapped_injective) = S ((S (fp_j_reindex_swapped_injective)) * x5)) /\ exists ff_q_reindex_swapped_injective_right. x4 = ff_q_reindex_swapped_injective_right * S ((S (fp_j_reindex_swapped_injective)) * x5) + (fp_value_reindex_swapped_injective))) -> fp_i_reindex_swapped_injective = fp_j_reindex_swapped_injective - 0213
specialize finite_swap_last_injective r - 0214
specialize finite_swap_last_injective s - 0215
specialize finite_swap_last_injective x4 - 0216
specialize finite_swap_last_injective x5 - 0217
specialize finite_swap_last_injective l - 0218
specialize finite_swap_last_injective (S l) - 0219
specialize finite_swap_last_injective x - 0220
specialize finite_swap_last_injective l - 0221
specialize finite_swap_last_injective x2 - 0222
apply finite_swap_last_injective - 0223
refl - 0224
exact hsplit_right - 0225
exact hinjective - 0226
exact hpreimage_witness_right - 0227
exact hmap_last_decoded_witness - 0228
exact hmap_swap_witness_witness_left - 0229
exact hmap_swap_witness_witness_right_left - 0230
exact hmap_swap_witness_witness_right_right - 0231
have hswapped_target_product_exists : exists t. (exists ff_u_reindex_swapped_target_exists ff_v_reindex_swapped_target_exists. ((((exists ff_h_reindex_swapped_target_exists_start. ff_h_reindex_swapped_target_exists_start + S (1) = S ((S (0)) * ff_v_reindex_swapped_target_exists)) /\ exists ff_q_reindex_swapped_target_exists_start. ff_u_reindex_swapped_target_exists = ff_q_reindex_swapped_target_exists_start * S ((S (0)) * ff_v_reindex_swapped_target_exists) + (1))) /\ ((((exists ff_h_reindex_swapped_target_exists_terminal. ff_h_reindex_swapped_target_exists_terminal + S (t) = S ((S (S l)) * ff_v_reindex_swapped_target_exists)) /\ exists ff_q_reindex_swapped_target_exists_terminal. ff_u_reindex_swapped_target_exists = ff_q_reindex_swapped_target_exists_terminal * S ((S (S l)) * ff_v_reindex_swapped_target_exists) + (t))) /\ forall ff_i_reindex_swapped_target_exists. (exists ff_lt_reindex_swapped_target_exists_bound. ff_lt_reindex_swapped_target_exists_bound + S ff_i_reindex_swapped_target_exists = S l) -> exists ff_p_reindex_swapped_target_exists ff_r_reindex_swapped_target_exists ff_s_reindex_swapped_target_exists. ((((exists ff_h_reindex_swapped_target_exists_factor. ff_h_reindex_swapped_target_exists_factor + S (ff_p_reindex_swapped_target_exists) = S ((S (ff_i_reindex_swapped_target_exists)) * x7)) /\ exists ff_q_reindex_swapped_target_exists_factor. x6 = ff_q_reindex_swapped_target_exists_factor * S ((S (ff_i_reindex_swapped_target_exists)) * x7) + (ff_p_reindex_swapped_target_exists))) /\ ((((exists ff_h_reindex_swapped_target_exists_partial. ff_h_reindex_swapped_target_exists_partial + S (ff_r_reindex_swapped_target_exists) = S ((S (ff_i_reindex_swapped_target_exists)) * ff_v_reindex_swapped_target_exists)) /\ exists ff_q_reindex_swapped_target_exists_partial. ff_u_reindex_swapped_target_exists = ff_q_reindex_swapped_target_exists_partial * S ((S (ff_i_reindex_swapped_target_exists)) * ff_v_reindex_swapped_target_exists) + (ff_r_reindex_swapped_target_exists))) /\ ((((exists ff_h_reindex_swapped_target_exists_successor. ff_h_reindex_swapped_target_exists_successor + S (ff_s_reindex_swapped_target_exists) = S ((S (S ff_i_reindex_swapped_target_exists)) * ff_v_reindex_swapped_target_exists)) /\ exists ff_q_reindex_swapped_target_exists_successor. ff_u_reindex_swapped_target_exists = ff_q_reindex_swapped_target_exists_successor * S ((S (S ff_i_reindex_swapped_target_exists)) * ff_v_reindex_swapped_target_exists) + (ff_s_reindex_swapped_target_exists))) /\ ff_s_reindex_swapped_target_exists = ff_r_reindex_swapped_target_exists * ff_p_reindex_swapped_target_exists)))))) - 0232
specialize beta_product_exists x6 - 0233
specialize beta_product_exists x7 - 0234
specialize beta_product_exists (S l) - 0235
exact beta_product_exists - 0236
cases hswapped_target_product_exists - 0237
have htarget_product_swap : q = x8 - 0238
specialize beta_product_swap_last_invariant z - 0239
specialize beta_product_swap_last_invariant d - 0240
specialize beta_product_swap_last_invariant x6 - 0241
specialize beta_product_swap_last_invariant x7 - 0242
specialize beta_product_swap_last_invariant l - 0243
specialize beta_product_swap_last_invariant x - 0244
specialize beta_product_swap_last_invariant x1 - 0245
specialize beta_product_swap_last_invariant x3 - 0246
specialize beta_product_swap_last_invariant q - 0247
specialize beta_product_swap_last_invariant x8 - 0248
apply beta_product_swap_last_invariant - 0249
exact hsplit_right - 0250
exact htarget_at_preimage - 0251
exact htarget_last_decoded_witness - 0252
exact htarget_swap_witness_witness_left - 0253
exact htarget_swap_witness_witness_right_left - 0254
exact htarget_swap_witness_witness_right_right - 0255
exact htarget_product - 0256
exact hswapped_target_product_exists_witness - 0257
have hsource_at_map_last : ((exists ff_h_reindex_source_at_map_last. ff_h_reindex_source_at_map_last + S (x3) = S ((S (x2)) * c)) /\ exists ff_q_reindex_source_at_map_last. b = ff_q_reindex_source_at_map_last * S ((S (x2)) * c) + (x3)) - 0258
specialize beta_at_exists b - 0259
specialize beta_at_exists c - 0260
specialize beta_at_exists x2 - 0261
cases beta_at_exists - 0262
have htarget_from_map_last : ((exists ff_h_reindex_target_from_map_last. ff_h_reindex_target_from_map_last + S (x9) = S ((S (l)) * d)) /\ exists ff_q_reindex_target_from_map_last. z = ff_q_reindex_target_from_map_last * S ((S (l)) * d) + (x9)) - 0263
specialize haligned l - 0264
specialize haligned x2 - 0265
specialize haligned x9 - 0266
apply haligned - 0267
exact hlast_bound - 0268
exact hmap_last_decoded_witness - 0269
exact beta_at_exists_witness - 0270
have hmap_last_value : x9 = x3 - 0271
specialize beta_at_unique z - 0272
specialize beta_at_unique d - 0273
specialize beta_at_unique l - 0274
specialize beta_at_unique x9 - 0275
specialize beta_at_unique x3 - 0276
apply beta_at_unique - 0277
exact htarget_from_map_last - 0278
exact htarget_last_decoded_witness - 0279
rewrite hmap_last_value at beta_at_exists_witness - 0280
rewrite hmap_last_value at beta_at_exists_witness - 0281
exact beta_at_exists_witness - 0282
have hswapped_aligned : forall fpr_i_reindex_swapped_aligned fpr_j_reindex_swapped_aligned fpr_x_reindex_swapped_aligned. (exists fpr_h_reindex_swapped_aligned. fpr_h_reindex_swapped_aligned + S fpr_i_reindex_swapped_aligned = S l) -> (((exists ff_h_reindex_swapped_aligned_map. ff_h_reindex_swapped_aligned_map + S (fpr_j_reindex_swapped_aligned) = S ((S (fpr_i_reindex_swapped_aligned)) * x5)) /\ exists ff_q_reindex_swapped_aligned_map. x4 = ff_q_reindex_swapped_aligned_map * S ((S (fpr_i_reindex_swapped_aligned)) * x5) + (fpr_j_reindex_swapped_aligned))) -> (((exists ff_h_reindex_swapped_aligned_source. ff_h_reindex_swapped_aligned_source + S (fpr_x_reindex_swapped_aligned) = S ((S (fpr_j_reindex_swapped_aligned)) * c)) /\ exists ff_q_reindex_swapped_aligned_source. b = ff_q_reindex_swapped_aligned_source * S ((S (fpr_j_reindex_swapped_aligned)) * c) + (fpr_x_reindex_swapped_aligned))) -> (((exists ff_h_reindex_swapped_aligned_target. ff_h_reindex_swapped_aligned_target + S (fpr_x_reindex_swapped_aligned) = S ((S (fpr_i_reindex_swapped_aligned)) * x7)) /\ exists ff_q_reindex_swapped_aligned_target. x6 = ff_q_reindex_swapped_aligned_target * S ((S (fpr_i_reindex_swapped_aligned)) * x7) + (fpr_x_reindex_swapped_aligned))) - 0283
specialize beta_reindex_alignment_swap_last r - 0284
specialize beta_reindex_alignment_swap_last s - 0285
specialize beta_reindex_alignment_swap_last x4 - 0286
specialize beta_reindex_alignment_swap_last x5 - 0287
specialize beta_reindex_alignment_swap_last b - 0288
specialize beta_reindex_alignment_swap_last c - 0289
specialize beta_reindex_alignment_swap_last z - 0290
specialize beta_reindex_alignment_swap_last d - 0291
specialize beta_reindex_alignment_swap_last x6 - 0292
specialize beta_reindex_alignment_swap_last x7 - 0293
specialize beta_reindex_alignment_swap_last l - 0294
specialize beta_reindex_alignment_swap_last x - 0295
specialize beta_reindex_alignment_swap_last x2 - 0296
specialize beta_reindex_alignment_swap_last x1 - 0297
specialize beta_reindex_alignment_swap_last x3 - 0298
apply beta_reindex_alignment_swap_last - 0299
exact hmap_swap_witness_witness_left - 0300
exact hmap_swap_witness_witness_right_left - 0301
exact hmap_swap_witness_witness_right_right - 0302
exact hsource_at_map_last - 0303
exact hsource_last_witness - 0304
exact htarget_swap_witness_witness_left - 0305
exact htarget_swap_witness_witness_right_left - 0306
exact htarget_swap_witness_witness_right_right - 0307
exact haligned - 0308
have hswapped_bounded_prefix : forall fp_i_reindex_swapped_bounded_prefix. (exists fp_gap_reindex_swapped_bounded_prefix_index. fp_gap_reindex_swapped_bounded_prefix_index + S fp_i_reindex_swapped_bounded_prefix = l) -> exists fp_value_reindex_swapped_bounded_prefix. ((((exists ff_h_reindex_swapped_bounded_prefix_entry. ff_h_reindex_swapped_bounded_prefix_entry + S (fp_value_reindex_swapped_bounded_prefix) = S ((S (fp_i_reindex_swapped_bounded_prefix)) * x5)) /\ exists ff_q_reindex_swapped_bounded_prefix_entry. x4 = ff_q_reindex_swapped_bounded_prefix_entry * S ((S (fp_i_reindex_swapped_bounded_prefix)) * x5) + (fp_value_reindex_swapped_bounded_prefix))) /\ (exists fp_gap_reindex_swapped_bounded_prefix_value. fp_gap_reindex_swapped_bounded_prefix_value + S fp_value_reindex_swapped_bounded_prefix = l)) - 0309
specialize finite_fixed_last_prefix_bounded x4 - 0310
specialize finite_fixed_last_prefix_bounded x5 - 0311
specialize finite_fixed_last_prefix_bounded l - 0312
apply finite_fixed_last_prefix_bounded - 0313
exact hswapped_bounded - 0314
exact hswapped_injective - 0315
exact hmap_swap_witness_witness_right_left - 0316
have hswapped_injective_prefix : forall fp_i_reindex_swapped_injective_prefix fp_j_reindex_swapped_injective_prefix fp_value_reindex_swapped_injective_prefix. (exists fp_gap_reindex_swapped_injective_prefix_i. fp_gap_reindex_swapped_injective_prefix_i + S fp_i_reindex_swapped_injective_prefix = l) -> (exists fp_gap_reindex_swapped_injective_prefix_j. fp_gap_reindex_swapped_injective_prefix_j + S fp_j_reindex_swapped_injective_prefix = l) -> (((exists ff_h_reindex_swapped_injective_prefix_left. ff_h_reindex_swapped_injective_prefix_left + S (fp_value_reindex_swapped_injective_prefix) = S ((S (fp_i_reindex_swapped_injective_prefix)) * x5)) /\ exists ff_q_reindex_swapped_injective_prefix_left. x4 = ff_q_reindex_swapped_injective_prefix_left * S ((S (fp_i_reindex_swapped_injective_prefix)) * x5) + (fp_value_reindex_swapped_injective_prefix))) -> (((exists ff_h_reindex_swapped_injective_prefix_right. ff_h_reindex_swapped_injective_prefix_right + S (fp_value_reindex_swapped_injective_prefix) = S ((S (fp_j_reindex_swapped_injective_prefix)) * x5)) /\ exists ff_q_reindex_swapped_injective_prefix_right. x4 = ff_q_reindex_swapped_injective_prefix_right * S ((S (fp_j_reindex_swapped_injective_prefix)) * x5) + (fp_value_reindex_swapped_injective_prefix))) -> fp_i_reindex_swapped_injective_prefix = fp_j_reindex_swapped_injective_prefix - 0317
specialize finite_injective_prefix_succ x4 - 0318
specialize finite_injective_prefix_succ x5 - 0319
specialize finite_injective_prefix_succ l - 0320
specialize finite_injective_prefix_succ (S l) - 0321
apply finite_injective_prefix_succ - 0322
refl - 0323
exact hswapped_injective - 0324
have hswapped_aligned_prefix : forall fpr_i_reindex_swapped_aligned_prefix fpr_j_reindex_swapped_aligned_prefix fpr_x_reindex_swapped_aligned_prefix. (exists fpr_h_reindex_swapped_aligned_prefix. fpr_h_reindex_swapped_aligned_prefix + S fpr_i_reindex_swapped_aligned_prefix = l) -> (((exists ff_h_reindex_swapped_aligned_prefix_map. ff_h_reindex_swapped_aligned_prefix_map + S (fpr_j_reindex_swapped_aligned_prefix) = S ((S (fpr_i_reindex_swapped_aligned_prefix)) * x5)) /\ exists ff_q_reindex_swapped_aligned_prefix_map. x4 = ff_q_reindex_swapped_aligned_prefix_map * S ((S (fpr_i_reindex_swapped_aligned_prefix)) * x5) + (fpr_j_reindex_swapped_aligned_prefix))) -> (((exists ff_h_reindex_swapped_aligned_prefix_source. ff_h_reindex_swapped_aligned_prefix_source + S (fpr_x_reindex_swapped_aligned_prefix) = S ((S (fpr_j_reindex_swapped_aligned_prefix)) * c)) /\ exists ff_q_reindex_swapped_aligned_prefix_source. b = ff_q_reindex_swapped_aligned_prefix_source * S ((S (fpr_j_reindex_swapped_aligned_prefix)) * c) + (fpr_x_reindex_swapped_aligned_prefix))) -> (((exists ff_h_reindex_swapped_aligned_prefix_target. ff_h_reindex_swapped_aligned_prefix_target + S (fpr_x_reindex_swapped_aligned_prefix) = S ((S (fpr_i_reindex_swapped_aligned_prefix)) * x7)) /\ exists ff_q_reindex_swapped_aligned_prefix_target. x6 = ff_q_reindex_swapped_aligned_prefix_target * S ((S (fpr_i_reindex_swapped_aligned_prefix)) * x7) + (fpr_x_reindex_swapped_aligned_prefix))) - 0325
intro i - 0326
intro j - 0327
intro a - 0328
intro hi - 0329
intro hmap - 0330
intro hsource - 0331
specialize hswapped_aligned i - 0332
specialize hswapped_aligned j - 0333
specialize hswapped_aligned a - 0334
apply hswapped_aligned - 0335
specialize le_succ (S i) - 0336
specialize le_succ l - 0337
apply le_succ - 0338
exact hi - 0339
exact hmap - 0340
exact hsource - 0341
have hswapped_prefix_products_equal : forall u v. (exists ff_u_reindex_source_prefix_product ff_v_reindex_source_prefix_product. ((((exists ff_h_reindex_source_prefix_product_start. ff_h_reindex_source_prefix_product_start + S (1) = S ((S (0)) * ff_v_reindex_source_prefix_product)) /\ exists ff_q_reindex_source_prefix_product_start. ff_u_reindex_source_prefix_product = ff_q_reindex_source_prefix_product_start * S ((S (0)) * ff_v_reindex_source_prefix_product) + (1))) /\ ((((exists ff_h_reindex_source_prefix_product_terminal. ff_h_reindex_source_prefix_product_terminal + S (u) = S ((S (l)) * ff_v_reindex_source_prefix_product)) /\ exists ff_q_reindex_source_prefix_product_terminal. ff_u_reindex_source_prefix_product = ff_q_reindex_source_prefix_product_terminal * S ((S (l)) * ff_v_reindex_source_prefix_product) + (u))) /\ forall ff_i_reindex_source_prefix_product. (exists ff_lt_reindex_source_prefix_product_bound. ff_lt_reindex_source_prefix_product_bound + S ff_i_reindex_source_prefix_product = l) -> exists ff_p_reindex_source_prefix_product ff_r_reindex_source_prefix_product ff_s_reindex_source_prefix_product. ((((exists ff_h_reindex_source_prefix_product_factor. ff_h_reindex_source_prefix_product_factor + S (ff_p_reindex_source_prefix_product) = S ((S (ff_i_reindex_source_prefix_product)) * c)) /\ exists ff_q_reindex_source_prefix_product_factor. b = ff_q_reindex_source_prefix_product_factor * S ((S (ff_i_reindex_source_prefix_product)) * c) + (ff_p_reindex_source_prefix_product))) /\ ((((exists ff_h_reindex_source_prefix_product_partial. ff_h_reindex_source_prefix_product_partial + S (ff_r_reindex_source_prefix_product) = S ((S (ff_i_reindex_source_prefix_product)) * ff_v_reindex_source_prefix_product)) /\ exists ff_q_reindex_source_prefix_product_partial. ff_u_reindex_source_prefix_product = ff_q_reindex_source_prefix_product_partial * S ((S (ff_i_reindex_source_prefix_product)) * ff_v_reindex_source_prefix_product) + (ff_r_reindex_source_prefix_product))) /\ ((((exists ff_h_reindex_source_prefix_product_successor. ff_h_reindex_source_prefix_product_successor + S (ff_s_reindex_source_prefix_product) = S ((S (S ff_i_reindex_source_prefix_product)) * ff_v_reindex_source_prefix_product)) /\ exists ff_q_reindex_source_prefix_product_successor. ff_u_reindex_source_prefix_product = ff_q_reindex_source_prefix_product_successor * S ((S (S ff_i_reindex_source_prefix_product)) * ff_v_reindex_source_prefix_product) + (ff_s_reindex_source_prefix_product))) /\ ff_s_reindex_source_prefix_product = ff_r_reindex_source_prefix_product * ff_p_reindex_source_prefix_product)))))) -> (exists ff_u_reindex_swapped_target_prefix_product ff_v_reindex_swapped_target_prefix_product. ((((exists ff_h_reindex_swapped_target_prefix_product_start. ff_h_reindex_swapped_target_prefix_product_start + S (1) = S ((S (0)) * ff_v_reindex_swapped_target_prefix_product)) /\ exists ff_q_reindex_swapped_target_prefix_product_start. ff_u_reindex_swapped_target_prefix_product = ff_q_reindex_swapped_target_prefix_product_start * S ((S (0)) * ff_v_reindex_swapped_target_prefix_product) + (1))) /\ ((((exists ff_h_reindex_swapped_target_prefix_product_terminal. ff_h_reindex_swapped_target_prefix_product_terminal + S (v) = S ((S (l)) * ff_v_reindex_swapped_target_prefix_product)) /\ exists ff_q_reindex_swapped_target_prefix_product_terminal. ff_u_reindex_swapped_target_prefix_product = ff_q_reindex_swapped_target_prefix_product_terminal * S ((S (l)) * ff_v_reindex_swapped_target_prefix_product) + (v))) /\ forall ff_i_reindex_swapped_target_prefix_product. (exists ff_lt_reindex_swapped_target_prefix_product_bound. ff_lt_reindex_swapped_target_prefix_product_bound + S ff_i_reindex_swapped_target_prefix_product = l) -> exists ff_p_reindex_swapped_target_prefix_product ff_r_reindex_swapped_target_prefix_product ff_s_reindex_swapped_target_prefix_product. ((((exists ff_h_reindex_swapped_target_prefix_product_factor. ff_h_reindex_swapped_target_prefix_product_factor + S (ff_p_reindex_swapped_target_prefix_product) = S ((S (ff_i_reindex_swapped_target_prefix_product)) * x7)) /\ exists ff_q_reindex_swapped_target_prefix_product_factor. x6 = ff_q_reindex_swapped_target_prefix_product_factor * S ((S (ff_i_reindex_swapped_target_prefix_product)) * x7) + (ff_p_reindex_swapped_target_prefix_product))) /\ ((((exists ff_h_reindex_swapped_target_prefix_product_partial. ff_h_reindex_swapped_target_prefix_product_partial + S (ff_r_reindex_swapped_target_prefix_product) = S ((S (ff_i_reindex_swapped_target_prefix_product)) * ff_v_reindex_swapped_target_prefix_product)) /\ exists ff_q_reindex_swapped_target_prefix_product_partial. ff_u_reindex_swapped_target_prefix_product = ff_q_reindex_swapped_target_prefix_product_partial * S ((S (ff_i_reindex_swapped_target_prefix_product)) * ff_v_reindex_swapped_target_prefix_product) + (ff_r_reindex_swapped_target_prefix_product))) /\ ((((exists ff_h_reindex_swapped_target_prefix_product_successor. ff_h_reindex_swapped_target_prefix_product_successor + S (ff_s_reindex_swapped_target_prefix_product) = S ((S (S ff_i_reindex_swapped_target_prefix_product)) * ff_v_reindex_swapped_target_prefix_product)) /\ exists ff_q_reindex_swapped_target_prefix_product_successor. ff_u_reindex_swapped_target_prefix_product = ff_q_reindex_swapped_target_prefix_product_successor * S ((S (S ff_i_reindex_swapped_target_prefix_product)) * ff_v_reindex_swapped_target_prefix_product) + (ff_s_reindex_swapped_target_prefix_product))) /\ ff_s_reindex_swapped_target_prefix_product = ff_r_reindex_swapped_target_prefix_product * ff_p_reindex_swapped_target_prefix_product)))))) -> u = v - 0342
intro u - 0343
intro v - 0344
intro hsource_prefix_product - 0345
intro htarget_prefix_product - 0346
specialize IH x4 - 0347
specialize IH x5 - 0348
specialize IH b - 0349
specialize IH c - 0350
specialize IH x6 - 0351
specialize IH x7 - 0352
specialize IH u - 0353
specialize IH v - 0354
apply IH - 0355
exact hswapped_bounded_prefix - 0356
exact hswapped_injective_prefix - 0357
exact hswapped_aligned_prefix - 0358
exact hsource_prefix_product - 0359
exact htarget_prefix_product - 0360
have hproduct_swapped : p = x8 - 0361
specialize beta_product_reindex_fixed_last x4 - 0362
specialize beta_product_reindex_fixed_last x5 - 0363
specialize beta_product_reindex_fixed_last b - 0364
specialize beta_product_reindex_fixed_last c - 0365
specialize beta_product_reindex_fixed_last x6 - 0366
specialize beta_product_reindex_fixed_last x7 - 0367
specialize beta_product_reindex_fixed_last l - 0368
specialize beta_product_reindex_fixed_last p - 0369
specialize beta_product_reindex_fixed_last x8 - 0370
apply beta_product_reindex_fixed_last - 0371
exact hswapped_aligned - 0372
exact hmap_swap_witness_witness_right_left - 0373
exact hsource_product - 0374
exact hswapped_target_product_exists_witness - 0375
exact hswapped_prefix_products_equal - 0376
trans x8 - 0377
exact hproduct_swapped - 0378
symm - 0379
exact htarget_product_swap