Exact expanded PA statement
forall l n p a. (exists frm_weak_gap_index_map_length. frm_weak_gap_index_map_length + l = n) -> p = S n -> ((~(p = 1) /\ forall frm_prime_left_index_map_prime frm_prime_right_index_map_prime. p = frm_prime_left_index_map_prime * frm_prime_right_index_map_prime -> frm_prime_left_index_map_prime = 1 \/ frm_prime_right_index_map_prime = 1)) -> (~(exists frm_factor_index_map_multiplier. a = p * frm_factor_index_map_multiplier)) -> exists r s. (forall frm_index_result. (exists frm_gap_result_index_bound. frm_gap_result_index_bound + S frm_index_result = l) -> (exists frm_residue_result_result. (exists frm_gap_result_result_residue_bound. frm_gap_result_result_residue_bound + S frm_residue_result_result = n) /\ ((((exists ff_h_frm_result_result_decoded. ff_h_frm_result_result_decoded + S (frm_residue_result_result) = S ((S (frm_index_result)) * s)) /\ exists ff_q_frm_result_result_decoded. r = ff_q_frm_result_result_decoded * S ((S (frm_index_result)) * s) + (frm_residue_result_result))) /\ (exists frm_mod_left_result_result_congruence frm_mod_right_result_result_congruence. a * S frm_index_result + p * frm_mod_left_result_result_congruence = S frm_residue_result_result + p * frm_mod_right_result_result_congruence))))Structural proof guide
Generated structural guide
Canonical nonzero products modulo a prime form a beta-coded index map.
Use the direct prerequisites add_eq_zero_right, succ_ne_zero, lt_to_le, succ_le_succ, prime_nonzero, division_remainder_exists, euclid_prime_dvd_product, divisor_le_nonzero, lt_not_le, nonzero_is_succ, le_of_succ_le_succ, mul_comm, remainder_decomposition_to_mod_eq, finite_lt_succ_eq_or_lt, beta_prefix_extend as previously established PA formulas.
The proof proceeds by structural induction (1), case analysis (15), intermediate claims (18), equality transport (8).
Referenced ingredients
PA0004 add_eq_zero_right PA0005 succ_ne_zero PA000X lt_to_le PA002K succ_le_succ PA0031 prime_nonzero PA001D division_remainder_exists PA0038 euclid_prime_dvd_product PA0039 divisor_le_nonzero PA003A lt_not_le PA001V nonzero_is_succ PA000V le_of_succ_le_succ PA000H mul_comm PA003C remainder_decomposition_to_mod_eq PA003D finite_lt_succ_eq_or_lt PA002X beta_prefix_extendProof neighborhood
Direct dependencies
PA0004 add_eq_zero_right PA0005 succ_ne_zero PA000X lt_to_le PA002K succ_le_succ PA0031 prime_nonzero PA001D division_remainder_exists PA0038 euclid_prime_dvd_product PA0039 divisor_le_nonzero PA003A lt_not_le PA001V nonzero_is_succ PA000V le_of_succ_le_succ PA000H mul_comm PA003C remainder_decomposition_to_mod_eq PA003D finite_lt_succ_eq_or_lt 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
induction l - 0002
intro n - 0003
intro p - 0004
intro a - 0005
intro hln - 0006
intro hpn - 0007
intro hp - 0008
intro hnotdiv - 0009
exists 0 - 0010
exists 0 - 0011
intro i - 0012
intro hi - 0013
exfalso - 0014
cases hi - 0015
have hsi : S i = 0 - 0016
specialize add_eq_zero_right x - 0017
specialize add_eq_zero_right (S i) - 0018
apply add_eq_zero_right - 0019
exact hi_witness - 0020
specialize succ_ne_zero i - 0021
apply succ_ne_zero - 0022
exact hsi - 0023
intro n - 0024
intro p - 0025
intro a - 0026
intro hln - 0027
intro hpn - 0028
intro hp - 0029
intro hnotdiv - 0030
have hln_prev : exists h. h + l = n - 0031
specialize lt_to_le l - 0032
specialize lt_to_le n - 0033
apply lt_to_le - 0034
exact hln - 0035
have hprev : exists r s. (forall frm_index_previous. (exists frm_gap_previous_index_bound. frm_gap_previous_index_bound + S frm_index_previous = l) -> (exists frm_residue_previous_result. (exists frm_gap_previous_result_residue_bound. frm_gap_previous_result_residue_bound + S frm_residue_previous_result = n) /\ ((((exists ff_h_frm_previous_result_decoded. ff_h_frm_previous_result_decoded + S (frm_residue_previous_result) = S ((S (frm_index_previous)) * s)) /\ exists ff_q_frm_previous_result_decoded. r = ff_q_frm_previous_result_decoded * S ((S (frm_index_previous)) * s) + (frm_residue_previous_result))) /\ (exists frm_mod_left_previous_result_congruence frm_mod_right_previous_result_congruence. a * S frm_index_previous + p * frm_mod_left_previous_result_congruence = S frm_residue_previous_result + p * frm_mod_right_previous_result_congruence)))) - 0036
specialize IH n - 0037
specialize IH p - 0038
specialize IH a - 0039
apply IH - 0040
exact hln_prev - 0041
exact hpn - 0042
exact hp - 0043
exact hnotdiv - 0044
cases hprev - 0045
cases hprev_witness - 0046
have hslp : exists h. h + S (S l) = p - 0047
rewrite hpn - 0048
specialize succ_le_succ (S l) - 0049
specialize succ_le_succ n - 0050
apply succ_le_succ - 0051
exact hln - 0052
have hp0 : ~(p = 0) - 0053
intro hpzero - 0054
specialize prime_nonzero p - 0055
apply prime_nonzero - 0056
exact hp - 0057
exact hpzero - 0058
have hdiv : exists q rem. a * S l = p * q + rem /\ exists h. h + S rem = p - 0059
specialize division_remainder_exists p - 0060
specialize division_remainder_exists (a * S l) - 0061
apply division_remainder_exists - 0062
exact hp0 - 0063
cases hdiv - 0064
cases hdiv_witness - 0065
cases hdiv_witness_witness - 0066
have hrem0 : ~(x3 = 0) - 0067
intro hremzero - 0068
have hmultiple : exists k. a * S l = p * k - 0069
exists x2 - 0070
trans p * x2 + x3 - 0071
exact hdiv_witness_witness_left - 0072
rewrite hremzero - 0073
apply PA3 - 0074
have hfactor : (exists u. a = p * u) \/ exists v. S l = p * v - 0075
specialize euclid_prime_dvd_product p - 0076
specialize euclid_prime_dvd_product a - 0077
specialize euclid_prime_dvd_product (S l) - 0078
apply euclid_prime_dvd_product - 0079
exact hp - 0080
exact hmultiple - 0081
cases hfactor - 0082
apply hnotdiv - 0083
exact hfactor_left - 0084
have hsl0 : ~(S l = 0) - 0085
specialize succ_ne_zero l - 0086
exact succ_ne_zero - 0087
have hple : exists k. k + p = S l - 0088
specialize divisor_le_nonzero p - 0089
specialize divisor_le_nonzero (S l) - 0090
apply divisor_le_nonzero - 0091
exact hsl0 - 0092
exact hfactor_right - 0093
specialize lt_not_le (S l) - 0094
specialize lt_not_le p - 0095
apply lt_not_le - 0096
exact hslp - 0097
exact hple - 0098
have hrem_succ : exists j. x3 = S j - 0099
specialize nonzero_is_succ x3 - 0100
apply nonzero_is_succ - 0101
exact hrem0 - 0102
cases hrem_succ - 0103
have hjn : exists h. h + S x4 = n - 0104
specialize le_of_succ_le_succ (S x4) - 0105
specialize le_of_succ_le_succ n - 0106
apply le_of_succ_le_succ - 0107
rewrite <- hrem_succ_witness - 0108
rewrite <- hpn - 0109
exact hdiv_witness_witness_right - 0110
have hdecomp : a * S l = x2 * p + x3 - 0111
trans p * x2 + x3 - 0112
exact hdiv_witness_witness_left - 0113
congr - 0114
apply mul_comm - 0115
refl - 0116
have hmodrem : exists u v. a * S l + p * u = x3 + p * v - 0117
specialize remainder_decomposition_to_mod_eq p - 0118
specialize remainder_decomposition_to_mod_eq (a * S l) - 0119
specialize remainder_decomposition_to_mod_eq x2 - 0120
specialize remainder_decomposition_to_mod_eq x3 - 0121
apply remainder_decomposition_to_mod_eq - 0122
exact hdecomp - 0123
have hmod : exists u v. a * S l + p * u = S x4 + p * v - 0124
rewrite <- hrem_succ_witness - 0125
exact hmodrem - 0126
specialize beta_prefix_extend l - 0127
specialize beta_prefix_extend x - 0128
specialize beta_prefix_extend x1 - 0129
specialize beta_prefix_extend x4 - 0130
cases beta_prefix_extend - 0131
cases beta_prefix_extend_witness - 0132
cases beta_prefix_extend_witness_witness - 0133
exists x5 - 0134
exists x6 - 0135
intro i - 0136
intro hi - 0137
have hsplit : i = l \/ exists h. h + S i = l - 0138
specialize finite_lt_succ_eq_or_lt l - 0139
specialize finite_lt_succ_eq_or_lt i - 0140
apply finite_lt_succ_eq_or_lt - 0141
exact hi - 0142
cases hsplit - 0143
exists x4 - 0144
split - 0145
exact hjn - 0146
split - 0147
rewrite hsplit_left - 0148
rewrite hsplit_left - 0149
exact beta_prefix_extend_witness_witness_left - 0150
rewrite hsplit_left - 0151
exact hmod - 0152
have hold : (exists frm_residue_previous_at_i. (exists frm_gap_previous_at_i_residue_bound. frm_gap_previous_at_i_residue_bound + S frm_residue_previous_at_i = n) /\ ((((exists ff_h_frm_previous_at_i_decoded. ff_h_frm_previous_at_i_decoded + S (frm_residue_previous_at_i) = S ((S (i)) * x1)) /\ exists ff_q_frm_previous_at_i_decoded. x = ff_q_frm_previous_at_i_decoded * S ((S (i)) * x1) + (frm_residue_previous_at_i))) /\ (exists frm_mod_left_previous_at_i_congruence frm_mod_right_previous_at_i_congruence. a * S i + p * frm_mod_left_previous_at_i_congruence = S frm_residue_previous_at_i + p * frm_mod_right_previous_at_i_congruence))) - 0153
specialize hprev_witness_witness i - 0154
apply hprev_witness_witness - 0155
exact hsplit_right - 0156
cases hold - 0157
cases hold_witness - 0158
cases hold_witness_right - 0159
exists x7 - 0160
split - 0161
exact hold_witness_left - 0162
split - 0163
specialize beta_prefix_extend_witness_witness_right i - 0164
specialize beta_prefix_extend_witness_witness_right x7 - 0165
apply beta_prefix_extend_witness_witness_right - 0166
exact hsplit_right - 0167
exact hold_witness_right_left - 0168
exact hold_witness_right_right