Exact expanded PA statement
forall N c k P. (forall t. (exists h. S t + S h = S N) -> exists q. c = S t * q) -> (exists h. h + S k = N) -> ~(P = 0) -> (forall i. (exists h. h + S i = k) -> exists q. P = S ((S i) * c) * q) -> (forall j. (exists g. g + k = j) -> (exists h. h + j = N) -> forall d. (exists u. P = d * u) -> (exists v. S ((S j) * c) = d * v) -> d = 1) -> (~(P * S ((S k) * c) = 0) /\ ((forall i. (exists h. h + S i = S k) -> exists q. P * S ((S k) * c) = S ((S i) * c) * q) /\ forall j. (exists g. g + S k = j) -> (exists h. h + j = N) -> forall d. (exists u. P * S ((S k) * c) = d * u) -> (exists v. S ((S j) * c) = d * v) -> d = 1))Structural proof guide
Generated structural guide
Extend the accumulated target-modulus product for an exclusive prefix.
Use the direct prerequisites mul_ne_zero, right_factor_divides_product, beta_modulus_nonzero, le_of_succ_le_succ, le_eq_or_lt, multiple_mul_right, le_succ_self, le_trans, lt_to_le, lt_irrefl_expanded, beta_moduli_pairwise_coprime_bounded, coprime_mul_left as previously established PA formulas.
The proof proceeds by case analysis (1), intermediate claims (11), equality transport (2).
Referenced ingredients
Proof neighborhood
Direct dependencies
PA000S mul_ne_zero PA000T right_factor_divides_product PA000U beta_modulus_nonzero PA000V le_of_succ_le_succ PA000W le_eq_or_lt PA000C multiple_mul_right PA000Q le_succ_self PA000R le_trans PA000X lt_to_le PA0010 lt_irrefl_expanded PA001S beta_moduli_pairwise_coprime_bounded PA001T coprime_mul_leftDirect 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 N - 0002
intro c - 0003
intro k - 0004
intro P - 0005
intro hcm - 0006
intro hkN - 0007
intro hP - 0008
intro hdiv - 0009
intro hfuture - 0010
have hnew : ~(S ((S k) * c) = 0) - 0011
specialize beta_modulus_nonzero c - 0012
specialize beta_modulus_nonzero k - 0013
exact beta_modulus_nonzero - 0014
split - 0015
specialize mul_ne_zero P - 0016
specialize mul_ne_zero (S ((S k) * c)) - 0017
intro hzero - 0018
apply mul_ne_zero - 0019
exact hP - 0020
exact hnew - 0021
exact hzero - 0022
split - 0023
intro i - 0024
intro hi - 0025
have hik : exists r. r + i = k - 0026
specialize le_of_succ_le_succ i - 0027
specialize le_of_succ_le_succ k - 0028
apply le_of_succ_le_succ - 0029
exact hi - 0030
have hsplit : i = k \/ exists r. r + S i = k - 0031
specialize le_eq_or_lt i - 0032
specialize le_eq_or_lt k - 0033
apply le_eq_or_lt - 0034
exact hik - 0035
cases hsplit - 0036
rewrite hsplit_left - 0037
specialize right_factor_divides_product P - 0038
specialize right_factor_divides_product (S ((S k) * c)) - 0039
exact right_factor_divides_product - 0040
have hiP : exists q. P = S ((S i) * c) * q - 0041
specialize hdiv i - 0042
apply hdiv - 0043
exact hsplit_right - 0044
specialize multiple_mul_right (S ((S i) * c)) - 0045
specialize multiple_mul_right P - 0046
specialize multiple_mul_right (S ((S k) * c)) - 0047
apply multiple_mul_right - 0048
exact hiP - 0049
intro j - 0050
intro hSkj - 0051
intro hjN - 0052
have hkj : exists r. r + k = j - 0053
have hkSk : exists r. r + k = S k - 0054
specialize le_succ_self k - 0055
exact le_succ_self - 0056
specialize le_trans k - 0057
specialize le_trans (S k) - 0058
specialize le_trans j - 0059
apply le_trans - 0060
exact hkSk - 0061
exact hSkj - 0062
have hPj : forall d. (exists u. P = d * u) -> (exists v. S ((S j) * c) = d * v) -> d = 1 - 0063
specialize hfuture j - 0064
apply hfuture - 0065
exact hkj - 0066
exact hjN - 0067
have hneq : ~(k = j) - 0068
intro heq - 0069
rewrite <- heq at hSkj - 0070
specialize lt_irrefl_expanded k - 0071
apply lt_irrefl_expanded - 0072
exact hSkj - 0073
have hkbound : exists r. r + k = N - 0074
specialize lt_to_le k - 0075
specialize lt_to_le N - 0076
apply lt_to_le - 0077
exact hkN - 0078
have hpairs : forall i j. ~(i = j) -> (exists hi. hi + i = N) -> (exists hj. hj + j = N) -> forall d. (exists u. S ((S i) * c) = d * u) -> (exists v. S ((S j) * c) = d * v) -> d = 1 - 0079
specialize beta_moduli_pairwise_coprime_bounded N - 0080
specialize beta_moduli_pairwise_coprime_bounded c - 0081
apply beta_moduli_pairwise_coprime_bounded - 0082
exact hcm - 0083
have hnewj : forall d. (exists u. S ((S k) * c) = d * u) -> (exists v. S ((S j) * c) = d * v) -> d = 1 - 0084
specialize hpairs k - 0085
specialize hpairs j - 0086
apply hpairs - 0087
exact hneq - 0088
exact hkbound - 0089
exact hjN - 0090
specialize coprime_mul_left P - 0091
specialize coprime_mul_left (S ((S k) * c)) - 0092
specialize coprime_mul_left (S ((S j) * c)) - 0093
apply coprime_mul_left - 0094
exact hPj - 0095
exact hnewj