Metamath Proof Explorer


Theorem eulerthlem1

Description: Lemma for eulerth . (Contributed by Mario Carneiro, 8-May-2015)

Ref Expression
Hypotheses eulerth.1 ( 𝜑 → ( 𝑁 ∈ ℕ ∧ 𝐴 ∈ ℤ ∧ ( 𝐴 gcd 𝑁 ) = 1 ) )
eulerth.2 𝑆 = { 𝑦 ∈ ( 0 ..^ 𝑁 ) ∣ ( 𝑦 gcd 𝑁 ) = 1 }
eulerth.3 𝑇 = ( 1 ... ( ϕ ‘ 𝑁 ) )
eulerth.4 ( 𝜑𝐹 : 𝑇1-1-onto𝑆 )
eulerth.5 𝐺 = ( 𝑥𝑇 ↦ ( ( 𝐴 · ( 𝐹𝑥 ) ) mod 𝑁 ) )
Assertion eulerthlem1 ( 𝜑𝐺 : 𝑇𝑆 )

Proof

Step Hyp Ref Expression
1 eulerth.1 ( 𝜑 → ( 𝑁 ∈ ℕ ∧ 𝐴 ∈ ℤ ∧ ( 𝐴 gcd 𝑁 ) = 1 ) )
2 eulerth.2 𝑆 = { 𝑦 ∈ ( 0 ..^ 𝑁 ) ∣ ( 𝑦 gcd 𝑁 ) = 1 }
3 eulerth.3 𝑇 = ( 1 ... ( ϕ ‘ 𝑁 ) )
4 eulerth.4 ( 𝜑𝐹 : 𝑇1-1-onto𝑆 )
5 eulerth.5 𝐺 = ( 𝑥𝑇 ↦ ( ( 𝐴 · ( 𝐹𝑥 ) ) mod 𝑁 ) )
6 1 simp2d ( 𝜑𝐴 ∈ ℤ )
7 6 adantr ( ( 𝜑𝑥𝑇 ) → 𝐴 ∈ ℤ )
8 f1of ( 𝐹 : 𝑇1-1-onto𝑆𝐹 : 𝑇𝑆 )
9 4 8 syl ( 𝜑𝐹 : 𝑇𝑆 )
10 9 ffvelrnda ( ( 𝜑𝑥𝑇 ) → ( 𝐹𝑥 ) ∈ 𝑆 )
11 oveq1 ( 𝑦 = ( 𝐹𝑥 ) → ( 𝑦 gcd 𝑁 ) = ( ( 𝐹𝑥 ) gcd 𝑁 ) )
12 11 eqeq1d ( 𝑦 = ( 𝐹𝑥 ) → ( ( 𝑦 gcd 𝑁 ) = 1 ↔ ( ( 𝐹𝑥 ) gcd 𝑁 ) = 1 ) )
13 12 2 elrab2 ( ( 𝐹𝑥 ) ∈ 𝑆 ↔ ( ( 𝐹𝑥 ) ∈ ( 0 ..^ 𝑁 ) ∧ ( ( 𝐹𝑥 ) gcd 𝑁 ) = 1 ) )
14 10 13 sylib ( ( 𝜑𝑥𝑇 ) → ( ( 𝐹𝑥 ) ∈ ( 0 ..^ 𝑁 ) ∧ ( ( 𝐹𝑥 ) gcd 𝑁 ) = 1 ) )
15 14 simpld ( ( 𝜑𝑥𝑇 ) → ( 𝐹𝑥 ) ∈ ( 0 ..^ 𝑁 ) )
16 elfzoelz ( ( 𝐹𝑥 ) ∈ ( 0 ..^ 𝑁 ) → ( 𝐹𝑥 ) ∈ ℤ )
17 15 16 syl ( ( 𝜑𝑥𝑇 ) → ( 𝐹𝑥 ) ∈ ℤ )
18 7 17 zmulcld ( ( 𝜑𝑥𝑇 ) → ( 𝐴 · ( 𝐹𝑥 ) ) ∈ ℤ )
19 1 simp1d ( 𝜑𝑁 ∈ ℕ )
20 19 adantr ( ( 𝜑𝑥𝑇 ) → 𝑁 ∈ ℕ )
21 zmodfzo ( ( ( 𝐴 · ( 𝐹𝑥 ) ) ∈ ℤ ∧ 𝑁 ∈ ℕ ) → ( ( 𝐴 · ( 𝐹𝑥 ) ) mod 𝑁 ) ∈ ( 0 ..^ 𝑁 ) )
22 18 20 21 syl2anc ( ( 𝜑𝑥𝑇 ) → ( ( 𝐴 · ( 𝐹𝑥 ) ) mod 𝑁 ) ∈ ( 0 ..^ 𝑁 ) )
23 modgcd ( ( ( 𝐴 · ( 𝐹𝑥 ) ) ∈ ℤ ∧ 𝑁 ∈ ℕ ) → ( ( ( 𝐴 · ( 𝐹𝑥 ) ) mod 𝑁 ) gcd 𝑁 ) = ( ( 𝐴 · ( 𝐹𝑥 ) ) gcd 𝑁 ) )
24 18 20 23 syl2anc ( ( 𝜑𝑥𝑇 ) → ( ( ( 𝐴 · ( 𝐹𝑥 ) ) mod 𝑁 ) gcd 𝑁 ) = ( ( 𝐴 · ( 𝐹𝑥 ) ) gcd 𝑁 ) )
25 19 nnzd ( 𝜑𝑁 ∈ ℤ )
26 25 adantr ( ( 𝜑𝑥𝑇 ) → 𝑁 ∈ ℤ )
27 18 26 gcdcomd ( ( 𝜑𝑥𝑇 ) → ( ( 𝐴 · ( 𝐹𝑥 ) ) gcd 𝑁 ) = ( 𝑁 gcd ( 𝐴 · ( 𝐹𝑥 ) ) ) )
28 25 6 gcdcomd ( 𝜑 → ( 𝑁 gcd 𝐴 ) = ( 𝐴 gcd 𝑁 ) )
29 1 simp3d ( 𝜑 → ( 𝐴 gcd 𝑁 ) = 1 )
30 28 29 eqtrd ( 𝜑 → ( 𝑁 gcd 𝐴 ) = 1 )
31 30 adantr ( ( 𝜑𝑥𝑇 ) → ( 𝑁 gcd 𝐴 ) = 1 )
32 26 17 gcdcomd ( ( 𝜑𝑥𝑇 ) → ( 𝑁 gcd ( 𝐹𝑥 ) ) = ( ( 𝐹𝑥 ) gcd 𝑁 ) )
33 14 simprd ( ( 𝜑𝑥𝑇 ) → ( ( 𝐹𝑥 ) gcd 𝑁 ) = 1 )
34 32 33 eqtrd ( ( 𝜑𝑥𝑇 ) → ( 𝑁 gcd ( 𝐹𝑥 ) ) = 1 )
35 rpmul ( ( 𝑁 ∈ ℤ ∧ 𝐴 ∈ ℤ ∧ ( 𝐹𝑥 ) ∈ ℤ ) → ( ( ( 𝑁 gcd 𝐴 ) = 1 ∧ ( 𝑁 gcd ( 𝐹𝑥 ) ) = 1 ) → ( 𝑁 gcd ( 𝐴 · ( 𝐹𝑥 ) ) ) = 1 ) )
36 26 7 17 35 syl3anc ( ( 𝜑𝑥𝑇 ) → ( ( ( 𝑁 gcd 𝐴 ) = 1 ∧ ( 𝑁 gcd ( 𝐹𝑥 ) ) = 1 ) → ( 𝑁 gcd ( 𝐴 · ( 𝐹𝑥 ) ) ) = 1 ) )
37 31 34 36 mp2and ( ( 𝜑𝑥𝑇 ) → ( 𝑁 gcd ( 𝐴 · ( 𝐹𝑥 ) ) ) = 1 )
38 24 27 37 3eqtrd ( ( 𝜑𝑥𝑇 ) → ( ( ( 𝐴 · ( 𝐹𝑥 ) ) mod 𝑁 ) gcd 𝑁 ) = 1 )
39 oveq1 ( 𝑦 = ( ( 𝐴 · ( 𝐹𝑥 ) ) mod 𝑁 ) → ( 𝑦 gcd 𝑁 ) = ( ( ( 𝐴 · ( 𝐹𝑥 ) ) mod 𝑁 ) gcd 𝑁 ) )
40 39 eqeq1d ( 𝑦 = ( ( 𝐴 · ( 𝐹𝑥 ) ) mod 𝑁 ) → ( ( 𝑦 gcd 𝑁 ) = 1 ↔ ( ( ( 𝐴 · ( 𝐹𝑥 ) ) mod 𝑁 ) gcd 𝑁 ) = 1 ) )
41 40 2 elrab2 ( ( ( 𝐴 · ( 𝐹𝑥 ) ) mod 𝑁 ) ∈ 𝑆 ↔ ( ( ( 𝐴 · ( 𝐹𝑥 ) ) mod 𝑁 ) ∈ ( 0 ..^ 𝑁 ) ∧ ( ( ( 𝐴 · ( 𝐹𝑥 ) ) mod 𝑁 ) gcd 𝑁 ) = 1 ) )
42 22 38 41 sylanbrc ( ( 𝜑𝑥𝑇 ) → ( ( 𝐴 · ( 𝐹𝑥 ) ) mod 𝑁 ) ∈ 𝑆 )
43 42 5 fmptd ( 𝜑𝐺 : 𝑇𝑆 )