Exact expanded PA statement
forall mb mc H l. (forall gmp_index_predecessor_recode_range. (exists gsp_lt_gap_predecessor_recode_range_index_bound. gsp_lt_gap_predecessor_recode_range_index_bound + S gmp_index_predecessor_recode_range = l) -> exists gmp_magnitude_predecessor_recode_range. ((((exists ff_h_gmp_predecessor_recode_range_decoded. ff_h_gmp_predecessor_recode_range_decoded + S (gmp_magnitude_predecessor_recode_range) = S ((S (gmp_index_predecessor_recode_range)) * mc)) /\ exists ff_q_gmp_predecessor_recode_range_decoded. mb = ff_q_gmp_predecessor_recode_range_decoded * S ((S (gmp_index_predecessor_recode_range)) * mc) + (gmp_magnitude_predecessor_recode_range))) /\ ((exists gsp_lt_gap_predecessor_recode_range_positive. gsp_lt_gap_predecessor_recode_range_positive + S 0 = gmp_magnitude_predecessor_recode_range) /\ (exists gsp_le_gap_predecessor_recode_range_bounded. gsp_le_gap_predecessor_recode_range_bounded + gmp_magnitude_predecessor_recode_range = H)))) -> (exists rb rc. (forall gmp_index_predecessor_recode_result gmp_predecessor_predecessor_recode_result. (exists gsp_lt_gap_predecessor_recode_result_index_bound. gsp_lt_gap_predecessor_recode_result_index_bound + S gmp_index_predecessor_recode_result = l) -> (((exists gsp_beta_height_gmp_predecessor_recode_result_source. gsp_beta_height_gmp_predecessor_recode_result_source + S (S gmp_predecessor_predecessor_recode_result) = S ((S (gmp_index_predecessor_recode_result)) * mc)) /\ exists gsp_beta_quotient_gmp_predecessor_recode_result_source. mb = gsp_beta_quotient_gmp_predecessor_recode_result_source * S ((S (gmp_index_predecessor_recode_result)) * mc) + (S gmp_predecessor_predecessor_recode_result))) -> (((exists ff_h_gmp_predecessor_recode_result_target. ff_h_gmp_predecessor_recode_result_target + S (gmp_predecessor_predecessor_recode_result) = S ((S (gmp_index_predecessor_recode_result)) * rc)) /\ exists ff_q_gmp_predecessor_recode_result_target. rb = ff_q_gmp_predecessor_recode_result_target * S ((S (gmp_index_predecessor_recode_result)) * rc) + (gmp_predecessor_predecessor_recode_result)))))Structural proof guide
Generated structural guide
Every positive bounded beta prefix can be recoded pointwise by removing one successor from each value.
Use the direct prerequisites add_eq_zero_right, succ_ne_zero, le_succ, le_refl, ne_zero_of_one_le, nonzero_is_succ, finite_lt_succ_eq_or_lt, beta_at_unique, succ_injective, beta_prefix_extend as previously established PA formulas.
The proof proceeds by structural induction (1), case analysis (11), intermediate claims (9), equality transport (6).
Referenced ingredients
Proof neighborhood
Direct dependencies
PA0004 add_eq_zero_right PA0005 succ_ne_zero PA002O le_succ PA001A le_refl PA003U ne_zero_of_one_le PA001V nonzero_is_succ PA003D finite_lt_succ_eq_or_lt PA002F beta_at_unique PA003V succ_injective PA002X beta_prefix_extendDirect 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 H - 0004
induction l - 0005
intro hrange - 0006
exists 0 - 0007
exists 0 - 0008
intro i - 0009
intro r - 0010
intro hi - 0011
intro hsource - 0012
exfalso - 0013
cases hi - 0014
have hsi : S i = 0 - 0015
specialize add_eq_zero_right x - 0016
specialize add_eq_zero_right (S i) - 0017
apply add_eq_zero_right - 0018
exact hi_witness - 0019
specialize succ_ne_zero i - 0020
apply succ_ne_zero - 0021
exact hsi - 0022
intro hrange - 0023
have hprevious_range : forall gmp_index_predecessor_recode_previous_range. (exists gsp_lt_gap_predecessor_recode_previous_range_index_bound. gsp_lt_gap_predecessor_recode_previous_range_index_bound + S gmp_index_predecessor_recode_previous_range = l) -> exists gmp_magnitude_predecessor_recode_previous_range. ((((exists ff_h_gmp_predecessor_recode_previous_range_decoded. ff_h_gmp_predecessor_recode_previous_range_decoded + S (gmp_magnitude_predecessor_recode_previous_range) = S ((S (gmp_index_predecessor_recode_previous_range)) * mc)) /\ exists ff_q_gmp_predecessor_recode_previous_range_decoded. mb = ff_q_gmp_predecessor_recode_previous_range_decoded * S ((S (gmp_index_predecessor_recode_previous_range)) * mc) + (gmp_magnitude_predecessor_recode_previous_range))) /\ ((exists gsp_lt_gap_predecessor_recode_previous_range_positive. gsp_lt_gap_predecessor_recode_previous_range_positive + S 0 = gmp_magnitude_predecessor_recode_previous_range) /\ (exists gsp_le_gap_predecessor_recode_previous_range_bounded. gsp_le_gap_predecessor_recode_previous_range_bounded + gmp_magnitude_predecessor_recode_previous_range = H))) - 0024
intro i - 0025
intro hi - 0026
specialize hrange i - 0027
apply hrange - 0028
specialize le_succ (S i) - 0029
specialize le_succ l - 0030
apply le_succ - 0031
exact hi - 0032
have hprevious : exists rb rc. (forall gmp_index_predecessor_recode_previous_result gmp_predecessor_predecessor_recode_previous_result. (exists gsp_lt_gap_predecessor_recode_previous_result_index_bound. gsp_lt_gap_predecessor_recode_previous_result_index_bound + S gmp_index_predecessor_recode_previous_result = l) -> (((exists gsp_beta_height_gmp_predecessor_recode_previous_result_source. gsp_beta_height_gmp_predecessor_recode_previous_result_source + S (S gmp_predecessor_predecessor_recode_previous_result) = S ((S (gmp_index_predecessor_recode_previous_result)) * mc)) /\ exists gsp_beta_quotient_gmp_predecessor_recode_previous_result_source. mb = gsp_beta_quotient_gmp_predecessor_recode_previous_result_source * S ((S (gmp_index_predecessor_recode_previous_result)) * mc) + (S gmp_predecessor_predecessor_recode_previous_result))) -> (((exists ff_h_gmp_predecessor_recode_previous_result_target. ff_h_gmp_predecessor_recode_previous_result_target + S (gmp_predecessor_predecessor_recode_previous_result) = S ((S (gmp_index_predecessor_recode_previous_result)) * rc)) /\ exists ff_q_gmp_predecessor_recode_previous_result_target. rb = ff_q_gmp_predecessor_recode_previous_result_target * S ((S (gmp_index_predecessor_recode_previous_result)) * rc) + (gmp_predecessor_predecessor_recode_previous_result)))) - 0033
apply IH - 0034
exact hprevious_range - 0035
cases hprevious - 0036
cases hprevious_witness - 0037
have hlast : exists m. (((exists ff_h_gmp_predecessor_recode_last_entry. ff_h_gmp_predecessor_recode_last_entry + S (m) = S ((S (l)) * mc)) /\ exists ff_q_gmp_predecessor_recode_last_entry. mb = ff_q_gmp_predecessor_recode_last_entry * S ((S (l)) * mc) + (m))) /\ ((exists gsp_lt_gap_predecessor_recode_last_positive. gsp_lt_gap_predecessor_recode_last_positive + S 0 = m) /\ (exists gsp_le_gap_predecessor_recode_last_bounded. gsp_le_gap_predecessor_recode_last_bounded + m = H)) - 0038
specialize hrange l - 0039
apply hrange - 0040
specialize le_refl (S l) - 0041
exact le_refl - 0042
cases hlast - 0043
cases hlast_witness - 0044
cases hlast_witness_right - 0045
have hlast0 : ~(x2 = 0) - 0046
intro hlastzero - 0047
specialize ne_zero_of_one_le x2 - 0048
apply ne_zero_of_one_le - 0049
exact hlast_witness_right_left - 0050
exact hlastzero - 0051
have hlast_predecessor : exists r. x2 = S r - 0052
specialize nonzero_is_succ x2 - 0053
apply nonzero_is_succ - 0054
exact hlast0 - 0055
cases hlast_predecessor - 0056
specialize beta_prefix_extend l - 0057
specialize beta_prefix_extend x - 0058
specialize beta_prefix_extend x1 - 0059
specialize beta_prefix_extend x3 - 0060
cases beta_prefix_extend - 0061
cases beta_prefix_extend_witness - 0062
cases beta_prefix_extend_witness_witness - 0063
exists x4 - 0064
exists x5 - 0065
intro i - 0066
intro r - 0067
intro hi - 0068
intro hsource - 0069
have hsplit : i = l \/ exists gap. gap + S i = l - 0070
specialize finite_lt_succ_eq_or_lt l - 0071
specialize finite_lt_succ_eq_or_lt i - 0072
apply finite_lt_succ_eq_or_lt - 0073
exact hi - 0074
cases hsplit - 0075
have hsource_value : S r = x2 - 0076
specialize beta_at_unique mb - 0077
specialize beta_at_unique mc - 0078
specialize beta_at_unique l - 0079
specialize beta_at_unique (S r) - 0080
specialize beta_at_unique x2 - 0081
apply beta_at_unique - 0082
rewrite hsplit_left at hsource - 0083
rewrite hsplit_left at hsource - 0084
exact hsource - 0085
exact hlast_witness_left - 0086
have hrvalue : r = x3 - 0087
specialize succ_injective r - 0088
specialize succ_injective x3 - 0089
apply succ_injective - 0090
trans x2 - 0091
exact hsource_value - 0092
exact hlast_predecessor_witness - 0093
rewrite hsplit_left - 0094
rewrite hsplit_left - 0095
rewrite hrvalue - 0096
rewrite hrvalue - 0097
exact beta_prefix_extend_witness_witness_left - 0098
specialize beta_prefix_extend_witness_witness_right i - 0099
specialize beta_prefix_extend_witness_witness_right r - 0100
apply beta_prefix_extend_witness_witness_right - 0101
exact hsplit_right - 0102
specialize hprevious_witness_witness i - 0103
specialize hprevious_witness_witness r - 0104
apply hprevious_witness_witness - 0105
exact hsplit_right - 0106
exact hsource