Exact expanded PA statement
forall b c z d n sn i x y. sn = S n -> (exists h. h + S i = n) -> (forall fp_i_swap_inj_old fp_j_swap_inj_old fp_value_swap_inj_old. (exists fp_gap_swap_inj_old_i. fp_gap_swap_inj_old_i + S fp_i_swap_inj_old = sn) -> (exists fp_gap_swap_inj_old_j. fp_gap_swap_inj_old_j + S fp_j_swap_inj_old = sn) -> (((exists ff_h_swap_inj_old_left. ff_h_swap_inj_old_left + S (fp_value_swap_inj_old) = S ((S (fp_i_swap_inj_old)) * c)) /\ exists ff_q_swap_inj_old_left. b = ff_q_swap_inj_old_left * S ((S (fp_i_swap_inj_old)) * c) + (fp_value_swap_inj_old))) -> (((exists ff_h_swap_inj_old_right. ff_h_swap_inj_old_right + S (fp_value_swap_inj_old) = S ((S (fp_j_swap_inj_old)) * c)) /\ exists ff_q_swap_inj_old_right. b = ff_q_swap_inj_old_right * S ((S (fp_j_swap_inj_old)) * c) + (fp_value_swap_inj_old))) -> fp_i_swap_inj_old = fp_j_swap_inj_old) -> (((exists ff_h_swap_inj_old_i. ff_h_swap_inj_old_i + S (x) = S ((S (i)) * c)) /\ exists ff_q_swap_inj_old_i. b = ff_q_swap_inj_old_i * S ((S (i)) * c) + (x))) -> (((exists ff_h_swap_inj_old_n. ff_h_swap_inj_old_n + S (y) = S ((S (n)) * c)) /\ exists ff_q_swap_inj_old_n. b = ff_q_swap_inj_old_n * S ((S (n)) * c) + (y))) -> (((exists ff_h_swap_inj_new_i. ff_h_swap_inj_new_i + S (y) = S ((S (i)) * d)) /\ exists ff_q_swap_inj_new_i. z = ff_q_swap_inj_new_i * S ((S (i)) * d) + (y))) -> (((exists ff_h_swap_inj_new_n. ff_h_swap_inj_new_n + S (x) = S ((S (n)) * d)) /\ exists ff_q_swap_inj_new_n. z = ff_q_swap_inj_new_n * S ((S (n)) * d) + (x))) -> (forall j a. (exists h. h + S j = S n) -> ~(j = i) -> ~(j = n) -> (((exists ff_h_swap_inj_old_j. ff_h_swap_inj_old_j + S (a) = S ((S (j)) * c)) /\ exists ff_q_swap_inj_old_j. b = ff_q_swap_inj_old_j * S ((S (j)) * c) + (a))) -> (((exists ff_h_swap_inj_new_j. ff_h_swap_inj_new_j + S (a) = S ((S (j)) * d)) /\ exists ff_q_swap_inj_new_j. z = ff_q_swap_inj_new_j * S ((S (j)) * d) + (a)))) -> (forall fp_i_swap_inj_new fp_j_swap_inj_new fp_value_swap_inj_new. (exists fp_gap_swap_inj_new_i. fp_gap_swap_inj_new_i + S fp_i_swap_inj_new = sn) -> (exists fp_gap_swap_inj_new_j. fp_gap_swap_inj_new_j + S fp_j_swap_inj_new = sn) -> (((exists ff_h_swap_inj_new_left. ff_h_swap_inj_new_left + S (fp_value_swap_inj_new) = S ((S (fp_i_swap_inj_new)) * d)) /\ exists ff_q_swap_inj_new_left. z = ff_q_swap_inj_new_left * S ((S (fp_i_swap_inj_new)) * d) + (fp_value_swap_inj_new))) -> (((exists ff_h_swap_inj_new_right. ff_h_swap_inj_new_right + S (fp_value_swap_inj_new) = S ((S (fp_j_swap_inj_new)) * d)) /\ exists ff_q_swap_inj_new_right. z = ff_q_swap_inj_new_right * S ((S (fp_j_swap_inj_new)) * d) + (fp_value_swap_inj_new))) -> fp_i_swap_inj_new = fp_j_swap_inj_new)Structural proof guide
Generated structural guide
A swap-last recoding preserves injectivity of the full successor prefix.
Use the direct prerequisites beta_prefix_swap_last_reflect, le_succ, le_refl as previously established PA formulas.
The proof proceeds by case analysis (24), intermediate claims (16), equality transport (16).
Referenced ingredients
Proof neighborhood
Direct dependencies
Direct 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
intro z - 0004
intro d - 0005
intro n - 0006
intro sn - 0007
intro i - 0008
intro x - 0009
intro y - 0010
intro hsn - 0011
intro hi - 0012
intro hinjective - 0013
intro hold_i - 0014
intro hold_n - 0015
intro hnew_i - 0016
intro hnew_n - 0017
intro hpreserve - 0018
rewrite hsn at hinjective - 0019
rewrite hsn at hinjective - 0020
have hisn : exists h. h + S i = S n - 0021
specialize le_succ (S i) - 0022
specialize le_succ n - 0023
apply le_succ - 0024
exact hi - 0025
have hnsn : exists h. h + S n = S n - 0026
specialize le_refl (S n) - 0027
exact le_refl - 0028
have hreflect_j : forall b c z d n i x y. (((exists ff_h_reflect_new_i. ff_h_reflect_new_i + S (y) = S ((S (i)) * d)) /\ exists ff_q_reflect_new_i. z = ff_q_reflect_new_i * S ((S (i)) * d) + (y))) -> (((exists ff_h_reflect_new_n. ff_h_reflect_new_n + S (x) = S ((S (n)) * d)) /\ exists ff_q_reflect_new_n. z = ff_q_reflect_new_n * S ((S (n)) * d) + (x))) -> (forall k v. (exists h. h + S k = S n) -> ~(k = i) -> ~(k = n) -> (((exists ff_h_reflect_old_k. ff_h_reflect_old_k + S (v) = S ((S (k)) * c)) /\ exists ff_q_reflect_old_k. b = ff_q_reflect_old_k * S ((S (k)) * c) + (v))) -> (((exists ff_h_reflect_new_k. ff_h_reflect_new_k + S (v) = S ((S (k)) * d)) /\ exists ff_q_reflect_new_k. z = ff_q_reflect_new_k * S ((S (k)) * d) + (v)))) -> forall j a. (exists h. h + S j = S n) -> (((exists ff_h_reflect_new_j. ff_h_reflect_new_j + S (a) = S ((S (j)) * d)) /\ exists ff_q_reflect_new_j. z = ff_q_reflect_new_j * S ((S (j)) * d) + (a))) -> ((j = i /\ a = y) \/ ((j = n /\ a = x) \/ (~(j = i) /\ (~(j = n) /\ (((exists ff_h_reflect_old_j. ff_h_reflect_old_j + S (a) = S ((S (j)) * c)) /\ exists ff_q_reflect_old_j. b = ff_q_reflect_old_j * S ((S (j)) * c) + (a))))))) - 0029
exact beta_prefix_swap_last_reflect - 0030
have hreflect_k : forall b c z d n i x y. (((exists ff_h_reflect_new_i. ff_h_reflect_new_i + S (y) = S ((S (i)) * d)) /\ exists ff_q_reflect_new_i. z = ff_q_reflect_new_i * S ((S (i)) * d) + (y))) -> (((exists ff_h_reflect_new_n. ff_h_reflect_new_n + S (x) = S ((S (n)) * d)) /\ exists ff_q_reflect_new_n. z = ff_q_reflect_new_n * S ((S (n)) * d) + (x))) -> (forall k v. (exists h. h + S k = S n) -> ~(k = i) -> ~(k = n) -> (((exists ff_h_reflect_old_k. ff_h_reflect_old_k + S (v) = S ((S (k)) * c)) /\ exists ff_q_reflect_old_k. b = ff_q_reflect_old_k * S ((S (k)) * c) + (v))) -> (((exists ff_h_reflect_new_k. ff_h_reflect_new_k + S (v) = S ((S (k)) * d)) /\ exists ff_q_reflect_new_k. z = ff_q_reflect_new_k * S ((S (k)) * d) + (v)))) -> forall j a. (exists h. h + S j = S n) -> (((exists ff_h_reflect_new_j. ff_h_reflect_new_j + S (a) = S ((S (j)) * d)) /\ exists ff_q_reflect_new_j. z = ff_q_reflect_new_j * S ((S (j)) * d) + (a))) -> ((j = i /\ a = y) \/ ((j = n /\ a = x) \/ (~(j = i) /\ (~(j = n) /\ (((exists ff_h_reflect_old_j. ff_h_reflect_old_j + S (a) = S ((S (j)) * c)) /\ exists ff_q_reflect_old_j. b = ff_q_reflect_old_j * S ((S (j)) * c) + (a))))))) - 0031
exact beta_prefix_swap_last_reflect - 0032
rewrite hsn - 0033
rewrite hsn - 0034
intro j - 0035
intro k - 0036
intro a - 0037
intro hj - 0038
intro hk - 0039
intro hnew_j - 0040
intro hnew_k - 0041
specialize hreflect_j b - 0042
specialize hreflect_j c - 0043
specialize hreflect_j z - 0044
specialize hreflect_j d - 0045
specialize hreflect_j n - 0046
specialize hreflect_j i - 0047
specialize hreflect_j x - 0048
specialize hreflect_j y - 0049
have hreflect_entries_j : forall j a. (exists h. h + S j = S n) -> (((exists ff_h_reflect_new_j. ff_h_reflect_new_j + S (a) = S ((S (j)) * d)) /\ exists ff_q_reflect_new_j. z = ff_q_reflect_new_j * S ((S (j)) * d) + (a))) -> ((j = i /\ a = y) \/ ((j = n /\ a = x) \/ (~(j = i) /\ (~(j = n) /\ (((exists ff_h_reflect_old_j. ff_h_reflect_old_j + S (a) = S ((S (j)) * c)) /\ exists ff_q_reflect_old_j. b = ff_q_reflect_old_j * S ((S (j)) * c) + (a))))))) - 0050
apply hreflect_j - 0051
exact hnew_i - 0052
exact hnew_n - 0053
exact hpreserve - 0054
specialize hreflect_entries_j j - 0055
specialize hreflect_entries_j a - 0056
have hclass_j : ((j = i /\ a = y) \/ ((j = n /\ a = x) \/ (~(j = i) /\ (~(j = n) /\ ((exists h. h + S a = S ((S j) * c)) /\ exists q. b = q * S ((S j) * c) + a))))) - 0057
apply hreflect_entries_j - 0058
exact hj - 0059
exact hnew_j - 0060
specialize hreflect_k b - 0061
specialize hreflect_k c - 0062
specialize hreflect_k z - 0063
specialize hreflect_k d - 0064
specialize hreflect_k n - 0065
specialize hreflect_k i - 0066
specialize hreflect_k x - 0067
specialize hreflect_k y - 0068
have hreflect_entries_k : forall j a. (exists h. h + S j = S n) -> (((exists ff_h_reflect_new_j. ff_h_reflect_new_j + S (a) = S ((S (j)) * d)) /\ exists ff_q_reflect_new_j. z = ff_q_reflect_new_j * S ((S (j)) * d) + (a))) -> ((j = i /\ a = y) \/ ((j = n /\ a = x) \/ (~(j = i) /\ (~(j = n) /\ (((exists ff_h_reflect_old_j. ff_h_reflect_old_j + S (a) = S ((S (j)) * c)) /\ exists ff_q_reflect_old_j. b = ff_q_reflect_old_j * S ((S (j)) * c) + (a))))))) - 0069
apply hreflect_k - 0070
exact hnew_i - 0071
exact hnew_n - 0072
exact hpreserve - 0073
specialize hreflect_entries_k k - 0074
specialize hreflect_entries_k a - 0075
have hclass_k : ((k = i /\ a = y) \/ ((k = n /\ a = x) \/ (~(k = i) /\ (~(k = n) /\ ((exists h. h + S a = S ((S k) * c)) /\ exists q. b = q * S ((S k) * c) + a))))) - 0076
apply hreflect_entries_k - 0077
exact hk - 0078
exact hnew_k - 0079
cases hclass_j - 0080
cases hclass_j_left - 0081
cases hclass_k - 0082
cases hclass_k_left - 0083
trans i - 0084
exact hclass_j_left_left - 0085
symm - 0086
exact hclass_k_left_left - 0087
cases hclass_k_right - 0088
cases hclass_k_right_left - 0089
have hxy : x = y - 0090
trans a - 0091
symm - 0092
exact hclass_k_right_left_right - 0093
exact hclass_j_left_right - 0094
have hin : i = n - 0095
specialize hinjective i - 0096
specialize hinjective n - 0097
specialize hinjective x - 0098
apply hinjective - 0099
exact hisn - 0100
exact hnsn - 0101
exact hold_i - 0102
rewrite hxy - 0103
rewrite hxy - 0104
exact hold_n - 0105
trans i - 0106
exact hclass_j_left_left - 0107
trans n - 0108
exact hin - 0109
symm - 0110
exact hclass_k_right_left_left - 0111
cases hclass_k_right_right - 0112
cases hclass_k_right_right_right - 0113
have hnk : n = k - 0114
specialize hinjective n - 0115
specialize hinjective k - 0116
specialize hinjective y - 0117
apply hinjective - 0118
exact hnsn - 0119
exact hk - 0120
exact hold_n - 0121
rewrite <- hclass_j_left_right - 0122
rewrite <- hclass_j_left_right - 0123
exact hclass_k_right_right_right_right - 0124
exfalso - 0125
apply hclass_k_right_right_right_left - 0126
symm - 0127
exact hnk - 0128
cases hclass_j_right - 0129
cases hclass_j_right_left - 0130
cases hclass_k - 0131
cases hclass_k_left - 0132
have hxy2 : x = y - 0133
trans a - 0134
symm - 0135
exact hclass_j_right_left_right - 0136
exact hclass_k_left_right - 0137
have hin2 : n = i - 0138
specialize hinjective n - 0139
specialize hinjective i - 0140
specialize hinjective y - 0141
apply hinjective - 0142
exact hnsn - 0143
exact hisn - 0144
exact hold_n - 0145
rewrite <- hxy2 - 0146
rewrite <- hxy2 - 0147
exact hold_i - 0148
trans n - 0149
exact hclass_j_right_left_left - 0150
trans i - 0151
exact hin2 - 0152
symm - 0153
exact hclass_k_left_left - 0154
cases hclass_k_right - 0155
cases hclass_k_right_left - 0156
trans n - 0157
exact hclass_j_right_left_left - 0158
symm - 0159
exact hclass_k_right_left_left - 0160
cases hclass_k_right_right - 0161
cases hclass_k_right_right_right - 0162
have hik : i = k - 0163
specialize hinjective i - 0164
specialize hinjective k - 0165
specialize hinjective x - 0166
apply hinjective - 0167
exact hisn - 0168
exact hk - 0169
exact hold_i - 0170
rewrite <- hclass_j_right_left_right - 0171
rewrite <- hclass_j_right_left_right - 0172
exact hclass_k_right_right_right_right - 0173
exfalso - 0174
apply hclass_k_right_right_left - 0175
symm - 0176
exact hik - 0177
cases hclass_j_right_right - 0178
cases hclass_j_right_right_right - 0179
cases hclass_k - 0180
cases hclass_k_left - 0181
have hjn : j = n - 0182
specialize hinjective j - 0183
specialize hinjective n - 0184
specialize hinjective y - 0185
apply hinjective - 0186
exact hj - 0187
exact hnsn - 0188
rewrite <- hclass_k_left_right - 0189
rewrite <- hclass_k_left_right - 0190
exact hclass_j_right_right_right_right - 0191
exact hold_n - 0192
exfalso - 0193
apply hclass_j_right_right_right_left - 0194
exact hjn - 0195
cases hclass_k_right - 0196
cases hclass_k_right_left - 0197
have hji : j = i - 0198
specialize hinjective j - 0199
specialize hinjective i - 0200
specialize hinjective x - 0201
apply hinjective - 0202
exact hj - 0203
exact hisn - 0204
rewrite <- hclass_k_right_left_right - 0205
rewrite <- hclass_k_right_left_right - 0206
exact hclass_j_right_right_right_right - 0207
exact hold_i - 0208
exfalso - 0209
apply hclass_j_right_right_left - 0210
exact hji - 0211
cases hclass_k_right_right - 0212
cases hclass_k_right_right_right - 0213
specialize hinjective j - 0214
specialize hinjective k - 0215
specialize hinjective a - 0216
apply hinjective - 0217
exact hj - 0218
exact hk - 0219
exact hclass_j_right_right_right_right - 0220
exact hclass_k_right_right_right_right