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 add_block_mx m1 m2 n1 n2 (Aul : 'M_(m1, n1)) Aur Adl (Adr : 'M_(m2, n2)) Bul Bur Bdl Bdr : let A := block_mx Aul Aur Adl Adr in let B := block_mx Bul Bur Bdl Bdr in A + B = block_mx (Aul + Bul) (Aur + Bur) (Adl + Bdl) (Adr + Bdr).