Section LtmxIdentities.
Variables (m1 m2 n : nat) (A : 'M_(m1, n)) (B : 'M_(m2, n)).
Hint Resolve rank_leq_row rank_leq_col row_ebase_unit col_ebase_unit : core.
Arguments mulmx_max_rank [r m n].
Arguments submxP {m1 m2 n A B}.
Arguments row_subP {m1 m2 n A B}.
Arguments rV_subP {m1 m2 n A B}.
Arguments row_fullP {m n A}.
(* A variant of row_free_inj that exposes mulmxr, an alias for mulmx^~ *)
(* but which is canonically additive *)
Definition row_free_injr m n p A : row_free A -> injective (mulmxr A) :=
@row_free_inj m n p A.
Arguments eqmxP {m1 m2 n A B}.
Arguments genmxP {m1 m2 n A B}.
Hint Resolve row_base_free col_base_full : core.
Let eqmx_sum_nop m n (A : 'M_(m, n)) : (addsmx_nop A :=: A)%MS.

Lemma eqmx_rowsub (m n p q : nat) (h : 'I_n -> 'I_p) f g (A : 'M_(m, q)) :
injective h -> p <= n -> f =1 g \o h -> (rowsub f A :=: rowsub g A)%MS.