| Step | Hyp | Ref
| Expression |
| 1 | | prodmo.1 |
. . 3
        |
| 2 | | prodmo.2 |
. . 3
 
   |
| 3 | | prodmodclem2a.dc |
. . 3
 
    
DECID
  |
| 4 | | prodmolem2.7 |
. . . 4

      |
| 5 | | prodmolem2.9 |
. . . . . . 7

    ♯       |
| 6 | | 1zzd 9370 |
. . . . . . . . . . . 12
   |
| 7 | | prodmolem2.5 |
. . . . . . . . . . . . 13
   |
| 8 | 7 | nnzd 9464 |
. . . . . . . . . . . 12
   |
| 9 | 6, 8 | fzfigd 10540 |
. . . . . . . . . . 11
       |
| 10 | | prodmolem2.8 |
. . . . . . . . . . 11
           |
| 11 | 9, 10 | fihasheqf1od 10898 |
. . . . . . . . . 10
 ♯      ♯    |
| 12 | 7 | nnnn0d 9319 |
. . . . . . . . . . 11
   |
| 13 | | hashfz1 10892 |
. . . . . . . . . . 11

♯        |
| 14 | 12, 13 | syl 14 |
. . . . . . . . . 10
 ♯        |
| 15 | 11, 14 | eqtr3d 2231 |
. . . . . . . . 9
 ♯    |
| 16 | 15 | oveq2d 5941 |
. . . . . . . 8
    ♯         |
| 17 | | isoeq4 5854 |
. . . . . . . 8
    ♯            ♯    
          |
| 18 | 16, 17 | syl 14 |
. . . . . . 7
      ♯    
          |
| 19 | 5, 18 | mpbid 147 |
. . . . . 6

         |
| 20 | | isof1o 5857 |
. . . . . 6
                  |
| 21 | | f1of 5507 |
. . . . . 6
        
          |
| 22 | 19, 20, 21 | 3syl 17 |
. . . . 5
           |
| 23 | | nnuz 9654 |
. . . . . . 7
     |
| 24 | 7, 23 | eleqtrdi 2289 |
. . . . . 6
       |
| 25 | | eluzfz2 10124 |
. . . . . 6
    
      |
| 26 | 24, 25 | syl 14 |
. . . . 5
       |
| 27 | 22, 26 | ffvelcdmd 5701 |
. . . 4
       |
| 28 | 4, 27 | sseldd 3185 |
. . 3
           |
| 29 | 4 | sselda 3184 |
. . . . . 6
 
       |
| 30 | 19, 20 | syl 14 |
. . . . . . . . 9
           |
| 31 | | f1ocnvfv2 5828 |
. . . . . . . . 9
         
            |
| 32 | 30, 31 | sylan 283 |
. . . . . . . 8
 
            |
| 33 | | f1ocnv 5520 |
. . . . . . . . . . . 12
        
           |
| 34 | | f1of 5507 |
. . . . . . . . . . . 12
                     |
| 35 | 30, 33, 34 | 3syl 17 |
. . . . . . . . . . 11
            |
| 36 | 35 | ffvelcdmda 5700 |
. . . . . . . . . 10
 
            |
| 37 | | elfzle2 10120 |
. . . . . . . . . 10
                 |
| 38 | 36, 37 | syl 14 |
. . . . . . . . 9
 
        |
| 39 | 19 | adantr 276 |
. . . . . . . . . 10
 
          |
| 40 | | fzssuz 10157 |
. . . . . . . . . . . . 13
         |
| 41 | | uzssz 9638 |
. . . . . . . . . . . . . 14
     |
| 42 | | zssre 9350 |
. . . . . . . . . . . . . 14
 |
| 43 | 41, 42 | sstri 3193 |
. . . . . . . . . . . . 13
     |
| 44 | 40, 43 | sstri 3193 |
. . . . . . . . . . . 12
     |
| 45 | | ressxr 8087 |
. . . . . . . . . . . 12
 |
| 46 | 44, 45 | sstri 3193 |
. . . . . . . . . . 11
     |
| 47 | 46 | a1i 9 |
. . . . . . . . . 10
 
       |
