proposition: Lemma dvd_col_mxP k m0 m1 m2 (M : 'M[R]_(m0,m2)) (N : 'M[R]_(m1,m2)) (X : 'M_(k, m2)) : reflect (exists Y, M %| X - Y *m N) (col_mx M N %| X).
proof: Proof. apply: (iffP (dvdmxP _ _)) => [[Y ->]|[Y /dvdmxP [Z HZ]]]; last first. by exists (row_mx Z Y); rewrite mul_row_col -HZ addrNK. exists (rsubmx Y). by rewrite -[Y as Y' in Y' *m _]hsubmxK mul_row_col addrK dvdmxMl. Qed.
imports: HB(structures) mathcomp(ssreflect ssrfun ssrbool eqtype ssrnat div seq path) mathcomp(ssralg fintype perm choice matrix bigop zmodp mxalgebra poly) ssrcomplements dvdring stronglydiscrete