Metamath Proof Explorer


Theorem pockthi

Description: Pocklington's theorem, which gives a sufficient criterion for a number N to be prime. This is the preferred method for verifying large primes, being much more efficient to compute than trial division. This form has been optimized for application to specific large primes; see pockthg for a more general closed-form version. (Contributed by Mario Carneiro, 2-Mar-2014)

Ref Expression
Hypotheses pockthi.p 𝑃 ∈ ℙ
pockthi.g 𝐺 ∈ ℕ
pockthi.m 𝑀 = ( 𝐺 · 𝑃 )
pockthi.n 𝑁 = ( 𝑀 + 1 )
pockthi.d 𝐷 ∈ ℕ
pockthi.e 𝐸 ∈ ℕ
pockthi.a 𝐴 ∈ ℕ
pockthi.fac 𝑀 = ( 𝐷 · ( 𝑃𝐸 ) )
pockthi.gt 𝐷 < ( 𝑃𝐸 )
pockthi.mod ( ( 𝐴𝑀 ) mod 𝑁 ) = ( 1 mod 𝑁 )
pockthi.gcd ( ( ( 𝐴𝐺 ) − 1 ) gcd 𝑁 ) = 1
Assertion pockthi 𝑁 ∈ ℙ

Proof

Step Hyp Ref Expression
1 pockthi.p 𝑃 ∈ ℙ
2 pockthi.g 𝐺 ∈ ℕ
3 pockthi.m 𝑀 = ( 𝐺 · 𝑃 )
4 pockthi.n 𝑁 = ( 𝑀 + 1 )
5 pockthi.d 𝐷 ∈ ℕ
6 pockthi.e 𝐸 ∈ ℕ
7 pockthi.a 𝐴 ∈ ℕ
8 pockthi.fac 𝑀 = ( 𝐷 · ( 𝑃𝐸 ) )
9 pockthi.gt 𝐷 < ( 𝑃𝐸 )
10 pockthi.mod ( ( 𝐴𝑀 ) mod 𝑁 ) = ( 1 mod 𝑁 )
11 pockthi.gcd ( ( ( 𝐴𝐺 ) − 1 ) gcd 𝑁 ) = 1
12 prmnn ( 𝑃 ∈ ℙ → 𝑃 ∈ ℕ )
13 1 12 ax-mp 𝑃 ∈ ℕ
14 6 nnnn0i 𝐸 ∈ ℕ0
15 nnexpcl ( ( 𝑃 ∈ ℕ ∧ 𝐸 ∈ ℕ0 ) → ( 𝑃𝐸 ) ∈ ℕ )
16 13 14 15 mp2an ( 𝑃𝐸 ) ∈ ℕ
17 16 a1i ( 𝐷 ∈ ℕ → ( 𝑃𝐸 ) ∈ ℕ )
18 id ( 𝐷 ∈ ℕ → 𝐷 ∈ ℕ )
19 9 a1i ( 𝐷 ∈ ℕ → 𝐷 < ( 𝑃𝐸 ) )
20 5 nncni 𝐷 ∈ ℂ
21 16 nncni ( 𝑃𝐸 ) ∈ ℂ
22 20 21 mulcomi ( 𝐷 · ( 𝑃𝐸 ) ) = ( ( 𝑃𝐸 ) · 𝐷 )
23 8 22 eqtri 𝑀 = ( ( 𝑃𝐸 ) · 𝐷 )
24 23 oveq1i ( 𝑀 + 1 ) = ( ( ( 𝑃𝐸 ) · 𝐷 ) + 1 )
25 4 24 eqtri 𝑁 = ( ( ( 𝑃𝐸 ) · 𝐷 ) + 1 )
26 25 a1i ( 𝐷 ∈ ℕ → 𝑁 = ( ( ( 𝑃𝐸 ) · 𝐷 ) + 1 ) )
27 prmdvdsexpb ( ( 𝑥 ∈ ℙ ∧ 𝑃 ∈ ℙ ∧ 𝐸 ∈ ℕ ) → ( 𝑥 ∥ ( 𝑃𝐸 ) ↔ 𝑥 = 𝑃 ) )
28 1 6 27 mp3an23 ( 𝑥 ∈ ℙ → ( 𝑥 ∥ ( 𝑃𝐸 ) ↔ 𝑥 = 𝑃 ) )
29 2 13 nnmulcli ( 𝐺 · 𝑃 ) ∈ ℕ
30 3 29 eqeltri 𝑀 ∈ ℕ
31 30 nncni 𝑀 ∈ ℂ
32 ax-1cn 1 ∈ ℂ
33 31 32 4 mvrraddi ( 𝑁 − 1 ) = 𝑀
34 33 oveq2i ( 𝐴 ↑ ( 𝑁 − 1 ) ) = ( 𝐴𝑀 )
35 34 oveq1i ( ( 𝐴 ↑ ( 𝑁 − 1 ) ) mod 𝑁 ) = ( ( 𝐴𝑀 ) mod 𝑁 )
36 peano2nn ( 𝑀 ∈ ℕ → ( 𝑀 + 1 ) ∈ ℕ )
37 30 36 ax-mp ( 𝑀 + 1 ) ∈ ℕ
38 4 37 eqeltri 𝑁 ∈ ℕ
39 38 nnrei 𝑁 ∈ ℝ
40 30 nngt0i 0 < 𝑀
41 30 nnrei 𝑀 ∈ ℝ
42 1re 1 ∈ ℝ
43 ltaddpos2 ( ( 𝑀 ∈ ℝ ∧ 1 ∈ ℝ ) → ( 0 < 𝑀 ↔ 1 < ( 𝑀 + 1 ) ) )
44 41 42 43 mp2an ( 0 < 𝑀 ↔ 1 < ( 𝑀 + 1 ) )
45 40 44 mpbi 1 < ( 𝑀 + 1 )
46 45 4 breqtrri 1 < 𝑁
47 1mod ( ( 𝑁 ∈ ℝ ∧ 1 < 𝑁 ) → ( 1 mod 𝑁 ) = 1 )
48 39 46 47 mp2an ( 1 mod 𝑁 ) = 1
49 10 48 eqtri ( ( 𝐴𝑀 ) mod 𝑁 ) = 1
50 35 49 eqtri ( ( 𝐴 ↑ ( 𝑁 − 1 ) ) mod 𝑁 ) = 1
51 oveq2 ( 𝑥 = 𝑃 → ( ( 𝑁 − 1 ) / 𝑥 ) = ( ( 𝑁 − 1 ) / 𝑃 ) )
52 2 nncni 𝐺 ∈ ℂ
53 13 nncni 𝑃 ∈ ℂ
54 52 53 mulcomi ( 𝐺 · 𝑃 ) = ( 𝑃 · 𝐺 )
55 33 3 54 3eqtrri ( 𝑃 · 𝐺 ) = ( 𝑁 − 1 )
56 38 nncni 𝑁 ∈ ℂ
57 56 32 subcli ( 𝑁 − 1 ) ∈ ℂ
58 13 nnne0i 𝑃 ≠ 0
59 57 53 52 58 divmuli ( ( ( 𝑁 − 1 ) / 𝑃 ) = 𝐺 ↔ ( 𝑃 · 𝐺 ) = ( 𝑁 − 1 ) )
60 55 59 mpbir ( ( 𝑁 − 1 ) / 𝑃 ) = 𝐺
61 51 60 eqtrdi ( 𝑥 = 𝑃 → ( ( 𝑁 − 1 ) / 𝑥 ) = 𝐺 )
62 61 oveq2d ( 𝑥 = 𝑃 → ( 𝐴 ↑ ( ( 𝑁 − 1 ) / 𝑥 ) ) = ( 𝐴𝐺 ) )
63 62 oveq1d ( 𝑥 = 𝑃 → ( ( 𝐴 ↑ ( ( 𝑁 − 1 ) / 𝑥 ) ) − 1 ) = ( ( 𝐴𝐺 ) − 1 ) )
64 63 oveq1d ( 𝑥 = 𝑃 → ( ( ( 𝐴 ↑ ( ( 𝑁 − 1 ) / 𝑥 ) ) − 1 ) gcd 𝑁 ) = ( ( ( 𝐴𝐺 ) − 1 ) gcd 𝑁 ) )
65 64 11 eqtrdi ( 𝑥 = 𝑃 → ( ( ( 𝐴 ↑ ( ( 𝑁 − 1 ) / 𝑥 ) ) − 1 ) gcd 𝑁 ) = 1 )
66 7 nnzi 𝐴 ∈ ℤ
67 oveq1 ( 𝑦 = 𝐴 → ( 𝑦 ↑ ( 𝑁 − 1 ) ) = ( 𝐴 ↑ ( 𝑁 − 1 ) ) )
68 67 oveq1d ( 𝑦 = 𝐴 → ( ( 𝑦 ↑ ( 𝑁 − 1 ) ) mod 𝑁 ) = ( ( 𝐴 ↑ ( 𝑁 − 1 ) ) mod 𝑁 ) )
69 68 eqeq1d ( 𝑦 = 𝐴 → ( ( ( 𝑦 ↑ ( 𝑁 − 1 ) ) mod 𝑁 ) = 1 ↔ ( ( 𝐴 ↑ ( 𝑁 − 1 ) ) mod 𝑁 ) = 1 ) )
70 oveq1 ( 𝑦 = 𝐴 → ( 𝑦 ↑ ( ( 𝑁 − 1 ) / 𝑥 ) ) = ( 𝐴 ↑ ( ( 𝑁 − 1 ) / 𝑥 ) ) )
71 70 oveq1d ( 𝑦 = 𝐴 → ( ( 𝑦 ↑ ( ( 𝑁 − 1 ) / 𝑥 ) ) − 1 ) = ( ( 𝐴 ↑ ( ( 𝑁 − 1 ) / 𝑥 ) ) − 1 ) )
72 71 oveq1d ( 𝑦 = 𝐴 → ( ( ( 𝑦 ↑ ( ( 𝑁 − 1 ) / 𝑥 ) ) − 1 ) gcd 𝑁 ) = ( ( ( 𝐴 ↑ ( ( 𝑁 − 1 ) / 𝑥 ) ) − 1 ) gcd 𝑁 ) )
73 72 eqeq1d ( 𝑦 = 𝐴 → ( ( ( ( 𝑦 ↑ ( ( 𝑁 − 1 ) / 𝑥 ) ) − 1 ) gcd 𝑁 ) = 1 ↔ ( ( ( 𝐴 ↑ ( ( 𝑁 − 1 ) / 𝑥 ) ) − 1 ) gcd 𝑁 ) = 1 ) )
74 69 73 anbi12d ( 𝑦 = 𝐴 → ( ( ( ( 𝑦 ↑ ( 𝑁 − 1 ) ) mod 𝑁 ) = 1 ∧ ( ( ( 𝑦 ↑ ( ( 𝑁 − 1 ) / 𝑥 ) ) − 1 ) gcd 𝑁 ) = 1 ) ↔ ( ( ( 𝐴 ↑ ( 𝑁 − 1 ) ) mod 𝑁 ) = 1 ∧ ( ( ( 𝐴 ↑ ( ( 𝑁 − 1 ) / 𝑥 ) ) − 1 ) gcd 𝑁 ) = 1 ) ) )
75 74 rspcev ( ( 𝐴 ∈ ℤ ∧ ( ( ( 𝐴 ↑ ( 𝑁 − 1 ) ) mod 𝑁 ) = 1 ∧ ( ( ( 𝐴 ↑ ( ( 𝑁 − 1 ) / 𝑥 ) ) − 1 ) gcd 𝑁 ) = 1 ) ) → ∃ 𝑦 ∈ ℤ ( ( ( 𝑦 ↑ ( 𝑁 − 1 ) ) mod 𝑁 ) = 1 ∧ ( ( ( 𝑦 ↑ ( ( 𝑁 − 1 ) / 𝑥 ) ) − 1 ) gcd 𝑁 ) = 1 ) )
76 66 75 mpan ( ( ( ( 𝐴 ↑ ( 𝑁 − 1 ) ) mod 𝑁 ) = 1 ∧ ( ( ( 𝐴 ↑ ( ( 𝑁 − 1 ) / 𝑥 ) ) − 1 ) gcd 𝑁 ) = 1 ) → ∃ 𝑦 ∈ ℤ ( ( ( 𝑦 ↑ ( 𝑁 − 1 ) ) mod 𝑁 ) = 1 ∧ ( ( ( 𝑦 ↑ ( ( 𝑁 − 1 ) / 𝑥 ) ) − 1 ) gcd 𝑁 ) = 1 ) )
77 50 65 76 sylancr ( 𝑥 = 𝑃 → ∃ 𝑦 ∈ ℤ ( ( ( 𝑦 ↑ ( 𝑁 − 1 ) ) mod 𝑁 ) = 1 ∧ ( ( ( 𝑦 ↑ ( ( 𝑁 − 1 ) / 𝑥 ) ) − 1 ) gcd 𝑁 ) = 1 ) )
78 28 77 syl6bi ( 𝑥 ∈ ℙ → ( 𝑥 ∥ ( 𝑃𝐸 ) → ∃ 𝑦 ∈ ℤ ( ( ( 𝑦 ↑ ( 𝑁 − 1 ) ) mod 𝑁 ) = 1 ∧ ( ( ( 𝑦 ↑ ( ( 𝑁 − 1 ) / 𝑥 ) ) − 1 ) gcd 𝑁 ) = 1 ) ) )
79 78 rgen 𝑥 ∈ ℙ ( 𝑥 ∥ ( 𝑃𝐸 ) → ∃ 𝑦 ∈ ℤ ( ( ( 𝑦 ↑ ( 𝑁 − 1 ) ) mod 𝑁 ) = 1 ∧ ( ( ( 𝑦 ↑ ( ( 𝑁 − 1 ) / 𝑥 ) ) − 1 ) gcd 𝑁 ) = 1 ) )
80 79 a1i ( 𝐷 ∈ ℕ → ∀ 𝑥 ∈ ℙ ( 𝑥 ∥ ( 𝑃𝐸 ) → ∃ 𝑦 ∈ ℤ ( ( ( 𝑦 ↑ ( 𝑁 − 1 ) ) mod 𝑁 ) = 1 ∧ ( ( ( 𝑦 ↑ ( ( 𝑁 − 1 ) / 𝑥 ) ) − 1 ) gcd 𝑁 ) = 1 ) ) )
81 17 18 19 26 80 pockthg ( 𝐷 ∈ ℕ → 𝑁 ∈ ℙ )
82 5 81 ax-mp 𝑁 ∈ ℙ