| 48 | | uzssz 9638 |
. . . . . . . . . . . . . 14
     |
| 49 | 48, 42 | sstri 3193 |
. . . . . . . . . . . . 13
     |
| 50 | 49, 45 | sstri 3193 |
. . . . . . . . . . . 12
     |
| 51 | 4, 50 | sstrdi 3196 |
. . . . . . . . . . 11

  |
| 52 | 51 | adantr 276 |
. . . . . . . . . 10
 
   |
| 53 | 26 | adantr 276 |
. . . . . . . . . 10
 
       |
| 54 | | leisorel 10946 |
. . . . . . . . . 10
 
                                           
       |
| 55 | 39, 47, 52, 36, 53, 54 | syl122anc 1258 |
. . . . . . . . 9
 
               
       |
| 56 | 38, 55 | mpbid 147 |
. . . . . . . 8
 
         
      |
| 57 | 32, 56 | eqbrtrrd 4058 |
. . . . . . 7
 
       |
| 58 | 4, 48 | sstrdi 3196 |
. . . . . . . . 9

  |
| 59 | 58 | sselda 3184 |
. . . . . . . 8
 
   |
| 60 | 48, 28 | sselid 3182 |
. . . . . . . . 9
       |
| 61 | 60 | adantr 276 |
. . . . . . . 8
 
       |
| 62 | | eluz 9631 |
. . . . . . . 8
               
       |
| 63 | 59, 61, 62 | syl2anc 411 |
. . . . . . 7
 
         
       |
| 64 | 57, 63 | mpbird 167 |
. . . . . 6
 
           |
| 65 | | elfzuzb 10111 |
. . . . . 6
                         |
| 66 | 29, 64, 65 | sylanbrc 417 |
. . . . 5
 
           |
| 67 | 66 | ex 115 |
. . . 4
             |
| 68 | 67 | ssrdv 3190 |
. . 3

          |
| 69 | 1, 2, 3, 28, 68 | fproddccvg 11754 |
. 2
                |
| 70 | | mullid 8041 |
. . . . 5
     |
| 71 | 70 | adantl 277 |
. . . 4
 

    |
| 72 | | mulrid 8040 |
. . . . 5
     |
| 73 | 72 | adantl 277 |
. . . 4
 

    |
| 74 | | mulcl 8023 |
. . . . 5
 
     |
| 75 | 74 | adantl 277 |
. . . 4
 
       |
| 76 | | 1cnd 8059 |
. . . 4
   |
| 77 | 26, 16 | eleqtrrd 2276 |
. . . 4
    ♯     |
| 78 | | eluzelz 9627 |
. . . . . 6
    
  |
| 79 | | simpr 110 |
. . . . . . . 8
       
   |
| 80 | 2 | ralrimiva 2570 |
. . . . . . . . 9
 
  |
| 81 | 80 | ad2antrr 488 |
. . . . . . . 8
       
 
  |
| 82 | | nfcsb1v 3117 |
. . . . . . . . . 10
  
 ![]_ ]_](_urbrack.gif)  |
| 83 | 82 | nfel1 2350 |
. . . . . . . . 9
    ![]_ ]_](_urbrack.gif)
 |
| 84 | | csbeq1a 3093 |
. . . . . . . . . 10
   ![]_ ]_](_urbrack.gif)   |
| 85 | 84 | eleq1d 2265 |
. . . . . . . . 9
 
  ![]_ ]_](_urbrack.gif)    |
| 86 | 83, 85 | rspc 2862 |
. . . . . . . 8
  
  ![]_ ]_](_urbrack.gif)
   |
| 87 | 79, 81, 86 | sylc 62 |
. . . . . . 7
       
   ![]_ ]_](_urbrack.gif)   |
| 88 | | 1cnd 8059 |
. . . . . . 7
       
   |
| 89 | | eleq1 2259 |
. . . . . . . . 9
 
   |
| 90 | 89 | dcbid 839 |
. . . . . . . 8
 DECID
DECID
   |
| 91 | 3 | ralrimiva 2570 |
. . . . . . . . 9
      DECID   |
| 92 | 91 | adantr 276 |
. . . . . . . 8
 
    
     DECID   |
