Exact expanded PA statement
forall b c l. exists u v. (((exists h. h + S 1 = S ((S 0) * v)) /\ exists q. u = q * S ((S 0) * v) + 1) /\ forall i. (exists h. h + S i = l) -> exists p r s. (((exists h. h + S p = S ((S i) * c)) /\ exists q. b = q * S ((S i) * c) + p) /\ (((exists h. h + S r = S ((S i) * v)) /\ exists q. u = q * S ((S i) * v) + r) /\ (((exists h. h + S s = S ((S (S i)) * v)) /\ exists q. u = q * S ((S (S i)) * v) + s) /\ s = r * p))))Structural proof guide
Generated structural guide
Every decoded beta factor prefix admits a beta-coded exact prefix-product trace.
Use the direct prerequisites beta_at_self_of_bound, add_eq_zero_right, succ_ne_zero, beta_at_exists, beta_prefix_extend, zero_le, succ_le_succ, le_refl, le_of_succ_le_succ, le_eq_or_lt, one_mul as previously established PA formulas.
The proof proceeds by structural induction (1), case analysis (16), intermediate claims (10), equality transport (7).
Referenced ingredients
Proof neighborhood
Direct dependencies
PA003E beta_at_self_of_bound PA0004 add_eq_zero_right PA0005 succ_ne_zero PA0029 beta_at_exists PA002X beta_prefix_extend PA003F zero_le PA002K succ_le_succ PA001A le_refl PA000V le_of_succ_le_succ PA000W le_eq_or_lt PA000M one_mulDirect dependents
Formal native tactic body
Dependencies are introduced as named hypotheses before line 1. Linked names are exact direct references. This Stable checked-use theorem is independently kernel-checked when replayed.
- 0001
intro b - 0002
intro c - 0003
induction l - 0004
exists 1 - 0005
exists 1 - 0006
split - 0007
specialize beta_at_self_of_bound 1 - 0008
specialize beta_at_self_of_bound 0 - 0009
specialize beta_at_self_of_bound 1 - 0010
apply beta_at_self_of_bound - 0011
specialize one_mul 1 - 0012
rewrite one_mul - 0013
specialize le_refl 2 - 0014
exact le_refl - 0015
intro i - 0016
intro hi - 0017
exfalso - 0018
cases hi - 0019
have hsi0 : S i = 0 - 0020
specialize add_eq_zero_right x - 0021
specialize add_eq_zero_right (S i) - 0022
apply add_eq_zero_right - 0023
exact hi_witness - 0024
specialize succ_ne_zero i - 0025
apply succ_ne_zero - 0026
exact hsi0 - 0027
have htrace : exists u v. (((exists h. h + S 1 = S ((S 0) * v)) /\ exists q. u = q * S ((S 0) * v) + 1) /\ forall i. (exists h. h + S i = l) -> exists p r s. (((exists h. h + S p = S ((S i) * c)) /\ exists q. b = q * S ((S i) * c) + p) /\ (((exists h. h + S r = S ((S i) * v)) /\ exists q. u = q * S ((S i) * v) + r) /\ (((exists h. h + S s = S ((S (S i)) * v)) /\ exists q. u = q * S ((S (S i)) * v) + s) /\ s = r * p)))) - 0028
apply IH - 0029
cases htrace - 0030
cases htrace_witness - 0031
cases htrace_witness_witness - 0032
have hfactor : exists p. ((exists h. h + S p = S ((S l) * c)) /\ exists q. b = q * S ((S l) * c) + p) - 0033
specialize beta_at_exists b - 0034
specialize beta_at_exists c - 0035
specialize beta_at_exists l - 0036
exact beta_at_exists - 0037
cases hfactor - 0038
have hlast : exists r. ((exists h. h + S r = S ((S l) * x1)) /\ exists q. x = q * S ((S l) * x1) + r) - 0039
specialize beta_at_exists x - 0040
specialize beta_at_exists x1 - 0041
specialize beta_at_exists l - 0042
exact beta_at_exists - 0043
cases hlast - 0044
have hext : exists z v. (((exists h. h + S (x3 * x2) = S ((S (S l)) * v)) /\ exists q. z = q * S ((S (S l)) * v) + (x3 * x2)) /\ forall i a. (exists h. h + S i = S l) -> ((exists h. h + S a = S ((S i) * x1)) /\ exists q. x = q * S ((S i) * x1) + a) -> ((exists h. h + S a = S ((S i) * v)) /\ exists q. z = q * S ((S i) * v) + a)) - 0045
specialize beta_prefix_extend (S l) - 0046
specialize beta_prefix_extend x - 0047
specialize beta_prefix_extend x1 - 0048
specialize beta_prefix_extend (x3 * x2) - 0049
exact beta_prefix_extend - 0050
cases hext - 0051
cases hext_witness - 0052
cases hext_witness_witness - 0053
exists x4 - 0054
exists x5 - 0055
split - 0056
specialize hext_witness_witness_right 0 - 0057
specialize hext_witness_witness_right 1 - 0058
apply hext_witness_witness_right - 0059
have h0 : exists h. h + S 0 = S l - 0060
have hzero : exists h. h + 0 = l - 0061
specialize zero_le l - 0062
exact zero_le - 0063
specialize succ_le_succ 0 - 0064
specialize succ_le_succ l - 0065
apply succ_le_succ - 0066
exact hzero - 0067
exact h0 - 0068
exact htrace_witness_witness_left - 0069
intro i - 0070
intro hi - 0071
have hil : exists h. h + i = l - 0072
specialize le_of_succ_le_succ i - 0073
specialize le_of_succ_le_succ l - 0074
apply le_of_succ_le_succ - 0075
exact hi - 0076
have hsplit : i = l \/ exists h. h + S i = l - 0077
specialize le_eq_or_lt i - 0078
specialize le_eq_or_lt l - 0079
apply le_eq_or_lt - 0080
exact hil - 0081
cases hsplit - 0082
exists x2 - 0083
exists x3 - 0084
exists x3 * x2 - 0085
split - 0086
rewrite hsplit_left - 0087
rewrite hsplit_left - 0088
exact hfactor_witness - 0089
split - 0090
rewrite hsplit_left - 0091
rewrite hsplit_left - 0092
specialize hext_witness_witness_right l - 0093
specialize hext_witness_witness_right x3 - 0094
apply hext_witness_witness_right - 0095
specialize le_refl (S l) - 0096
exact le_refl - 0097
exact hlast_witness - 0098
split - 0099
rewrite hsplit_left - 0100
rewrite hsplit_left - 0101
exact hext_witness_witness_left - 0102
refl - 0103
have hold : exists p r s. (((exists h. h + S p = S ((S i) * c)) /\ exists q. b = q * S ((S i) * c) + p) /\ (((exists h. h + S r = S ((S i) * x1)) /\ exists q. x = q * S ((S i) * x1) + r) /\ (((exists h. h + S s = S ((S (S i)) * x1)) /\ exists q. x = q * S ((S (S i)) * x1) + s) /\ s = r * p))) - 0104
specialize htrace_witness_witness_right i - 0105
apply htrace_witness_witness_right - 0106
exact hsplit_right - 0107
cases hold - 0108
cases hold_witness - 0109
cases hold_witness_witness - 0110
cases hold_witness_witness_witness - 0111
cases hold_witness_witness_witness_right - 0112
cases hold_witness_witness_witness_right_right - 0113
exists x6 - 0114
exists x7 - 0115
exists x8 - 0116
split - 0117
exact hold_witness_witness_witness_left - 0118
split - 0119
specialize hext_witness_witness_right i - 0120
specialize hext_witness_witness_right x7 - 0121
apply hext_witness_witness_right - 0122
exact hi - 0123
exact hold_witness_witness_witness_right_left - 0124
split - 0125
specialize hext_witness_witness_right (S i) - 0126
specialize hext_witness_witness_right x8 - 0127
apply hext_witness_witness_right - 0128
specialize succ_le_succ (S i) - 0129
specialize succ_le_succ l - 0130
apply succ_le_succ - 0131
exact hsplit_right - 0132
exact hold_witness_witness_witness_right_right_left - 0133
exact hold_witness_witness_witness_right_right_right