Metamath Proof Explorer


Theorem lgsqrlem4

Description: Lemma for lgsqr . (Contributed by Mario Carneiro, 15-Jun-2015)

Ref Expression
Hypotheses lgsqr.y
|- Y = ( Z/nZ ` P )
lgsqr.s
|- S = ( Poly1 ` Y )
lgsqr.b
|- B = ( Base ` S )
lgsqr.d
|- D = ( deg1 ` Y )
lgsqr.o
|- O = ( eval1 ` Y )
lgsqr.e
|- .^ = ( .g ` ( mulGrp ` S ) )
lgsqr.x
|- X = ( var1 ` Y )
lgsqr.m
|- .- = ( -g ` S )
lgsqr.u
|- .1. = ( 1r ` S )
lgsqr.t
|- T = ( ( ( ( P - 1 ) / 2 ) .^ X ) .- .1. )
lgsqr.l
|- L = ( ZRHom ` Y )
lgsqr.1
|- ( ph -> P e. ( Prime \ { 2 } ) )
lgsqr.g
|- G = ( y e. ( 1 ... ( ( P - 1 ) / 2 ) ) |-> ( L ` ( y ^ 2 ) ) )
lgsqr.3
|- ( ph -> A e. ZZ )
lgsqr.4
|- ( ph -> ( A /L P ) = 1 )
Assertion lgsqrlem4
|- ( ph -> E. x e. ZZ P || ( ( x ^ 2 ) - A ) )

Proof

Step Hyp Ref Expression
1 lgsqr.y
 |-  Y = ( Z/nZ ` P )
2 lgsqr.s
 |-  S = ( Poly1 ` Y )
3 lgsqr.b
 |-  B = ( Base ` S )
4 lgsqr.d
 |-  D = ( deg1 ` Y )
5 lgsqr.o
 |-  O = ( eval1 ` Y )
6 lgsqr.e
 |-  .^ = ( .g ` ( mulGrp ` S ) )
7 lgsqr.x
 |-  X = ( var1 ` Y )
8 lgsqr.m
 |-  .- = ( -g ` S )
9 lgsqr.u
 |-  .1. = ( 1r ` S )
10 lgsqr.t
 |-  T = ( ( ( ( P - 1 ) / 2 ) .^ X ) .- .1. )
11 lgsqr.l
 |-  L = ( ZRHom ` Y )
12 lgsqr.1
 |-  ( ph -> P e. ( Prime \ { 2 } ) )
13 lgsqr.g
 |-  G = ( y e. ( 1 ... ( ( P - 1 ) / 2 ) ) |-> ( L ` ( y ^ 2 ) ) )
14 lgsqr.3
 |-  ( ph -> A e. ZZ )
15 lgsqr.4
 |-  ( ph -> ( A /L P ) = 1 )