| 93 | | simpr 110 |
. . . . . . . 8
 
    
      |
| 94 | 90, 92, 93 | rspcdva 2873 |
. . . . . . 7
 
    
DECID
  |
| 95 | 87, 88, 94 | ifcldadc 3591 |
. . . . . 6
 
    
   
 ![]_ ]_](_urbrack.gif)     |
| 96 | | nfcv 2339 |
. . . . . . 7
   |
| 97 | | nfv 1542 |
. . . . . . . 8
  |
| 98 | | nfcv 2339 |
. . . . . . . 8
   |
| 99 | 97, 82, 98 | nfif 3590 |
. . . . . . 7
       ![]_ ]_](_urbrack.gif)    |
| 100 | 89, 84 | ifbieq1d 3584 |
. . . . . . 7
           ![]_ ]_](_urbrack.gif)     |
| 101 | 96, 99, 100, 1 | fvmptf 5657 |
. . . . . 6
       ![]_ ]_](_urbrack.gif)           
 ![]_ ]_](_urbrack.gif)     |
| 102 | 78, 95, 101 | syl2an2 594 |
. . . . 5
 
    
         ![]_ ]_](_urbrack.gif)     |
| 103 | 102, 95 | eqeltrd 2273 |
. . . 4
 
    
      |
| 104 | | prodmodclem2.4 |
. . . . . 6
   ♯         ![]_ ]_](_urbrack.gif)     |
| 105 | | breq1 4037 |
. . . . . . 7
 
♯ 
♯     |
| 106 | | fveq2 5561 |
. . . . . . . 8
           |
| 107 | 106 | csbeq1d 3091 |
. . . . . . 7
       ![]_ ]_](_urbrack.gif)       ![]_ ]_](_urbrack.gif)   |
| 108 | 105, 107 | ifbieq1d 3584 |
. . . . . 6
   ♯         ![]_ ]_](_urbrack.gif)     ♯         ![]_ ]_](_urbrack.gif)     |
| 109 | | elnnuz 9655 |
. . . . . . . 8

      |
| 110 | 109 | biimpri 133 |
. . . . . . 7
    
  |
| 111 | 110 | adantl 277 |
. . . . . 6
 
    
  |
| 112 | 22 | ad2antrr 488 |
. . . . . . . . 9
       
♯             |
| 113 | | 1zzd 9370 |
. . . . . . . . . . 11
       
♯     |
| 114 | 8 | ad2antrr 488 |
. . . . . . . . . . 11
       
♯  
  |
| 115 | | eluzelz 9627 |
. . . . . . . . . . . 12
    
  |
| 116 | 115 | ad2antlr 489 |
. . . . . . . . . . 11
       
♯  
  |
| 117 | 113, 114,
116 | 3jca 1179 |
. . . . . . . . . 10
       
♯   
   |
| 118 | | eluzle 9630 |
. . . . . . . . . . . 12
    
  |
| 119 | 118 | ad2antlr 489 |
. . . . . . . . . . 11
       
♯  
  |
| 120 | | simpr 110 |
. . . . . . . . . . . 12
       
♯   ♯    |
| 121 | 15 | ad2antrr 488 |
. . . . . . . . . . . 12
       
♯   ♯    |
| 122 | 120, 121 | breqtrd 4060 |
. . . . . . . . . . 11
       
♯     |
| 123 | 119, 122 | jca 306 |
. . . . . . . . . 10
       
♯   
   |
| 124 | | elfz2 10107 |
. . . . . . . . . 10
    
 
 
    |
| 125 | 117, 123,
124 | sylanbrc 417 |
. . . . . . . . 9
       
♯  
      |
| 126 | 112, 125 | ffvelcdmd 5701 |
. . . . . . . 8
       
♯         |
| 127 | 80 | ad2antrr 488 |
. . . . . . . 8
       
♯   
  |
| 128 | | nfcsb1v 3117 |
. . . . . . . . . 10
        ![]_ ]_](_urbrack.gif)  |
| 129 | 128 | nfel1 2350 |
. . . . . . . . 9
        ![]_ ]_](_urbrack.gif)
 |
