reserve
  a,b for object, I,J for set, f for Function, R for Relation,
  i,j,n for Nat, m for (Element of NAT),
  S for non empty non void ManySortedSign,
  s,s1,s2 for SortSymbol of S,
  o for OperSymbol of S,
  X for non-empty ManySortedSet of the carrier of S,
  x,x1,x2 for (Element of X.s), x11 for (Element of X.s1),
  T for all_vars_including inheriting_operations free_in_itself
  (X,S)-terms MSAlgebra over S,
  g for Translation of Free(S,X),s1,s2,
  h for Endomorphism of Free(S,X);
reserve
  r,r1,r2 for (Element of T),
  t,t1,t2 for (Element of Free(S,X));
reserve
  Y for infinite-yielding ManySortedSet of the carrier of S,
  y,y1 for (Element of Y.s), y11 for (Element of Y.s1),
  Q for all_vars_including inheriting_operations free_in_itself
  (Y,S)-terms MSAlgebra over S,
  q,q1 for (Element of Args(o,Free(S,Y))),
  u,u1,u2 for (Element of Q),
  v,v1,v2 for (Element of Free(S,Y)),
  Z for non-trivial ManySortedSet of the carrier of S,
  z,z1 for (Element of Z.s),
  l,l1 for (Element of Free(S,Z)),
  R for all_vars_including inheriting_operations free_in_itself
  (Z,S)-terms MSAlgebra over S,
  k,k1 for Element of Args(o,Free(S,Z));
reserve c,c1,c2 for set, d,d1 for DecoratedTree;

theorem Th14:
  for A,B being disjoint_valued non-empty MSAlgebra over S
  for C being non-empty MSAlgebra over S
  for f being ManySortedFunction of A,B
  for g being ManySortedFunction of B,C
  for a being Element of A
  holds (g**f).a = g.(f.a)
  proof
    let A,B be disjoint_valued non-empty MSAlgebra over S;
    let C be non-empty MSAlgebra over S;
    let f be ManySortedFunction of A,B;
    let g be ManySortedFunction of B,C;
    let a be Element of A;
A1: a in (the Sorts of A).the_sort_of a &
    f.(the_sort_of a) is Function of (the Sorts of A).(the_sort_of a),
    (the Sorts of B).(the_sort_of a) by SORT;
    thus (g**f).a = (g**f).(the_sort_of a).a by ABBR
    .= ((g.the_sort_of a)*(f.(the_sort_of a))).a by MSUALG_3:2
    .= (g.the_sort_of a).(f.(the_sort_of a).a) by A1,FUNCT_2:15
    .= (g.the_sort_of (f.a)).(f.(the_sort_of a).a) by Lem0
    .= (g.the_sort_of (f.a)).(f.a) by ABBR
    .= g.(f.a) by ABBR;
  end;
