reserve i,j,e,u for object;
reserve I for set; 
reserve x,X,Y,Z,V for ManySortedSet of I;
reserve I for non empty set,
  x,X,Y for ManySortedSet of I;
reserve I for set,
  x,X,Y,Z for ManySortedSet of I;
reserve X for non-empty ManySortedSet of I;
reserve D for non empty set,
  n for Nat;
reserve X,Y for ManySortedSet of I;

theorem
  for F, G, H be Function-yielding Function holds
  (H ** G) ** F = H ** (G ** F)
proof
  let F, G, H be Function-yielding Function;
  set f = (H ** G) ** F, g = H ** (G ** F);
  now
A1: dom f = (dom (H ** G)) /\ dom F by Def19
      .= (dom H) /\ (dom G) /\ (dom F) by Def19;
    then
A2: dom f = (dom H) /\ ((dom G) /\ dom F) by XBOOLE_1:16;
    hence
A3: dom f = (dom H) /\ (dom (G ** F)) by Def19
      .= dom g by Def19;
    let x be object;
    assume
A4: x in dom f;
    then x in (dom H) /\ (dom G) by A1,XBOOLE_0:def 4;
    then
A5: x in dom (H ** G) by Def19;
    x in (dom G) /\ (dom F) by A2,A4,XBOOLE_0:def 4;
    then
A6: x in dom (G ** F) by Def19;
    thus f.x = ((H**G).x) * (F.x) by A4,Def19
      .= (H.x)*(G.x)*(F.x) by A5,Def19
      .= (H.x)*((G.x)*(F.x)) by RELAT_1:36
      .= (H.x)*((G**F).x) by A6,Def19
      .= g.x by A3,A4,Def19;
  end;
  hence thesis;
end;
