reserve i,j,m,n,k for Nat,
  x,y for set,
  K for Field,
  a,a1,a2 for Element of K,
  D for non empty set,
  d,d1,d2 for Element of D,
  M,M1,M2 for (Matrix of D),
  A,A1,A2,B1,B2 for (Matrix of K),
  f,g for FinSequence of NAT;
reserve F,F1,F2 for FinSequence_of_Matrix of D,
  G,G9,G1,G2 for FinSequence_of_Matrix of K;

theorem
  for M1,M2,N1,N2 be Matrix of D st len M1=len N1 & width M1=width N1 &
  len M2=len N2 & width M2=width N2 & block_diagonal(<*M1,M2*>,d1) =
  block_diagonal(<*N1,N2*>,d2) holds M1 = N1 & M2= N2
proof
  let M1,M2,N1,N2 be Matrix of D such that
A1: len M1=len N1 and
A2: width M1=width N1 and
A3: len M2=len N2 and
A4: width M2=width N2 and
A5: block_diagonal(<*M1,M2*>,d1) = block_diagonal(<*N1,N2*>,d2);
  set G1=<*N1*>;
  set F1=<*M1*>;
  reconsider W1=width M1 as Element of NAT by ORDINAL1:def 12;
A6: Sum Width F1 = Sum <*W1*> by Th19
    .= Sum Width G1 by A2,Th19;
  set G2=<*N2*>;
  set F2=<*M2*>;
  thus M1 = Segm(block_diagonal(F1^F2,d1),Seg len M1,Seg width M1) by Th32
    .= Segm(block_diagonal(G1^G2,d2),Seg len N1,Seg width N1) by A1,A2,A5
    .= N1 by Th32;
A7: Sum Len F1 = Sum <*len M1*> by Th15
    .= Sum Len G1 by A1,Th15;
  thus M2 = Segm(block_diagonal(F1^F2,d1), Seg (len M2+Sum Len F1)\Seg Sum Len
  F1, Seg (width M2+Sum Width F1)\Seg Sum Width F1) by Th33
    .= N2 by A3,A4,A5,A7,A6,Th33;
end;
