Exact expanded PA statement
forall p q. (~(p = 1) /\ forall qr_factor_a_prime_p qr_factor_b_prime_p. p = qr_factor_a_prime_p * qr_factor_b_prime_p -> qr_factor_a_prime_p = 1 \/ qr_factor_b_prime_p = 1) -> (~(q = 1) /\ forall qr_factor_a_prime_q qr_factor_b_prime_q. q = qr_factor_a_prime_q * qr_factor_b_prime_q -> qr_factor_a_prime_q = 1 \/ qr_factor_b_prime_q = 1) -> ~(p = q) -> (exists qr_half_odd_p. p = 2 * qr_half_odd_p + 1) -> (exists qr_half_odd_q. q = 2 * qr_half_odd_q + 1) -> ((((exists qr_mod4_one_p. p = 4 * qr_mod4_one_p + 1) \/ (exists qr_mod4_one_q. q = 4 * qr_mod4_one_q + 1)) -> (((exists qr_x_p_q. exists qr_u_p_q qr_v_p_q. qr_x_p_q * qr_x_p_q + p * qr_u_p_q = q + p * qr_v_p_q) /\ (exists qr_x_q_p. exists qr_u_q_p qr_v_q_p. qr_x_q_p * qr_x_q_p + q * qr_u_q_p = p + q * qr_v_q_p)) \/ (~(exists qr_x_p_q. exists qr_u_p_q qr_v_p_q. qr_x_p_q * qr_x_p_q + p * qr_u_p_q = q + p * qr_v_p_q) /\ ~(exists qr_x_q_p. exists qr_u_q_p qr_v_q_p. qr_x_q_p * qr_x_q_p + q * qr_u_q_p = p + q * qr_v_q_p)))) /\ ((((exists qr_mod4_three_p. p = 4 * qr_mod4_three_p + 3) /\ (exists qr_mod4_three_q. q = 4 * qr_mod4_three_q + 3)) -> (((exists qr_x_p_q. exists qr_u_p_q qr_v_p_q. qr_x_p_q * qr_x_p_q + p * qr_u_p_q = q + p * qr_v_p_q) /\ ~(exists qr_x_q_p. exists qr_u_q_p qr_v_q_p. qr_x_q_p * qr_x_q_p + q * qr_u_q_p = p + q * qr_v_q_p)) \/ (~(exists qr_x_p_q. exists qr_u_p_q qr_v_p_q. qr_x_p_q * qr_x_p_q + p * qr_u_p_q = q + p * qr_v_p_q) /\ (exists qr_x_q_p. exists qr_u_q_p qr_v_q_p. qr_x_q_p * qr_x_q_p + q * qr_u_q_p = p + q * qr_v_q_p))))))Combine the two sign-free reciprocity cases
Curated informal proof
Write the two odd primes as successors of twice their half-prime parameters. Construct the common Gauss–Eisenstein data package once and unpack its two residue classifications, two parity transports, and the lattice-count identity.
For the same-status implication, feed the hypothesis that one half-prime parameter is even into the constructive same-parity endpoint. For the opposite-status implication, feed the hypothesis that both half-prime parameters are odd into the opposite-parity endpoint. Pair the two implications under the original quantifiers.
Referenced ingredients
Proof neighborhood
Direct dependencies
PA00FG distinct_odd_primes_gauss_eisenstein_data_exists PA00FP conditional_qres_same_status_from_oriented_gauss_counts PA00FV conditional_qres_opposite_status_from_oriented_gauss_countsDirect 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 p - 0002
intro q - 0003
intro hp - 0004
intro hq - 0005
intro hpq - 0006
intro hpodd - 0007
intro hqodd - 0008
cases hpodd - 0009
cases hqodd - 0010
have hdata : exists e f Q U. (((((((exists qr_x_qr_final_first. exists qr_u_qr_final_first qr_v_qr_final_first. qr_x_qr_final_first * qr_x_qr_final_first + p * qr_u_qr_final_first = q + p * qr_v_qr_final_first) -> (exists qr_even_first_even. e = 2 * qr_even_first_even)) /\ ((exists qr_even_first_even. e = 2 * qr_even_first_even) -> (exists qr_x_qr_final_first. exists qr_u_qr_final_first qr_v_qr_final_first. qr_x_qr_final_first * qr_x_qr_final_first + p * qr_u_qr_final_first = q + p * qr_v_qr_final_first))) /\ (((~(exists qr_x_qr_final_first. exists qr_u_qr_final_first qr_v_qr_final_first. qr_x_qr_final_first * qr_x_qr_final_first + p * qr_u_qr_final_first = q + p * qr_v_qr_final_first)) -> (exists qr_odd_first_odd. e = 2 * qr_odd_first_odd + 1)) /\ ((exists qr_odd_first_odd. e = 2 * qr_odd_first_odd + 1) -> ~(exists qr_x_qr_final_first. exists qr_u_qr_final_first qr_v_qr_final_first. qr_x_qr_final_first * qr_x_qr_final_first + p * qr_u_qr_final_first = q + p * qr_v_qr_final_first))))) /\ (((((exists qr_x_qr_final_second. exists qr_u_qr_final_second qr_v_qr_final_second. qr_x_qr_final_second * qr_x_qr_final_second + q * qr_u_qr_final_second = p + q * qr_v_qr_final_second) -> (exists qr_even_second_even. f = 2 * qr_even_second_even)) /\ ((exists qr_even_second_even. f = 2 * qr_even_second_even) -> (exists qr_x_qr_final_second. exists qr_u_qr_final_second qr_v_qr_final_second. qr_x_qr_final_second * qr_x_qr_final_second + q * qr_u_qr_final_second = p + q * qr_v_qr_final_second))) /\ (((~(exists qr_x_qr_final_second. exists qr_u_qr_final_second qr_v_qr_final_second. qr_x_qr_final_second * qr_x_qr_final_second + q * qr_u_qr_final_second = p + q * qr_v_qr_final_second)) -> (exists qr_odd_second_odd. f = 2 * qr_odd_second_odd + 1)) /\ ((exists qr_odd_second_odd. f = 2 * qr_odd_second_odd + 1) -> ~(exists qr_x_qr_final_second. exists qr_u_qr_final_second qr_v_qr_final_second. qr_x_qr_final_second * qr_x_qr_final_second + q * qr_u_qr_final_second = p + q * qr_v_qr_final_second)))))) /\ (((exists qr_mod_u_first qr_mod_v_first. e + 2 * qr_mod_u_first = Q + 2 * qr_mod_v_first) /\ (exists qr_mod_u_second qr_mod_v_second. f + 2 * qr_mod_u_second = U + 2 * qr_mod_v_second)) /\ Q + U = x * x1)) - 0011
specialize distinct_odd_primes_gauss_eisenstein_data_exists p - 0012
specialize distinct_odd_primes_gauss_eisenstein_data_exists q - 0013
specialize distinct_odd_primes_gauss_eisenstein_data_exists x - 0014
specialize distinct_odd_primes_gauss_eisenstein_data_exists x1 - 0015
apply distinct_odd_primes_gauss_eisenstein_data_exists - 0016
exact hpodd_witness - 0017
exact hqodd_witness - 0018
exact hp - 0019
exact hq - 0020
exact hpq - 0021
cases hdata - 0022
cases hdata_witness - 0023
cases hdata_witness_witness - 0024
cases hdata_witness_witness_witness - 0025
cases hdata_witness_witness_witness_witness - 0026
cases hdata_witness_witness_witness_witness_left - 0027
cases hdata_witness_witness_witness_witness_right - 0028
cases hdata_witness_witness_witness_witness_right_left - 0029
split - 0030
intro hsame - 0031
specialize conditional_qres_same_status_from_oriented_gauss_counts p - 0032
specialize conditional_qres_same_status_from_oriented_gauss_counts q - 0033
specialize conditional_qres_same_status_from_oriented_gauss_counts x2 - 0034
specialize conditional_qres_same_status_from_oriented_gauss_counts x3 - 0035
specialize conditional_qres_same_status_from_oriented_gauss_counts x4 - 0036
specialize conditional_qres_same_status_from_oriented_gauss_counts x5 - 0037
specialize conditional_qres_same_status_from_oriented_gauss_counts x - 0038
specialize conditional_qres_same_status_from_oriented_gauss_counts x1 - 0039
apply conditional_qres_same_status_from_oriented_gauss_counts - 0040
exact hpodd_witness - 0041
exact hqodd_witness - 0042
exact hdata_witness_witness_witness_witness_left_left - 0043
exact hdata_witness_witness_witness_witness_left_right - 0044
exact hdata_witness_witness_witness_witness_right_left_left - 0045
exact hdata_witness_witness_witness_witness_right_left_right - 0046
exact hdata_witness_witness_witness_witness_right_right - 0047
exact hsame - 0048
intro hopposite - 0049
specialize conditional_qres_opposite_status_from_oriented_gauss_counts p - 0050
specialize conditional_qres_opposite_status_from_oriented_gauss_counts q - 0051
specialize conditional_qres_opposite_status_from_oriented_gauss_counts x2 - 0052
specialize conditional_qres_opposite_status_from_oriented_gauss_counts x3 - 0053
specialize conditional_qres_opposite_status_from_oriented_gauss_counts x4 - 0054
specialize conditional_qres_opposite_status_from_oriented_gauss_counts x5 - 0055
specialize conditional_qres_opposite_status_from_oriented_gauss_counts x - 0056
specialize conditional_qres_opposite_status_from_oriented_gauss_counts x1 - 0057
apply conditional_qres_opposite_status_from_oriented_gauss_counts - 0058
exact hpodd_witness - 0059
exact hqodd_witness - 0060
exact hdata_witness_witness_witness_witness_left_left - 0061
exact hdata_witness_witness_witness_witness_left_right - 0062
exact hdata_witness_witness_witness_witness_right_left_left - 0063
exact hdata_witness_witness_witness_witness_right_left_right - 0064
exact hdata_witness_witness_witness_witness_right_right - 0065
exact hopposite