reserve a,b,p,x,x9,x1,x19,x2,y,y9,y1,y19,y2,z,z9,z1,z2 for object,
   X,X9,Y,Y9,Z,Z9 for set;
reserve A,D,D9 for non empty set;
reserve f,g,h for Function;

theorem
  g*f = (g|rng f)*f
proof
  for x being object holds x in dom(g*f) iff x in dom((g|rng f)*f)
  proof let x be object;
A1: dom(g|rng f) = dom g /\ rng f by RELAT_1:61;
    thus x in dom(g*f) implies x in dom((g|rng f)*f)
    proof
      assume
A2:   x in dom(g*f);
      then
A3:   x in dom f by FUNCT_1:11;
      x in dom f by A2,FUNCT_1:11;
      then
A4:   f.x in rng f by FUNCT_1:def 3;
      f.x in dom g by A2,FUNCT_1:11;
      then f.x in dom(g|rng f) by A1,A4,XBOOLE_0:def 4;
      hence thesis by A3,FUNCT_1:11;
    end;
    assume
A5: x in dom((g|rng f)*f);
    then f.x in dom(g|rng f) by FUNCT_1:11;
    then
A6: f.x in dom g by A1,XBOOLE_0:def 4;
    x in dom f by A5,FUNCT_1:11;
    hence thesis by A6,FUNCT_1:11;
  end;
  then
A7: dom(g*f) = dom((g|rng f)*f) by TARSKI:2;
  for x being object holds x in dom(g*f) implies (g*f).x = ((g|rng f)*f).x
  proof let x be object;
    assume
A8: x in dom(g*f);
    then
A9: x in dom f by FUNCT_1:11;
    then
A10: f.x in rng f by FUNCT_1:def 3;
    thus (g*f).x = g.(f.x) by A8,FUNCT_1:12
      .= (g|rng f).(f.x) by A10,FUNCT_1:49
      .= ((g|rng f)*f).x by A9,FUNCT_1:13;
  end;
  hence thesis by A7;
end;
