| 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 ) ) |