Metamath Proof Explorer


Theorem idomodle

Description: Limit on the number of N -th roots of unity in an integral domain. (Contributed by Stefan O'Rear, 12-Sep-2015)

Ref Expression
Hypotheses idomodle.g 𝐺 = ( ( mulGrp ‘ 𝑅 ) ↾s ( Unit ‘ 𝑅 ) )
idomodle.b 𝐵 = ( Base ‘ 𝐺 )
idomodle.o 𝑂 = ( od ‘ 𝐺 )
Assertion idomodle ( ( 𝑅 ∈ IDomn ∧ 𝑁 ∈ ℕ ) → ( ♯ ‘ { 𝑥𝐵 ∣ ( 𝑂𝑥 ) ∥ 𝑁 } ) ≤ 𝑁 )

Proof

Step Hyp Ref Expression
1 idomodle.g 𝐺 = ( ( mulGrp ‘ 𝑅 ) ↾s ( Unit ‘ 𝑅 ) )
2 idomodle.b 𝐵 = ( Base ‘ 𝐺 )
3 idomodle.o 𝑂 = ( od ‘ 𝐺 )
4 2 fvexi 𝐵 ∈ V
5 4 rabex { 𝑥𝐵 ∣ ( 𝑂𝑥 ) ∥ 𝑁 } ∈ V
6 hashxrcl ( { 𝑥𝐵 ∣ ( 𝑂𝑥 ) ∥ 𝑁 } ∈ V → ( ♯ ‘ { 𝑥𝐵 ∣ ( 𝑂𝑥 ) ∥ 𝑁 } ) ∈ ℝ* )
7 5 6 mp1i ( ( 𝑅 ∈ IDomn ∧ 𝑁 ∈ ℕ ) → ( ♯ ‘ { 𝑥𝐵 ∣ ( 𝑂𝑥 ) ∥ 𝑁 } ) ∈ ℝ* )
8 fvex ( Base ‘ 𝑅 ) ∈ V
9 8 rabex { 𝑥 ∈ ( Base ‘ 𝑅 ) ∣ ( 𝑁 ( .g ‘ ( mulGrp ‘ 𝑅 ) ) 𝑥 ) = ( 1r𝑅 ) } ∈ V
10 hashxrcl ( { 𝑥 ∈ ( Base ‘ 𝑅 ) ∣ ( 𝑁 ( .g ‘ ( mulGrp ‘ 𝑅 ) ) 𝑥 ) = ( 1r𝑅 ) } ∈ V → ( ♯ ‘ { 𝑥 ∈ ( Base ‘ 𝑅 ) ∣ ( 𝑁 ( .g ‘ ( mulGrp ‘ 𝑅 ) ) 𝑥 ) = ( 1r𝑅 ) } ) ∈ ℝ* )
11 9 10 mp1i ( ( 𝑅 ∈ IDomn ∧ 𝑁 ∈ ℕ ) → ( ♯ ‘ { 𝑥 ∈ ( Base ‘ 𝑅 ) ∣ ( 𝑁 ( .g ‘ ( mulGrp ‘ 𝑅 ) ) 𝑥 ) = ( 1r𝑅 ) } ) ∈ ℝ* )
12 nnre ( 𝑁 ∈ ℕ → 𝑁 ∈ ℝ )
13 12 rexrd ( 𝑁 ∈ ℕ → 𝑁 ∈ ℝ* )
14 13 adantl ( ( 𝑅 ∈ IDomn ∧ 𝑁 ∈ ℕ ) → 𝑁 ∈ ℝ* )
15 isidom ( 𝑅 ∈ IDomn ↔ ( 𝑅 ∈ CRing ∧ 𝑅 ∈ Domn ) )
16 15 simplbi ( 𝑅 ∈ IDomn → 𝑅 ∈ CRing )
17 16 adantr ( ( 𝑅 ∈ IDomn ∧ 𝑁 ∈ ℕ ) → 𝑅 ∈ CRing )
18 crngring ( 𝑅 ∈ CRing → 𝑅 ∈ Ring )
19 17 18 syl ( ( 𝑅 ∈ IDomn ∧ 𝑁 ∈ ℕ ) → 𝑅 ∈ Ring )
20 19 adantr ( ( ( 𝑅 ∈ IDomn ∧ 𝑁 ∈ ℕ ) ∧ 𝑥𝐵 ) → 𝑅 ∈ Ring )
21 eqid ( Unit ‘ 𝑅 ) = ( Unit ‘ 𝑅 )
22 21 1 unitgrp ( 𝑅 ∈ Ring → 𝐺 ∈ Grp )
23 20 22 syl ( ( ( 𝑅 ∈ IDomn ∧ 𝑁 ∈ ℕ ) ∧ 𝑥𝐵 ) → 𝐺 ∈ Grp )
24 simpr ( ( ( 𝑅 ∈ IDomn ∧ 𝑁 ∈ ℕ ) ∧ 𝑥𝐵 ) → 𝑥𝐵 )
25 nnz ( 𝑁 ∈ ℕ → 𝑁 ∈ ℤ )
26 25 ad2antlr ( ( ( 𝑅 ∈ IDomn ∧ 𝑁 ∈ ℕ ) ∧ 𝑥𝐵 ) → 𝑁 ∈ ℤ )
27 eqid ( .g𝐺 ) = ( .g𝐺 )
28 eqid ( 0g𝐺 ) = ( 0g𝐺 )
29 2 3 27 28 oddvds ( ( 𝐺 ∈ Grp ∧ 𝑥𝐵𝑁 ∈ ℤ ) → ( ( 𝑂𝑥 ) ∥ 𝑁 ↔ ( 𝑁 ( .g𝐺 ) 𝑥 ) = ( 0g𝐺 ) ) )
30 23 24 26 29 syl3anc ( ( ( 𝑅 ∈ IDomn ∧ 𝑁 ∈ ℕ ) ∧ 𝑥𝐵 ) → ( ( 𝑂𝑥 ) ∥ 𝑁 ↔ ( 𝑁 ( .g𝐺 ) 𝑥 ) = ( 0g𝐺 ) ) )
31 eqid ( mulGrp ‘ 𝑅 ) = ( mulGrp ‘ 𝑅 )
32 21 31 unitsubm ( 𝑅 ∈ Ring → ( Unit ‘ 𝑅 ) ∈ ( SubMnd ‘ ( mulGrp ‘ 𝑅 ) ) )
33 20 32 syl ( ( ( 𝑅 ∈ IDomn ∧ 𝑁 ∈ ℕ ) ∧ 𝑥𝐵 ) → ( Unit ‘ 𝑅 ) ∈ ( SubMnd ‘ ( mulGrp ‘ 𝑅 ) ) )
34 nnnn0 ( 𝑁 ∈ ℕ → 𝑁 ∈ ℕ0 )
35 34 ad2antlr ( ( ( 𝑅 ∈ IDomn ∧ 𝑁 ∈ ℕ ) ∧ 𝑥𝐵 ) → 𝑁 ∈ ℕ0 )
36 21 1 unitgrpbas ( Unit ‘ 𝑅 ) = ( Base ‘ 𝐺 )
37 2 36 eqtr4i 𝐵 = ( Unit ‘ 𝑅 )
38 24 37 eleqtrdi ( ( ( 𝑅 ∈ IDomn ∧ 𝑁 ∈ ℕ ) ∧ 𝑥𝐵 ) → 𝑥 ∈ ( Unit ‘ 𝑅 ) )
39 eqid ( .g ‘ ( mulGrp ‘ 𝑅 ) ) = ( .g ‘ ( mulGrp ‘ 𝑅 ) )
40 39 1 27 submmulg ( ( ( Unit ‘ 𝑅 ) ∈ ( SubMnd ‘ ( mulGrp ‘ 𝑅 ) ) ∧ 𝑁 ∈ ℕ0𝑥 ∈ ( Unit ‘ 𝑅 ) ) → ( 𝑁 ( .g ‘ ( mulGrp ‘ 𝑅 ) ) 𝑥 ) = ( 𝑁 ( .g𝐺 ) 𝑥 ) )
41 33 35 38 40 syl3anc ( ( ( 𝑅 ∈ IDomn ∧ 𝑁 ∈ ℕ ) ∧ 𝑥𝐵 ) → ( 𝑁 ( .g ‘ ( mulGrp ‘ 𝑅 ) ) 𝑥 ) = ( 𝑁 ( .g𝐺 ) 𝑥 ) )
42 eqid ( 1r𝑅 ) = ( 1r𝑅 )
43 21 1 42 unitgrpid ( 𝑅 ∈ Ring → ( 1r𝑅 ) = ( 0g𝐺 ) )
44 20 43 syl ( ( ( 𝑅 ∈ IDomn ∧ 𝑁 ∈ ℕ ) ∧ 𝑥𝐵 ) → ( 1r𝑅 ) = ( 0g𝐺 ) )
45 41 44 eqeq12d ( ( ( 𝑅 ∈ IDomn ∧ 𝑁 ∈ ℕ ) ∧ 𝑥𝐵 ) → ( ( 𝑁 ( .g ‘ ( mulGrp ‘ 𝑅 ) ) 𝑥 ) = ( 1r𝑅 ) ↔ ( 𝑁 ( .g𝐺 ) 𝑥 ) = ( 0g𝐺 ) ) )
46 30 45 bitr4d ( ( ( 𝑅 ∈ IDomn ∧ 𝑁 ∈ ℕ ) ∧ 𝑥𝐵 ) → ( ( 𝑂𝑥 ) ∥ 𝑁 ↔ ( 𝑁 ( .g ‘ ( mulGrp ‘ 𝑅 ) ) 𝑥 ) = ( 1r𝑅 ) ) )
47 46 rabbidva ( ( 𝑅 ∈ IDomn ∧ 𝑁 ∈ ℕ ) → { 𝑥𝐵 ∣ ( 𝑂𝑥 ) ∥ 𝑁 } = { 𝑥𝐵 ∣ ( 𝑁 ( .g ‘ ( mulGrp ‘ 𝑅 ) ) 𝑥 ) = ( 1r𝑅 ) } )
48 47 fveq2d ( ( 𝑅 ∈ IDomn ∧ 𝑁 ∈ ℕ ) → ( ♯ ‘ { 𝑥𝐵 ∣ ( 𝑂𝑥 ) ∥ 𝑁 } ) = ( ♯ ‘ { 𝑥𝐵 ∣ ( 𝑁 ( .g ‘ ( mulGrp ‘ 𝑅 ) ) 𝑥 ) = ( 1r𝑅 ) } ) )
49 eqid ( Base ‘ 𝑅 ) = ( Base ‘ 𝑅 )
50 49 37 unitss 𝐵 ⊆ ( Base ‘ 𝑅 )
51 rabss2 ( 𝐵 ⊆ ( Base ‘ 𝑅 ) → { 𝑥𝐵 ∣ ( 𝑁 ( .g ‘ ( mulGrp ‘ 𝑅 ) ) 𝑥 ) = ( 1r𝑅 ) } ⊆ { 𝑥 ∈ ( Base ‘ 𝑅 ) ∣ ( 𝑁 ( .g ‘ ( mulGrp ‘ 𝑅 ) ) 𝑥 ) = ( 1r𝑅 ) } )
52 50 51 mp1i ( ( 𝑅 ∈ IDomn ∧ 𝑁 ∈ ℕ ) → { 𝑥𝐵 ∣ ( 𝑁 ( .g ‘ ( mulGrp ‘ 𝑅 ) ) 𝑥 ) = ( 1r𝑅 ) } ⊆ { 𝑥 ∈ ( Base ‘ 𝑅 ) ∣ ( 𝑁 ( .g ‘ ( mulGrp ‘ 𝑅 ) ) 𝑥 ) = ( 1r𝑅 ) } )
53 ssdomg ( { 𝑥 ∈ ( Base ‘ 𝑅 ) ∣ ( 𝑁 ( .g ‘ ( mulGrp ‘ 𝑅 ) ) 𝑥 ) = ( 1r𝑅 ) } ∈ V → ( { 𝑥𝐵 ∣ ( 𝑁 ( .g ‘ ( mulGrp ‘ 𝑅 ) ) 𝑥 ) = ( 1r𝑅 ) } ⊆ { 𝑥 ∈ ( Base ‘ 𝑅 ) ∣ ( 𝑁 ( .g ‘ ( mulGrp ‘ 𝑅 ) ) 𝑥 ) = ( 1r𝑅 ) } → { 𝑥𝐵 ∣ ( 𝑁 ( .g ‘ ( mulGrp ‘ 𝑅 ) ) 𝑥 ) = ( 1r𝑅 ) } ≼ { 𝑥 ∈ ( Base ‘ 𝑅 ) ∣ ( 𝑁 ( .g ‘ ( mulGrp ‘ 𝑅 ) ) 𝑥 ) = ( 1r𝑅 ) } ) )
54 9 52 53 mpsyl ( ( 𝑅 ∈ IDomn ∧ 𝑁 ∈ ℕ ) → { 𝑥𝐵 ∣ ( 𝑁 ( .g ‘ ( mulGrp ‘ 𝑅 ) ) 𝑥 ) = ( 1r𝑅 ) } ≼ { 𝑥 ∈ ( Base ‘ 𝑅 ) ∣ ( 𝑁 ( .g ‘ ( mulGrp ‘ 𝑅 ) ) 𝑥 ) = ( 1r𝑅 ) } )
55 hashdomi ( { 𝑥𝐵 ∣ ( 𝑁 ( .g ‘ ( mulGrp ‘ 𝑅 ) ) 𝑥 ) = ( 1r𝑅 ) } ≼ { 𝑥 ∈ ( Base ‘ 𝑅 ) ∣ ( 𝑁 ( .g ‘ ( mulGrp ‘ 𝑅 ) ) 𝑥 ) = ( 1r𝑅 ) } → ( ♯ ‘ { 𝑥𝐵 ∣ ( 𝑁 ( .g ‘ ( mulGrp ‘ 𝑅 ) ) 𝑥 ) = ( 1r𝑅 ) } ) ≤ ( ♯ ‘ { 𝑥 ∈ ( Base ‘ 𝑅 ) ∣ ( 𝑁 ( .g ‘ ( mulGrp ‘ 𝑅 ) ) 𝑥 ) = ( 1r𝑅 ) } ) )
56 54 55 syl ( ( 𝑅 ∈ IDomn ∧ 𝑁 ∈ ℕ ) → ( ♯ ‘ { 𝑥𝐵 ∣ ( 𝑁 ( .g ‘ ( mulGrp ‘ 𝑅 ) ) 𝑥 ) = ( 1r𝑅 ) } ) ≤ ( ♯ ‘ { 𝑥 ∈ ( Base ‘ 𝑅 ) ∣ ( 𝑁 ( .g ‘ ( mulGrp ‘ 𝑅 ) ) 𝑥 ) = ( 1r𝑅 ) } ) )
57 48 56 eqbrtrd ( ( 𝑅 ∈ IDomn ∧ 𝑁 ∈ ℕ ) → ( ♯ ‘ { 𝑥𝐵 ∣ ( 𝑂𝑥 ) ∥ 𝑁 } ) ≤ ( ♯ ‘ { 𝑥 ∈ ( Base ‘ 𝑅 ) ∣ ( 𝑁 ( .g ‘ ( mulGrp ‘ 𝑅 ) ) 𝑥 ) = ( 1r𝑅 ) } ) )
58 simpl ( ( 𝑅 ∈ IDomn ∧ 𝑁 ∈ ℕ ) → 𝑅 ∈ IDomn )
59 49 42 ringidcl ( 𝑅 ∈ Ring → ( 1r𝑅 ) ∈ ( Base ‘ 𝑅 ) )
60 19 59 syl ( ( 𝑅 ∈ IDomn ∧ 𝑁 ∈ ℕ ) → ( 1r𝑅 ) ∈ ( Base ‘ 𝑅 ) )
61 simpr ( ( 𝑅 ∈ IDomn ∧ 𝑁 ∈ ℕ ) → 𝑁 ∈ ℕ )
62 49 39 idomrootle ( ( 𝑅 ∈ IDomn ∧ ( 1r𝑅 ) ∈ ( Base ‘ 𝑅 ) ∧ 𝑁 ∈ ℕ ) → ( ♯ ‘ { 𝑥 ∈ ( Base ‘ 𝑅 ) ∣ ( 𝑁 ( .g ‘ ( mulGrp ‘ 𝑅 ) ) 𝑥 ) = ( 1r𝑅 ) } ) ≤ 𝑁 )
63 58 60 61 62 syl3anc ( ( 𝑅 ∈ IDomn ∧ 𝑁 ∈ ℕ ) → ( ♯ ‘ { 𝑥 ∈ ( Base ‘ 𝑅 ) ∣ ( 𝑁 ( .g ‘ ( mulGrp ‘ 𝑅 ) ) 𝑥 ) = ( 1r𝑅 ) } ) ≤ 𝑁 )
64 7 11 14 57 63 xrletrd ( ( 𝑅 ∈ IDomn ∧ 𝑁 ∈ ℕ ) → ( ♯ ‘ { 𝑥𝐵 ∣ ( 𝑂𝑥 ) ∥ 𝑁 } ) ≤ 𝑁 )