Canonical swizzle_mx_additive k := Additive (swizzle_mx_is_additive k).Canonical trmx_additive m n := SwizzleAdd (@trmx V m n).Canonical row_additive m n i := SwizzleAdd (@row V m n i).Canonical col_additive m n j := SwizzleAdd (@col V m n j).Canonical row'_additive m n i := SwizzleAdd (@row' V m n i).Canonical col'_additive m n j := SwizzleAdd (@col' V m n j).Canonical row_perm_additive m n s := SwizzleAdd (@row_perm V m n s).Canonical col_perm_additive m n s := SwizzleAdd (@col_perm V m n s).Canonical xrow_additive m n i1 i2 := SwizzleAdd (@xrow V m n i1 i2).Canonical xcol_additive m n j1 j2 := SwizzleAdd (@xcol V m n j1 j2).Canonical lsubmx_additive m n1 n2 := SwizzleAdd (@lsubmx V m n1 n2).Canonical rsubmx_additive m n1 n2 := SwizzleAdd (@rsubmx V m n1 n2).Canonical usubmx_additive m1 m2 n := SwizzleAdd (@usubmx V m1 m2 n).Canonical dsubmx_additive m1 m2 n := SwizzleAdd (@dsubmx V m1 m2 n).Canonical vec_mx_additive m n := SwizzleAdd (@vec_mx V m n).Canonical mxvec_additive m n :=
  Additive (can2_additive (@vec_mxK V m n) mxvecK).

Lemma block_mx0 m1 m2 n1 n2 : block_mx 0 0 0 0 = 0 :> 'M_(m1 + m2, n1 + n2).