| Step | Hyp | Ref | Expression | 
						
							| 1 |  | ccatmulgnn0dir.a | ⊢ 𝐴  =  ( ( 0 ..^ 𝑀 )  ×  { 𝐾 } ) | 
						
							| 2 |  | ccatmulgnn0dir.b | ⊢ 𝐵  =  ( ( 0 ..^ 𝑁 )  ×  { 𝐾 } ) | 
						
							| 3 |  | ccatmulgnn0dir.c | ⊢ 𝐶  =  ( ( 0 ..^ ( 𝑀  +  𝑁 ) )  ×  { 𝐾 } ) | 
						
							| 4 |  | ccatmulgnn0dir.k | ⊢ ( 𝜑  →  𝐾  ∈  𝑆 ) | 
						
							| 5 |  | ccatmulgnn0dir.m | ⊢ ( 𝜑  →  𝑀  ∈  ℕ0 ) | 
						
							| 6 |  | ccatmulgnn0dir.n | ⊢ ( 𝜑  →  𝑁  ∈  ℕ0 ) | 
						
							| 7 | 1 | fveq2i | ⊢ ( ♯ ‘ 𝐴 )  =  ( ♯ ‘ ( ( 0 ..^ 𝑀 )  ×  { 𝐾 } ) ) | 
						
							| 8 |  | fzofi | ⊢ ( 0 ..^ 𝑀 )  ∈  Fin | 
						
							| 9 |  | snfi | ⊢ { 𝐾 }  ∈  Fin | 
						
							| 10 |  | hashxp | ⊢ ( ( ( 0 ..^ 𝑀 )  ∈  Fin  ∧  { 𝐾 }  ∈  Fin )  →  ( ♯ ‘ ( ( 0 ..^ 𝑀 )  ×  { 𝐾 } ) )  =  ( ( ♯ ‘ ( 0 ..^ 𝑀 ) )  ·  ( ♯ ‘ { 𝐾 } ) ) ) | 
						
							| 11 | 8 9 10 | mp2an | ⊢ ( ♯ ‘ ( ( 0 ..^ 𝑀 )  ×  { 𝐾 } ) )  =  ( ( ♯ ‘ ( 0 ..^ 𝑀 ) )  ·  ( ♯ ‘ { 𝐾 } ) ) | 
						
							| 12 | 7 11 | eqtri | ⊢ ( ♯ ‘ 𝐴 )  =  ( ( ♯ ‘ ( 0 ..^ 𝑀 ) )  ·  ( ♯ ‘ { 𝐾 } ) ) | 
						
							| 13 |  | hashfzo0 | ⊢ ( 𝑀  ∈  ℕ0  →  ( ♯ ‘ ( 0 ..^ 𝑀 ) )  =  𝑀 ) | 
						
							| 14 | 5 13 | syl | ⊢ ( 𝜑  →  ( ♯ ‘ ( 0 ..^ 𝑀 ) )  =  𝑀 ) | 
						
							| 15 |  | hashsng | ⊢ ( 𝐾  ∈  𝑆  →  ( ♯ ‘ { 𝐾 } )  =  1 ) | 
						
							| 16 | 4 15 | syl | ⊢ ( 𝜑  →  ( ♯ ‘ { 𝐾 } )  =  1 ) | 
						
							| 17 | 14 16 | oveq12d | ⊢ ( 𝜑  →  ( ( ♯ ‘ ( 0 ..^ 𝑀 ) )  ·  ( ♯ ‘ { 𝐾 } ) )  =  ( 𝑀  ·  1 ) ) | 
						
							| 18 | 12 17 | eqtrid | ⊢ ( 𝜑  →  ( ♯ ‘ 𝐴 )  =  ( 𝑀  ·  1 ) ) | 
						
							| 19 | 5 | nn0cnd | ⊢ ( 𝜑  →  𝑀  ∈  ℂ ) | 
						
							| 20 | 19 | mulridd | ⊢ ( 𝜑  →  ( 𝑀  ·  1 )  =  𝑀 ) | 
						
							| 21 | 18 20 | eqtrd | ⊢ ( 𝜑  →  ( ♯ ‘ 𝐴 )  =  𝑀 ) | 
						
							| 22 | 2 | fveq2i | ⊢ ( ♯ ‘ 𝐵 )  =  ( ♯ ‘ ( ( 0 ..^ 𝑁 )  ×  { 𝐾 } ) ) | 
						
							| 23 |  | fzofi | ⊢ ( 0 ..^ 𝑁 )  ∈  Fin | 
						
							| 24 |  | hashxp | ⊢ ( ( ( 0 ..^ 𝑁 )  ∈  Fin  ∧  { 𝐾 }  ∈  Fin )  →  ( ♯ ‘ ( ( 0 ..^ 𝑁 )  ×  { 𝐾 } ) )  =  ( ( ♯ ‘ ( 0 ..^ 𝑁 ) )  ·  ( ♯ ‘ { 𝐾 } ) ) ) | 
						
							| 25 | 23 9 24 | mp2an | ⊢ ( ♯ ‘ ( ( 0 ..^ 𝑁 )  ×  { 𝐾 } ) )  =  ( ( ♯ ‘ ( 0 ..^ 𝑁 ) )  ·  ( ♯ ‘ { 𝐾 } ) ) | 
						
							| 26 | 22 25 | eqtri | ⊢ ( ♯ ‘ 𝐵 )  =  ( ( ♯ ‘ ( 0 ..^ 𝑁 ) )  ·  ( ♯ ‘ { 𝐾 } ) ) | 
						
							| 27 |  | hashfzo0 | ⊢ ( 𝑁  ∈  ℕ0  →  ( ♯ ‘ ( 0 ..^ 𝑁 ) )  =  𝑁 ) | 
						
							| 28 | 6 27 | syl | ⊢ ( 𝜑  →  ( ♯ ‘ ( 0 ..^ 𝑁 ) )  =  𝑁 ) | 
						
							| 29 | 28 16 | oveq12d | ⊢ ( 𝜑  →  ( ( ♯ ‘ ( 0 ..^ 𝑁 ) )  ·  ( ♯ ‘ { 𝐾 } ) )  =  ( 𝑁  ·  1 ) ) | 
						
							| 30 | 26 29 | eqtrid | ⊢ ( 𝜑  →  ( ♯ ‘ 𝐵 )  =  ( 𝑁  ·  1 ) ) | 
						
							| 31 | 6 | nn0cnd | ⊢ ( 𝜑  →  𝑁  ∈  ℂ ) | 
						
							| 32 | 31 | mulridd | ⊢ ( 𝜑  →  ( 𝑁  ·  1 )  =  𝑁 ) | 
						
							| 33 | 30 32 | eqtrd | ⊢ ( 𝜑  →  ( ♯ ‘ 𝐵 )  =  𝑁 ) | 
						
							| 34 | 21 33 | oveq12d | ⊢ ( 𝜑  →  ( ( ♯ ‘ 𝐴 )  +  ( ♯ ‘ 𝐵 ) )  =  ( 𝑀  +  𝑁 ) ) | 
						
							| 35 | 34 | oveq2d | ⊢ ( 𝜑  →  ( 0 ..^ ( ( ♯ ‘ 𝐴 )  +  ( ♯ ‘ 𝐵 ) ) )  =  ( 0 ..^ ( 𝑀  +  𝑁 ) ) ) | 
						
							| 36 |  | simpll | ⊢ ( ( ( 𝜑  ∧  𝑖  ∈  ( 0 ..^ ( ( ♯ ‘ 𝐴 )  +  ( ♯ ‘ 𝐵 ) ) ) )  ∧  𝑖  ∈  ( 0 ..^ ( ♯ ‘ 𝐴 ) ) )  →  𝜑 ) | 
						
							| 37 |  | simpr | ⊢ ( ( ( 𝜑  ∧  𝑖  ∈  ( 0 ..^ ( ( ♯ ‘ 𝐴 )  +  ( ♯ ‘ 𝐵 ) ) ) )  ∧  𝑖  ∈  ( 0 ..^ ( ♯ ‘ 𝐴 ) ) )  →  𝑖  ∈  ( 0 ..^ ( ♯ ‘ 𝐴 ) ) ) | 
						
							| 38 | 21 | oveq2d | ⊢ ( 𝜑  →  ( 0 ..^ ( ♯ ‘ 𝐴 ) )  =  ( 0 ..^ 𝑀 ) ) | 
						
							| 39 | 36 38 | syl | ⊢ ( ( ( 𝜑  ∧  𝑖  ∈  ( 0 ..^ ( ( ♯ ‘ 𝐴 )  +  ( ♯ ‘ 𝐵 ) ) ) )  ∧  𝑖  ∈  ( 0 ..^ ( ♯ ‘ 𝐴 ) ) )  →  ( 0 ..^ ( ♯ ‘ 𝐴 ) )  =  ( 0 ..^ 𝑀 ) ) | 
						
							| 40 | 37 39 | eleqtrd | ⊢ ( ( ( 𝜑  ∧  𝑖  ∈  ( 0 ..^ ( ( ♯ ‘ 𝐴 )  +  ( ♯ ‘ 𝐵 ) ) ) )  ∧  𝑖  ∈  ( 0 ..^ ( ♯ ‘ 𝐴 ) ) )  →  𝑖  ∈  ( 0 ..^ 𝑀 ) ) | 
						
							| 41 |  | fconstg | ⊢ ( 𝐾  ∈  𝑆  →  ( ( 0 ..^ 𝑀 )  ×  { 𝐾 } ) : ( 0 ..^ 𝑀 ) ⟶ { 𝐾 } ) | 
						
							| 42 | 4 41 | syl | ⊢ ( 𝜑  →  ( ( 0 ..^ 𝑀 )  ×  { 𝐾 } ) : ( 0 ..^ 𝑀 ) ⟶ { 𝐾 } ) | 
						
							| 43 | 1 | a1i | ⊢ ( 𝜑  →  𝐴  =  ( ( 0 ..^ 𝑀 )  ×  { 𝐾 } ) ) | 
						
							| 44 | 43 | feq1d | ⊢ ( 𝜑  →  ( 𝐴 : ( 0 ..^ 𝑀 ) ⟶ { 𝐾 }  ↔  ( ( 0 ..^ 𝑀 )  ×  { 𝐾 } ) : ( 0 ..^ 𝑀 ) ⟶ { 𝐾 } ) ) | 
						
							| 45 | 42 44 | mpbird | ⊢ ( 𝜑  →  𝐴 : ( 0 ..^ 𝑀 ) ⟶ { 𝐾 } ) | 
						
							| 46 |  | fvconst | ⊢ ( ( 𝐴 : ( 0 ..^ 𝑀 ) ⟶ { 𝐾 }  ∧  𝑖  ∈  ( 0 ..^ 𝑀 ) )  →  ( 𝐴 ‘ 𝑖 )  =  𝐾 ) | 
						
							| 47 | 45 46 | sylan | ⊢ ( ( 𝜑  ∧  𝑖  ∈  ( 0 ..^ 𝑀 ) )  →  ( 𝐴 ‘ 𝑖 )  =  𝐾 ) | 
						
							| 48 | 36 40 47 | syl2anc | ⊢ ( ( ( 𝜑  ∧  𝑖  ∈  ( 0 ..^ ( ( ♯ ‘ 𝐴 )  +  ( ♯ ‘ 𝐵 ) ) ) )  ∧  𝑖  ∈  ( 0 ..^ ( ♯ ‘ 𝐴 ) ) )  →  ( 𝐴 ‘ 𝑖 )  =  𝐾 ) | 
						
							| 49 |  | simpll | ⊢ ( ( ( 𝜑  ∧  𝑖  ∈  ( 0 ..^ ( ( ♯ ‘ 𝐴 )  +  ( ♯ ‘ 𝐵 ) ) ) )  ∧  ¬  𝑖  ∈  ( 0 ..^ ( ♯ ‘ 𝐴 ) ) )  →  𝜑 ) | 
						
							| 50 |  | simplr | ⊢ ( ( ( 𝜑  ∧  𝑖  ∈  ( 0 ..^ ( ( ♯ ‘ 𝐴 )  +  ( ♯ ‘ 𝐵 ) ) ) )  ∧  ¬  𝑖  ∈  ( 0 ..^ ( ♯ ‘ 𝐴 ) ) )  →  𝑖  ∈  ( 0 ..^ ( ( ♯ ‘ 𝐴 )  +  ( ♯ ‘ 𝐵 ) ) ) ) | 
						
							| 51 |  | simpr | ⊢ ( ( ( 𝜑  ∧  𝑖  ∈  ( 0 ..^ ( ( ♯ ‘ 𝐴 )  +  ( ♯ ‘ 𝐵 ) ) ) )  ∧  ¬  𝑖  ∈  ( 0 ..^ ( ♯ ‘ 𝐴 ) ) )  →  ¬  𝑖  ∈  ( 0 ..^ ( ♯ ‘ 𝐴 ) ) ) | 
						
							| 52 | 21 5 | eqeltrd | ⊢ ( 𝜑  →  ( ♯ ‘ 𝐴 )  ∈  ℕ0 ) | 
						
							| 53 | 49 52 | syl | ⊢ ( ( ( 𝜑  ∧  𝑖  ∈  ( 0 ..^ ( ( ♯ ‘ 𝐴 )  +  ( ♯ ‘ 𝐵 ) ) ) )  ∧  ¬  𝑖  ∈  ( 0 ..^ ( ♯ ‘ 𝐴 ) ) )  →  ( ♯ ‘ 𝐴 )  ∈  ℕ0 ) | 
						
							| 54 | 53 | nn0zd | ⊢ ( ( ( 𝜑  ∧  𝑖  ∈  ( 0 ..^ ( ( ♯ ‘ 𝐴 )  +  ( ♯ ‘ 𝐵 ) ) ) )  ∧  ¬  𝑖  ∈  ( 0 ..^ ( ♯ ‘ 𝐴 ) ) )  →  ( ♯ ‘ 𝐴 )  ∈  ℤ ) | 
						
							| 55 | 33 6 | eqeltrd | ⊢ ( 𝜑  →  ( ♯ ‘ 𝐵 )  ∈  ℕ0 ) | 
						
							| 56 | 49 55 | syl | ⊢ ( ( ( 𝜑  ∧  𝑖  ∈  ( 0 ..^ ( ( ♯ ‘ 𝐴 )  +  ( ♯ ‘ 𝐵 ) ) ) )  ∧  ¬  𝑖  ∈  ( 0 ..^ ( ♯ ‘ 𝐴 ) ) )  →  ( ♯ ‘ 𝐵 )  ∈  ℕ0 ) | 
						
							| 57 | 56 | nn0zd | ⊢ ( ( ( 𝜑  ∧  𝑖  ∈  ( 0 ..^ ( ( ♯ ‘ 𝐴 )  +  ( ♯ ‘ 𝐵 ) ) ) )  ∧  ¬  𝑖  ∈  ( 0 ..^ ( ♯ ‘ 𝐴 ) ) )  →  ( ♯ ‘ 𝐵 )  ∈  ℤ ) | 
						
							| 58 |  | fzocatel | ⊢ ( ( ( 𝑖  ∈  ( 0 ..^ ( ( ♯ ‘ 𝐴 )  +  ( ♯ ‘ 𝐵 ) ) )  ∧  ¬  𝑖  ∈  ( 0 ..^ ( ♯ ‘ 𝐴 ) ) )  ∧  ( ( ♯ ‘ 𝐴 )  ∈  ℤ  ∧  ( ♯ ‘ 𝐵 )  ∈  ℤ ) )  →  ( 𝑖  −  ( ♯ ‘ 𝐴 ) )  ∈  ( 0 ..^ ( ♯ ‘ 𝐵 ) ) ) | 
						
							| 59 | 50 51 54 57 58 | syl22anc | ⊢ ( ( ( 𝜑  ∧  𝑖  ∈  ( 0 ..^ ( ( ♯ ‘ 𝐴 )  +  ( ♯ ‘ 𝐵 ) ) ) )  ∧  ¬  𝑖  ∈  ( 0 ..^ ( ♯ ‘ 𝐴 ) ) )  →  ( 𝑖  −  ( ♯ ‘ 𝐴 ) )  ∈  ( 0 ..^ ( ♯ ‘ 𝐵 ) ) ) | 
						
							| 60 | 33 | oveq2d | ⊢ ( 𝜑  →  ( 0 ..^ ( ♯ ‘ 𝐵 ) )  =  ( 0 ..^ 𝑁 ) ) | 
						
							| 61 | 49 60 | syl | ⊢ ( ( ( 𝜑  ∧  𝑖  ∈  ( 0 ..^ ( ( ♯ ‘ 𝐴 )  +  ( ♯ ‘ 𝐵 ) ) ) )  ∧  ¬  𝑖  ∈  ( 0 ..^ ( ♯ ‘ 𝐴 ) ) )  →  ( 0 ..^ ( ♯ ‘ 𝐵 ) )  =  ( 0 ..^ 𝑁 ) ) | 
						
							| 62 | 59 61 | eleqtrd | ⊢ ( ( ( 𝜑  ∧  𝑖  ∈  ( 0 ..^ ( ( ♯ ‘ 𝐴 )  +  ( ♯ ‘ 𝐵 ) ) ) )  ∧  ¬  𝑖  ∈  ( 0 ..^ ( ♯ ‘ 𝐴 ) ) )  →  ( 𝑖  −  ( ♯ ‘ 𝐴 ) )  ∈  ( 0 ..^ 𝑁 ) ) | 
						
							| 63 |  | fconstg | ⊢ ( 𝐾  ∈  𝑆  →  ( ( 0 ..^ 𝑁 )  ×  { 𝐾 } ) : ( 0 ..^ 𝑁 ) ⟶ { 𝐾 } ) | 
						
							| 64 | 4 63 | syl | ⊢ ( 𝜑  →  ( ( 0 ..^ 𝑁 )  ×  { 𝐾 } ) : ( 0 ..^ 𝑁 ) ⟶ { 𝐾 } ) | 
						
							| 65 | 2 | a1i | ⊢ ( 𝜑  →  𝐵  =  ( ( 0 ..^ 𝑁 )  ×  { 𝐾 } ) ) | 
						
							| 66 | 65 | feq1d | ⊢ ( 𝜑  →  ( 𝐵 : ( 0 ..^ 𝑁 ) ⟶ { 𝐾 }  ↔  ( ( 0 ..^ 𝑁 )  ×  { 𝐾 } ) : ( 0 ..^ 𝑁 ) ⟶ { 𝐾 } ) ) | 
						
							| 67 | 64 66 | mpbird | ⊢ ( 𝜑  →  𝐵 : ( 0 ..^ 𝑁 ) ⟶ { 𝐾 } ) | 
						
							| 68 |  | fvconst | ⊢ ( ( 𝐵 : ( 0 ..^ 𝑁 ) ⟶ { 𝐾 }  ∧  ( 𝑖  −  ( ♯ ‘ 𝐴 ) )  ∈  ( 0 ..^ 𝑁 ) )  →  ( 𝐵 ‘ ( 𝑖  −  ( ♯ ‘ 𝐴 ) ) )  =  𝐾 ) | 
						
							| 69 | 67 68 | sylan | ⊢ ( ( 𝜑  ∧  ( 𝑖  −  ( ♯ ‘ 𝐴 ) )  ∈  ( 0 ..^ 𝑁 ) )  →  ( 𝐵 ‘ ( 𝑖  −  ( ♯ ‘ 𝐴 ) ) )  =  𝐾 ) | 
						
							| 70 | 49 62 69 | syl2anc | ⊢ ( ( ( 𝜑  ∧  𝑖  ∈  ( 0 ..^ ( ( ♯ ‘ 𝐴 )  +  ( ♯ ‘ 𝐵 ) ) ) )  ∧  ¬  𝑖  ∈  ( 0 ..^ ( ♯ ‘ 𝐴 ) ) )  →  ( 𝐵 ‘ ( 𝑖  −  ( ♯ ‘ 𝐴 ) ) )  =  𝐾 ) | 
						
							| 71 | 48 70 | ifeqda | ⊢ ( ( 𝜑  ∧  𝑖  ∈  ( 0 ..^ ( ( ♯ ‘ 𝐴 )  +  ( ♯ ‘ 𝐵 ) ) ) )  →  if ( 𝑖  ∈  ( 0 ..^ ( ♯ ‘ 𝐴 ) ) ,  ( 𝐴 ‘ 𝑖 ) ,  ( 𝐵 ‘ ( 𝑖  −  ( ♯ ‘ 𝐴 ) ) ) )  =  𝐾 ) | 
						
							| 72 | 35 71 | mpteq12dva | ⊢ ( 𝜑  →  ( 𝑖  ∈  ( 0 ..^ ( ( ♯ ‘ 𝐴 )  +  ( ♯ ‘ 𝐵 ) ) )  ↦  if ( 𝑖  ∈  ( 0 ..^ ( ♯ ‘ 𝐴 ) ) ,  ( 𝐴 ‘ 𝑖 ) ,  ( 𝐵 ‘ ( 𝑖  −  ( ♯ ‘ 𝐴 ) ) ) ) )  =  ( 𝑖  ∈  ( 0 ..^ ( 𝑀  +  𝑁 ) )  ↦  𝐾 ) ) | 
						
							| 73 |  | ovex | ⊢ ( 0 ..^ 𝑀 )  ∈  V | 
						
							| 74 |  | snex | ⊢ { 𝐾 }  ∈  V | 
						
							| 75 | 73 74 | xpex | ⊢ ( ( 0 ..^ 𝑀 )  ×  { 𝐾 } )  ∈  V | 
						
							| 76 | 1 75 | eqeltri | ⊢ 𝐴  ∈  V | 
						
							| 77 |  | ovex | ⊢ ( 0 ..^ 𝑁 )  ∈  V | 
						
							| 78 | 77 74 | xpex | ⊢ ( ( 0 ..^ 𝑁 )  ×  { 𝐾 } )  ∈  V | 
						
							| 79 | 2 78 | eqeltri | ⊢ 𝐵  ∈  V | 
						
							| 80 |  | ccatfval | ⊢ ( ( 𝐴  ∈  V  ∧  𝐵  ∈  V )  →  ( 𝐴  ++  𝐵 )  =  ( 𝑖  ∈  ( 0 ..^ ( ( ♯ ‘ 𝐴 )  +  ( ♯ ‘ 𝐵 ) ) )  ↦  if ( 𝑖  ∈  ( 0 ..^ ( ♯ ‘ 𝐴 ) ) ,  ( 𝐴 ‘ 𝑖 ) ,  ( 𝐵 ‘ ( 𝑖  −  ( ♯ ‘ 𝐴 ) ) ) ) ) ) | 
						
							| 81 | 76 79 80 | mp2an | ⊢ ( 𝐴  ++  𝐵 )  =  ( 𝑖  ∈  ( 0 ..^ ( ( ♯ ‘ 𝐴 )  +  ( ♯ ‘ 𝐵 ) ) )  ↦  if ( 𝑖  ∈  ( 0 ..^ ( ♯ ‘ 𝐴 ) ) ,  ( 𝐴 ‘ 𝑖 ) ,  ( 𝐵 ‘ ( 𝑖  −  ( ♯ ‘ 𝐴 ) ) ) ) ) | 
						
							| 82 |  | fconstmpt | ⊢ ( ( 0 ..^ ( 𝑀  +  𝑁 ) )  ×  { 𝐾 } )  =  ( 𝑖  ∈  ( 0 ..^ ( 𝑀  +  𝑁 ) )  ↦  𝐾 ) | 
						
							| 83 | 3 82 | eqtri | ⊢ 𝐶  =  ( 𝑖  ∈  ( 0 ..^ ( 𝑀  +  𝑁 ) )  ↦  𝐾 ) | 
						
							| 84 | 72 81 83 | 3eqtr4g | ⊢ ( 𝜑  →  ( 𝐴  ++  𝐵 )  =  𝐶 ) |