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.
Statement with defined notation
∀ l. ∀ r. ∀ s. ∀ b. ∀ c. ∀ z. ∀ d. ∀ p. ∀ q. BoundedPrefix(r,s,l) → InjectivePrefix(r,s,l) → (∀ x. ∀ y. ∀ n. Lt(x,l) → BetaAt(r,s,x,y) → BetaAt(b,c,y,n) → BetaAt(z,d,x,n)) → Sum(b,c,l,p) → Sum(z,d,l,q) → p = qEvery purple notation token opens its conservative definition. This is a reading surface; the compiler expands the statement before the unchanged kernel checks it.
Definitions used by this theorem
In the theorem statement
8 occurrences
In local proof propositions
PD0002 Lt PD0013 BetaAt PD0015 Sum PD0024 BoundedPrefix PD0025 InjectivePrefix PD0026 SurjectivePrefix PD0027 ContainsPrefix44 occurrences
Exact expanded native-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 (0) = 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) + (0))) /\ ((((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_a_reindex_source_product ff_r_reindex_source_product ff_s_reindex_source_product. ((((exists ff_h_reindex_source_product_summand. ff_h_reindex_source_product_summand + S (ff_a_reindex_source_product) = S ((S (ff_i_reindex_source_product)) * c)) /\ exists ff_q_reindex_source_product_summand. b = ff_q_reindex_source_product_summand * S ((S (ff_i_reindex_source_product)) * c) + (ff_a_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_a_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 (0) = 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) + (0))) /\ ((((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_a_reindex_target_product ff_r_reindex_target_product ff_s_reindex_target_product. ((((exists ff_h_reindex_target_product_summand. ff_h_reindex_target_product_summand + S (ff_a_reindex_target_product) = S ((S (ff_i_reindex_target_product)) * d)) /\ exists ff_q_reindex_target_product_summand. z = ff_q_reindex_target_product_summand * S ((S (ff_i_reindex_target_product)) * d) + (ff_a_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_a_reindex_target_product)))))) -> p = qProof neighborhood
Direct theorem prerequisites
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 PA00CV beta_sum_swap_last_invariant PA0047 beta_sum_zero PA003H beta_sum_exists PA0029 beta_at_exists PA002F beta_at_unique PA0054 beta_reindex_alignment_swap_last PA00CW beta_sum_reindex_fixed_last PA001A le_refl PA002O le_succDirect theorem dependents
Definition-aware tactic body
Only local propositions introduced by have or suffices are compacted. The untrusted compiler re-expands each one before the original tactic script is replayed; defined notation is never accepted by the kernel. Open the exact replay line beneath every changed command.
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 (16)
01Induction on lL1–10
02Fix variables and assumptionsL11–14
03Establish hpL15–20
04Establish hqL21–30
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply beta sum zero.
05Fix variables and assumptionsL31–40
06Fix variables and assumptionsL41–43
07Establish hsurjectiveL44–50
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply finite bounded injective surjective.
- L44
have hsurjective : SurjectivePrefix(r,s,S l)Definitions: SurjectivePrefix(r,s,S l)Original native command in the exact edition - L45
specialize finite_bounded_injective_surjective (S l) - L46
specialize finite_bounded_injective_surjective r - L47
specialize finite_bounded_injective_surjective s - L48
apply finite_bounded_injective_surjective - L49
exact hbounded - L50
exact hinjective
08Establish hlast_boundL51–53
Establish this local claim before using it. It is not an additional assumption.
09Establish hpreimageL54–57
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply hsurjective.
- L54
have hpreimage : ContainsPrefix(r,s,S l,l)Definitions: ContainsPrefix(r,s,S l,l)Original native command in the exact edition - L55
specialize hsurjective l - L56
apply hsurjective - L57
exact hlast_bound
10Separate the logical casesL58–59
11Establish hsource_lastL60–64
Establish this local claim before using it. It is not an additional assumption.
- L60
have hsource_last : ∃ a. BetaAt(b,c,l,a)Definitions: BetaAt(b,c,l,a)Original native command in the exact edition - L61
specialize beta_at_exists b - L62
specialize beta_at_exists c - L63
specialize beta_at_exists l - L64
exact beta_at_exists
12Separate the logical casesL65–65
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L65
cases hsource_last
13Establish htarget_at_preimageL66–73
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply haligned.
- L66
have htarget_at_preimage : BetaAt(z,d,x,x1)Definitions: BetaAt(z,d,x,x1)Original native command in the exact edition - L67
specialize haligned x - L68
specialize haligned l - L69
specialize haligned x1 - L70
apply haligned - L71
exact hpreimage_witness_left - L72
exact hpreimage_witness_right - L73
exact hsource_last_witness
14Establish hsplitL74–78
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply finite lt succ eq or lt.
15Separate the logical casesL79–79
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L79
cases hsplit
16Establish hmap_lastL80–83
Establish this local claim before using it. It is not an additional assumption.
- L80
have hmap_last : BetaAt(r,s,l,l)Definitions: BetaAt(r,s,l,l)Original native command in the exact edition - L81
rewrite hsplit_left at hpreimage_witness_right - L82
rewrite hsplit_left at hpreimage_witness_right - L83
exact hpreimage_witness_right
17Establish hbounded_prefixL84–91
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply finite fixed last prefix bounded.
- L84
have hbounded_prefix : BoundedPrefix(r,s,l)Definitions: BoundedPrefix(r,s,l)Original native command in the exact edition - L85
specialize finite_fixed_last_prefix_bounded r - L86
specialize finite_fixed_last_prefix_bounded s - L87
specialize finite_fixed_last_prefix_bounded l - L88
apply finite_fixed_last_prefix_bounded - L89
exact hbounded - L90
exact hinjective - L91
exact hmap_last
18Establish hinjective_prefixL92–99
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply finite injective prefix succ.
- L92
have hinjective_prefix : InjectivePrefix(r,s,l)Definitions: InjectivePrefix(r,s,l)Original native command in the exact edition - L93
specialize finite_injective_prefix_succ r - L94
specialize finite_injective_prefix_succ s - L95
specialize finite_injective_prefix_succ l - L96
specialize finite_injective_prefix_succ (S l) - L97
apply finite_injective_prefix_succ - L98
refl - L99
exact hinjective
19Establish haligned_prefixL100–109
Establish this local claim before using it. It is not an additional assumption.
- L100
have haligned_prefix : ∀ fpr_i_reindex_aligned_prefix. ∀ fpr_j_reindex_aligned_prefix. ∀ fpr_x_reindex_aligned_prefix. Lt(fpr_i_reindex_aligned_prefix,l) → BetaAt(r,s,fpr_i_reindex_aligned_prefix,fpr_j_reindex_aligned_prefix) → BetaAt(b,c,fpr_j_reindex_aligned_prefix,fpr_x_reindex_aligned_prefix) → BetaAt(z,d,fpr_i_reindex_aligned_prefix,fpr_x_reindex_aligned_prefix)Definitions: Lt(fpr_i_reindex_aligned_prefix,l)BetaAt(r,s,fpr_i_reindex_aligned_prefix,fpr_j_reindex_aligned_prefix)BetaAt(b,c,fpr_j_reindex_aligned_prefix,fpr_x_reindex_aligned_prefix)BetaAt(z,d,fpr_i_reindex_aligned_prefix,fpr_x_reindex_aligned_prefix)Original native command in the exact edition - L101
intro i - L102
intro j - L103
intro a - L104
intro hi - L105
intro hmap - L106
intro hsource - L107
specialize haligned i - L108
specialize haligned j - L109
specialize haligned a
20Use earlier factsL110–116
21Establish hprefix_products_equalL117–126
Establish this local claim before using it. It is not an additional assumption.
- L117
have hprefix_products_equal : ∀ u. ∀ v. Sum(b,c,l,u) → Sum(z,d,l,v) → u = vDefinitions: Sum(b,c,l,u)Sum(z,d,l,v)Original native command in the exact edition - L118
intro u - L119
intro v - L120
intro hsource_prefix_product - L121
intro htarget_prefix_product - L122
specialize IH r - L123
specialize IH s - L124
specialize IH b - L125
specialize IH c - L126
specialize IH z
22Use earlier factsL127–136
Instantiate or apply named facts and discharge the corresponding proof obligations.
23Use earlier factsL137–146
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L137
specialize beta_sum_reindex_fixed_last s - L138
specialize beta_sum_reindex_fixed_last b - L139
specialize beta_sum_reindex_fixed_last c - L140
specialize beta_sum_reindex_fixed_last z - L141
specialize beta_sum_reindex_fixed_last d - L142
specialize beta_sum_reindex_fixed_last l - L143
specialize beta_sum_reindex_fixed_last p - L144
specialize beta_sum_reindex_fixed_last q - L145
apply beta_sum_reindex_fixed_last - L146
exact haligned
24Use earlier factsL147–150
25Establish hmap_last_decodedL151–155
Establish this local claim before using it. It is not an additional assumption.
- L151
have hmap_last_decoded : ∃ m. BetaAt(r,s,l,m)Definitions: BetaAt(r,s,l,m)Original native command in the exact edition - L152
specialize beta_at_exists r - L153
specialize beta_at_exists s - L154
specialize beta_at_exists l - L155
exact beta_at_exists
26Separate the logical casesL156–156
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L156
cases hmap_last_decoded
27Establish htarget_last_decodedL157–161
Establish this local claim before using it. It is not an additional assumption.
- L157
have htarget_last_decoded : ∃ w. BetaAt(z,d,l,w)Definitions: BetaAt(z,d,l,w)Original native command in the exact edition - L158
specialize beta_at_exists z - L159
specialize beta_at_exists d - L160
specialize beta_at_exists l - L161
exact beta_at_exists
28Separate the logical casesL162–162
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L162
cases htarget_last_decoded
29Establish hmap_swapL163–172
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply beta prefix swap last from entries.
- L163
have hmap_swap : ∃ rm. ∃ sm. BetaAt(rm,sm,x,x2) ∧ (BetaAt(rm,sm,l,l) ∧ (∀ y. ∀ z. Lt(y,S l) → ¬y = x → ¬y = l → BetaAt(r,s,y,z) → BetaAt(rm,sm,y,z)))Definitions: BetaAt(rm,sm,x,x2)BetaAt(rm,sm,l,l)Lt(y,S l)BetaAt(r,s,y,z)BetaAt(rm,sm,y,z)Original native command in the exact edition - L164
specialize beta_prefix_swap_last_from_entries r - L165
specialize beta_prefix_swap_last_from_entries s - L166
specialize beta_prefix_swap_last_from_entries l - L167
specialize beta_prefix_swap_last_from_entries x - L168
specialize beta_prefix_swap_last_from_entries l - L169
specialize beta_prefix_swap_last_from_entries x2 - L170
apply beta_prefix_swap_last_from_entries - L171
exact hsplit_right - L172
exact hpreimage_witness_right
30Use earlier factsL173–173
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L173
exact hmap_last_decoded_witness
31Separate the logical casesL174–177
32Establish htarget_swapL178–187
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply beta prefix swap last from entries.
- L178
have htarget_swap : ∃ tz. ∃ td. BetaAt(tz,td,x,x3) ∧ (BetaAt(tz,td,l,x1) ∧ (∀ y. ∀ n. Lt(y,S l) → ¬y = x → ¬y = l → BetaAt(z,d,y,n) → BetaAt(tz,td,y,n)))Definitions: BetaAt(tz,td,x,x3)BetaAt(tz,td,l,x1)Lt(y,S l)BetaAt(z,d,y,n)BetaAt(tz,td,y,n)Original native command in the exact edition - L179
specialize beta_prefix_swap_last_from_entries z - L180
specialize beta_prefix_swap_last_from_entries d - L181
specialize beta_prefix_swap_last_from_entries l - L182
specialize beta_prefix_swap_last_from_entries x - L183
specialize beta_prefix_swap_last_from_entries x1 - L184
specialize beta_prefix_swap_last_from_entries x3 - L185
apply beta_prefix_swap_last_from_entries - L186
exact hsplit_right - L187
exact htarget_at_preimage
33Use earlier factsL188–188
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L188
exact htarget_last_decoded_witness
34Separate the logical casesL189–192
35Establish hswapped_boundedL193–202
Establish this local claim before using it. It is not an additional assumption.
- L193
have hswapped_bounded : BoundedPrefix(x4,x5,S l)Definitions: BoundedPrefix(x4,x5,S l)Original native command in the exact edition - L194
specialize finite_swap_last_bounded r - L195
specialize finite_swap_last_bounded s - L196
specialize finite_swap_last_bounded x4 - L197
specialize finite_swap_last_bounded x5 - L198
specialize finite_swap_last_bounded l - L199
specialize finite_swap_last_bounded (S l) - L200
specialize finite_swap_last_bounded x - L201
specialize finite_swap_last_bounded l - L202
specialize finite_swap_last_bounded x2
36Use earlier factsL203–203
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L203
apply finite_swap_last_bounded
37Calculate and transport equalitiesL204–204
Carry out the recorded arithmetic or equality steps; inspect the exact commands for their direction and premises.
- L204
refl
38Use earlier factsL205–211
Instantiate or apply named facts and discharge the corresponding proof obligations.
39Establish hswapped_injectiveL212–221
Establish this local claim before using it. It is not an additional assumption.
- L212
have hswapped_injective : InjectivePrefix(x4,x5,S l)Definitions: InjectivePrefix(x4,x5,S l)Original native command in the exact edition - L213
specialize finite_swap_last_injective r - L214
specialize finite_swap_last_injective s - L215
specialize finite_swap_last_injective x4 - L216
specialize finite_swap_last_injective x5 - L217
specialize finite_swap_last_injective l - L218
specialize finite_swap_last_injective (S l) - L219
specialize finite_swap_last_injective x - L220
specialize finite_swap_last_injective l - L221
specialize finite_swap_last_injective x2
40Use earlier factsL222–222
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L222
apply finite_swap_last_injective
41Calculate and transport equalitiesL223–223
Carry out the recorded arithmetic or equality steps; inspect the exact commands for their direction and premises.
- L223
refl
42Use earlier factsL224–230
Instantiate or apply named facts and discharge the corresponding proof obligations.
43Establish hswapped_target_product_existsL231–235
Establish this local claim before using it. It is not an additional assumption.
- L231
have hswapped_target_product_exists : ∃ t. Sum(x6,x7,S l,t)Definitions: Sum(x6,x7,S l,t)Original native command in the exact edition - L232
specialize beta_sum_exists x6 - L233
specialize beta_sum_exists x7 - L234
specialize beta_sum_exists (S l) - L235
exact beta_sum_exists
44Separate the logical casesL236–236
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L236
cases hswapped_target_product_exists
45Establish htarget_product_swapL237–246
Establish this local claim before using it. It is not an additional assumption.
- L237
have htarget_product_swap : q = x8 - L238
specialize beta_sum_swap_last_invariant z - L239
specialize beta_sum_swap_last_invariant d - L240
specialize beta_sum_swap_last_invariant x6 - L241
specialize beta_sum_swap_last_invariant x7 - L242
specialize beta_sum_swap_last_invariant l - L243
specialize beta_sum_swap_last_invariant x - L244
specialize beta_sum_swap_last_invariant x1 - L245
specialize beta_sum_swap_last_invariant x3 - L246
specialize beta_sum_swap_last_invariant q
46Use earlier factsL247–256
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L247
specialize beta_sum_swap_last_invariant x8 - L248
apply beta_sum_swap_last_invariant - L249
exact hsplit_right - L250
exact htarget_at_preimage - L251
exact htarget_last_decoded_witness - L252
exact htarget_swap_witness_witness_left - L253
exact htarget_swap_witness_witness_right_left - L254
exact htarget_swap_witness_witness_right_right - L255
exact htarget_product - L256
exact hswapped_target_product_exists_witness
47Establish hsource_at_map_lastL257–260
Establish this local claim before using it. It is not an additional assumption.
- L257
have hsource_at_map_last : BetaAt(b,c,x2,x3)Definitions: BetaAt(b,c,x2,x3)Original native command in the exact edition - L258
specialize beta_at_exists b - L259
specialize beta_at_exists c - L260
specialize beta_at_exists x2
48Separate the logical casesL261–261
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L261
cases beta_at_exists
49Establish htarget_from_map_lastL262–269
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply haligned.
- L262
have htarget_from_map_last : BetaAt(z,d,l,x9)Definitions: BetaAt(z,d,l,x9)Original native command in the exact edition - L263
specialize haligned l - L264
specialize haligned x2 - L265
specialize haligned x9 - L266
apply haligned - L267
exact hlast_bound - L268
exact hmap_last_decoded_witness - L269
exact beta_at_exists_witness
50Establish hmap_last_valueL270–279
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply beta at unique.
- L270
have hmap_last_value : x9 = x3 - L271
specialize beta_at_unique z - L272
specialize beta_at_unique d - L273
specialize beta_at_unique l - L274
specialize beta_at_unique x9 - L275
specialize beta_at_unique x3 - L276
apply beta_at_unique - L277
exact htarget_from_map_last - L278
exact htarget_last_decoded_witness - L279
rewrite hmap_last_value at beta_at_exists_witness
51Calculate and transport equalitiesL280–280
Carry out the recorded arithmetic or equality steps; inspect the exact commands for their direction and premises.
- L280
rewrite hmap_last_value at beta_at_exists_witness
52Use earlier factsL281–281
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L281
exact beta_at_exists_witness
53Establish hswapped_alignedL282–291
Establish this local claim before using it. It is not an additional assumption.
- L282
have hswapped_aligned : ∀ fpr_i_reindex_swapped_aligned. ∀ fpr_j_reindex_swapped_aligned. ∀ fpr_x_reindex_swapped_aligned. Lt(fpr_i_reindex_swapped_aligned,S l) → BetaAt(x4,x5,fpr_i_reindex_swapped_aligned,fpr_j_reindex_swapped_aligned) → BetaAt(b,c,fpr_j_reindex_swapped_aligned,fpr_x_reindex_swapped_aligned) → BetaAt(x6,x7,fpr_i_reindex_swapped_aligned,fpr_x_reindex_swapped_aligned)Definitions: Lt(fpr_i_reindex_swapped_aligned,S l)BetaAt(x4,x5,fpr_i_reindex_swapped_aligned,fpr_j_reindex_swapped_aligned)BetaAt(b,c,fpr_j_reindex_swapped_aligned,fpr_x_reindex_swapped_aligned)BetaAt(x6,x7,fpr_i_reindex_swapped_aligned,fpr_x_reindex_swapped_aligned)Original native command in the exact edition - L283
specialize beta_reindex_alignment_swap_last r - L284
specialize beta_reindex_alignment_swap_last s - L285
specialize beta_reindex_alignment_swap_last x4 - L286
specialize beta_reindex_alignment_swap_last x5 - L287
specialize beta_reindex_alignment_swap_last b - L288
specialize beta_reindex_alignment_swap_last c - L289
specialize beta_reindex_alignment_swap_last z - L290
specialize beta_reindex_alignment_swap_last d - L291
specialize beta_reindex_alignment_swap_last x6
54Use earlier factsL292–301
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L292
specialize beta_reindex_alignment_swap_last x7 - L293
specialize beta_reindex_alignment_swap_last l - L294
specialize beta_reindex_alignment_swap_last x - L295
specialize beta_reindex_alignment_swap_last x2 - L296
specialize beta_reindex_alignment_swap_last x1 - L297
specialize beta_reindex_alignment_swap_last x3 - L298
apply beta_reindex_alignment_swap_last - L299
exact hmap_swap_witness_witness_left - L300
exact hmap_swap_witness_witness_right_left - L301
exact hmap_swap_witness_witness_right_right
55Use earlier factsL302–307
Instantiate or apply named facts and discharge the corresponding proof obligations.
56Establish hswapped_bounded_prefixL308–315
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply finite fixed last prefix bounded.
- L308
have hswapped_bounded_prefix : BoundedPrefix(x4,x5,l)Definitions: BoundedPrefix(x4,x5,l)Original native command in the exact edition - L309
specialize finite_fixed_last_prefix_bounded x4 - L310
specialize finite_fixed_last_prefix_bounded x5 - L311
specialize finite_fixed_last_prefix_bounded l - L312
apply finite_fixed_last_prefix_bounded - L313
exact hswapped_bounded - L314
exact hswapped_injective - L315
exact hmap_swap_witness_witness_right_left
57Establish hswapped_injective_prefixL316–323
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply finite injective prefix succ.
- L316
have hswapped_injective_prefix : InjectivePrefix(x4,x5,l)Definitions: InjectivePrefix(x4,x5,l)Original native command in the exact edition - L317
specialize finite_injective_prefix_succ x4 - L318
specialize finite_injective_prefix_succ x5 - L319
specialize finite_injective_prefix_succ l - L320
specialize finite_injective_prefix_succ (S l) - L321
apply finite_injective_prefix_succ - L322
refl - L323
exact hswapped_injective
58Establish hswapped_aligned_prefixL324–333
Establish this local claim before using it. It is not an additional assumption.
- L324
have hswapped_aligned_prefix : ∀ fpr_i_reindex_swapped_aligned_prefix. ∀ fpr_j_reindex_swapped_aligned_prefix. ∀ fpr_x_reindex_swapped_aligned_prefix. Lt(fpr_i_reindex_swapped_aligned_prefix,l) → BetaAt(x4,x5,fpr_i_reindex_swapped_aligned_prefix,fpr_j_reindex_swapped_aligned_prefix) → BetaAt(b,c,fpr_j_reindex_swapped_aligned_prefix,fpr_x_reindex_swapped_aligned_prefix) → BetaAt(x6,x7,fpr_i_reindex_swapped_aligned_prefix,fpr_x_reindex_swapped_aligned_prefix)Definitions: Lt(fpr_i_reindex_swapped_aligned_prefix,l)BetaAt(x4,x5,fpr_i_reindex_swapped_aligned_prefix,fpr_j_reindex_swapped_aligned_prefix)BetaAt(b,c,fpr_j_reindex_swapped_aligned_prefix,fpr_x_reindex_swapped_aligned_prefix)BetaAt(x6,x7,fpr_i_reindex_swapped_aligned_prefix,fpr_x_reindex_swapped_aligned_prefix)Original native command in the exact edition - L325
intro i - L326
intro j - L327
intro a - L328
intro hi - L329
intro hmap - L330
intro hsource - L331
specialize hswapped_aligned i - L332
specialize hswapped_aligned j - L333
specialize hswapped_aligned a
59Use earlier factsL334–340
60Establish hswapped_prefix_products_equalL341–350
Establish this local claim before using it. It is not an additional assumption.
- L341
have hswapped_prefix_products_equal : ∀ u. ∀ v. Sum(b,c,l,u) → Sum(x6,x7,l,v) → u = vDefinitions: Sum(b,c,l,u)Sum(x6,x7,l,v)Original native command in the exact edition - L342
intro u - L343
intro v - L344
intro hsource_prefix_product - L345
intro htarget_prefix_product - L346
specialize IH x4 - L347
specialize IH x5 - L348
specialize IH b - L349
specialize IH c - L350
specialize IH x6
61Use earlier factsL351–359
Instantiate or apply named facts and discharge the corresponding proof obligations.
62Establish hproduct_swappedL360–369
Establish this local claim before using it. It is not an additional assumption.
- L360
have hproduct_swapped : p = x8 - L361
specialize beta_sum_reindex_fixed_last x4 - L362
specialize beta_sum_reindex_fixed_last x5 - L363
specialize beta_sum_reindex_fixed_last b - L364
specialize beta_sum_reindex_fixed_last c - L365
specialize beta_sum_reindex_fixed_last x6 - L366
specialize beta_sum_reindex_fixed_last x7 - L367
specialize beta_sum_reindex_fixed_last l - L368
specialize beta_sum_reindex_fixed_last p - L369
specialize beta_sum_reindex_fixed_last x8
63Use earlier factsL370–375
Instantiate or apply named facts and discharge the corresponding proof obligations.
64Calculate and transport equalitiesL376–376
Carry out the recorded arithmetic or equality steps; inspect the exact commands for their direction and premises.
- L376
trans x8
65Use earlier factsL377–377
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L377
exact hproduct_swapped
66Calculate and transport equalitiesL378–378
Carry out the recorded arithmetic or equality steps; inspect the exact commands for their direction and premises.
- L378
symm
67Use earlier factsL379–379
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L379
exact htarget_product_swap
Original defined command ledger · 379 lines
- 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 = 0 - 0016
specialize beta_sum_zero b - 0017
specialize beta_sum_zero c - 0018
specialize beta_sum_zero p - 0019
apply beta_sum_zero - 0020
exact hsource_product - 0021
have hq : q = 0 - 0022
specialize beta_sum_zero z - 0023
specialize beta_sum_zero d - 0024
specialize beta_sum_zero q - 0025
apply beta_sum_zero - 0026
exact htarget_product - 0027
trans 0 - 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 : SurjectivePrefix(r,s,S l)Exact native replay line
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 : Lt(l,S l)Exact native replay line
have hlast_bound : exists h. h + S l = S l - 0052
specialize le_refl (S l) - 0053
exact le_refl - 0054
have hpreimage : ContainsPrefix(r,s,S l,l)Exact native replay line
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 : ∃ a. BetaAt(b,c,l,a)Exact native replay line
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 : BetaAt(z,d,x,x1)Exact native replay line
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 ∨ Lt(x,l)Exact native replay line
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 : BetaAt(r,s,l,l)Exact native replay line
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 : BoundedPrefix(r,s,l)Exact native replay line
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 : InjectivePrefix(r,s,l)Exact native replay line
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 : ∀ fpr_i_reindex_aligned_prefix. ∀ fpr_j_reindex_aligned_prefix. ∀ fpr_x_reindex_aligned_prefix. Lt(fpr_i_reindex_aligned_prefix,l) → BetaAt(r,s,fpr_i_reindex_aligned_prefix,fpr_j_reindex_aligned_prefix) → BetaAt(b,c,fpr_j_reindex_aligned_prefix,fpr_x_reindex_aligned_prefix) → BetaAt(z,d,fpr_i_reindex_aligned_prefix,fpr_x_reindex_aligned_prefix)Exact native replay line
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 : ∀ u. ∀ v. Sum(b,c,l,u) → Sum(z,d,l,v) → u = vExact native replay line
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 (0) = 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) + (0))) /\ ((((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_a_reindex_source_prefix_product ff_r_reindex_source_prefix_product ff_s_reindex_source_prefix_product. ((((exists ff_h_reindex_source_prefix_product_summand. ff_h_reindex_source_prefix_product_summand + S (ff_a_reindex_source_prefix_product) = S ((S (ff_i_reindex_source_prefix_product)) * c)) /\ exists ff_q_reindex_source_prefix_product_summand. b = ff_q_reindex_source_prefix_product_summand * S ((S (ff_i_reindex_source_prefix_product)) * c) + (ff_a_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_a_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 (0) = 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) + (0))) /\ ((((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_a_reindex_target_prefix_product ff_r_reindex_target_prefix_product ff_s_reindex_target_prefix_product. ((((exists ff_h_reindex_target_prefix_product_summand. ff_h_reindex_target_prefix_product_summand + S (ff_a_reindex_target_prefix_product) = S ((S (ff_i_reindex_target_prefix_product)) * d)) /\ exists ff_q_reindex_target_prefix_product_summand. z = ff_q_reindex_target_prefix_product_summand * S ((S (ff_i_reindex_target_prefix_product)) * d) + (ff_a_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_a_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_sum_reindex_fixed_last r - 0137
specialize beta_sum_reindex_fixed_last s - 0138
specialize beta_sum_reindex_fixed_last b - 0139
specialize beta_sum_reindex_fixed_last c - 0140
specialize beta_sum_reindex_fixed_last z - 0141
specialize beta_sum_reindex_fixed_last d - 0142
specialize beta_sum_reindex_fixed_last l - 0143
specialize beta_sum_reindex_fixed_last p - 0144
specialize beta_sum_reindex_fixed_last q - 0145
apply beta_sum_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 : ∃ m. BetaAt(r,s,l,m)Exact native replay line
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 : ∃ w. BetaAt(z,d,l,w)Exact native replay line
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 : ∃ rm. ∃ sm. BetaAt(rm,sm,x,x2) ∧ (BetaAt(rm,sm,l,l) ∧ (∀ y. ∀ z. Lt(y,S l) → ¬y = x → ¬y = l → BetaAt(r,s,y,z) → BetaAt(rm,sm,y,z)))Exact native replay line
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 : ∃ tz. ∃ td. BetaAt(tz,td,x,x3) ∧ (BetaAt(tz,td,l,x1) ∧ (∀ y. ∀ n. Lt(y,S l) → ¬y = x → ¬y = l → BetaAt(z,d,y,n) → BetaAt(tz,td,y,n)))Exact native replay line
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 : BoundedPrefix(x4,x5,S l)Exact native replay line
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 : InjectivePrefix(x4,x5,S l)Exact native replay line
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 : ∃ t. Sum(x6,x7,S l,t)Exact native replay line
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 (0) = 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) + (0))) /\ ((((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_a_reindex_swapped_target_exists ff_r_reindex_swapped_target_exists ff_s_reindex_swapped_target_exists. ((((exists ff_h_reindex_swapped_target_exists_summand. ff_h_reindex_swapped_target_exists_summand + S (ff_a_reindex_swapped_target_exists) = S ((S (ff_i_reindex_swapped_target_exists)) * x7)) /\ exists ff_q_reindex_swapped_target_exists_summand. x6 = ff_q_reindex_swapped_target_exists_summand * S ((S (ff_i_reindex_swapped_target_exists)) * x7) + (ff_a_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_a_reindex_swapped_target_exists)))))) - 0232
specialize beta_sum_exists x6 - 0233
specialize beta_sum_exists x7 - 0234
specialize beta_sum_exists (S l) - 0235
exact beta_sum_exists - 0236
cases hswapped_target_product_exists - 0237
have htarget_product_swap : q = x8 - 0238
specialize beta_sum_swap_last_invariant z - 0239
specialize beta_sum_swap_last_invariant d - 0240
specialize beta_sum_swap_last_invariant x6 - 0241
specialize beta_sum_swap_last_invariant x7 - 0242
specialize beta_sum_swap_last_invariant l - 0243
specialize beta_sum_swap_last_invariant x - 0244
specialize beta_sum_swap_last_invariant x1 - 0245
specialize beta_sum_swap_last_invariant x3 - 0246
specialize beta_sum_swap_last_invariant q - 0247
specialize beta_sum_swap_last_invariant x8 - 0248
apply beta_sum_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 : BetaAt(b,c,x2,x3)Exact native replay line
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 : BetaAt(z,d,l,x9)Exact native replay line
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 : ∀ fpr_i_reindex_swapped_aligned. ∀ fpr_j_reindex_swapped_aligned. ∀ fpr_x_reindex_swapped_aligned. Lt(fpr_i_reindex_swapped_aligned,S l) → BetaAt(x4,x5,fpr_i_reindex_swapped_aligned,fpr_j_reindex_swapped_aligned) → BetaAt(b,c,fpr_j_reindex_swapped_aligned,fpr_x_reindex_swapped_aligned) → BetaAt(x6,x7,fpr_i_reindex_swapped_aligned,fpr_x_reindex_swapped_aligned)Exact native replay line
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 : BoundedPrefix(x4,x5,l)Exact native replay line
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 : InjectivePrefix(x4,x5,l)Exact native replay line
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 : ∀ fpr_i_reindex_swapped_aligned_prefix. ∀ fpr_j_reindex_swapped_aligned_prefix. ∀ fpr_x_reindex_swapped_aligned_prefix. Lt(fpr_i_reindex_swapped_aligned_prefix,l) → BetaAt(x4,x5,fpr_i_reindex_swapped_aligned_prefix,fpr_j_reindex_swapped_aligned_prefix) → BetaAt(b,c,fpr_j_reindex_swapped_aligned_prefix,fpr_x_reindex_swapped_aligned_prefix) → BetaAt(x6,x7,fpr_i_reindex_swapped_aligned_prefix,fpr_x_reindex_swapped_aligned_prefix)Exact native replay line
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 : ∀ u. ∀ v. Sum(b,c,l,u) → Sum(x6,x7,l,v) → u = vExact native replay line
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 (0) = 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) + (0))) /\ ((((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_a_reindex_source_prefix_product ff_r_reindex_source_prefix_product ff_s_reindex_source_prefix_product. ((((exists ff_h_reindex_source_prefix_product_summand. ff_h_reindex_source_prefix_product_summand + S (ff_a_reindex_source_prefix_product) = S ((S (ff_i_reindex_source_prefix_product)) * c)) /\ exists ff_q_reindex_source_prefix_product_summand. b = ff_q_reindex_source_prefix_product_summand * S ((S (ff_i_reindex_source_prefix_product)) * c) + (ff_a_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_a_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 (0) = 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) + (0))) /\ ((((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_a_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_summand. ff_h_reindex_swapped_target_prefix_product_summand + S (ff_a_reindex_swapped_target_prefix_product) = S ((S (ff_i_reindex_swapped_target_prefix_product)) * x7)) /\ exists ff_q_reindex_swapped_target_prefix_product_summand. x6 = ff_q_reindex_swapped_target_prefix_product_summand * S ((S (ff_i_reindex_swapped_target_prefix_product)) * x7) + (ff_a_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_a_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_sum_reindex_fixed_last x4 - 0362
specialize beta_sum_reindex_fixed_last x5 - 0363
specialize beta_sum_reindex_fixed_last b - 0364
specialize beta_sum_reindex_fixed_last c - 0365
specialize beta_sum_reindex_fixed_last x6 - 0366
specialize beta_sum_reindex_fixed_last x7 - 0367
specialize beta_sum_reindex_fixed_last l - 0368
specialize beta_sum_reindex_fixed_last p - 0369
specialize beta_sum_reindex_fixed_last x8 - 0370
apply beta_sum_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