Current library: Alpha v34, 4,223 checked-use theorems; Stable remains 432. Historical first admissions, original proof editions, and non-admitted aliases are preserved. Exact original first-admission records.
Statement with defined notation
∀ p. ∀ q. ∀ h. ∀ k. ∀ i. ∀ d. ∀ r. ∀ rb. ∀ rc. ∀ n. p = 2 · h + 1 → q = 2 · k + 1 → Prime(p) → Prime(q) → ¬p = q → Lt(i,h) → (∀ x. Lt(x,k) → ∃ y. BetaAt(rb,rc,x,y) ∧ (y = 0 ∧ (Lt(q · S i,p · S x) ∧ ¬Lt(p · S x,q · S i)) ∨ y = 1 ∧ (Lt(p · S x,q · S i) ∧ ¬Lt(q · S i,p · S x)))) → BitCount(rb,rc,k,n) → q · S i = p · d + r → Lt(r,p) → n = dEvery purple notation token opens its conservative definition. This is a reading surface; the compiler expands the statement before the unchanged kernel checks it.
Definitions used by this theorem
In the theorem statement
11 occurrences
In local proof propositions
6 occurrences
Exact expanded native-PA statement
forall p q h k i d r rb rc n. p = 2 * h + 1 -> q = 2 * k + 1 -> ((~(p = 1) /\ forall frp_prime_left_row_quotient_prime_p frp_prime_right_row_quotient_prime_p. p = frp_prime_left_row_quotient_prime_p * frp_prime_right_row_quotient_prime_p -> frp_prime_left_row_quotient_prime_p = 1 \/ frp_prime_right_row_quotient_prime_p = 1)) -> ((~(q = 1) /\ forall frp_prime_left_row_quotient_prime_q frp_prime_right_row_quotient_prime_q. q = frp_prime_left_row_quotient_prime_q * frp_prime_right_row_quotient_prime_q -> frp_prime_left_row_quotient_prime_q = 1 \/ frp_prime_right_row_quotient_prime_q = 1)) -> ~(p = q) -> (exists edt_lt_gap_row_quotient_row_bound. edt_lt_gap_row_quotient_row_bound + S (i) = h) -> (forall eri_column_row_quotient_source. (exists eri_gap_row_quotient_source_bound. eri_gap_row_quotient_source_bound + S (eri_column_row_quotient_source) = k) -> exists eri_bit_row_quotient_source. ((((exists ff_h_eri_row_quotient_source_decoded. ff_h_eri_row_quotient_source_decoded + S (eri_bit_row_quotient_source) = S ((S (eri_column_row_quotient_source)) * rc)) /\ exists ff_q_eri_row_quotient_source_decoded. rb = ff_q_eri_row_quotient_source_decoded * S ((S (eri_column_row_quotient_source)) * rc) + (eri_bit_row_quotient_source))) /\ (((eri_bit_row_quotient_source = 0 /\ ((exists eri_gap_row_quotient_source_choice_left. eri_gap_row_quotient_source_choice_left + S (q * S i) = p * S eri_column_row_quotient_source) /\ ~(exists eri_gap_row_quotient_source_choice_right. eri_gap_row_quotient_source_choice_right + S (p * S eri_column_row_quotient_source) = q * S i))) \/ (eri_bit_row_quotient_source = 1 /\ ((exists eri_gap_row_quotient_source_choice_right. eri_gap_row_quotient_source_choice_right + S (p * S eri_column_row_quotient_source) = q * S i) /\ ~(exists eri_gap_row_quotient_source_choice_left. eri_gap_row_quotient_source_choice_left + S (q * S i) = p * S eri_column_row_quotient_source))))))) -> (((exists ff_u_row_quotient_count_n_sum ff_v_row_quotient_count_n_sum. ((((exists ff_h_row_quotient_count_n_sum_start. ff_h_row_quotient_count_n_sum_start + S (0) = S ((S (0)) * ff_v_row_quotient_count_n_sum)) /\ exists ff_q_row_quotient_count_n_sum_start. ff_u_row_quotient_count_n_sum = ff_q_row_quotient_count_n_sum_start * S ((S (0)) * ff_v_row_quotient_count_n_sum) + (0))) /\ ((((exists ff_h_row_quotient_count_n_sum_terminal. ff_h_row_quotient_count_n_sum_terminal + S (n) = S ((S (k)) * ff_v_row_quotient_count_n_sum)) /\ exists ff_q_row_quotient_count_n_sum_terminal. ff_u_row_quotient_count_n_sum = ff_q_row_quotient_count_n_sum_terminal * S ((S (k)) * ff_v_row_quotient_count_n_sum) + (n))) /\ forall ff_i_row_quotient_count_n_sum. (exists ff_lt_row_quotient_count_n_sum_bound. ff_lt_row_quotient_count_n_sum_bound + S ff_i_row_quotient_count_n_sum = k) -> exists ff_a_row_quotient_count_n_sum ff_r_row_quotient_count_n_sum ff_s_row_quotient_count_n_sum. ((((exists ff_h_row_quotient_count_n_sum_summand. ff_h_row_quotient_count_n_sum_summand + S (ff_a_row_quotient_count_n_sum) = S ((S (ff_i_row_quotient_count_n_sum)) * rc)) /\ exists ff_q_row_quotient_count_n_sum_summand. rb = ff_q_row_quotient_count_n_sum_summand * S ((S (ff_i_row_quotient_count_n_sum)) * rc) + (ff_a_row_quotient_count_n_sum))) /\ ((((exists ff_h_row_quotient_count_n_sum_partial. ff_h_row_quotient_count_n_sum_partial + S (ff_r_row_quotient_count_n_sum) = S ((S (ff_i_row_quotient_count_n_sum)) * ff_v_row_quotient_count_n_sum)) /\ exists ff_q_row_quotient_count_n_sum_partial. ff_u_row_quotient_count_n_sum = ff_q_row_quotient_count_n_sum_partial * S ((S (ff_i_row_quotient_count_n_sum)) * ff_v_row_quotient_count_n_sum) + (ff_r_row_quotient_count_n_sum))) /\ ((((exists ff_h_row_quotient_count_n_sum_successor. ff_h_row_quotient_count_n_sum_successor + S (ff_s_row_quotient_count_n_sum) = S ((S (S ff_i_row_quotient_count_n_sum)) * ff_v_row_quotient_count_n_sum)) /\ exists ff_q_row_quotient_count_n_sum_successor. ff_u_row_quotient_count_n_sum = ff_q_row_quotient_count_n_sum_successor * S ((S (S ff_i_row_quotient_count_n_sum)) * ff_v_row_quotient_count_n_sum) + (ff_s_row_quotient_count_n_sum))) /\ ff_s_row_quotient_count_n_sum = ff_r_row_quotient_count_n_sum + ff_a_row_quotient_count_n_sum)))))) /\ (forall ff_i_row_quotient_count_n_bits. (exists ff_lt_row_quotient_count_n_bits_bound. ff_lt_row_quotient_count_n_bits_bound + S ff_i_row_quotient_count_n_bits = k) -> exists ff_bit_row_quotient_count_n_bits. ((((exists ff_h_row_quotient_count_n_bits_decoded. ff_h_row_quotient_count_n_bits_decoded + S (ff_bit_row_quotient_count_n_bits) = S ((S (ff_i_row_quotient_count_n_bits)) * rc)) /\ exists ff_q_row_quotient_count_n_bits_decoded. rb = ff_q_row_quotient_count_n_bits_decoded * S ((S (ff_i_row_quotient_count_n_bits)) * rc) + (ff_bit_row_quotient_count_n_bits))) /\ (ff_bit_row_quotient_count_n_bits = 0 \/ ff_bit_row_quotient_count_n_bits = 1))))) -> q * S i = p * d + r -> (exists edt_lt_gap_row_quotient_remainder_bound. edt_lt_gap_row_quotient_remainder_bound + S (r) = p) -> n = dProof neighborhood
Direct theorem prerequisites
PA00DP distinct_primes_own_odd_half_scaled_remainder_nonzero PA00DR odd_half_division_quotient_bounded PA00DT eisenstein_row_indicator_prefix_to_initial_segment PA00DY eisenstein_initial_segment_bit_count_exact PA006Q bit_count_functionalDirect theorem dependents
Definition-aware tactic body
Only local propositions introduced by have or suffices are compacted. The untrusted compiler re-expands each one before the original tactic script is replayed; defined notation is never accepted by the kernel. Open the exact replay line beneath every changed command.
Read the argument
Proof checkpoints
This is a reading aid, not a new proof or a proof-tree certificate. Checkpoint groups are consecutive commands, not inferred branch boundaries. Every step links to the preserved script.
Named ingredients (5)
01Fix variables and assumptionsL1–10
02Fix variables and assumptionsL11–20
03Establish hr0L21–30
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply distinct primes own odd half scaled remainder nonzero.
- L21
have hr0 : ~(r = 0) - L22
intro hrzero - L23
specialize distinct_primes_own_odd_half_scaled_remainder_nonzero p - L24
specialize distinct_primes_own_odd_half_scaled_remainder_nonzero q - L25
specialize distinct_primes_own_odd_half_scaled_remainder_nonzero h - L26
specialize distinct_primes_own_odd_half_scaled_remainder_nonzero i - L27
specialize distinct_primes_own_odd_half_scaled_remainder_nonzero d - L28
specialize distinct_primes_own_odd_half_scaled_remainder_nonzero r - L29
apply distinct_primes_own_odd_half_scaled_remainder_nonzero - L30
exact hpodd
04Use earlier factsL31–36
05Establish hdleL37–46
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply odd half division quotient bounded.
- L37
- L38
specialize odd_half_division_quotient_bounded p - L39
specialize odd_half_division_quotient_bounded q - L40
specialize odd_half_division_quotient_bounded h - L41
specialize odd_half_division_quotient_bounded k - L42
specialize odd_half_division_quotient_bounded i - L43
specialize odd_half_division_quotient_bounded d - L44
specialize odd_half_division_quotient_bounded r - L45
apply odd_half_division_quotient_bounded - L46
exact hpodd
06Use earlier factsL47–49
07Establish hinitialL50–59
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply eisenstein row indicator prefix to initial segment.
- L50
have hinitial : ∀ eis_index_row_quotient_initial. Lt(eis_index_row_quotient_initial,k) → ∃ x. BetaAt(rb,rc,eis_index_row_quotient_initial,x) ∧ (x = 1 ∧ Lt(eis_index_row_quotient_initial,d) ∨ x = 0 ∧ Lt(d,S eis_index_row_quotient_initial))Definitions: Lt(eis_index_row_quotient_initial,k)BetaAt(rb,rc,eis_index_row_quotient_initial,x)Lt(eis_index_row_quotient_initial,d)Lt(d,S eis_index_row_quotient_initial)Original native command in the exact edition - L51
specialize eisenstein_row_indicator_prefix_to_initial_segment p - L52
specialize eisenstein_row_indicator_prefix_to_initial_segment q - L53
specialize eisenstein_row_indicator_prefix_to_initial_segment i - L54
specialize eisenstein_row_indicator_prefix_to_initial_segment d - L55
specialize eisenstein_row_indicator_prefix_to_initial_segment r - L56
specialize eisenstein_row_indicator_prefix_to_initial_segment rb - L57
specialize eisenstein_row_indicator_prefix_to_initial_segment rc - L58
specialize eisenstein_row_indicator_prefix_to_initial_segment k - L59
apply eisenstein_row_indicator_prefix_to_initial_segment
08Use earlier factsL60–63
09Establish hcountdL64–73
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply eisenstein initial segment bit count exact.
- L64
have hcountd : BitCount(rb,rc,k,d)Definitions: BitCount(rb,rc,k,d)Original native command in the exact edition - L65
specialize eisenstein_initial_segment_bit_count_exact d - L66
specialize eisenstein_initial_segment_bit_count_exact rb - L67
specialize eisenstein_initial_segment_bit_count_exact rc - L68
specialize eisenstein_initial_segment_bit_count_exact k - L69
apply eisenstein_initial_segment_bit_count_exact - L70
exact hinitial - L71
exact hdle - L72
specialize bit_count_functional rb - L73
specialize bit_count_functional rc
Original defined command ledger · 79 lines
- 0001
intro p - 0002
intro q - 0003
intro h - 0004
intro k - 0005
intro i - 0006
intro d - 0007
intro r - 0008
intro rb - 0009
intro rc - 0010
intro n - 0011
intro hpodd - 0012
intro hqodd - 0013
intro hp - 0014
intro hq - 0015
intro hpq - 0016
intro hi - 0017
intro hrow - 0018
intro hcount - 0019
intro hdivision - 0020
intro hrp - 0021
have hr0 : ~(r = 0) - 0022
intro hrzero - 0023
specialize distinct_primes_own_odd_half_scaled_remainder_nonzero p - 0024
specialize distinct_primes_own_odd_half_scaled_remainder_nonzero q - 0025
specialize distinct_primes_own_odd_half_scaled_remainder_nonzero h - 0026
specialize distinct_primes_own_odd_half_scaled_remainder_nonzero i - 0027
specialize distinct_primes_own_odd_half_scaled_remainder_nonzero d - 0028
specialize distinct_primes_own_odd_half_scaled_remainder_nonzero r - 0029
apply distinct_primes_own_odd_half_scaled_remainder_nonzero - 0030
exact hpodd - 0031
exact hp - 0032
exact hq - 0033
exact hpq - 0034
exact hi - 0035
exact hdivision - 0036
exact hrzero - 0037
have hdle : Le(d,k)Exact native replay line
have hdle : exists edt_le_gap_row_quotient_quotient_bound. edt_le_gap_row_quotient_quotient_bound + (d) = k - 0038
specialize odd_half_division_quotient_bounded p - 0039
specialize odd_half_division_quotient_bounded q - 0040
specialize odd_half_division_quotient_bounded h - 0041
specialize odd_half_division_quotient_bounded k - 0042
specialize odd_half_division_quotient_bounded i - 0043
specialize odd_half_division_quotient_bounded d - 0044
specialize odd_half_division_quotient_bounded r - 0045
apply odd_half_division_quotient_bounded - 0046
exact hpodd - 0047
exact hqodd - 0048
exact hi - 0049
exact hdivision - 0050
have hinitial : ∀ eis_index_row_quotient_initial. Lt(eis_index_row_quotient_initial,k) → ∃ x. BetaAt(rb,rc,eis_index_row_quotient_initial,x) ∧ (x = 1 ∧ Lt(eis_index_row_quotient_initial,d) ∨ x = 0 ∧ Lt(d,S eis_index_row_quotient_initial))Exact native replay line
have hinitial : forall eis_index_row_quotient_initial. (exists eis_lt_gap_row_quotient_initial_bound. eis_lt_gap_row_quotient_initial_bound + S (eis_index_row_quotient_initial) = k) -> exists eis_bit_row_quotient_initial. ((((exists ff_h_eis_row_quotient_initial_decoded. ff_h_eis_row_quotient_initial_decoded + S (eis_bit_row_quotient_initial) = S ((S (eis_index_row_quotient_initial)) * rc)) /\ exists ff_q_eis_row_quotient_initial_decoded. rb = ff_q_eis_row_quotient_initial_decoded * S ((S (eis_index_row_quotient_initial)) * rc) + (eis_bit_row_quotient_initial))) /\ (((eis_bit_row_quotient_initial = 1 /\ (exists eis_le_gap_row_quotient_initial_choice_inside. eis_le_gap_row_quotient_initial_choice_inside + (S eis_index_row_quotient_initial) = d)) \/ (eis_bit_row_quotient_initial = 0 /\ (exists eis_lt_gap_row_quotient_initial_choice_outside. eis_lt_gap_row_quotient_initial_choice_outside + S (d) = S eis_index_row_quotient_initial))))) - 0051
specialize eisenstein_row_indicator_prefix_to_initial_segment p - 0052
specialize eisenstein_row_indicator_prefix_to_initial_segment q - 0053
specialize eisenstein_row_indicator_prefix_to_initial_segment i - 0054
specialize eisenstein_row_indicator_prefix_to_initial_segment d - 0055
specialize eisenstein_row_indicator_prefix_to_initial_segment r - 0056
specialize eisenstein_row_indicator_prefix_to_initial_segment rb - 0057
specialize eisenstein_row_indicator_prefix_to_initial_segment rc - 0058
specialize eisenstein_row_indicator_prefix_to_initial_segment k - 0059
apply eisenstein_row_indicator_prefix_to_initial_segment - 0060
exact hrow - 0061
exact hdivision - 0062
exact hr0 - 0063
exact hrp - 0064
have hcountd : BitCount(rb,rc,k,d)Exact native replay line
have hcountd : ((exists ff_u_row_quotient_count_d_sum ff_v_row_quotient_count_d_sum. ((((exists ff_h_row_quotient_count_d_sum_start. ff_h_row_quotient_count_d_sum_start + S (0) = S ((S (0)) * ff_v_row_quotient_count_d_sum)) /\ exists ff_q_row_quotient_count_d_sum_start. ff_u_row_quotient_count_d_sum = ff_q_row_quotient_count_d_sum_start * S ((S (0)) * ff_v_row_quotient_count_d_sum) + (0))) /\ ((((exists ff_h_row_quotient_count_d_sum_terminal. ff_h_row_quotient_count_d_sum_terminal + S (d) = S ((S (k)) * ff_v_row_quotient_count_d_sum)) /\ exists ff_q_row_quotient_count_d_sum_terminal. ff_u_row_quotient_count_d_sum = ff_q_row_quotient_count_d_sum_terminal * S ((S (k)) * ff_v_row_quotient_count_d_sum) + (d))) /\ forall ff_i_row_quotient_count_d_sum. (exists ff_lt_row_quotient_count_d_sum_bound. ff_lt_row_quotient_count_d_sum_bound + S ff_i_row_quotient_count_d_sum = k) -> exists ff_a_row_quotient_count_d_sum ff_r_row_quotient_count_d_sum ff_s_row_quotient_count_d_sum. ((((exists ff_h_row_quotient_count_d_sum_summand. ff_h_row_quotient_count_d_sum_summand + S (ff_a_row_quotient_count_d_sum) = S ((S (ff_i_row_quotient_count_d_sum)) * rc)) /\ exists ff_q_row_quotient_count_d_sum_summand. rb = ff_q_row_quotient_count_d_sum_summand * S ((S (ff_i_row_quotient_count_d_sum)) * rc) + (ff_a_row_quotient_count_d_sum))) /\ ((((exists ff_h_row_quotient_count_d_sum_partial. ff_h_row_quotient_count_d_sum_partial + S (ff_r_row_quotient_count_d_sum) = S ((S (ff_i_row_quotient_count_d_sum)) * ff_v_row_quotient_count_d_sum)) /\ exists ff_q_row_quotient_count_d_sum_partial. ff_u_row_quotient_count_d_sum = ff_q_row_quotient_count_d_sum_partial * S ((S (ff_i_row_quotient_count_d_sum)) * ff_v_row_quotient_count_d_sum) + (ff_r_row_quotient_count_d_sum))) /\ ((((exists ff_h_row_quotient_count_d_sum_successor. ff_h_row_quotient_count_d_sum_successor + S (ff_s_row_quotient_count_d_sum) = S ((S (S ff_i_row_quotient_count_d_sum)) * ff_v_row_quotient_count_d_sum)) /\ exists ff_q_row_quotient_count_d_sum_successor. ff_u_row_quotient_count_d_sum = ff_q_row_quotient_count_d_sum_successor * S ((S (S ff_i_row_quotient_count_d_sum)) * ff_v_row_quotient_count_d_sum) + (ff_s_row_quotient_count_d_sum))) /\ ff_s_row_quotient_count_d_sum = ff_r_row_quotient_count_d_sum + ff_a_row_quotient_count_d_sum)))))) /\ (forall ff_i_row_quotient_count_d_bits. (exists ff_lt_row_quotient_count_d_bits_bound. ff_lt_row_quotient_count_d_bits_bound + S ff_i_row_quotient_count_d_bits = k) -> exists ff_bit_row_quotient_count_d_bits. ((((exists ff_h_row_quotient_count_d_bits_decoded. ff_h_row_quotient_count_d_bits_decoded + S (ff_bit_row_quotient_count_d_bits) = S ((S (ff_i_row_quotient_count_d_bits)) * rc)) /\ exists ff_q_row_quotient_count_d_bits_decoded. rb = ff_q_row_quotient_count_d_bits_decoded * S ((S (ff_i_row_quotient_count_d_bits)) * rc) + (ff_bit_row_quotient_count_d_bits))) /\ (ff_bit_row_quotient_count_d_bits = 0 \/ ff_bit_row_quotient_count_d_bits = 1)))) - 0065
specialize eisenstein_initial_segment_bit_count_exact d - 0066
specialize eisenstein_initial_segment_bit_count_exact rb - 0067
specialize eisenstein_initial_segment_bit_count_exact rc - 0068
specialize eisenstein_initial_segment_bit_count_exact k - 0069
apply eisenstein_initial_segment_bit_count_exact - 0070
exact hinitial - 0071
exact hdle - 0072
specialize bit_count_functional rb - 0073
specialize bit_count_functional rc - 0074
specialize bit_count_functional k - 0075
specialize bit_count_functional n - 0076
specialize bit_count_functional d - 0077
apply bit_count_functional - 0078
exact hcount - 0079
exact hcountd