reserve i,n for Nat,
  K for Field,
  M1,M2,M3,M4 for Matrix of n,K;

theorem
  M1 is Idempotent & M2 is Idempotent & M1 commutes_with M2 implies M1@*
  M2@ is Idempotent
proof
  assume that
A1: M1 is Idempotent and
A2: M2 is Idempotent and
A3: M1 commutes_with M2;
  set M3=M1@*M2@;
  per cases by NAT_1:3;
  suppose
A4: n>0;
A5: M1*M1=M1 by A1;
A6: len M1=n by MATRIX_0:24;
A7: len (M1@)=n by MATRIX_0:24;
A8: width (M2@)=n by MATRIX_0:24;
A9: width M2=n by MATRIX_0:24;
A10: len M2=n by MATRIX_0:24;
A11: width M1=n by MATRIX_0:24;
A12: width (M1@)=n & len (M2@)=n by MATRIX_0:24;
    width M3=n by MATRIX_0:24;
    then M3*M3=((M1@*M2@)*M1@)*M2@ by A7,A12,MATRIX_3:33
      .=(M1@*(M2@*M1@))*M2@ by A7,A12,A8,MATRIX_3:33
      .=(M1@*((M1*M2)@))*M2@ by A4,A11,A10,A9,MATRIX_3:22
      .=(M1@*((M2*M1)@))*M2@ by A3,MATRIX_6:def 1
      .=(M1@*(M1@*M2@))*M2@ by A4,A6,A11,A9,MATRIX_3:22
      .=((M1@*M1@)*M2@)*M2@ by A7,A12,MATRIX_3:33
      .=(((M1*M1)@)*M2@)*M2@ by A4,A6,A11,MATRIX_3:22
      .=(M1@)*(M2@*M2@) by A5,A12,A8,MATRIX_3:33
      .=(M1@)*((M2*M2)@) by A4,A10,A9,MATRIX_3:22
      .=M1@*M2@ by A2;
    hence thesis;
  end;
  suppose
    n=0;
    then (M1@*M2@)*(M1@*M2@) = M1@*M2@ by MATRIX_0:45;
    hence thesis;
  end;
end;
