Metamath Proof Explorer


Theorem gausslemma2dlem6

Description: Lemma 6 for gausslemma2d . (Contributed by AV, 16-Jun-2021)

Ref Expression
Hypotheses gausslemma2d.p ( 𝜑𝑃 ∈ ( ℙ ∖ { 2 } ) )
gausslemma2d.h 𝐻 = ( ( 𝑃 − 1 ) / 2 )
gausslemma2d.r 𝑅 = ( 𝑥 ∈ ( 1 ... 𝐻 ) ↦ if ( ( 𝑥 · 2 ) < ( 𝑃 / 2 ) , ( 𝑥 · 2 ) , ( 𝑃 − ( 𝑥 · 2 ) ) ) )
gausslemma2d.m 𝑀 = ( ⌊ ‘ ( 𝑃 / 4 ) )
gausslemma2d.n 𝑁 = ( 𝐻𝑀 )
Assertion gausslemma2dlem6 ( 𝜑 → ( ( ! ‘ 𝐻 ) mod 𝑃 ) = ( ( ( ( - 1 ↑ 𝑁 ) · ( 2 ↑ 𝐻 ) ) · ( ! ‘ 𝐻 ) ) mod 𝑃 ) )

Proof

Step Hyp Ref Expression
1 gausslemma2d.p ( 𝜑𝑃 ∈ ( ℙ ∖ { 2 } ) )
2 gausslemma2d.h 𝐻 = ( ( 𝑃 − 1 ) / 2 )
3 gausslemma2d.r 𝑅 = ( 𝑥 ∈ ( 1 ... 𝐻 ) ↦ if ( ( 𝑥 · 2 ) < ( 𝑃 / 2 ) , ( 𝑥 · 2 ) , ( 𝑃 − ( 𝑥 · 2 ) ) ) )
4 gausslemma2d.m 𝑀 = ( ⌊ ‘ ( 𝑃 / 4 ) )
5 gausslemma2d.n 𝑁 = ( 𝐻𝑀 )
6 1 2 3 4 gausslemma2dlem4 ( 𝜑 → ( ! ‘ 𝐻 ) = ( ∏ 𝑘 ∈ ( 1 ... 𝑀 ) ( 𝑅𝑘 ) · ∏ 𝑘 ∈ ( ( 𝑀 + 1 ) ... 𝐻 ) ( 𝑅𝑘 ) ) )
7 6 oveq1d ( 𝜑 → ( ( ! ‘ 𝐻 ) mod 𝑃 ) = ( ( ∏ 𝑘 ∈ ( 1 ... 𝑀 ) ( 𝑅𝑘 ) · ∏ 𝑘 ∈ ( ( 𝑀 + 1 ) ... 𝐻 ) ( 𝑅𝑘 ) ) mod 𝑃 ) )
8 fzfid ( 𝜑 → ( 1 ... 𝑀 ) ∈ Fin )
9 1 2 3 4 gausslemma2dlem2 ( 𝜑 → ∀ 𝑘 ∈ ( 1 ... 𝑀 ) ( 𝑅𝑘 ) = ( 𝑘 · 2 ) )
10 9 adantr ( ( 𝜑𝑘 ∈ ( 1 ... 𝑀 ) ) → ∀ 𝑘 ∈ ( 1 ... 𝑀 ) ( 𝑅𝑘 ) = ( 𝑘 · 2 ) )
11 rspa ( ( ∀ 𝑘 ∈ ( 1 ... 𝑀 ) ( 𝑅𝑘 ) = ( 𝑘 · 2 ) ∧ 𝑘 ∈ ( 1 ... 𝑀 ) ) → ( 𝑅𝑘 ) = ( 𝑘 · 2 ) )
12 11 expcom ( 𝑘 ∈ ( 1 ... 𝑀 ) → ( ∀ 𝑘 ∈ ( 1 ... 𝑀 ) ( 𝑅𝑘 ) = ( 𝑘 · 2 ) → ( 𝑅𝑘 ) = ( 𝑘 · 2 ) ) )
13 12 adantl ( ( 𝜑𝑘 ∈ ( 1 ... 𝑀 ) ) → ( ∀ 𝑘 ∈ ( 1 ... 𝑀 ) ( 𝑅𝑘 ) = ( 𝑘 · 2 ) → ( 𝑅𝑘 ) = ( 𝑘 · 2 ) ) )
14 elfzelz ( 𝑘 ∈ ( 1 ... 𝑀 ) → 𝑘 ∈ ℤ )
15 2z 2 ∈ ℤ
16 15 a1i ( 𝑘 ∈ ( 1 ... 𝑀 ) → 2 ∈ ℤ )
17 14 16 zmulcld ( 𝑘 ∈ ( 1 ... 𝑀 ) → ( 𝑘 · 2 ) ∈ ℤ )
18 17 adantl ( ( 𝜑𝑘 ∈ ( 1 ... 𝑀 ) ) → ( 𝑘 · 2 ) ∈ ℤ )
19 eleq1 ( ( 𝑅𝑘 ) = ( 𝑘 · 2 ) → ( ( 𝑅𝑘 ) ∈ ℤ ↔ ( 𝑘 · 2 ) ∈ ℤ ) )
20 18 19 syl5ibrcom ( ( 𝜑𝑘 ∈ ( 1 ... 𝑀 ) ) → ( ( 𝑅𝑘 ) = ( 𝑘 · 2 ) → ( 𝑅𝑘 ) ∈ ℤ ) )
21 13 20 syld ( ( 𝜑𝑘 ∈ ( 1 ... 𝑀 ) ) → ( ∀ 𝑘 ∈ ( 1 ... 𝑀 ) ( 𝑅𝑘 ) = ( 𝑘 · 2 ) → ( 𝑅𝑘 ) ∈ ℤ ) )
22 10 21 mpd ( ( 𝜑𝑘 ∈ ( 1 ... 𝑀 ) ) → ( 𝑅𝑘 ) ∈ ℤ )
23 8 22 fprodzcl ( 𝜑 → ∏ 𝑘 ∈ ( 1 ... 𝑀 ) ( 𝑅𝑘 ) ∈ ℤ )
24 fzfid ( 𝜑 → ( ( 𝑀 + 1 ) ... 𝐻 ) ∈ Fin )
25 1 2 3 4 gausslemma2dlem3 ( 𝜑 → ∀ 𝑘 ∈ ( ( 𝑀 + 1 ) ... 𝐻 ) ( 𝑅𝑘 ) = ( 𝑃 − ( 𝑘 · 2 ) ) )
26 25 adantr ( ( 𝜑𝑘 ∈ ( ( 𝑀 + 1 ) ... 𝐻 ) ) → ∀ 𝑘 ∈ ( ( 𝑀 + 1 ) ... 𝐻 ) ( 𝑅𝑘 ) = ( 𝑃 − ( 𝑘 · 2 ) ) )
27 rspa ( ( ∀ 𝑘 ∈ ( ( 𝑀 + 1 ) ... 𝐻 ) ( 𝑅𝑘 ) = ( 𝑃 − ( 𝑘 · 2 ) ) ∧ 𝑘 ∈ ( ( 𝑀 + 1 ) ... 𝐻 ) ) → ( 𝑅𝑘 ) = ( 𝑃 − ( 𝑘 · 2 ) ) )
28 27 expcom ( 𝑘 ∈ ( ( 𝑀 + 1 ) ... 𝐻 ) → ( ∀ 𝑘 ∈ ( ( 𝑀 + 1 ) ... 𝐻 ) ( 𝑅𝑘 ) = ( 𝑃 − ( 𝑘 · 2 ) ) → ( 𝑅𝑘 ) = ( 𝑃 − ( 𝑘 · 2 ) ) ) )
29 28 adantl ( ( 𝜑𝑘 ∈ ( ( 𝑀 + 1 ) ... 𝐻 ) ) → ( ∀ 𝑘 ∈ ( ( 𝑀 + 1 ) ... 𝐻 ) ( 𝑅𝑘 ) = ( 𝑃 − ( 𝑘 · 2 ) ) → ( 𝑅𝑘 ) = ( 𝑃 − ( 𝑘 · 2 ) ) ) )
30 1 gausslemma2dlem0a ( 𝜑𝑃 ∈ ℕ )
31 30 nnzd ( 𝜑𝑃 ∈ ℤ )
32 elfzelz ( 𝑘 ∈ ( ( 𝑀 + 1 ) ... 𝐻 ) → 𝑘 ∈ ℤ )
33 15 a1i ( 𝑘 ∈ ( ( 𝑀 + 1 ) ... 𝐻 ) → 2 ∈ ℤ )
34 32 33 zmulcld ( 𝑘 ∈ ( ( 𝑀 + 1 ) ... 𝐻 ) → ( 𝑘 · 2 ) ∈ ℤ )
35 zsubcl ( ( 𝑃 ∈ ℤ ∧ ( 𝑘 · 2 ) ∈ ℤ ) → ( 𝑃 − ( 𝑘 · 2 ) ) ∈ ℤ )
36 31 34 35 syl2an ( ( 𝜑𝑘 ∈ ( ( 𝑀 + 1 ) ... 𝐻 ) ) → ( 𝑃 − ( 𝑘 · 2 ) ) ∈ ℤ )
37 eleq1 ( ( 𝑅𝑘 ) = ( 𝑃 − ( 𝑘 · 2 ) ) → ( ( 𝑅𝑘 ) ∈ ℤ ↔ ( 𝑃 − ( 𝑘 · 2 ) ) ∈ ℤ ) )
38 36 37 syl5ibrcom ( ( 𝜑𝑘 ∈ ( ( 𝑀 + 1 ) ... 𝐻 ) ) → ( ( 𝑅𝑘 ) = ( 𝑃 − ( 𝑘 · 2 ) ) → ( 𝑅𝑘 ) ∈ ℤ ) )
39 29 38 syld ( ( 𝜑𝑘 ∈ ( ( 𝑀 + 1 ) ... 𝐻 ) ) → ( ∀ 𝑘 ∈ ( ( 𝑀 + 1 ) ... 𝐻 ) ( 𝑅𝑘 ) = ( 𝑃 − ( 𝑘 · 2 ) ) → ( 𝑅𝑘 ) ∈ ℤ ) )
40 26 39 mpd ( ( 𝜑𝑘 ∈ ( ( 𝑀 + 1 ) ... 𝐻 ) ) → ( 𝑅𝑘 ) ∈ ℤ )
41 24 40 fprodzcl ( 𝜑 → ∏ 𝑘 ∈ ( ( 𝑀 + 1 ) ... 𝐻 ) ( 𝑅𝑘 ) ∈ ℤ )
42 41 zred ( 𝜑 → ∏ 𝑘 ∈ ( ( 𝑀 + 1 ) ... 𝐻 ) ( 𝑅𝑘 ) ∈ ℝ )
43 nnoddn2prm ( 𝑃 ∈ ( ℙ ∖ { 2 } ) → ( 𝑃 ∈ ℕ ∧ ¬ 2 ∥ 𝑃 ) )
44 nnrp ( 𝑃 ∈ ℕ → 𝑃 ∈ ℝ+ )
45 44 adantr ( ( 𝑃 ∈ ℕ ∧ ¬ 2 ∥ 𝑃 ) → 𝑃 ∈ ℝ+ )
46 1 43 45 3syl ( 𝜑𝑃 ∈ ℝ+ )
47 modmulmodr ( ( ∏ 𝑘 ∈ ( 1 ... 𝑀 ) ( 𝑅𝑘 ) ∈ ℤ ∧ ∏ 𝑘 ∈ ( ( 𝑀 + 1 ) ... 𝐻 ) ( 𝑅𝑘 ) ∈ ℝ ∧ 𝑃 ∈ ℝ+ ) → ( ( ∏ 𝑘 ∈ ( 1 ... 𝑀 ) ( 𝑅𝑘 ) · ( ∏ 𝑘 ∈ ( ( 𝑀 + 1 ) ... 𝐻 ) ( 𝑅𝑘 ) mod 𝑃 ) ) mod 𝑃 ) = ( ( ∏ 𝑘 ∈ ( 1 ... 𝑀 ) ( 𝑅𝑘 ) · ∏ 𝑘 ∈ ( ( 𝑀 + 1 ) ... 𝐻 ) ( 𝑅𝑘 ) ) mod 𝑃 ) )
48 47 eqcomd ( ( ∏ 𝑘 ∈ ( 1 ... 𝑀 ) ( 𝑅𝑘 ) ∈ ℤ ∧ ∏ 𝑘 ∈ ( ( 𝑀 + 1 ) ... 𝐻 ) ( 𝑅𝑘 ) ∈ ℝ ∧ 𝑃 ∈ ℝ+ ) → ( ( ∏ 𝑘 ∈ ( 1 ... 𝑀 ) ( 𝑅𝑘 ) · ∏ 𝑘 ∈ ( ( 𝑀 + 1 ) ... 𝐻 ) ( 𝑅𝑘 ) ) mod 𝑃 ) = ( ( ∏ 𝑘 ∈ ( 1 ... 𝑀 ) ( 𝑅𝑘 ) · ( ∏ 𝑘 ∈ ( ( 𝑀 + 1 ) ... 𝐻 ) ( 𝑅𝑘 ) mod 𝑃 ) ) mod 𝑃 ) )
49 23 42 46 48 syl3anc ( 𝜑 → ( ( ∏ 𝑘 ∈ ( 1 ... 𝑀 ) ( 𝑅𝑘 ) · ∏ 𝑘 ∈ ( ( 𝑀 + 1 ) ... 𝐻 ) ( 𝑅𝑘 ) ) mod 𝑃 ) = ( ( ∏ 𝑘 ∈ ( 1 ... 𝑀 ) ( 𝑅𝑘 ) · ( ∏ 𝑘 ∈ ( ( 𝑀 + 1 ) ... 𝐻 ) ( 𝑅𝑘 ) mod 𝑃 ) ) mod 𝑃 ) )
50 1 2 3 4 5 gausslemma2dlem5 ( 𝜑 → ( ∏ 𝑘 ∈ ( ( 𝑀 + 1 ) ... 𝐻 ) ( 𝑅𝑘 ) mod 𝑃 ) = ( ( ( - 1 ↑ 𝑁 ) · ∏ 𝑘 ∈ ( ( 𝑀 + 1 ) ... 𝐻 ) ( 𝑘 · 2 ) ) mod 𝑃 ) )
51 50 oveq2d ( 𝜑 → ( ∏ 𝑘 ∈ ( 1 ... 𝑀 ) ( 𝑅𝑘 ) · ( ∏ 𝑘 ∈ ( ( 𝑀 + 1 ) ... 𝐻 ) ( 𝑅𝑘 ) mod 𝑃 ) ) = ( ∏ 𝑘 ∈ ( 1 ... 𝑀 ) ( 𝑅𝑘 ) · ( ( ( - 1 ↑ 𝑁 ) · ∏ 𝑘 ∈ ( ( 𝑀 + 1 ) ... 𝐻 ) ( 𝑘 · 2 ) ) mod 𝑃 ) ) )
52 51 oveq1d ( 𝜑 → ( ( ∏ 𝑘 ∈ ( 1 ... 𝑀 ) ( 𝑅𝑘 ) · ( ∏ 𝑘 ∈ ( ( 𝑀 + 1 ) ... 𝐻 ) ( 𝑅𝑘 ) mod 𝑃 ) ) mod 𝑃 ) = ( ( ∏ 𝑘 ∈ ( 1 ... 𝑀 ) ( 𝑅𝑘 ) · ( ( ( - 1 ↑ 𝑁 ) · ∏ 𝑘 ∈ ( ( 𝑀 + 1 ) ... 𝐻 ) ( 𝑘 · 2 ) ) mod 𝑃 ) ) mod 𝑃 ) )
53 neg1rr - 1 ∈ ℝ
54 53 a1i ( 𝜑 → - 1 ∈ ℝ )
55 1 4 2 5 gausslemma2dlem0h ( 𝜑𝑁 ∈ ℕ0 )
56 54 55 reexpcld ( 𝜑 → ( - 1 ↑ 𝑁 ) ∈ ℝ )
57 32 adantl ( ( 𝜑𝑘 ∈ ( ( 𝑀 + 1 ) ... 𝐻 ) ) → 𝑘 ∈ ℤ )
58 15 a1i ( ( 𝜑𝑘 ∈ ( ( 𝑀 + 1 ) ... 𝐻 ) ) → 2 ∈ ℤ )
59 57 58 zmulcld ( ( 𝜑𝑘 ∈ ( ( 𝑀 + 1 ) ... 𝐻 ) ) → ( 𝑘 · 2 ) ∈ ℤ )
60 24 59 fprodzcl ( 𝜑 → ∏ 𝑘 ∈ ( ( 𝑀 + 1 ) ... 𝐻 ) ( 𝑘 · 2 ) ∈ ℤ )
61 60 zred ( 𝜑 → ∏ 𝑘 ∈ ( ( 𝑀 + 1 ) ... 𝐻 ) ( 𝑘 · 2 ) ∈ ℝ )
62 56 61 remulcld ( 𝜑 → ( ( - 1 ↑ 𝑁 ) · ∏ 𝑘 ∈ ( ( 𝑀 + 1 ) ... 𝐻 ) ( 𝑘 · 2 ) ) ∈ ℝ )
63 modmulmodr ( ( ∏ 𝑘 ∈ ( 1 ... 𝑀 ) ( 𝑅𝑘 ) ∈ ℤ ∧ ( ( - 1 ↑ 𝑁 ) · ∏ 𝑘 ∈ ( ( 𝑀 + 1 ) ... 𝐻 ) ( 𝑘 · 2 ) ) ∈ ℝ ∧ 𝑃 ∈ ℝ+ ) → ( ( ∏ 𝑘 ∈ ( 1 ... 𝑀 ) ( 𝑅𝑘 ) · ( ( ( - 1 ↑ 𝑁 ) · ∏ 𝑘 ∈ ( ( 𝑀 + 1 ) ... 𝐻 ) ( 𝑘 · 2 ) ) mod 𝑃 ) ) mod 𝑃 ) = ( ( ∏ 𝑘 ∈ ( 1 ... 𝑀 ) ( 𝑅𝑘 ) · ( ( - 1 ↑ 𝑁 ) · ∏ 𝑘 ∈ ( ( 𝑀 + 1 ) ... 𝐻 ) ( 𝑘 · 2 ) ) ) mod 𝑃 ) )
64 23 62 46 63 syl3anc ( 𝜑 → ( ( ∏ 𝑘 ∈ ( 1 ... 𝑀 ) ( 𝑅𝑘 ) · ( ( ( - 1 ↑ 𝑁 ) · ∏ 𝑘 ∈ ( ( 𝑀 + 1 ) ... 𝐻 ) ( 𝑘 · 2 ) ) mod 𝑃 ) ) mod 𝑃 ) = ( ( ∏ 𝑘 ∈ ( 1 ... 𝑀 ) ( 𝑅𝑘 ) · ( ( - 1 ↑ 𝑁 ) · ∏ 𝑘 ∈ ( ( 𝑀 + 1 ) ... 𝐻 ) ( 𝑘 · 2 ) ) ) mod 𝑃 ) )
65 9 prodeq2d ( 𝜑 → ∏ 𝑘 ∈ ( 1 ... 𝑀 ) ( 𝑅𝑘 ) = ∏ 𝑘 ∈ ( 1 ... 𝑀 ) ( 𝑘 · 2 ) )
66 65 oveq1d ( 𝜑 → ( ∏ 𝑘 ∈ ( 1 ... 𝑀 ) ( 𝑅𝑘 ) · ∏ 𝑘 ∈ ( ( 𝑀 + 1 ) ... 𝐻 ) ( 𝑘 · 2 ) ) = ( ∏ 𝑘 ∈ ( 1 ... 𝑀 ) ( 𝑘 · 2 ) · ∏ 𝑘 ∈ ( ( 𝑀 + 1 ) ... 𝐻 ) ( 𝑘 · 2 ) ) )
67 fzfid ( 𝜑 → ( 1 ... 𝐻 ) ∈ Fin )
68 elfzelz ( 𝑘 ∈ ( 1 ... 𝐻 ) → 𝑘 ∈ ℤ )
69 68 zcnd ( 𝑘 ∈ ( 1 ... 𝐻 ) → 𝑘 ∈ ℂ )
70 69 adantl ( ( 𝜑𝑘 ∈ ( 1 ... 𝐻 ) ) → 𝑘 ∈ ℂ )
71 2cn 2 ∈ ℂ
72 71 a1i ( ( 𝜑𝑘 ∈ ( 1 ... 𝐻 ) ) → 2 ∈ ℂ )
73 67 70 72 fprodmul ( 𝜑 → ∏ 𝑘 ∈ ( 1 ... 𝐻 ) ( 𝑘 · 2 ) = ( ∏ 𝑘 ∈ ( 1 ... 𝐻 ) 𝑘 · ∏ 𝑘 ∈ ( 1 ... 𝐻 ) 2 ) )
74 1 4 gausslemma2dlem0d ( 𝜑𝑀 ∈ ℕ0 )
75 74 nn0red ( 𝜑𝑀 ∈ ℝ )
76 75 ltp1d ( 𝜑𝑀 < ( 𝑀 + 1 ) )
77 fzdisj ( 𝑀 < ( 𝑀 + 1 ) → ( ( 1 ... 𝑀 ) ∩ ( ( 𝑀 + 1 ) ... 𝐻 ) ) = ∅ )
78 76 77 syl ( 𝜑 → ( ( 1 ... 𝑀 ) ∩ ( ( 𝑀 + 1 ) ... 𝐻 ) ) = ∅ )
79 1zzd ( 𝜑 → 1 ∈ ℤ )
80 nn0pzuz ( ( 𝑀 ∈ ℕ0 ∧ 1 ∈ ℤ ) → ( 𝑀 + 1 ) ∈ ( ℤ ‘ 1 ) )
81 74 79 80 syl2anc ( 𝜑 → ( 𝑀 + 1 ) ∈ ( ℤ ‘ 1 ) )
82 74 nn0zd ( 𝜑𝑀 ∈ ℤ )
83 1 2 gausslemma2dlem0b ( 𝜑𝐻 ∈ ℕ )
84 83 nnzd ( 𝜑𝐻 ∈ ℤ )
85 1 4 2 gausslemma2dlem0g ( 𝜑𝑀𝐻 )
86 eluz2 ( 𝐻 ∈ ( ℤ𝑀 ) ↔ ( 𝑀 ∈ ℤ ∧ 𝐻 ∈ ℤ ∧ 𝑀𝐻 ) )
87 82 84 85 86 syl3anbrc ( 𝜑𝐻 ∈ ( ℤ𝑀 ) )
88 fzsplit2 ( ( ( 𝑀 + 1 ) ∈ ( ℤ ‘ 1 ) ∧ 𝐻 ∈ ( ℤ𝑀 ) ) → ( 1 ... 𝐻 ) = ( ( 1 ... 𝑀 ) ∪ ( ( 𝑀 + 1 ) ... 𝐻 ) ) )
89 81 87 88 syl2anc ( 𝜑 → ( 1 ... 𝐻 ) = ( ( 1 ... 𝑀 ) ∪ ( ( 𝑀 + 1 ) ... 𝐻 ) ) )
90 15 a1i ( 𝑘 ∈ ( 1 ... 𝐻 ) → 2 ∈ ℤ )
91 68 90 zmulcld ( 𝑘 ∈ ( 1 ... 𝐻 ) → ( 𝑘 · 2 ) ∈ ℤ )
92 91 adantl ( ( 𝜑𝑘 ∈ ( 1 ... 𝐻 ) ) → ( 𝑘 · 2 ) ∈ ℤ )
93 92 zcnd ( ( 𝜑𝑘 ∈ ( 1 ... 𝐻 ) ) → ( 𝑘 · 2 ) ∈ ℂ )
94 78 89 67 93 fprodsplit ( 𝜑 → ∏ 𝑘 ∈ ( 1 ... 𝐻 ) ( 𝑘 · 2 ) = ( ∏ 𝑘 ∈ ( 1 ... 𝑀 ) ( 𝑘 · 2 ) · ∏ 𝑘 ∈ ( ( 𝑀 + 1 ) ... 𝐻 ) ( 𝑘 · 2 ) ) )
95 nnnn0 ( 𝑃 ∈ ℕ → 𝑃 ∈ ℕ0 )
96 95 anim1i ( ( 𝑃 ∈ ℕ ∧ ¬ 2 ∥ 𝑃 ) → ( 𝑃 ∈ ℕ0 ∧ ¬ 2 ∥ 𝑃 ) )
97 43 96 syl ( 𝑃 ∈ ( ℙ ∖ { 2 } ) → ( 𝑃 ∈ ℕ0 ∧ ¬ 2 ∥ 𝑃 ) )
98 nn0oddm1d2 ( 𝑃 ∈ ℕ0 → ( ¬ 2 ∥ 𝑃 ↔ ( ( 𝑃 − 1 ) / 2 ) ∈ ℕ0 ) )
99 98 biimpa ( ( 𝑃 ∈ ℕ0 ∧ ¬ 2 ∥ 𝑃 ) → ( ( 𝑃 − 1 ) / 2 ) ∈ ℕ0 )
100 2 99 eqeltrid ( ( 𝑃 ∈ ℕ0 ∧ ¬ 2 ∥ 𝑃 ) → 𝐻 ∈ ℕ0 )
101 1 97 100 3syl ( 𝜑𝐻 ∈ ℕ0 )
102 fprodfac ( 𝐻 ∈ ℕ0 → ( ! ‘ 𝐻 ) = ∏ 𝑘 ∈ ( 1 ... 𝐻 ) 𝑘 )
103 101 102 syl ( 𝜑 → ( ! ‘ 𝐻 ) = ∏ 𝑘 ∈ ( 1 ... 𝐻 ) 𝑘 )
104 103 eqcomd ( 𝜑 → ∏ 𝑘 ∈ ( 1 ... 𝐻 ) 𝑘 = ( ! ‘ 𝐻 ) )
105 fzfi ( 1 ... 𝐻 ) ∈ Fin
106 105 71 pm3.2i ( ( 1 ... 𝐻 ) ∈ Fin ∧ 2 ∈ ℂ )
107 fprodconst ( ( ( 1 ... 𝐻 ) ∈ Fin ∧ 2 ∈ ℂ ) → ∏ 𝑘 ∈ ( 1 ... 𝐻 ) 2 = ( 2 ↑ ( ♯ ‘ ( 1 ... 𝐻 ) ) ) )
108 106 107 mp1i ( 𝜑 → ∏ 𝑘 ∈ ( 1 ... 𝐻 ) 2 = ( 2 ↑ ( ♯ ‘ ( 1 ... 𝐻 ) ) ) )
109 104 108 oveq12d ( 𝜑 → ( ∏ 𝑘 ∈ ( 1 ... 𝐻 ) 𝑘 · ∏ 𝑘 ∈ ( 1 ... 𝐻 ) 2 ) = ( ( ! ‘ 𝐻 ) · ( 2 ↑ ( ♯ ‘ ( 1 ... 𝐻 ) ) ) ) )
110 hashfz1 ( 𝐻 ∈ ℕ0 → ( ♯ ‘ ( 1 ... 𝐻 ) ) = 𝐻 )
111 101 110 syl ( 𝜑 → ( ♯ ‘ ( 1 ... 𝐻 ) ) = 𝐻 )
112 111 oveq2d ( 𝜑 → ( 2 ↑ ( ♯ ‘ ( 1 ... 𝐻 ) ) ) = ( 2 ↑ 𝐻 ) )
113 112 oveq2d ( 𝜑 → ( ( ! ‘ 𝐻 ) · ( 2 ↑ ( ♯ ‘ ( 1 ... 𝐻 ) ) ) ) = ( ( ! ‘ 𝐻 ) · ( 2 ↑ 𝐻 ) ) )
114 101 faccld ( 𝜑 → ( ! ‘ 𝐻 ) ∈ ℕ )
115 114 nncnd ( 𝜑 → ( ! ‘ 𝐻 ) ∈ ℂ )
116 2nn0 2 ∈ ℕ0
117 nn0expcl ( ( 2 ∈ ℕ0𝐻 ∈ ℕ0 ) → ( 2 ↑ 𝐻 ) ∈ ℕ0 )
118 117 nn0cnd ( ( 2 ∈ ℕ0𝐻 ∈ ℕ0 ) → ( 2 ↑ 𝐻 ) ∈ ℂ )
119 116 101 118 sylancr ( 𝜑 → ( 2 ↑ 𝐻 ) ∈ ℂ )
120 115 119 mulcomd ( 𝜑 → ( ( ! ‘ 𝐻 ) · ( 2 ↑ 𝐻 ) ) = ( ( 2 ↑ 𝐻 ) · ( ! ‘ 𝐻 ) ) )
121 109 113 120 3eqtrd ( 𝜑 → ( ∏ 𝑘 ∈ ( 1 ... 𝐻 ) 𝑘 · ∏ 𝑘 ∈ ( 1 ... 𝐻 ) 2 ) = ( ( 2 ↑ 𝐻 ) · ( ! ‘ 𝐻 ) ) )
122 73 94 121 3eqtr3d ( 𝜑 → ( ∏ 𝑘 ∈ ( 1 ... 𝑀 ) ( 𝑘 · 2 ) · ∏ 𝑘 ∈ ( ( 𝑀 + 1 ) ... 𝐻 ) ( 𝑘 · 2 ) ) = ( ( 2 ↑ 𝐻 ) · ( ! ‘ 𝐻 ) ) )
123 66 122 eqtrd ( 𝜑 → ( ∏ 𝑘 ∈ ( 1 ... 𝑀 ) ( 𝑅𝑘 ) · ∏ 𝑘 ∈ ( ( 𝑀 + 1 ) ... 𝐻 ) ( 𝑘 · 2 ) ) = ( ( 2 ↑ 𝐻 ) · ( ! ‘ 𝐻 ) ) )
124 123 oveq2d ( 𝜑 → ( ( - 1 ↑ 𝑁 ) · ( ∏ 𝑘 ∈ ( 1 ... 𝑀 ) ( 𝑅𝑘 ) · ∏ 𝑘 ∈ ( ( 𝑀 + 1 ) ... 𝐻 ) ( 𝑘 · 2 ) ) ) = ( ( - 1 ↑ 𝑁 ) · ( ( 2 ↑ 𝐻 ) · ( ! ‘ 𝐻 ) ) ) )
125 23 zcnd ( 𝜑 → ∏ 𝑘 ∈ ( 1 ... 𝑀 ) ( 𝑅𝑘 ) ∈ ℂ )
126 56 recnd ( 𝜑 → ( - 1 ↑ 𝑁 ) ∈ ℂ )
127 60 zcnd ( 𝜑 → ∏ 𝑘 ∈ ( ( 𝑀 + 1 ) ... 𝐻 ) ( 𝑘 · 2 ) ∈ ℂ )
128 125 126 127 mul12d ( 𝜑 → ( ∏ 𝑘 ∈ ( 1 ... 𝑀 ) ( 𝑅𝑘 ) · ( ( - 1 ↑ 𝑁 ) · ∏ 𝑘 ∈ ( ( 𝑀 + 1 ) ... 𝐻 ) ( 𝑘 · 2 ) ) ) = ( ( - 1 ↑ 𝑁 ) · ( ∏ 𝑘 ∈ ( 1 ... 𝑀 ) ( 𝑅𝑘 ) · ∏ 𝑘 ∈ ( ( 𝑀 + 1 ) ... 𝐻 ) ( 𝑘 · 2 ) ) ) )
129 126 119 115 mulassd ( 𝜑 → ( ( ( - 1 ↑ 𝑁 ) · ( 2 ↑ 𝐻 ) ) · ( ! ‘ 𝐻 ) ) = ( ( - 1 ↑ 𝑁 ) · ( ( 2 ↑ 𝐻 ) · ( ! ‘ 𝐻 ) ) ) )
130 124 128 129 3eqtr4d ( 𝜑 → ( ∏ 𝑘 ∈ ( 1 ... 𝑀 ) ( 𝑅𝑘 ) · ( ( - 1 ↑ 𝑁 ) · ∏ 𝑘 ∈ ( ( 𝑀 + 1 ) ... 𝐻 ) ( 𝑘 · 2 ) ) ) = ( ( ( - 1 ↑ 𝑁 ) · ( 2 ↑ 𝐻 ) ) · ( ! ‘ 𝐻 ) ) )
131 130 oveq1d ( 𝜑 → ( ( ∏ 𝑘 ∈ ( 1 ... 𝑀 ) ( 𝑅𝑘 ) · ( ( - 1 ↑ 𝑁 ) · ∏ 𝑘 ∈ ( ( 𝑀 + 1 ) ... 𝐻 ) ( 𝑘 · 2 ) ) ) mod 𝑃 ) = ( ( ( ( - 1 ↑ 𝑁 ) · ( 2 ↑ 𝐻 ) ) · ( ! ‘ 𝐻 ) ) mod 𝑃 ) )
132 52 64 131 3eqtrd ( 𝜑 → ( ( ∏ 𝑘 ∈ ( 1 ... 𝑀 ) ( 𝑅𝑘 ) · ( ∏ 𝑘 ∈ ( ( 𝑀 + 1 ) ... 𝐻 ) ( 𝑅𝑘 ) mod 𝑃 ) ) mod 𝑃 ) = ( ( ( ( - 1 ↑ 𝑁 ) · ( 2 ↑ 𝐻 ) ) · ( ! ‘ 𝐻 ) ) mod 𝑃 ) )
133 7 49 132 3eqtrd ( 𝜑 → ( ( ! ‘ 𝐻 ) mod 𝑃 ) = ( ( ( ( - 1 ↑ 𝑁 ) · ( 2 ↑ 𝐻 ) ) · ( ! ‘ 𝐻 ) ) mod 𝑃 ) )