reserve S for non void non empty ManySortedSign,
  U1,U2 for MSAlgebra over S,
  o for OperSymbol of S,
  n for Nat;

theorem Th10:
  for U1,U2,U3 being non-empty MSAlgebra over S for H1 be
  ManySortedFunction of U1,U2, H2 be ManySortedFunction of U2,U3 st H1
is_homomorphism U1,U2 & H2 is_homomorphism U2,U3 holds H2 ** H1 is_homomorphism
  U1,U3
proof
  let U1,U2,U3 be non-empty MSAlgebra over S;
  let H1 be ManySortedFunction of U1,U2,H2 be ManySortedFunction of U2,U3;
  assume that
A1: H1 is_homomorphism U1,U2 and
A2: H2 is_homomorphism U2,U3;
  let o be OperSymbol of S such that
  Args(o,U1) <> {};
  let x be Element of Args(o,U1);
  set F = H2**H1, r = the_result_sort_of o;
  (H1.r).(Den(o,U1).x) = Den(o,U2).(H1#x) by A1;
  then
A3: (H2.r).((H1.r).(Den(o,U1).x)) = Den(o,U3).(H2#(H1#x)) by A2;
A4: F.r = (H2.r)*(H1.r) & dom (F.r) = (the Sorts of U1).r by Th2,FUNCT_2:def 1;
  rng (the ResultSort of S) c= the carrier of S by RELAT_1:def 19;
  then rng (the ResultSort of S) c= dom (the Sorts of U1) by PARTFUN1:def 2;
  then
A5: Result(o,U1) = ((the Sorts of U1)*(the ResultSort of S)).o & dom ((the
  Sorts of U1)*(the ResultSort of S)) = dom (the ResultSort of S) by
MSUALG_1:def 5,RELAT_1:27;
  o in the carrier' of S;
  then o in dom (the ResultSort of S) by FUNCT_2:def 1;
  then Result(o,U1) = (the Sorts of U1).((the ResultSort of S).o) by A5,
FUNCT_1:12
    .= (the Sorts of U1).r by MSUALG_1:def 2;
  then (F.r).(Den(o,U1).x) = Den(o,U3).(H2#(H1#x)) by A3,A4,FUNCT_1:12;
  hence (F.r).(Den(o,U1).x) = Den(o,U3).(F#x) by Th8;
end;
