Metamath Proof Explorer


Theorem wilth

Description: Wilson's theorem. A number is prime iff it is greater than or equal to 2 and ( N - 1 ) ! is congruent to -u 1 , mod N , or alternatively if N divides ( N - 1 ) ! + 1 . In this part of the proof we show the relatively simple reverse implication; see wilthlem3 for the forward implication. This is Metamath 100 proof #51. (Contributed by Mario Carneiro, 24-Jan-2015) (Proof shortened by Fan Zheng, 16-Jun-2016)

Ref Expression
Assertion wilth ( 𝑁 ∈ ℙ ↔ ( 𝑁 ∈ ( ℤ ‘ 2 ) ∧ 𝑁 ∥ ( ( ! ‘ ( 𝑁 − 1 ) ) + 1 ) ) )

Proof

Step Hyp Ref Expression
1 prmuz2 ( 𝑁 ∈ ℙ → 𝑁 ∈ ( ℤ ‘ 2 ) )
2 eqid ( mulGrp ‘ ℂfld ) = ( mulGrp ‘ ℂfld )
3 eleq2w ( 𝑧 = 𝑥 → ( ( 𝑁 − 1 ) ∈ 𝑧 ↔ ( 𝑁 − 1 ) ∈ 𝑥 ) )
4 oveq1 ( 𝑛 = 𝑦 → ( 𝑛 ↑ ( 𝑁 − 2 ) ) = ( 𝑦 ↑ ( 𝑁 − 2 ) ) )
5 4 oveq1d ( 𝑛 = 𝑦 → ( ( 𝑛 ↑ ( 𝑁 − 2 ) ) mod 𝑁 ) = ( ( 𝑦 ↑ ( 𝑁 − 2 ) ) mod 𝑁 ) )
6 5 eleq1d ( 𝑛 = 𝑦 → ( ( ( 𝑛 ↑ ( 𝑁 − 2 ) ) mod 𝑁 ) ∈ 𝑧 ↔ ( ( 𝑦 ↑ ( 𝑁 − 2 ) ) mod 𝑁 ) ∈ 𝑧 ) )
7 6 cbvralvw ( ∀ 𝑛𝑧 ( ( 𝑛 ↑ ( 𝑁 − 2 ) ) mod 𝑁 ) ∈ 𝑧 ↔ ∀ 𝑦𝑧 ( ( 𝑦 ↑ ( 𝑁 − 2 ) ) mod 𝑁 ) ∈ 𝑧 )
8 eleq2w ( 𝑧 = 𝑥 → ( ( ( 𝑦 ↑ ( 𝑁 − 2 ) ) mod 𝑁 ) ∈ 𝑧 ↔ ( ( 𝑦 ↑ ( 𝑁 − 2 ) ) mod 𝑁 ) ∈ 𝑥 ) )
9 8 raleqbi1dv ( 𝑧 = 𝑥 → ( ∀ 𝑦𝑧 ( ( 𝑦 ↑ ( 𝑁 − 2 ) ) mod 𝑁 ) ∈ 𝑧 ↔ ∀ 𝑦𝑥 ( ( 𝑦 ↑ ( 𝑁 − 2 ) ) mod 𝑁 ) ∈ 𝑥 ) )
10 7 9 syl5bb ( 𝑧 = 𝑥 → ( ∀ 𝑛𝑧 ( ( 𝑛 ↑ ( 𝑁 − 2 ) ) mod 𝑁 ) ∈ 𝑧 ↔ ∀ 𝑦𝑥 ( ( 𝑦 ↑ ( 𝑁 − 2 ) ) mod 𝑁 ) ∈ 𝑥 ) )
11 3 10 anbi12d ( 𝑧 = 𝑥 → ( ( ( 𝑁 − 1 ) ∈ 𝑧 ∧ ∀ 𝑛𝑧 ( ( 𝑛 ↑ ( 𝑁 − 2 ) ) mod 𝑁 ) ∈ 𝑧 ) ↔ ( ( 𝑁 − 1 ) ∈ 𝑥 ∧ ∀ 𝑦𝑥 ( ( 𝑦 ↑ ( 𝑁 − 2 ) ) mod 𝑁 ) ∈ 𝑥 ) ) )
12 11 cbvrabv { 𝑧 ∈ 𝒫 ( 1 ... ( 𝑁 − 1 ) ) ∣ ( ( 𝑁 − 1 ) ∈ 𝑧 ∧ ∀ 𝑛𝑧 ( ( 𝑛 ↑ ( 𝑁 − 2 ) ) mod 𝑁 ) ∈ 𝑧 ) } = { 𝑥 ∈ 𝒫 ( 1 ... ( 𝑁 − 1 ) ) ∣ ( ( 𝑁 − 1 ) ∈ 𝑥 ∧ ∀ 𝑦𝑥 ( ( 𝑦 ↑ ( 𝑁 − 2 ) ) mod 𝑁 ) ∈ 𝑥 ) }
13 2 12 wilthlem3 ( 𝑁 ∈ ℙ → 𝑁 ∥ ( ( ! ‘ ( 𝑁 − 1 ) ) + 1 ) )
14 1 13 jca ( 𝑁 ∈ ℙ → ( 𝑁 ∈ ( ℤ ‘ 2 ) ∧ 𝑁 ∥ ( ( ! ‘ ( 𝑁 − 1 ) ) + 1 ) ) )
15 simpl ( ( 𝑁 ∈ ( ℤ ‘ 2 ) ∧ 𝑁 ∥ ( ( ! ‘ ( 𝑁 − 1 ) ) + 1 ) ) → 𝑁 ∈ ( ℤ ‘ 2 ) )
16 elfzuz ( 𝑛 ∈ ( 2 ... ( 𝑁 − 1 ) ) → 𝑛 ∈ ( ℤ ‘ 2 ) )
17 16 adantl ( ( ( 𝑁 ∈ ( ℤ ‘ 2 ) ∧ 𝑁 ∥ ( ( ! ‘ ( 𝑁 − 1 ) ) + 1 ) ) ∧ 𝑛 ∈ ( 2 ... ( 𝑁 − 1 ) ) ) → 𝑛 ∈ ( ℤ ‘ 2 ) )
18 eluz2nn ( 𝑛 ∈ ( ℤ ‘ 2 ) → 𝑛 ∈ ℕ )
19 17 18 syl ( ( ( 𝑁 ∈ ( ℤ ‘ 2 ) ∧ 𝑁 ∥ ( ( ! ‘ ( 𝑁 − 1 ) ) + 1 ) ) ∧ 𝑛 ∈ ( 2 ... ( 𝑁 − 1 ) ) ) → 𝑛 ∈ ℕ )
20 elfzuz3 ( 𝑛 ∈ ( 2 ... ( 𝑁 − 1 ) ) → ( 𝑁 − 1 ) ∈ ( ℤ𝑛 ) )
21 20 adantl ( ( ( 𝑁 ∈ ( ℤ ‘ 2 ) ∧ 𝑁 ∥ ( ( ! ‘ ( 𝑁 − 1 ) ) + 1 ) ) ∧ 𝑛 ∈ ( 2 ... ( 𝑁 − 1 ) ) ) → ( 𝑁 − 1 ) ∈ ( ℤ𝑛 ) )
22 dvdsfac ( ( 𝑛 ∈ ℕ ∧ ( 𝑁 − 1 ) ∈ ( ℤ𝑛 ) ) → 𝑛 ∥ ( ! ‘ ( 𝑁 − 1 ) ) )
23 19 21 22 syl2anc ( ( ( 𝑁 ∈ ( ℤ ‘ 2 ) ∧ 𝑁 ∥ ( ( ! ‘ ( 𝑁 − 1 ) ) + 1 ) ) ∧ 𝑛 ∈ ( 2 ... ( 𝑁 − 1 ) ) ) → 𝑛 ∥ ( ! ‘ ( 𝑁 − 1 ) ) )
24 eluz2nn ( 𝑁 ∈ ( ℤ ‘ 2 ) → 𝑁 ∈ ℕ )
25 24 ad2antrr ( ( ( 𝑁 ∈ ( ℤ ‘ 2 ) ∧ 𝑁 ∥ ( ( ! ‘ ( 𝑁 − 1 ) ) + 1 ) ) ∧ 𝑛 ∈ ( 2 ... ( 𝑁 − 1 ) ) ) → 𝑁 ∈ ℕ )
26 nnm1nn0 ( 𝑁 ∈ ℕ → ( 𝑁 − 1 ) ∈ ℕ0 )
27 faccl ( ( 𝑁 − 1 ) ∈ ℕ0 → ( ! ‘ ( 𝑁 − 1 ) ) ∈ ℕ )
28 25 26 27 3syl ( ( ( 𝑁 ∈ ( ℤ ‘ 2 ) ∧ 𝑁 ∥ ( ( ! ‘ ( 𝑁 − 1 ) ) + 1 ) ) ∧ 𝑛 ∈ ( 2 ... ( 𝑁 − 1 ) ) ) → ( ! ‘ ( 𝑁 − 1 ) ) ∈ ℕ )
29 28 nnzd ( ( ( 𝑁 ∈ ( ℤ ‘ 2 ) ∧ 𝑁 ∥ ( ( ! ‘ ( 𝑁 − 1 ) ) + 1 ) ) ∧ 𝑛 ∈ ( 2 ... ( 𝑁 − 1 ) ) ) → ( ! ‘ ( 𝑁 − 1 ) ) ∈ ℤ )
30 eluz2gt1 ( 𝑛 ∈ ( ℤ ‘ 2 ) → 1 < 𝑛 )
31 17 30 syl ( ( ( 𝑁 ∈ ( ℤ ‘ 2 ) ∧ 𝑁 ∥ ( ( ! ‘ ( 𝑁 − 1 ) ) + 1 ) ) ∧ 𝑛 ∈ ( 2 ... ( 𝑁 − 1 ) ) ) → 1 < 𝑛 )
32 ndvdsp1 ( ( ( ! ‘ ( 𝑁 − 1 ) ) ∈ ℤ ∧ 𝑛 ∈ ℕ ∧ 1 < 𝑛 ) → ( 𝑛 ∥ ( ! ‘ ( 𝑁 − 1 ) ) → ¬ 𝑛 ∥ ( ( ! ‘ ( 𝑁 − 1 ) ) + 1 ) ) )
33 29 19 31 32 syl3anc ( ( ( 𝑁 ∈ ( ℤ ‘ 2 ) ∧ 𝑁 ∥ ( ( ! ‘ ( 𝑁 − 1 ) ) + 1 ) ) ∧ 𝑛 ∈ ( 2 ... ( 𝑁 − 1 ) ) ) → ( 𝑛 ∥ ( ! ‘ ( 𝑁 − 1 ) ) → ¬ 𝑛 ∥ ( ( ! ‘ ( 𝑁 − 1 ) ) + 1 ) ) )
34 23 33 mpd ( ( ( 𝑁 ∈ ( ℤ ‘ 2 ) ∧ 𝑁 ∥ ( ( ! ‘ ( 𝑁 − 1 ) ) + 1 ) ) ∧ 𝑛 ∈ ( 2 ... ( 𝑁 − 1 ) ) ) → ¬ 𝑛 ∥ ( ( ! ‘ ( 𝑁 − 1 ) ) + 1 ) )
35 simplr ( ( ( 𝑁 ∈ ( ℤ ‘ 2 ) ∧ 𝑁 ∥ ( ( ! ‘ ( 𝑁 − 1 ) ) + 1 ) ) ∧ 𝑛 ∈ ( 2 ... ( 𝑁 − 1 ) ) ) → 𝑁 ∥ ( ( ! ‘ ( 𝑁 − 1 ) ) + 1 ) )
36 19 nnzd ( ( ( 𝑁 ∈ ( ℤ ‘ 2 ) ∧ 𝑁 ∥ ( ( ! ‘ ( 𝑁 − 1 ) ) + 1 ) ) ∧ 𝑛 ∈ ( 2 ... ( 𝑁 − 1 ) ) ) → 𝑛 ∈ ℤ )
37 25 nnzd ( ( ( 𝑁 ∈ ( ℤ ‘ 2 ) ∧ 𝑁 ∥ ( ( ! ‘ ( 𝑁 − 1 ) ) + 1 ) ) ∧ 𝑛 ∈ ( 2 ... ( 𝑁 − 1 ) ) ) → 𝑁 ∈ ℤ )
38 29 peano2zd ( ( ( 𝑁 ∈ ( ℤ ‘ 2 ) ∧ 𝑁 ∥ ( ( ! ‘ ( 𝑁 − 1 ) ) + 1 ) ) ∧ 𝑛 ∈ ( 2 ... ( 𝑁 − 1 ) ) ) → ( ( ! ‘ ( 𝑁 − 1 ) ) + 1 ) ∈ ℤ )
39 dvdstr ( ( 𝑛 ∈ ℤ ∧ 𝑁 ∈ ℤ ∧ ( ( ! ‘ ( 𝑁 − 1 ) ) + 1 ) ∈ ℤ ) → ( ( 𝑛𝑁𝑁 ∥ ( ( ! ‘ ( 𝑁 − 1 ) ) + 1 ) ) → 𝑛 ∥ ( ( ! ‘ ( 𝑁 − 1 ) ) + 1 ) ) )
40 36 37 38 39 syl3anc ( ( ( 𝑁 ∈ ( ℤ ‘ 2 ) ∧ 𝑁 ∥ ( ( ! ‘ ( 𝑁 − 1 ) ) + 1 ) ) ∧ 𝑛 ∈ ( 2 ... ( 𝑁 − 1 ) ) ) → ( ( 𝑛𝑁𝑁 ∥ ( ( ! ‘ ( 𝑁 − 1 ) ) + 1 ) ) → 𝑛 ∥ ( ( ! ‘ ( 𝑁 − 1 ) ) + 1 ) ) )
41 35 40 mpan2d ( ( ( 𝑁 ∈ ( ℤ ‘ 2 ) ∧ 𝑁 ∥ ( ( ! ‘ ( 𝑁 − 1 ) ) + 1 ) ) ∧ 𝑛 ∈ ( 2 ... ( 𝑁 − 1 ) ) ) → ( 𝑛𝑁𝑛 ∥ ( ( ! ‘ ( 𝑁 − 1 ) ) + 1 ) ) )
42 34 41 mtod ( ( ( 𝑁 ∈ ( ℤ ‘ 2 ) ∧ 𝑁 ∥ ( ( ! ‘ ( 𝑁 − 1 ) ) + 1 ) ) ∧ 𝑛 ∈ ( 2 ... ( 𝑁 − 1 ) ) ) → ¬ 𝑛𝑁 )
43 42 ralrimiva ( ( 𝑁 ∈ ( ℤ ‘ 2 ) ∧ 𝑁 ∥ ( ( ! ‘ ( 𝑁 − 1 ) ) + 1 ) ) → ∀ 𝑛 ∈ ( 2 ... ( 𝑁 − 1 ) ) ¬ 𝑛𝑁 )
44 isprm3 ( 𝑁 ∈ ℙ ↔ ( 𝑁 ∈ ( ℤ ‘ 2 ) ∧ ∀ 𝑛 ∈ ( 2 ... ( 𝑁 − 1 ) ) ¬ 𝑛𝑁 ) )
45 15 43 44 sylanbrc ( ( 𝑁 ∈ ( ℤ ‘ 2 ) ∧ 𝑁 ∥ ( ( ! ‘ ( 𝑁 − 1 ) ) + 1 ) ) → 𝑁 ∈ ℙ )
46 14 45 impbii ( 𝑁 ∈ ℙ ↔ ( 𝑁 ∈ ( ℤ ‘ 2 ) ∧ 𝑁 ∥ ( ( ! ‘ ( 𝑁 − 1 ) ) + 1 ) ) )