reserve D for non empty set,
  i,j,k for Nat,
  n,m for Nat,
  r for Real,
  e for real-valued FinSequence;

theorem Th39:
  for M,M1,M2 being Matrix of REAL st width M1 = len M2 holds M =
  M1*M2 iff len M = len M1 & width M = width M2 & for i,j st [i,j] in Indices M
  holds M*(i,j) = Line(M1,i) "*" Col(M2,j)
proof
  let M,M1,M2 be Matrix of REAL such that
A1: width M1 = len M2;
  set MM = MXR2MXF M;
  set M4 = MXR2MXF M2;
  set M3 = MXR2MXF M1;
A2: M3 = M1 by MATRIXR1:def 1;
A3: M4 = M2 by MATRIXR1:def 1;
  MXF2MXR(M3 * M4) = M1 * M2 by MATRIXR1:def 6;
  then
A4: M3 * M4 = M1 * M2 by MATRIXR1:def 2;
  hereby
    assume
A5: M = M1 * M2;
    hence
A6: len M = len M1 by A1,A2,A3,A4,MATRIX_3:def 4;
    thus
A7: width M = width M2 by A1,A2,A3,A4,A5,MATRIX_3:def 4;
    thus for i,j st [i,j] in Indices M holds M*(i,j) = Line(M1,i) "*" Col(M2,j
    )
    proof
      let i,j such that
A8:   [i,j] in Indices M;
      j in Seg width M2 by A7,A8,Th12;
      then
A9:   Col(M4,j) = Col(M2,j) by A3,Th17;
      i in Seg len M1 by A6,A8,Th12;
      then i in dom M1 by FINSEQ_1:def 3;
      then
A10:  Line(M3,i) = Line(M1,i) by A2,Th16;
A11:  len(Line(M1,i)) = width M1 by MATRIX_0:def 7
        .= len(Col(M2,j)) by A1,MATRIX_0:def 8;
      M = MXF2MXR (M3 * M4) by A5,MATRIXR1:def 6;
      then [i,j] in Indices (M3 * M4) & M*(i,j) = (M3 * M4)*(i,j) by A8,
MATRIXR1:23,def 2;
      hence M*(i,j) = Line(M3,i) "*" Col(M4,j) by A1,A2,A3,MATRIX_3:def 4
        .= Line(M1,i) "*" Col(M2,j) by A10,A9,A11,Th38;
    end;
  end;
  assume that
A12: len M = len M1 and
A13: width M = width M2 and
A14: for i,j st [i,j] in Indices M holds M*(i,j) = Line(M1,i) "*" Col(M2 ,j);
A15: width MM = width M by MATRIXR1:def 1
    .= width M4 by A13,MATRIXR1:def 1;
A16: len MM = len M by MATRIXR1:def 1
    .= len M3 by A12,MATRIXR1:def 1;
  for i,j be Nat st [i,j] in Indices MM holds MM*(i,j)= Line(M3,i) "*"
  Col(M4,j)
  proof
    let i,j be Nat such that
A17: [i,j] in Indices MM;
    j in Seg width M4 by A15,A17,Th12;
    then
A18: Col(M4,j) = Col(M2,j) by Th17,MATRIXR1:def 1;
    i in Seg len M3 by A16,A17,Th12;
    then i in dom M3 by FINSEQ_1:def 3;
    then
A19: Line(M3,i) = Line(M1,i) by Th16,MATRIXR1:def 1;
A20: len(Line(M1,i)) = width M1 by MATRIX_0:def 7
      .= len(Col(M2,j)) by A1,MATRIX_0:def 8;
    [i,j] in Indices M & MM*(i,j)= M*(i,j) by A17,MATRIXR1:23,def 1;
    hence MM*(i,j)= Line(M1,i) "*" Col(M2,j) by A14
      .= Line(M3,i) "*" Col(M4,j) by A19,A18,A20,Th38;
  end;
  then MM = M & MM = M3 * M4 by A1,A2,A3,A16,A15,MATRIXR1:def 1,MATRIX_3:def 4;
  then M = MXF2MXR(M3 * M4) by MATRIXR1:def 2;
  hence thesis by MATRIXR1:def 6;
end;