16 1 2 3 4 5 6 7 8 9 10 11 12 13 lgsqrlem2
 |-  ( ph -> G : ( 1 ... ( ( P - 1 ) / 2 ) ) -1-1-> ( `' ( O ` T ) " { ( 0g ` Y ) } ) )
17 fvex
 |-  ( O ` T ) e. _V
18 17 cnvex
 |-  `' ( O ` T ) e. _V
19 18 imaex
 |-  ( `' ( O ` T ) " { ( 0g ` Y ) } ) e. _V
20 19 f1dom
 |-  ( G : ( 1 ... ( ( P - 1 ) / 2 ) ) -1-1-> ( `' ( O ` T ) " { ( 0g ` Y ) } ) -> ( 1 ... ( ( P - 1 ) / 2 ) ) ~<_ ( `' ( O ` T ) " { ( 0g ` Y ) } ) )
21 16 20 syl
 |-  ( ph -> ( 1 ... ( ( P - 1 ) / 2 ) ) ~<_ ( `' ( O ` T ) " { ( 0g ` Y ) } ) )
22 eqid
 |-  ( 0g ` Y ) = ( 0g ` Y )
23 eqid
 |-  ( 0g ` S ) = ( 0g ` S )
24 12 eldifad
 |-  ( ph -> P e. Prime )
25 1 znfld
 |-  ( P e. Prime -> Y e. Field )
26 24 25 syl
 |-  ( ph -> Y e. Field )
27 fldidom
 |-  ( Y e. Field -> Y e. IDomn )
28 26 27 syl
 |-  ( ph -> Y e. IDomn )
29 isidom
 |-  ( Y e. IDomn <-> ( Y e. CRing /\ Y e. Domn ) )
30 29 simplbi
 |-  ( Y e. IDomn -> Y e. CRing )
31 28 30 syl
 |-  ( ph -> Y e. CRing )
32 crngring
 |-  ( Y e. CRing -> Y e. Ring )
33 31 32 syl
 |-  ( ph -> Y e. Ring )
34 2 ply1ring
 |-  ( Y e. Ring -> S e. Ring )
35 33 34 syl
 |-  ( ph -> S e. Ring )
36 ringgrp
 |-  ( S e. Ring -> S e. Grp )
37 35 36 syl
 |-  ( ph -> S e. Grp )
38 eqid
 |-  ( mulGrp ` S ) = ( mulGrp ` S )
39 38 3 mgpbas
 |-  B = ( Base ` ( mulGrp ` S ) )
40 38 ringmgp
 |-  ( S e. Ring -> ( mulGrp ` S ) e. Mnd )
41 35 40 syl
 |-  ( ph -> ( mulGrp ` S ) e. Mnd )
42 oddprm
 |-  ( P e. ( Prime \ { 2 } ) -> ( ( P - 1 ) / 2 ) e. NN )
43 12 42 syl
 |-  ( ph -> ( ( P - 1 ) / 2 ) e. NN )
44 43 nnnn0d
 |-  ( ph -> ( ( P - 1 ) / 2 ) e. NN0 )
45 7 2 3 vr1cl
 |-  ( Y e. Ring -> X e. B )
46 33 45 syl
 |-  ( ph -> X e. B )
47 39 6 41 44 46 mulgnn0cld
 |-  ( ph -> ( ( ( P - 1 ) / 2 ) .^ X ) e. B )
48 3 9 ringidcl
 |-  ( S e. Ring -> .1. e. B )
49 35 48 syl
 |-  ( ph -> .1. e. B )
50 3 8 grpsubcl
 |-  ( ( S e. Grp /\ ( ( ( P - 1 ) / 2 ) .^ X ) e. B /\ .1. e. B ) -> ( ( ( ( P - 1 ) / 2 ) .^ X ) .- .1. ) e. B )
51 37 47 49 50 syl3anc
 |-  ( ph -> ( ( ( ( P - 1 ) / 2 ) .^ X ) .- .1. ) e. B )
52 10 51 eqeltrid
 |-  ( ph -> T e. B )
53 10 fveq2i
 |-  ( D ` T ) = ( D ` ( ( ( ( P - 1 ) / 2 ) .^ X ) .- .1. ) )
54 43 nngt0d
 |-  ( ph -> 0 < ( ( P - 1 ) / 2 ) )
55 eqid
 |-  ( algSc ` S ) = ( algSc ` S )
56 eqid
 |-  ( 1r ` Y ) = ( 1r ` Y )
57 2 55 56 9 ply1scl1
 |-  ( Y e. Ring -> ( ( algSc ` S ) ` ( 1r ` Y ) ) = .1. )
58 33 57 syl
 |-  ( ph -> ( ( algSc ` S ) ` ( 1r ` Y ) ) = .1. )
59 58 fveq2d
 |-  ( ph -> ( D ` ( ( algSc ` S ) ` ( 1r ` Y ) ) ) = ( D ` .1. ) )
60 eqid
 |-  ( Base ` Y ) = ( Base ` Y )
61 60 56 ringidcl
 |-  ( Y e. Ring -> ( 1r ` Y ) e. ( Base ` Y ) )
62 33 61 syl
 |-  ( ph -> ( 1r ` Y ) e. ( Base ` Y ) )
63 domnnzr
 |-  ( Y e. Domn -> Y e. NzRing )
64 29 63 simplbiim
 |-  ( Y e. IDomn -> Y e. NzRing )
65 28 64 syl
 |-  ( ph -> Y e. NzRing )
66 56 22 nzrnz
 |-  ( Y e. NzRing -> ( 1r ` Y ) =/= ( 0g ` Y ) )
67 65 66 syl
 |-  ( ph -> ( 1r ` Y ) =/= ( 0g ` Y ) )
68 4 2 60 55 22 deg1scl
 |-  ( ( Y e. Ring /\ ( 1r ` Y ) e. ( Base ` Y ) /\ ( 1r ` Y ) =/= ( 0g ` Y ) ) -> ( D ` ( ( algSc ` S ) ` ( 1r ` Y ) ) ) = 0 )
69 33 62 67 68 syl3anc
 |-  ( ph -> ( D ` ( ( algSc ` S ) ` ( 1r ` Y ) ) ) = 0 )
70 59 69 eqtr3d
 |-  ( ph -> ( D ` .1. ) = 0 )
71 4 2 7 38 6 deg1pw
 |-  ( ( Y e. NzRing /\ ( ( P - 1 ) / 2 ) e. NN0 ) -> ( D ` ( ( ( P - 1 ) / 2 ) .^ X ) ) = ( ( P - 1 ) / 2 ) )
72 65 44 71 syl2anc
 |-  ( ph -> ( D ` ( ( ( P - 1 ) / 2 ) .^ X ) ) = ( ( P - 1 ) / 2 ) )
73 54 70 72 3brtr4d
 |-  ( ph -> ( D ` .1. ) < ( D ` ( ( ( P - 1 ) / 2 ) .^ X ) ) )
74 2 4 33 3 8 47 49 73 deg1sub
 |-  ( ph -> ( D ` ( ( ( ( P - 1 ) / 2 ) .^ X ) .- .1. ) ) = ( D ` ( ( ( P - 1 ) / 2 ) .^ X ) ) )
75 53 74 eqtrid
 |-  ( ph -> ( D ` T ) = ( D ` ( ( ( P - 1 ) / 2 ) .^ X ) ) )
76 75 72 eqtrd
 |-  ( ph -> ( D ` T ) = ( ( P - 1 ) / 2 ) )
77 76 44 eqeltrd
 |-  ( ph -> ( D ` T ) e. NN0 )
78 4 2 23 3 deg1nn0clb
 |-  ( ( Y e. Ring /\ T e. B ) -> ( T =/= ( 0g ` S ) <-> ( D ` T ) e. NN0 ) )
79 33 52 78 syl2anc
 |-  ( ph -> ( T =/= ( 0g ` S ) <-> ( D ` T ) e. NN0 ) )
80 77 79 mpbird
 |-  ( ph -> T =/= ( 0g ` S ) )
81 2 3 4 5 22 23 28 52 80 fta1g
 |-  ( ph -> ( # ` ( `' ( O ` T ) " { ( 0g ` Y ) } ) ) <_ ( D ` T ) )
82 81 76 breqtrd
 |-  ( ph -> ( # ` ( `' ( O ` T ) " { ( 0g ` Y ) } ) ) <_ ( ( P - 1 ) / 2 ) )
83 hashfz1
 |-  ( ( ( P - 1 ) / 2 ) e. NN0 -> ( # ` ( 1 ... ( ( P - 1 ) / 2 ) ) ) = ( ( P - 1 ) / 2 ) )
84 44 83 syl
 |-  ( ph -> ( # ` ( 1 ... ( ( P - 1 ) / 2 ) ) ) = ( ( P - 1 ) / 2 ) )
85 82 84 breqtrrd
 |-  ( ph -> ( # ` ( `' ( O ` T ) " { ( 0g ` Y ) } ) ) <_ ( # ` ( 1 ... ( ( P - 1 ) / 2 ) ) ) )
86 hashbnd
 |-  ( ( ( `' ( O ` T ) " { ( 0g ` Y ) } ) e. _V /\ ( ( P - 1 ) / 2 ) e. NN0 /\ ( # ` ( `' ( O ` T ) " { ( 0g ` Y ) } ) ) <_ ( ( P - 1 ) / 2 ) ) -> ( `' ( O ` T ) " { ( 0g ` Y ) } ) e. Fin )
87 19 44 82 86 mp3an2i
 |-  ( ph -> ( `' ( O ` T ) " { ( 0g ` Y ) } ) e. Fin )
88 fzfid
 |-  ( ph -> ( 1 ... ( ( P - 1 ) / 2 ) ) e. Fin )
89 hashdom
 |-  ( ( ( `' ( O ` T ) " { ( 0g ` Y ) } ) e. Fin /\ ( 1 ... ( ( P - 1 ) / 2 ) ) e. Fin ) -> ( ( # ` ( `' ( O ` T ) " { ( 0g ` Y ) } ) ) <_ ( # ` ( 1 ... ( ( P - 1 ) / 2 ) ) ) <-> ( `' ( O ` T ) " { ( 0g ` Y ) } ) ~<_ ( 1 ... ( ( P - 1 ) / 2 ) ) ) )
90 87 88 89 syl2anc
 |-  ( ph -> ( ( # ` ( `' ( O ` T ) " { ( 0g ` Y ) } ) ) <_ ( # ` ( 1 ... ( ( P - 1 ) / 2 ) ) ) <-> ( `' ( O ` T ) " { ( 0g ` Y ) } ) ~<_ ( 1 ... ( ( P - 1 ) / 2 ) ) ) )
91 85 90 mpbid
 |-  ( ph -> ( `' ( O ` T ) " { ( 0g ` Y ) } ) ~<_ ( 1 ... ( ( P - 1 ) / 2 ) ) )
92 sbth
 |-  ( ( ( 1 ... ( ( P - 1 ) / 2 ) ) ~<_ ( `' ( O ` T ) " { ( 0g ` Y ) } ) /\ ( `' ( O ` T ) " { ( 0g ` Y ) } ) ~<_ ( 1 ... ( ( P - 1 ) / 2 ) ) ) -> ( 1 ... ( ( P - 1 ) / 2 ) ) ~~ ( `' ( O ` T ) " { ( 0g ` Y ) } ) )
93 21 91 92 syl2anc
 |-  ( ph -> ( 1 ... ( ( P - 1 ) / 2 ) ) ~~ ( `' ( O ` T ) " { ( 0g ` Y ) } ) )
94 f1finf1o
 |-  ( ( ( 1 ... ( ( P - 1 ) / 2 ) ) ~~ ( `' ( O ` T ) " { ( 0g ` Y ) } ) /\ ( `' ( O ` T ) " { ( 0g ` Y ) } ) e. Fin ) -> ( G : ( 1 ... ( ( P - 1 ) / 2 ) ) -1-1-> ( `' ( O ` T ) " { ( 0g ` Y ) } ) <-> G : ( 1 ... ( ( P - 1 ) / 2 ) ) -1-1-onto-> ( `' ( O ` T ) " { ( 0g ` Y ) } ) ) )
95 93 87 94 syl2anc
 |-  ( ph -> ( G : ( 1 ... ( ( P - 1 ) / 2 ) ) -1-1-> ( `' ( O ` T ) " { ( 0g ` Y ) } ) <-> G : ( 1 ... ( ( P - 1 ) / 2 ) ) -1-1-onto-> ( `' ( O ` T ) " { ( 0g ` Y ) } ) ) )
96 16 95 mpbid
 |-  ( ph -> G : ( 1 ... ( ( P - 1 ) / 2 ) ) -1-1-onto-> ( `' ( O ` T ) " { ( 0g ` Y ) } ) )
97 f1ocnv
 |-  ( G : ( 1 ... ( ( P - 1 ) / 2 ) ) -1-1-onto-> ( `' ( O ` T ) " { ( 0g ` Y ) } ) -> `' G : ( `' ( O ` T ) " { ( 0g ` Y ) } ) -1-1-onto-> ( 1 ... ( ( P - 1 ) / 2 ) ) )
98 f1of
 |-  ( `' G : ( `' ( O ` T ) " { ( 0g ` Y ) } ) -1-1-onto-> ( 1 ... ( ( P - 1 ) / 2 ) ) -> `' G : ( `' ( O ` T ) " { ( 0g ` Y ) } ) --> ( 1 ... ( ( P - 1 ) / 2 ) ) )
99 96 97 98 3syl
 |-  ( ph -> `' G : ( `' ( O ` T ) " { ( 0g ` Y ) } ) --> ( 1 ... ( ( P - 1 ) / 2 ) ) )
100 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 lgsqrlem3
 |-  ( ph -> ( L ` A ) e. ( `' ( O ` T ) " { ( 0g ` Y ) } ) )
101 99 100 ffvelcdmd
 |-  ( ph -> ( `' G ` ( L ` A ) ) e. ( 1 ... ( ( P - 1 ) / 2 ) ) )
102 101 elfzelzd
 |-  ( ph -> ( `' G ` ( L ` A ) ) e. ZZ )
103 fvoveq1
 |-  ( x = ( `' G ` ( L ` A ) ) -> ( L ` ( x ^ 2 ) ) = ( L ` ( ( `' G ` ( L ` A ) ) ^ 2 ) ) )
104 fvoveq1
 |-  ( y = x -> ( L ` ( y ^ 2 ) ) = ( L ` ( x ^ 2 ) ) )
105 104 cbvmptv
 |-  ( y e. ( 1 ... ( ( P - 1 ) / 2 ) ) |-> ( L ` ( y ^ 2 ) ) ) = ( x e. ( 1 ... ( ( P - 1 ) / 2 ) ) |-> ( L ` ( x ^ 2 ) ) )
106 13 105 eqtri
 |-  G = ( x e. ( 1 ... ( ( P - 1 ) / 2 ) ) |-> ( L ` ( x ^ 2 ) ) )
107 fvex
 |-  ( L ` ( ( `' G ` ( L ` A ) ) ^ 2 ) ) e. _V
108 103 106 107 fvmpt
 |-  ( ( `' G ` ( L ` A ) ) e. ( 1 ... ( ( P - 1 ) / 2 ) ) -> ( G ` ( `' G ` ( L ` A ) ) ) = ( L ` ( ( `' G ` ( L ` A ) ) ^ 2 ) ) )
109 101 108 syl
 |-  ( ph -> ( G ` ( `' G ` ( L ` A ) ) ) = ( L ` ( ( `' G ` ( L ` A ) ) ^ 2 ) ) )
110 f1ocnvfv2
 |-  ( ( G : ( 1 ... ( ( P - 1 ) / 2 ) ) -1-1-onto-> ( `' ( O ` T ) " { ( 0g ` Y ) } ) /\ ( L ` A ) e. ( `' ( O ` T ) " { ( 0g ` Y ) } ) ) -> ( G ` ( `' G ` ( L ` A ) ) ) = ( L ` A ) )
111 96 100 110 syl2anc
 |-  ( ph -> ( G ` ( `' G ` ( L ` A ) ) ) = ( L ` A ) )
112 109 111 eqtr3d
 |-  ( ph -> ( L ` ( ( `' G ` ( L ` A ) ) ^ 2 ) ) = ( L ` A ) )
113 prmnn
 |-  ( P e. Prime -> P e. NN )
114 24 113 syl
 |-  ( ph -> P e. NN )
115 114 nnnn0d
 |-  ( ph -> P e. NN0 )
116 zsqcl
 |-  ( ( `' G ` ( L ` A ) ) e. ZZ -> ( ( `' G ` ( L ` A ) ) ^ 2 ) e. ZZ )
117 102 116 syl
 |-  ( ph -> ( ( `' G ` ( L ` A ) ) ^ 2 ) e. ZZ )
118 1 11 zndvds
 |-  ( ( P e. NN0 /\ ( ( `' G ` ( L ` A ) ) ^ 2 ) e. ZZ /\ A e. ZZ ) -> ( ( L ` ( ( `' G ` ( L ` A ) ) ^ 2 ) ) = ( L ` A ) <-> P || ( ( ( `' G ` ( L ` A ) ) ^ 2 ) - A ) ) )
119 115 117 14 118 syl3anc
 |-  ( ph -> ( ( L ` ( ( `' G ` ( L ` A ) ) ^ 2 ) ) = ( L ` A ) <-> P || ( ( ( `' G ` ( L ` A ) ) ^ 2 ) - A ) ) )
120 112 119 mpbid
 |-  ( ph -> P || ( ( ( `' G ` ( L ` A ) ) ^ 2 ) - A ) )
121 oveq1
 |-  ( x = ( `' G ` ( L ` A ) ) -> ( x ^ 2 ) = ( ( `' G ` ( L ` A ) ) ^ 2 ) )
122 121 oveq1d
 |-  ( x = ( `' G ` ( L ` A ) ) -> ( ( x ^ 2 ) - A ) = ( ( ( `' G ` ( L ` A ) ) ^ 2 ) - A ) )
123 122 breq2d
 |-  ( x = ( `' G ` ( L ` A ) ) -> ( P || ( ( x ^ 2 ) - A ) <-> P || ( ( ( `' G ` ( L ` A ) ) ^ 2 ) - A ) ) )
124 123 rspcev
 |-  ( ( ( `' G ` ( L ` A ) ) e. ZZ /\ P || ( ( ( `' G ` ( L ` A ) ) ^ 2 ) - A ) ) -> E. x e. ZZ P || ( ( x ^ 2 ) - A ) )
125 102 120 124 syl2anc
 |-  ( ph -> E. x e. ZZ P || ( ( x ^ 2 ) - A ) )