Exact expanded PA statement
forall mb mc sb sc tb tc l m s. (forall fpmp_index_recode_before fpmp_left_recode_before fpmp_right_recode_before fpmp_target_recode_before. (exists fpmp_gap_recode_before. fpmp_gap_recode_before + S fpmp_index_recode_before = l) -> (((exists ff_h_fpmp_recode_before_left. ff_h_fpmp_recode_before_left + S (fpmp_left_recode_before) = S ((S (fpmp_index_recode_before)) * mc)) /\ exists ff_q_fpmp_recode_before_left. mb = ff_q_fpmp_recode_before_left * S ((S (fpmp_index_recode_before)) * mc) + (fpmp_left_recode_before))) -> (((exists ff_h_fpmp_recode_before_right. ff_h_fpmp_recode_before_right + S (fpmp_right_recode_before) = S ((S (fpmp_index_recode_before)) * sc)) /\ exists ff_q_fpmp_recode_before_right. sb = ff_q_fpmp_recode_before_right * S ((S (fpmp_index_recode_before)) * sc) + (fpmp_right_recode_before))) -> (((exists ff_h_fpmp_recode_before_target. ff_h_fpmp_recode_before_target + S (fpmp_target_recode_before) = S ((S (fpmp_index_recode_before)) * tc)) /\ exists ff_q_fpmp_recode_before_target. tb = ff_q_fpmp_recode_before_target * S ((S (fpmp_index_recode_before)) * tc) + (fpmp_target_recode_before))) -> fpmp_target_recode_before = fpmp_left_recode_before * fpmp_right_recode_before) -> (((exists ff_h_recode_left_last. ff_h_recode_left_last + S (m) = S ((S (l)) * mc)) /\ exists ff_q_recode_left_last. mb = ff_q_recode_left_last * S ((S (l)) * mc) + (m))) -> (((exists ff_h_recode_right_last. ff_h_recode_right_last + S (s) = S ((S (l)) * sc)) /\ exists ff_q_recode_right_last. sb = ff_q_recode_right_last * S ((S (l)) * sc) + (s))) -> exists z d. (forall fpmp_index_recode_after fpmp_left_recode_after fpmp_right_recode_after fpmp_target_recode_after. (exists fpmp_gap_recode_after. fpmp_gap_recode_after + S fpmp_index_recode_after = S l) -> (((exists ff_h_fpmp_recode_after_left. ff_h_fpmp_recode_after_left + S (fpmp_left_recode_after) = S ((S (fpmp_index_recode_after)) * mc)) /\ exists ff_q_fpmp_recode_after_left. mb = ff_q_fpmp_recode_after_left * S ((S (fpmp_index_recode_after)) * mc) + (fpmp_left_recode_after))) -> (((exists ff_h_fpmp_recode_after_right. ff_h_fpmp_recode_after_right + S (fpmp_right_recode_after) = S ((S (fpmp_index_recode_after)) * sc)) /\ exists ff_q_fpmp_recode_after_right. sb = ff_q_fpmp_recode_after_right * S ((S (fpmp_index_recode_after)) * sc) + (fpmp_right_recode_after))) -> (((exists ff_h_fpmp_recode_after_target. ff_h_fpmp_recode_after_target + S (fpmp_target_recode_after) = S ((S (fpmp_index_recode_after)) * d)) /\ exists ff_q_fpmp_recode_after_target. z = ff_q_fpmp_recode_after_target * S ((S (fpmp_index_recode_after)) * d) + (fpmp_target_recode_after))) -> fpmp_target_recode_after = fpmp_left_recode_after * fpmp_right_recode_after)Structural proof guide
Generated structural guide
Append the product of the two final decoded values and preserve all earlier products.
Use the direct prerequisites beta_prefix_extend, finite_lt_succ_eq_or_lt, beta_at_exists, beta_at_unique as previously established PA formulas.
The proof proceeds by case analysis (5), intermediate claims (9), equality transport (6).
Referenced ingredients
Proof neighborhood
Direct dependencies
PA002X beta_prefix_extend PA003D finite_lt_succ_eq_or_lt PA0029 beta_at_exists PA002F beta_at_uniqueDirect 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
intro mb - 0002
intro mc - 0003
intro sb - 0004
intro sc - 0005
intro tb - 0006
intro tc - 0007
intro l - 0008
intro m - 0009
intro s - 0010
intro haligned - 0011
intro hm_last - 0012
intro hs_last - 0013
specialize beta_prefix_extend l - 0014
specialize beta_prefix_extend tb - 0015
specialize beta_prefix_extend tc - 0016
specialize beta_prefix_extend (m * s) - 0017
cases beta_prefix_extend - 0018
cases beta_prefix_extend_witness - 0019
cases beta_prefix_extend_witness_witness - 0020
exists x - 0021
exists x1 - 0022
intro i - 0023
intro a - 0024
intro b - 0025
intro t - 0026
intro hi - 0027
intro ha - 0028
intro hb - 0029
intro ht - 0030
have hsplit : i = l \/ exists gap. gap + S i = l - 0031
specialize finite_lt_succ_eq_or_lt l - 0032
specialize finite_lt_succ_eq_or_lt i - 0033
apply finite_lt_succ_eq_or_lt - 0034
exact hi - 0035
cases hsplit - 0036
rewrite hsplit_left at ha - 0037
rewrite hsplit_left at ha - 0038
rewrite hsplit_left at hb - 0039
rewrite hsplit_left at hb - 0040
rewrite hsplit_left at ht - 0041
rewrite hsplit_left at ht - 0042
have hma : m = a - 0043
specialize beta_at_unique mb - 0044
specialize beta_at_unique mc - 0045
specialize beta_at_unique l - 0046
specialize beta_at_unique m - 0047
specialize beta_at_unique a - 0048
apply beta_at_unique - 0049
exact hm_last - 0050
exact ha - 0051
have hsb : s = b - 0052
specialize beta_at_unique sb - 0053
specialize beta_at_unique sc - 0054
specialize beta_at_unique l - 0055
specialize beta_at_unique s - 0056
specialize beta_at_unique b - 0057
apply beta_at_unique - 0058
exact hs_last - 0059
exact hb - 0060
have happended : ((exists fpmr_height_recode_appended_product. fpmr_height_recode_appended_product + S (m * s) = S ((S (l)) * x1)) /\ exists fpmr_quotient_recode_appended_product. x = fpmr_quotient_recode_appended_product * S ((S (l)) * x1) + (m * s)) - 0061
exact beta_prefix_extend_witness_witness_left - 0062
have ht_product : t = m * s - 0063
specialize beta_at_unique x - 0064
specialize beta_at_unique x1 - 0065
specialize beta_at_unique l - 0066
specialize beta_at_unique t - 0067
specialize beta_at_unique (m * s) - 0068
apply beta_at_unique - 0069
exact ht - 0070
exact happended - 0071
trans m * s - 0072
exact ht_product - 0073
congr - 0074
exact hma - 0075
exact hsb - 0076
have hold_exists : exists u. (((exists ff_h_recode_old_target_exists. ff_h_recode_old_target_exists + S (u) = S ((S (i)) * tc)) /\ exists ff_q_recode_old_target_exists. tb = ff_q_recode_old_target_exists * S ((S (i)) * tc) + (u))) - 0077
specialize beta_at_exists tb - 0078
specialize beta_at_exists tc - 0079
specialize beta_at_exists i - 0080
exact beta_at_exists - 0081
cases hold_exists - 0082
have hnew_old : ((exists ff_h_recode_new_old_target_entry. ff_h_recode_new_old_target_entry + S (x2) = S ((S (i)) * x1)) /\ exists ff_q_recode_new_old_target_entry. x = ff_q_recode_new_old_target_entry * S ((S (i)) * x1) + (x2)) - 0083
specialize beta_prefix_extend_witness_witness_right i - 0084
specialize beta_prefix_extend_witness_witness_right x2 - 0085
apply beta_prefix_extend_witness_witness_right - 0086
exact hsplit_right - 0087
exact hold_exists_witness - 0088
have htx : t = x2 - 0089
specialize beta_at_unique x - 0090
specialize beta_at_unique x1 - 0091
specialize beta_at_unique i - 0092
specialize beta_at_unique t - 0093
specialize beta_at_unique x2 - 0094
apply beta_at_unique - 0095
exact ht - 0096
exact hnew_old - 0097
have hold_product : x2 = a * b - 0098
specialize haligned i - 0099
specialize haligned a - 0100
specialize haligned b - 0101
specialize haligned x2 - 0102
apply haligned - 0103
exact hsplit_right - 0104
exact ha - 0105
exact hb - 0106
exact hold_exists_witness - 0107
trans x2 - 0108
exact htx - 0109
exact hold_product