Definition Matrix_general_type (A : Setoid) (n m : Nat) :=
  MAP2 (fin n) (fin m) A.Definition matrix (F : field) := Matrix_general_type F.Definition matrix_addition (F : field) (m n : Nat) :
  MAP2 (matrix F m n) (matrix F m n) (matrix F m n).Definition matrix_scmult_fun (F : field) (m n : Nat) 
  (c : F) (M : matrix F m n) : matrix F m n.Definition matrix_scmult (F : field) (m n : Nat) :
  MAP2 F (matrix F m n) (matrix F m n).Definition transpose :
  forall (F : field) (m n : Nat), matrix F m n -> matrix F n m.Definition transpose_map :
  forall (F : field) (m n : Nat), MAP (matrix F m n) (matrix F n m).Definition zero_matrix : forall (F : field) (n m : Nat), matrix F n m.Definition identity_matrix : forall (F : field) (n : Nat), matrix F n n.

Lemma id_is_square : forall (F : field) (n : Nat), is_square (identity_matrix F n).