reserve x,y,z for object,
  i,j,n,m for Nat,
  D for non empty set,
  s,t for FinSequence,
  a,a1,a2,b1,b2,d for Element of D,
  p, p1,p2,q,r for FinSequence of D;
reserve M,M1,M2 for Matrix of D;
reserve f for FinSequence of D;
reserve i,j,i1,j1 for Nat;
reserve k for Nat, G for Matrix of D;
reserve x,y,x1,x2,y1,y2 for object,
  i,j,k,l,n,m for Nat,
  D for non empty set,
  s,s2 for FinSequence,
  a,b,c,d for Element of D,
  q,r for FinSequence of D,
  a9,b9 for Element of D;

theorem
  (a,b)][(c,d)*(1,1)=a & (a,b)][(c,d)*(1,2)=b & (a,b)][(c,d)*(2,1)=c & (
  a,b)][(c,d)*(2,2)=d
proof
  set M=(a,b)][(c,d);
A1: M.1= <*a,b*> & M.2=<*c,d*>;
A2: <*a,b*>.1=a & <*a,b*>.2=b;
A3: [2,1] in Indices M & [2,2] in Indices M by Th48;
A4: <*c,d*>.1=c & <*c,d*>.2=d;
  [1,1] in Indices M & [1,2] in Indices M by Th48;
  hence thesis by A1,A2,A4,A3,Def5;
::   assume
:: A1: [i,j] in Indices M;
::   func M*(i,j) -> Element of D means
:: :Def5:
::   ex p being FinSequence of D st p = M.i & it = p.j;
end;