| 130 | | csbeq1a 3093 |
. . . . . . . . . 10
           ![]_ ]_](_urbrack.gif)   |
| 131 | 130 | eleq1d 2265 |
. . . . . . . . 9
     
      ![]_ ]_](_urbrack.gif)    |
| 132 | 129, 131 | rspc 2862 |
. . . . . . . 8
      
      ![]_ ]_](_urbrack.gif)
   |
| 133 | 126, 127,
132 | sylc 62 |
. . . . . . 7
       
♯         ![]_ ]_](_urbrack.gif)
  |
| 134 | | 1cnd 8059 |
. . . . . . 7
       
♯  
  |
| 135 | 111 | nnzd 9464 |
. . . . . . . 8
 
    
  |
| 136 | 15, 8 | eqeltrd 2273 |
. . . . . . . . 9
 ♯    |
| 137 | 136 | adantr 276 |
. . . . . . . 8
 
    
♯    |
| 138 | | zdcle 9419 |
. . . . . . . 8
  ♯  
DECID
♯    |
| 139 | 135, 137,
138 | syl2anc 411 |
. . . . . . 7
 
    
DECID
♯    |
| 140 | 133, 134,
139 | ifcldadc 3591 |
. . . . . 6
 
    
 
♯         ![]_ ]_](_urbrack.gif)     |
| 141 | 104, 108,
111, 140 | fvmptd3 5658 |
. . . . 5
 
    
      ♯         ![]_ ]_](_urbrack.gif)     |
| 142 | 141, 140 | eqeltrd 2273 |
. . . 4
 
    
      |
| 143 | | eldifi 3286 |
. . . . . . 7
        ♯           ♯      |
| 144 | | elfzelz 10117 |
. . . . . . 7
       ♯   
  |
| 145 | 143, 144 | syl 14 |
. . . . . 6
        ♯       |
| 146 | | eldifn 3287 |
. . . . . . . . 9
        ♯    
  |
| 147 | 146 | iffalsed 3572 |
. . . . . . . 8
        ♯          ![]_ ]_](_urbrack.gif)     |
| 148 | | ax-1cn 7989 |
. . . . . . . 8
 |
| 149 | 147, 148 | eqeltrdi 2287 |
. . . . . . 7
        ♯          ![]_ ]_](_urbrack.gif)     |
| 150 | 149 | adantl 277 |
. . . . . 6
 
       ♯           ![]_ ]_](_urbrack.gif)     |
| 151 | 145, 150,
101 | syl2an2 594 |
. . . . 5
 
       ♯             
 ![]_ ]_](_urbrack.gif)     |
| 152 | 147 | adantl 277 |
. . . . 5
 
       ♯           ![]_ ]_](_urbrack.gif)     |
| 153 | 151, 152 | eqtrd 2229 |
. . . 4
 
       ♯            |
| 154 | | elfzle2 10120 |
. . . . . . 7
    ♯  
♯    |
| 155 | 154 | adantl 277 |
. . . . . 6
 
   ♯    ♯    |
| 156 | 155 | iftrued 3569 |
. . . . 5
 
   ♯      ♯         ![]_ ]_](_urbrack.gif)         ![]_ ]_](_urbrack.gif)   |
| 157 | | breq1 4037 |
. . . . . . 7
 
♯ 
♯     |
| 158 | | fveq2 5561 |
. . . . . . . 8
           |
| 159 | 158 | csbeq1d 3091 |
. . . . . . 7
       ![]_ ]_](_urbrack.gif)       ![]_ ]_](_urbrack.gif)   |
| 160 | 157, 159 | ifbieq1d 3584 |
. . . . . 6
   ♯         ![]_ ]_](_urbrack.gif)     ♯         ![]_ ]_](_urbrack.gif)     |
| 161 | | elfznn 10146 |
. . . . . . 7
    ♯  
  |
| 162 | 161 | adantl 277 |
. . . . . 6
 
   ♯      |
| 163 | 22 | adantr 276 |
. . . . . . . . 9
 
   ♯              |
| 164 | | simpr 110 |
. . . . . . . . . 10
 
   ♯       ♯     |
