reserve x,x1,x2,y,y9,y1,y2,z,z1,z2 for object,P,X,X1,X2,Y,Y1,Y2,V,Z for set;

theorem
  for f,g being Function st rng f /\ dom g c= Y holds <:g,Y,Z:>*<:f,X,Y
  :> = <:g*f,X,Z:>
proof
  let f,g be Function such that
A1: rng f /\ dom g c= Y;
A2: dom <:g*f,X,Z:> c= dom (<:g,Y,Z:>*<:f,X,Y:>)
  proof
    let x be object;
    assume
A3: x in dom <:g*f,X,Z:>;
    then
A4: x in dom (g*f) by Th24;
    then
A5: f.x in dom g by FUNCT_1:11;
A6: x in dom f by A4,FUNCT_1:11;
    then f.x in rng f by FUNCT_1:def 3;
    then
A7: f.x in rng f /\ dom g by A5,XBOOLE_0:def 4;
    (g*f).x in Z by A3,Th24;
    then g.(f.x) in Z by A4,FUNCT_1:12;
    then
A8: f.x in dom <:g,Y,Z:> by A1,A5,A7,Th24;
    x in dom <:f,X,Y:> & <:f,X,Y:>.x = f.x by A1,A3,A6,A7,Th24,Th25;
    hence thesis by A8,FUNCT_1:11;
  end;
  for x being object st x in dom <:g*f,X,Z:>
   holds <:g*f,X,Z:>.x = (<:g,Y,Z:>*<:f,X,Y :>).x
  proof
    let x be object;
    assume
A9: x in dom <:g*f,X,Z:>;
    then
A10: x in dom (g*f) by Th24;
    then
A11: f.x in dom g by FUNCT_1:11;
    x in dom f by A10,FUNCT_1:11;
    then f.x in rng f by FUNCT_1:def 3;
    then
A12: f.x in rng f /\ dom g by A11,XBOOLE_0:def 4;
    (g*f).x in Z by A9,Th24;
    then g.(f.x) in Z by A10,FUNCT_1:12;
    then
A13: f.x in dom <:g,Y,Z:> by A1,A11,A12,Th24;
    x in dom f by A10,FUNCT_1:11;
    then
A14: x in dom <:f,X,Y:> by A1,A9,A12,Th24;
    thus <:g*f,X,Z:>.x = (g*f).x by A9,Th26
      .= g.(f.x) by A10,FUNCT_1:12
      .= <:g,Y,Z:>.(f.x) by A13,Th26
      .= <:g,Y,Z:>.(<:f,X,Y:>.x) by A14,Th26
      .= (<:g,Y,Z:>*<:f,X,Y:>).x by A2,A9,FUNCT_1:12;
  end;
  then
A15: <:g*f,X,Z:> c= (<:g,Y,Z:>*<:f,X,Y:>) by A2,GRFUNC_1:2;
  (<:g,Y,Z:>*<:f,X,Y:>) c= <:g*f,X,Z:> by Th35;
  hence thesis by A15;
end;
