reserve a, I for set,
  S for non empty non void ManySortedSign;

theorem Th19:
  for A, B, C being non-empty MSAlgebra over S for F1 being
  ManySortedFunction of A, B for F2 being ManySortedFunction of A, C st F1
is_epimorphism A, B & F2 is_homomorphism A, C for G being ManySortedFunction of
  B, C st G ** F1 = F2 holds G is_homomorphism B, C
proof
  let A, B, C be non-empty MSAlgebra over S, F1 be ManySortedFunction of A, B,
  F2 be ManySortedFunction of A, C such that
A1: F1 is_epimorphism A, B and
A2: F2 is_homomorphism A, C;
  let G be ManySortedFunction of B, C such that
A3: G ** F1 = F2;
  let o be OperSymbol of S such that
  Args(o,B) <> {};
  let x be Element of Args(o,B);
  F1 is "onto" by A1;
  then consider y being Element of Args(o,A) such that
A4: F1 # y = x by Th17;
  set r = the_result_sort_of o;
  F1 is_homomorphism A, B by A1;
  then
A5: (F1.r).(Den(o,A).y) = Den(o,B).x by A4;
A6: (F2.r).(Den(o,A).y) = (G.r * F1.r).(Den(o,A).y) by A3,MSUALG_3:2
    .= (G.r).(Den(o,B).x) by A5,Th18,FUNCT_2:15;
  (F2.r).(Den(o,A).y) = Den(o,C).((G ** F1) # y) by A2,A3
    .= Den(o,C).(G # x) by A4,MSUALG_3:8;
  hence (G.(the_result_sort_of o)).(Den(o,B).x) = Den(o,C).(G#x) by A6;
end;