| 165 | 15 | adantr 276 |
. . . . . . . . . . 11
 
   ♯    ♯    |
| 166 | 165 | oveq2d 5941 |
. . . . . . . . . 10
 
   ♯       ♯         |
| 167 | 164, 166 | eleqtrd 2275 |
. . . . . . . . 9
 
   ♯          |
| 168 | 163, 167 | ffvelcdmd 5701 |
. . . . . . . 8
 
   ♯          |
| 169 | 80 | adantr 276 |
. . . . . . . 8
 
   ♯    
  |
| 170 | | nfcsb1v 3117 |
. . . . . . . . . 10
        ![]_ ]_](_urbrack.gif)  |
| 171 | 170 | nfel1 2350 |
. . . . . . . . 9
        ![]_ ]_](_urbrack.gif)
 |
| 172 | | csbeq1a 3093 |
. . . . . . . . . 10
           ![]_ ]_](_urbrack.gif)   |
| 173 | 172 | eleq1d 2265 |
. . . . . . . . 9
     
      ![]_ ]_](_urbrack.gif)    |
| 174 | 171, 173 | rspc 2862 |
. . . . . . . 8
      
      ![]_ ]_](_urbrack.gif)
   |
| 175 | 168, 169,
174 | sylc 62 |
. . . . . . 7
 
   ♯          ![]_ ]_](_urbrack.gif)
  |
| 176 | 156, 175 | eqeltrd 2273 |
. . . . . 6
 
   ♯      ♯         ![]_ ]_](_urbrack.gif)     |
| 177 | 104, 160,
162, 176 | fvmptd3 5658 |
. . . . 5
 
   ♯          ♯         ![]_ ]_](_urbrack.gif)     |
| 178 | 4 | adantr 276 |
. . . . . . . . 9
 
   ♯          |
| 179 | 178, 48 | sstrdi 3196 |
. . . . . . . 8
 
   ♯      |
| 180 | 179, 168 | sseldd 3185 |
. . . . . . 7
 
   ♯          |
| 181 | 168 | iftrued 3569 |
. . . . . . . 8
 
   ♯                 ![]_ ]_](_urbrack.gif)         ![]_ ]_](_urbrack.gif)   |
| 182 | 181, 175 | eqeltrd 2273 |
. . . . . . 7
 
   ♯                 ![]_ ]_](_urbrack.gif)     |
| 183 | | nfcv 2339 |
. . . . . . . 8
       |
| 184 | | nfv 1542 |
. . . . . . . . 9
       |
| 185 | 184, 170,
98 | nfif 3590 |
. . . . . . . 8
               ![]_ ]_](_urbrack.gif)    |
| 186 | | eleq1 2259 |
. . . . . . . . 9
     
       |
| 187 | 186, 172 | ifbieq1d 3584 |
. . . . . . . 8
                       ![]_ ]_](_urbrack.gif)     |
| 188 | 183, 185,
187, 1 | fvmptf 5657 |
. . . . . . 7
                   ![]_ ]_](_urbrack.gif)                         ![]_ ]_](_urbrack.gif) 
   |
| 189 | 180, 182,
188 | syl2anc 411 |
. . . . . 6
 
   ♯                         ![]_ ]_](_urbrack.gif) 
   |
| 190 | 189, 181 | eqtrd 2229 |
. . . . 5
 
   ♯                  ![]_ ]_](_urbrack.gif)   |
| 191 | 156, 177,
190 | 3eqtr4d 2239 |
. . . 4
 
   ♯                  |
| 192 | 71, 73, 75, 76, 5, 77, 4, 103, 142, 153, 191 | seq3coll 10951 |
. . 3
                   |
| 193 | | prodmodc.3 |
. . . 4
   ♯         ![]_ ]_](_urbrack.gif) 
   |
| 194 | 7, 7 | jca 306 |
. . . 4
     |
| 195 | 1, 2, 193, 104, 194, 10, 30 | prodmodclem3 11757 |
. . 3
               |
| 196 | 192, 195 | eqtr4d 2232 |
. 2
                   |
| 197 | 69, 196 | breqtrd 4060 |
1
            |