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. ∀ a. ∀ n. ∀ h. ∀ A. p = S n → Prime(p) → ¬a = 0 → Lt(a,p) → n = h + h → Pow(a,h,A) → (¬QRes(p,a) → ModEq(p,A,n)) ∧ (ModEq(p,A,n) → ¬QRes(p,a))Every 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
7 occurrences
In local proof propositions
11 occurrences
Exact expanded native-PA statement
forall p a n h A. p = S n -> ((~(p = 1) /\ forall esi_prime_left_ecb_prime esi_prime_right_ecb_prime. p = esi_prime_left_ecb_prime * esi_prime_right_ecb_prime -> esi_prime_left_ecb_prime = 1 \/ esi_prime_right_ecb_prime = 1)) -> ~(a = 0) -> (exists wpo_gap_ecb_a_lt_p. wpo_gap_ecb_a_lt_p + S (a) = p) -> n = h + h -> (exists ff_b_ecb_power ff_c_ecb_power. ((forall ff_i_ecb_power_repeat. (exists ff_lt_ecb_power_repeat_bound. ff_lt_ecb_power_repeat_bound + S ff_i_ecb_power_repeat = h) -> (((exists ff_h_ecb_power_repeat_decoded. ff_h_ecb_power_repeat_decoded + S (a) = S ((S (ff_i_ecb_power_repeat)) * ff_c_ecb_power)) /\ exists ff_q_ecb_power_repeat_decoded. ff_b_ecb_power = ff_q_ecb_power_repeat_decoded * S ((S (ff_i_ecb_power_repeat)) * ff_c_ecb_power) + (a)))) /\ (exists ff_u_ecb_power_product ff_v_ecb_power_product. ((((exists ff_h_ecb_power_product_start. ff_h_ecb_power_product_start + S (1) = S ((S (0)) * ff_v_ecb_power_product)) /\ exists ff_q_ecb_power_product_start. ff_u_ecb_power_product = ff_q_ecb_power_product_start * S ((S (0)) * ff_v_ecb_power_product) + (1))) /\ ((((exists ff_h_ecb_power_product_terminal. ff_h_ecb_power_product_terminal + S (A) = S ((S (h)) * ff_v_ecb_power_product)) /\ exists ff_q_ecb_power_product_terminal. ff_u_ecb_power_product = ff_q_ecb_power_product_terminal * S ((S (h)) * ff_v_ecb_power_product) + (A))) /\ forall ff_i_ecb_power_product. (exists ff_lt_ecb_power_product_bound. ff_lt_ecb_power_product_bound + S ff_i_ecb_power_product = h) -> exists ff_p_ecb_power_product ff_r_ecb_power_product ff_s_ecb_power_product. ((((exists ff_h_ecb_power_product_factor. ff_h_ecb_power_product_factor + S (ff_p_ecb_power_product) = S ((S (ff_i_ecb_power_product)) * ff_c_ecb_power)) /\ exists ff_q_ecb_power_product_factor. ff_b_ecb_power = ff_q_ecb_power_product_factor * S ((S (ff_i_ecb_power_product)) * ff_c_ecb_power) + (ff_p_ecb_power_product))) /\ ((((exists ff_h_ecb_power_product_partial. ff_h_ecb_power_product_partial + S (ff_r_ecb_power_product) = S ((S (ff_i_ecb_power_product)) * ff_v_ecb_power_product)) /\ exists ff_q_ecb_power_product_partial. ff_u_ecb_power_product = ff_q_ecb_power_product_partial * S ((S (ff_i_ecb_power_product)) * ff_v_ecb_power_product) + (ff_r_ecb_power_product))) /\ ((((exists ff_h_ecb_power_product_successor. ff_h_ecb_power_product_successor + S (ff_s_ecb_power_product) = S ((S (S ff_i_ecb_power_product)) * ff_v_ecb_power_product)) /\ exists ff_q_ecb_power_product_successor. ff_u_ecb_power_product = ff_q_ecb_power_product_successor * S ((S (S ff_i_ecb_power_product)) * ff_v_ecb_power_product) + (ff_s_ecb_power_product))) /\ ff_s_ecb_power_product = ff_r_ecb_power_product * ff_p_ecb_power_product)))))))) -> (((~(exists qr_x_ecb_qres. exists qr_u_ecb_qres qr_v_ecb_qres. qr_x_ecb_qres * qr_x_ecb_qres + p * qr_u_ecb_qres = a + p * qr_v_ecb_qres) -> (exists wpp_mod_left_ecb_mod_predecessor wpp_mod_right_ecb_mod_predecessor. (A) + p * wpp_mod_left_ecb_mod_predecessor = (n) + p * wpp_mod_right_ecb_mod_predecessor)) /\ ((exists wpp_mod_left_ecb_mod_predecessor wpp_mod_right_ecb_mod_predecessor. (A) + p * wpp_mod_left_ecb_mod_predecessor = (n) + p * wpp_mod_right_ecb_mod_predecessor) -> ~(exists qr_x_ecb_qres. exists qr_u_ecb_qres qr_v_ecb_qres. qr_x_ecb_qres * qr_x_ecb_qres + p * qr_u_ecb_qres = a + p * qr_v_ecb_qres))))Proof neighborhood
Direct theorem prerequisites
PA00BN bounded_euler_criterion_dichotomy PA00BQ bounded_euler_criterion_residue_iff PA00BP odd_prime_one_not_mod_predecessor PA003L mod_eq_symm PA0024 mod_eq_transDirect 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–11
Work with arbitrary variables or the premises of the current implication.
- L11
intro hpower
03Establish hdichotomyL12–21
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply bounded euler criterion dichotomy.
- L12
have hdichotomy : QRes(p,a) ∧ ModEq(p,A,1) ∨ ¬QRes(p,a) ∧ ModEq(p,A,n)Definitions: QRes(p,a)ModEq(p,A,1)ModEq(p,A,n)Original native command in the exact edition - L13
specialize bounded_euler_criterion_dichotomy p - L14
specialize bounded_euler_criterion_dichotomy a - L15
specialize bounded_euler_criterion_dichotomy n - L16
specialize bounded_euler_criterion_dichotomy h - L17
specialize bounded_euler_criterion_dichotomy A - L18
apply bounded_euler_criterion_dichotomy - L19
exact hpn - L20
exact hp - L21
exact ha0
04Use earlier factsL22–24
05Establish hresidue_iffL25–34
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply bounded euler criterion residue iff.
- L25
have hresidue_iff : (QRes(p,a) → ModEq(p,A,1)) ∧ (ModEq(p,A,1) → QRes(p,a))Definitions: QRes(p,a)ModEq(p,A,1)Original native command in the exact edition - L26
specialize bounded_euler_criterion_residue_iff p - L27
specialize bounded_euler_criterion_residue_iff a - L28
specialize bounded_euler_criterion_residue_iff n - L29
specialize bounded_euler_criterion_residue_iff h - L30
specialize bounded_euler_criterion_residue_iff A - L31
apply bounded_euler_criterion_residue_iff - L32
exact hpn - L33
exact hp - L34
exact ha0
06Use earlier factsL35–37
07Establish hdistinctL38–47
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply odd prime one not mod predecessor.
08Separate the logical casesL48–48
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L48
split
09Fix variables and assumptionsL49–49
Work with arbitrary variables or the premises of the current implication.
- L49
intro hnonresidue
10Separate the logical casesL50–52
11Use earlier factsL53–54
12Separate the logical casesL55–55
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L55
cases hdichotomy_right
13Use earlier factsL56–56
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L56
exact hdichotomy_right_right
14Fix variables and assumptionsL57–58
15Separate the logical casesL59–59
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L59
cases hresidue_iff
16Establish honeL60–63
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply hresidue iff left.
17Establish hone_backL64–73
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply mod eq symm.
Original defined command ledger · 76 lines
- 0001
intro p - 0002
intro a - 0003
intro n - 0004
intro h - 0005
intro A - 0006
intro hpn - 0007
intro hp - 0008
intro ha0 - 0009
intro hap - 0010
intro heven - 0011
intro hpower - 0012
have hdichotomy : QRes(p,a) ∧ ModEq(p,A,1) ∨ ¬QRes(p,a) ∧ ModEq(p,A,n)Exact native replay line
have hdichotomy : (((exists qr_x_ecb_qres. exists qr_u_ecb_qres qr_v_ecb_qres. qr_x_ecb_qres * qr_x_ecb_qres + p * qr_u_ecb_qres = a + p * qr_v_ecb_qres) /\ (exists wpp_mod_left_ecb_mod_one wpp_mod_right_ecb_mod_one. (A) + p * wpp_mod_left_ecb_mod_one = (1) + p * wpp_mod_right_ecb_mod_one)) \/ ((~(exists qr_x_ecb_qres. exists qr_u_ecb_qres qr_v_ecb_qres. qr_x_ecb_qres * qr_x_ecb_qres + p * qr_u_ecb_qres = a + p * qr_v_ecb_qres)) /\ (exists wpp_mod_left_ecb_mod_predecessor wpp_mod_right_ecb_mod_predecessor. (A) + p * wpp_mod_left_ecb_mod_predecessor = (n) + p * wpp_mod_right_ecb_mod_predecessor))) - 0013
specialize bounded_euler_criterion_dichotomy p - 0014
specialize bounded_euler_criterion_dichotomy a - 0015
specialize bounded_euler_criterion_dichotomy n - 0016
specialize bounded_euler_criterion_dichotomy h - 0017
specialize bounded_euler_criterion_dichotomy A - 0018
apply bounded_euler_criterion_dichotomy - 0019
exact hpn - 0020
exact hp - 0021
exact ha0 - 0022
exact hap - 0023
exact heven - 0024
exact hpower - 0025
have hresidue_iff : (QRes(p,a) → ModEq(p,A,1)) ∧ (ModEq(p,A,1) → QRes(p,a))Exact native replay line
have hresidue_iff : (((exists qr_x_ecb_qres. exists qr_u_ecb_qres qr_v_ecb_qres. qr_x_ecb_qres * qr_x_ecb_qres + p * qr_u_ecb_qres = a + p * qr_v_ecb_qres) -> (exists wpp_mod_left_ecb_mod_one wpp_mod_right_ecb_mod_one. (A) + p * wpp_mod_left_ecb_mod_one = (1) + p * wpp_mod_right_ecb_mod_one)) /\ ((exists wpp_mod_left_ecb_mod_one wpp_mod_right_ecb_mod_one. (A) + p * wpp_mod_left_ecb_mod_one = (1) + p * wpp_mod_right_ecb_mod_one) -> (exists qr_x_ecb_qres. exists qr_u_ecb_qres qr_v_ecb_qres. qr_x_ecb_qres * qr_x_ecb_qres + p * qr_u_ecb_qres = a + p * qr_v_ecb_qres))) - 0026
specialize bounded_euler_criterion_residue_iff p - 0027
specialize bounded_euler_criterion_residue_iff a - 0028
specialize bounded_euler_criterion_residue_iff n - 0029
specialize bounded_euler_criterion_residue_iff h - 0030
specialize bounded_euler_criterion_residue_iff A - 0031
apply bounded_euler_criterion_residue_iff - 0032
exact hpn - 0033
exact hp - 0034
exact ha0 - 0035
exact hap - 0036
exact heven - 0037
exact hpower - 0038
have hdistinct : ¬ModEq(p,1,n)Exact native replay line
have hdistinct : ~(exists wpp_mod_left_ecb_one_mod_predecessor wpp_mod_right_ecb_one_mod_predecessor. (1) + p * wpp_mod_left_ecb_one_mod_predecessor = (n) + p * wpp_mod_right_ecb_one_mod_predecessor) - 0039
intro hcollision - 0040
specialize odd_prime_one_not_mod_predecessor p - 0041
specialize odd_prime_one_not_mod_predecessor n - 0042
specialize odd_prime_one_not_mod_predecessor h - 0043
apply odd_prime_one_not_mod_predecessor - 0044
exact hpn - 0045
exact hp - 0046
exact heven - 0047
exact hcollision - 0048
split - 0049
intro hnonresidue - 0050
cases hdichotomy - 0051
cases hdichotomy_left - 0052
exfalso - 0053
apply hnonresidue - 0054
exact hdichotomy_left_left - 0055
cases hdichotomy_right - 0056
exact hdichotomy_right_right - 0057
intro hminus - 0058
intro hqres - 0059
cases hresidue_iff - 0060
have hone : ModEq(p,A,1)Exact native replay line
have hone : exists wpp_mod_left_ecb_mod_one wpp_mod_right_ecb_mod_one. (A) + p * wpp_mod_left_ecb_mod_one = (1) + p * wpp_mod_right_ecb_mod_one - 0061
apply hresidue_iff_left - 0062
exact hqres - 0063
apply hdistinct - 0064
have hone_back : ModEq(p,1,A)Exact native replay line
have hone_back : exists wpp_mod_left_ecb_nonresidue_one_back wpp_mod_right_ecb_nonresidue_one_back. (1) + p * wpp_mod_left_ecb_nonresidue_one_back = (A) + p * wpp_mod_right_ecb_nonresidue_one_back - 0065
specialize mod_eq_symm p - 0066
specialize mod_eq_symm A - 0067
specialize mod_eq_symm 1 - 0068
apply mod_eq_symm - 0069
exact hone - 0070
specialize mod_eq_trans p - 0071
specialize mod_eq_trans 1 - 0072
specialize mod_eq_trans A - 0073
specialize mod_eq_trans n - 0074
apply mod_eq_trans - 0075
exact hone_back - 0076
exact hminus