reserve i,j,n for Nat,
  K for Field,
  a for Element of K,
  M,M1,M2,M3,M4 for Matrix of n,K;
reserve A for Matrix of K;

theorem
  M1 is invertible & M2 is invertible & M1 commutes_with M2 implies 
  M1*M2 is invertible & (M1*M2)~ = (M1~)*(M2~)
proof
  assume that
A1: M1 is invertible and
A2: M2 is invertible and
A3: M1 commutes_with M2;
A4: M2~ is_reverse_of M2 by A2,Def4;
A5: width (M1~*M2~)=n by MATRIX_0:24;
A6: width (M2~)=n by MATRIX_0:24;
A7: len M2=n by MATRIX_0:24;
A8: width M1=n by MATRIX_0:24;
A9: width M2=n & len M1=n by MATRIX_0:24;
A10: M1~ is_reverse_of M1 by A1,Def4;
A11: width (M1~)=n & len (M2~)=n by MATRIX_0:24;
A12: len (M1~)=n by MATRIX_0:24;
  width (M1*M2)=n by MATRIX_0:24;
  then
A13: (M1*M2)*(M1~*M2~)=((M1*M2)*M1~)*M2~ by A11,A12,MATRIX_3:33
    .=((M2*M1)*M1~)*M2~ by A3
    .=(M2*(M1*M1~))*M2~ by A8,A9,A12,MATRIX_3:33
    .=(M2*(1.(K,n)))*M2~ by A10
    .=M2*M2~ by MATRIX_3:19
    .=1.(K,n) by A4;
  (M1~)*(M2~)*(M1*M2)=(M1~)*(M2~)*(M2*M1) by A3
    .=(M1~)*(M2~)*M2*M1 by A7,A9,A5,MATRIX_3:33
    .=((M1~)*((M2~)*M2))*M1 by A7,A11,A6,MATRIX_3:33
    .=((M1~)*(1.(K,n)))*M1 by A4
    .=(M1~)*M1 by MATRIX_3:19
    .=1.(K,n) by A10;
  then
A14: (M1~)*(M2~) is_reverse_of M1*M2 by A13;
  then M1*M2 is invertible;
  hence thesis by A14,Def4;
end;
