| Step | Hyp | Ref | Expression | 
						
							| 1 |  | crth.1 |  |-  S = ( 0 ..^ ( M x. N ) ) | 
						
							| 2 |  | crth.2 |  |-  T = ( ( 0 ..^ M ) X. ( 0 ..^ N ) ) | 
						
							| 3 |  | crth.3 |  |-  F = ( x e. S |-> <. ( x mod M ) , ( x mod N ) >. ) | 
						
							| 4 |  | crth.4 |  |-  ( ph -> ( M e. NN /\ N e. NN /\ ( M gcd N ) = 1 ) ) | 
						
							| 5 |  | elfzoelz |  |-  ( x e. ( 0 ..^ ( M x. N ) ) -> x e. ZZ ) | 
						
							| 6 | 5 1 | eleq2s |  |-  ( x e. S -> x e. ZZ ) | 
						
							| 7 |  | simpr |  |-  ( ( ph /\ x e. ZZ ) -> x e. ZZ ) | 
						
							| 8 | 4 | simp1d |  |-  ( ph -> M e. NN ) | 
						
							| 9 | 8 | adantr |  |-  ( ( ph /\ x e. ZZ ) -> M e. NN ) | 
						
							| 10 |  | zmodfzo |  |-  ( ( x e. ZZ /\ M e. NN ) -> ( x mod M ) e. ( 0 ..^ M ) ) | 
						
							| 11 | 7 9 10 | syl2anc |  |-  ( ( ph /\ x e. ZZ ) -> ( x mod M ) e. ( 0 ..^ M ) ) | 
						
							| 12 | 4 | simp2d |  |-  ( ph -> N e. NN ) | 
						
							| 13 | 12 | adantr |  |-  ( ( ph /\ x e. ZZ ) -> N e. NN ) | 
						
							| 14 |  | zmodfzo |  |-  ( ( x e. ZZ /\ N e. NN ) -> ( x mod N ) e. ( 0 ..^ N ) ) | 
						
							| 15 | 7 13 14 | syl2anc |  |-  ( ( ph /\ x e. ZZ ) -> ( x mod N ) e. ( 0 ..^ N ) ) | 
						
							| 16 | 11 15 | opelxpd |  |-  ( ( ph /\ x e. ZZ ) -> <. ( x mod M ) , ( x mod N ) >. e. ( ( 0 ..^ M ) X. ( 0 ..^ N ) ) ) | 
						
							| 17 | 16 2 | eleqtrrdi |  |-  ( ( ph /\ x e. ZZ ) -> <. ( x mod M ) , ( x mod N ) >. e. T ) | 
						
							| 18 | 6 17 | sylan2 |  |-  ( ( ph /\ x e. S ) -> <. ( x mod M ) , ( x mod N ) >. e. T ) | 
						
							| 19 | 18 3 | fmptd |  |-  ( ph -> F : S --> T ) | 
						
							| 20 |  | oveq1 |  |-  ( x = y -> ( x mod M ) = ( y mod M ) ) | 
						
							| 21 |  | oveq1 |  |-  ( x = y -> ( x mod N ) = ( y mod N ) ) | 
						
							| 22 | 20 21 | opeq12d |  |-  ( x = y -> <. ( x mod M ) , ( x mod N ) >. = <. ( y mod M ) , ( y mod N ) >. ) | 
						
							| 23 |  | opex |  |-  <. ( y mod M ) , ( y mod N ) >. e. _V | 
						
							| 24 | 22 3 23 | fvmpt |  |-  ( y e. S -> ( F ` y ) = <. ( y mod M ) , ( y mod N ) >. ) | 
						
							| 25 | 24 | ad2antrl |  |-  ( ( ph /\ ( y e. S /\ z e. S ) ) -> ( F ` y ) = <. ( y mod M ) , ( y mod N ) >. ) | 
						
							| 26 |  | oveq1 |  |-  ( x = z -> ( x mod M ) = ( z mod M ) ) | 
						
							| 27 |  | oveq1 |  |-  ( x = z -> ( x mod N ) = ( z mod N ) ) | 
						
							| 28 | 26 27 | opeq12d |  |-  ( x = z -> <. ( x mod M ) , ( x mod N ) >. = <. ( z mod M ) , ( z mod N ) >. ) | 
						
							| 29 |  | opex |  |-  <. ( z mod M ) , ( z mod N ) >. e. _V | 
						
							| 30 | 28 3 29 | fvmpt |  |-  ( z e. S -> ( F ` z ) = <. ( z mod M ) , ( z mod N ) >. ) | 
						
							| 31 | 30 | ad2antll |  |-  ( ( ph /\ ( y e. S /\ z e. S ) ) -> ( F ` z ) = <. ( z mod M ) , ( z mod N ) >. ) | 
						
							| 32 | 25 31 | eqeq12d |  |-  ( ( ph /\ ( y e. S /\ z e. S ) ) -> ( ( F ` y ) = ( F ` z ) <-> <. ( y mod M ) , ( y mod N ) >. = <. ( z mod M ) , ( z mod N ) >. ) ) | 
						
							| 33 |  | ovex |  |-  ( y mod M ) e. _V | 
						
							| 34 |  | ovex |  |-  ( y mod N ) e. _V | 
						
							| 35 | 33 34 | opth |  |-  ( <. ( y mod M ) , ( y mod N ) >. = <. ( z mod M ) , ( z mod N ) >. <-> ( ( y mod M ) = ( z mod M ) /\ ( y mod N ) = ( z mod N ) ) ) | 
						
							| 36 | 32 35 | bitrdi |  |-  ( ( ph /\ ( y e. S /\ z e. S ) ) -> ( ( F ` y ) = ( F ` z ) <-> ( ( y mod M ) = ( z mod M ) /\ ( y mod N ) = ( z mod N ) ) ) ) | 
						
							| 37 | 8 | adantr |  |-  ( ( ph /\ ( y e. S /\ z e. S ) ) -> M e. NN ) | 
						
							| 38 | 37 | nnzd |  |-  ( ( ph /\ ( y e. S /\ z e. S ) ) -> M e. ZZ ) | 
						
							| 39 | 12 | adantr |  |-  ( ( ph /\ ( y e. S /\ z e. S ) ) -> N e. NN ) | 
						
							| 40 | 39 | nnzd |  |-  ( ( ph /\ ( y e. S /\ z e. S ) ) -> N e. ZZ ) | 
						
							| 41 |  | simprl |  |-  ( ( ph /\ ( y e. S /\ z e. S ) ) -> y e. S ) | 
						
							| 42 | 41 1 | eleqtrdi |  |-  ( ( ph /\ ( y e. S /\ z e. S ) ) -> y e. ( 0 ..^ ( M x. N ) ) ) | 
						
							| 43 |  | elfzoelz |  |-  ( y e. ( 0 ..^ ( M x. N ) ) -> y e. ZZ ) | 
						
							| 44 | 42 43 | syl |  |-  ( ( ph /\ ( y e. S /\ z e. S ) ) -> y e. ZZ ) | 
						
							| 45 |  | simprr |  |-  ( ( ph /\ ( y e. S /\ z e. S ) ) -> z e. S ) | 
						
							| 46 | 45 1 | eleqtrdi |  |-  ( ( ph /\ ( y e. S /\ z e. S ) ) -> z e. ( 0 ..^ ( M x. N ) ) ) | 
						
							| 47 |  | elfzoelz |  |-  ( z e. ( 0 ..^ ( M x. N ) ) -> z e. ZZ ) | 
						
							| 48 | 46 47 | syl |  |-  ( ( ph /\ ( y e. S /\ z e. S ) ) -> z e. ZZ ) | 
						
							| 49 | 44 48 | zsubcld |  |-  ( ( ph /\ ( y e. S /\ z e. S ) ) -> ( y - z ) e. ZZ ) | 
						
							| 50 | 4 | simp3d |  |-  ( ph -> ( M gcd N ) = 1 ) | 
						
							| 51 | 50 | adantr |  |-  ( ( ph /\ ( y e. S /\ z e. S ) ) -> ( M gcd N ) = 1 ) | 
						
							| 52 |  | coprmdvds2 |  |-  ( ( ( M e. ZZ /\ N e. ZZ /\ ( y - z ) e. ZZ ) /\ ( M gcd N ) = 1 ) -> ( ( M || ( y - z ) /\ N || ( y - z ) ) -> ( M x. N ) || ( y - z ) ) ) | 
						
							| 53 | 38 40 49 51 52 | syl31anc |  |-  ( ( ph /\ ( y e. S /\ z e. S ) ) -> ( ( M || ( y - z ) /\ N || ( y - z ) ) -> ( M x. N ) || ( y - z ) ) ) | 
						
							| 54 |  | moddvds |  |-  ( ( M e. NN /\ y e. ZZ /\ z e. ZZ ) -> ( ( y mod M ) = ( z mod M ) <-> M || ( y - z ) ) ) | 
						
							| 55 | 37 44 48 54 | syl3anc |  |-  ( ( ph /\ ( y e. S /\ z e. S ) ) -> ( ( y mod M ) = ( z mod M ) <-> M || ( y - z ) ) ) | 
						
							| 56 |  | moddvds |  |-  ( ( N e. NN /\ y e. ZZ /\ z e. ZZ ) -> ( ( y mod N ) = ( z mod N ) <-> N || ( y - z ) ) ) | 
						
							| 57 | 39 44 48 56 | syl3anc |  |-  ( ( ph /\ ( y e. S /\ z e. S ) ) -> ( ( y mod N ) = ( z mod N ) <-> N || ( y - z ) ) ) | 
						
							| 58 | 55 57 | anbi12d |  |-  ( ( ph /\ ( y e. S /\ z e. S ) ) -> ( ( ( y mod M ) = ( z mod M ) /\ ( y mod N ) = ( z mod N ) ) <-> ( M || ( y - z ) /\ N || ( y - z ) ) ) ) | 
						
							| 59 | 44 | zred |  |-  ( ( ph /\ ( y e. S /\ z e. S ) ) -> y e. RR ) | 
						
							| 60 | 37 39 | nnmulcld |  |-  ( ( ph /\ ( y e. S /\ z e. S ) ) -> ( M x. N ) e. NN ) | 
						
							| 61 | 60 | nnrpd |  |-  ( ( ph /\ ( y e. S /\ z e. S ) ) -> ( M x. N ) e. RR+ ) | 
						
							| 62 |  | elfzole1 |  |-  ( y e. ( 0 ..^ ( M x. N ) ) -> 0 <_ y ) | 
						
							| 63 | 42 62 | syl |  |-  ( ( ph /\ ( y e. S /\ z e. S ) ) -> 0 <_ y ) | 
						
							| 64 |  | elfzolt2 |  |-  ( y e. ( 0 ..^ ( M x. N ) ) -> y < ( M x. N ) ) | 
						
							| 65 | 42 64 | syl |  |-  ( ( ph /\ ( y e. S /\ z e. S ) ) -> y < ( M x. N ) ) | 
						
							| 66 |  | modid |  |-  ( ( ( y e. RR /\ ( M x. N ) e. RR+ ) /\ ( 0 <_ y /\ y < ( M x. N ) ) ) -> ( y mod ( M x. N ) ) = y ) | 
						
							| 67 | 59 61 63 65 66 | syl22anc |  |-  ( ( ph /\ ( y e. S /\ z e. S ) ) -> ( y mod ( M x. N ) ) = y ) | 
						
							| 68 | 48 | zred |  |-  ( ( ph /\ ( y e. S /\ z e. S ) ) -> z e. RR ) | 
						
							| 69 |  | elfzole1 |  |-  ( z e. ( 0 ..^ ( M x. N ) ) -> 0 <_ z ) | 
						
							| 70 | 46 69 | syl |  |-  ( ( ph /\ ( y e. S /\ z e. S ) ) -> 0 <_ z ) | 
						
							| 71 |  | elfzolt2 |  |-  ( z e. ( 0 ..^ ( M x. N ) ) -> z < ( M x. N ) ) | 
						
							| 72 | 46 71 | syl |  |-  ( ( ph /\ ( y e. S /\ z e. S ) ) -> z < ( M x. N ) ) | 
						
							| 73 |  | modid |  |-  ( ( ( z e. RR /\ ( M x. N ) e. RR+ ) /\ ( 0 <_ z /\ z < ( M x. N ) ) ) -> ( z mod ( M x. N ) ) = z ) | 
						
							| 74 | 68 61 70 72 73 | syl22anc |  |-  ( ( ph /\ ( y e. S /\ z e. S ) ) -> ( z mod ( M x. N ) ) = z ) | 
						
							| 75 | 67 74 | eqeq12d |  |-  ( ( ph /\ ( y e. S /\ z e. S ) ) -> ( ( y mod ( M x. N ) ) = ( z mod ( M x. N ) ) <-> y = z ) ) | 
						
							| 76 |  | moddvds |  |-  ( ( ( M x. N ) e. NN /\ y e. ZZ /\ z e. ZZ ) -> ( ( y mod ( M x. N ) ) = ( z mod ( M x. N ) ) <-> ( M x. N ) || ( y - z ) ) ) | 
						
							| 77 | 60 44 48 76 | syl3anc |  |-  ( ( ph /\ ( y e. S /\ z e. S ) ) -> ( ( y mod ( M x. N ) ) = ( z mod ( M x. N ) ) <-> ( M x. N ) || ( y - z ) ) ) | 
						
							| 78 | 75 77 | bitr3d |  |-  ( ( ph /\ ( y e. S /\ z e. S ) ) -> ( y = z <-> ( M x. N ) || ( y - z ) ) ) | 
						
							| 79 | 53 58 78 | 3imtr4d |  |-  ( ( ph /\ ( y e. S /\ z e. S ) ) -> ( ( ( y mod M ) = ( z mod M ) /\ ( y mod N ) = ( z mod N ) ) -> y = z ) ) | 
						
							| 80 | 36 79 | sylbid |  |-  ( ( ph /\ ( y e. S /\ z e. S ) ) -> ( ( F ` y ) = ( F ` z ) -> y = z ) ) | 
						
							| 81 | 80 | ralrimivva |  |-  ( ph -> A. y e. S A. z e. S ( ( F ` y ) = ( F ` z ) -> y = z ) ) | 
						
							| 82 |  | dff13 |  |-  ( F : S -1-1-> T <-> ( F : S --> T /\ A. y e. S A. z e. S ( ( F ` y ) = ( F ` z ) -> y = z ) ) ) | 
						
							| 83 | 19 81 82 | sylanbrc |  |-  ( ph -> F : S -1-1-> T ) | 
						
							| 84 |  | nnnn0 |  |-  ( M e. NN -> M e. NN0 ) | 
						
							| 85 |  | nnnn0 |  |-  ( N e. NN -> N e. NN0 ) | 
						
							| 86 |  | nn0mulcl |  |-  ( ( M e. NN0 /\ N e. NN0 ) -> ( M x. N ) e. NN0 ) | 
						
							| 87 |  | hashfzo0 |  |-  ( ( M x. N ) e. NN0 -> ( # ` ( 0 ..^ ( M x. N ) ) ) = ( M x. N ) ) | 
						
							| 88 | 86 87 | syl |  |-  ( ( M e. NN0 /\ N e. NN0 ) -> ( # ` ( 0 ..^ ( M x. N ) ) ) = ( M x. N ) ) | 
						
							| 89 |  | fzofi |  |-  ( 0 ..^ M ) e. Fin | 
						
							| 90 |  | fzofi |  |-  ( 0 ..^ N ) e. Fin | 
						
							| 91 |  | hashxp |  |-  ( ( ( 0 ..^ M ) e. Fin /\ ( 0 ..^ N ) e. Fin ) -> ( # ` ( ( 0 ..^ M ) X. ( 0 ..^ N ) ) ) = ( ( # ` ( 0 ..^ M ) ) x. ( # ` ( 0 ..^ N ) ) ) ) | 
						
							| 92 | 89 90 91 | mp2an |  |-  ( # ` ( ( 0 ..^ M ) X. ( 0 ..^ N ) ) ) = ( ( # ` ( 0 ..^ M ) ) x. ( # ` ( 0 ..^ N ) ) ) | 
						
							| 93 |  | hashfzo0 |  |-  ( M e. NN0 -> ( # ` ( 0 ..^ M ) ) = M ) | 
						
							| 94 |  | hashfzo0 |  |-  ( N e. NN0 -> ( # ` ( 0 ..^ N ) ) = N ) | 
						
							| 95 | 93 94 | oveqan12d |  |-  ( ( M e. NN0 /\ N e. NN0 ) -> ( ( # ` ( 0 ..^ M ) ) x. ( # ` ( 0 ..^ N ) ) ) = ( M x. N ) ) | 
						
							| 96 | 92 95 | eqtrid |  |-  ( ( M e. NN0 /\ N e. NN0 ) -> ( # ` ( ( 0 ..^ M ) X. ( 0 ..^ N ) ) ) = ( M x. N ) ) | 
						
							| 97 | 88 96 | eqtr4d |  |-  ( ( M e. NN0 /\ N e. NN0 ) -> ( # ` ( 0 ..^ ( M x. N ) ) ) = ( # ` ( ( 0 ..^ M ) X. ( 0 ..^ N ) ) ) ) | 
						
							| 98 |  | fzofi |  |-  ( 0 ..^ ( M x. N ) ) e. Fin | 
						
							| 99 |  | xpfi |  |-  ( ( ( 0 ..^ M ) e. Fin /\ ( 0 ..^ N ) e. Fin ) -> ( ( 0 ..^ M ) X. ( 0 ..^ N ) ) e. Fin ) | 
						
							| 100 | 89 90 99 | mp2an |  |-  ( ( 0 ..^ M ) X. ( 0 ..^ N ) ) e. Fin | 
						
							| 101 |  | hashen |  |-  ( ( ( 0 ..^ ( M x. N ) ) e. Fin /\ ( ( 0 ..^ M ) X. ( 0 ..^ N ) ) e. Fin ) -> ( ( # ` ( 0 ..^ ( M x. N ) ) ) = ( # ` ( ( 0 ..^ M ) X. ( 0 ..^ N ) ) ) <-> ( 0 ..^ ( M x. N ) ) ~~ ( ( 0 ..^ M ) X. ( 0 ..^ N ) ) ) ) | 
						
							| 102 | 98 100 101 | mp2an |  |-  ( ( # ` ( 0 ..^ ( M x. N ) ) ) = ( # ` ( ( 0 ..^ M ) X. ( 0 ..^ N ) ) ) <-> ( 0 ..^ ( M x. N ) ) ~~ ( ( 0 ..^ M ) X. ( 0 ..^ N ) ) ) | 
						
							| 103 | 97 102 | sylib |  |-  ( ( M e. NN0 /\ N e. NN0 ) -> ( 0 ..^ ( M x. N ) ) ~~ ( ( 0 ..^ M ) X. ( 0 ..^ N ) ) ) | 
						
							| 104 | 84 85 103 | syl2an |  |-  ( ( M e. NN /\ N e. NN ) -> ( 0 ..^ ( M x. N ) ) ~~ ( ( 0 ..^ M ) X. ( 0 ..^ N ) ) ) | 
						
							| 105 | 8 12 104 | syl2anc |  |-  ( ph -> ( 0 ..^ ( M x. N ) ) ~~ ( ( 0 ..^ M ) X. ( 0 ..^ N ) ) ) | 
						
							| 106 | 105 1 2 | 3brtr4g |  |-  ( ph -> S ~~ T ) | 
						
							| 107 | 2 100 | eqeltri |  |-  T e. Fin | 
						
							| 108 |  | f1finf1o |  |-  ( ( S ~~ T /\ T e. Fin ) -> ( F : S -1-1-> T <-> F : S -1-1-onto-> T ) ) | 
						
							| 109 | 106 107 108 | sylancl |  |-  ( ph -> ( F : S -1-1-> T <-> F : S -1-1-onto-> T ) ) | 
						
							| 110 | 83 109 | mpbid |  |-  ( ph -> F : S -1-1-onto-> T ) |