reserve V for non empty set,
  A,B,A9,B9 for Element of V;
reserve f,f9 for Element of Funcs(V);
reserve m,m1,m2,m3,m9 for Element of Maps V;
reserve a,b for Object of Ens(V);
reserve f,g,f1,f2 for Morphism of Ens(V);

theorem
 for a,b being Object of Ens(V) st Hom(a,b) <> {}
 for f being Morphism of a,b st  @f is surjective
  holds f is epi
proof
 let a,b be Object of Ens(V) such that
A1: Hom(a,b) <> {};
 let f be Morphism of a,b;
  set m = @f;
  assume
A2: rng m`2 = cod m;
  thus Hom(a,b) <> {} by A1;
  let c be Object of Ens(V) such that
A3: Hom(b,c) <> {};
  let f1,f2 be Morphism of b,c;
A4: dom f1 = b by A3,CAT_1:5 .=  cod f by A1,CAT_1:5;
A5: dom f2 = b by A3,CAT_1:5 .= cod f by A1,CAT_1:5;
A6: cod f1 = c by A3,CAT_1:5 .= cod f2 by A3,CAT_1:5;
  assume
A7: f1*f=f2*f;
  set m1 = @f1, m2 = @f2;
A8: m1*m = f1(*)f by A4,Th27
      .= f1*f by A1,A3,CAT_1:def 13;
A9: m2*m = f2(*)f by A5,Th27
      .= f2*f by A1,A3,CAT_1:def 13;
A10: m1=[[dom m1,cod m1],m1`2] by Th8;
A11: cod m1 = cod f1 & cod m2 = cod f2 by Def10;
A12: dom m2 = dom f2 by Def9;
  then
A13: dom m2`2 = dom f2 by Lm3;
A14: cod m = cod f by Def10;
  then
A15: m2*m = [[dom m,cod m2],m2`2*m`2] by A5,A12,Def6;
A16: dom m1 = dom f1 by Def9;
  then m1*m = [[dom m,cod m1],m1`2*m`2] by A4,A14,Def6;
  then
A17: (m1`2)*(m`2) = (m2`2)*(m`2) by A7,A8,A15,A9,XTUPLE_0:1;
  dom m1`2 = dom f1 by A16,Lm3;
  then m1`2 = m2`2 by A2,A4,A5,A14,A17,A13,FUNCT_1:86;
  hence thesis by A4,A5,A6,A16,A12,A11,A10,Th8;
end;
