reserve f,g,h for Function,
  A for set;
reserve F for Function,
  B,x,y,y1,y2,z for set;
reserve x,z for object;
reserve X for non empty set,
  Y for set,
  F for BinOp of X,
  f,g,h for Function of Y,X,
  x,x1,x2 for Element of X;
reserve Y for non empty set,
  F for BinOp of X,
  f,g,h for Function of Y,X,
  x,x1,x2 for Element of X;
reserve Y for set,
  F for BinOp of X,
  f,g,h for Function of Y,X,
  x,x1,x2 for Element of X;
reserve Y for non empty set,
  F for BinOp of X,
  f,g,h for Function of Y,X,
  x,x1,x2 for Element of X;
reserve Y for set,
  F for BinOp of X,
  f,g,h for Function of Y,X,
  x,x1,x2 for Element of X;
reserve Y for non empty set,
  F for BinOp of X,
  f,g,h for Function of Y,X,
  x,x1,x2 for Element of X;
reserve Y for set,
  F for BinOp of X,
  f,g,h for Function
  of Y,X,
  x,x1,x2 for Element of X;
reserve y for Element of Y;
reserve Y for non empty set,
  F for BinOp of X,
  f for Function of Y,X,
  x for Element of X,
  y for Element of Y;
reserve a,b,c for set;
reserve x,y,z for object;
reserve Y for set,
        f,g for Function of Y,X,
        x for Element of X,
        y for Element of Y;

theorem
  F is associative implies F.:(F[;](x,f),g) = F[;](x,F.:(f,g))
proof
  assume
A1: F is associative;
  per cases;
  suppose
    Y = {};
    hence thesis;
  end;
  suppose
A2: Y <> {};
    now
      let y;
      reconsider x1 = f.y, x2 = g.y as Element of X by A2,FUNCT_2:5;
      thus (F[;](x,F.:(f,g))).y = F.(x,F.:(f,g).y) by A2,Th53
        .= F.(x,F.(x1,x2)) by A2,Th37
        .= F.(F.(x,x1),x2) by A1
        .= F.(F[;](x,f).y,g.y) by A2,Th53;
    end;
    hence thesis by A2,Th38;
  end;
end;
