reserve B,C,D for Category;

theorem
  for b,c being Object of C st Hom(b,c) <> {}
  for f being Morphism of b,c holds f opp is epi iff f is monic
proof let b,c be Object of C such that
A1: Hom(b,c) <> {};
  let f be Morphism of b,c;
  thus f opp is epi implies f is monic
  proof
   assume that
 Hom(c opp,b opp) <> {} and
A2: for a being Object of C opp st Hom(b opp,a) <> {}
  for g1,g2 being Morphism of b opp,a st g1*(f opp)=g2*(f opp) holds g1=g2;
  thus Hom(b,c) <> {} by A1;
  let a be Object of C such that
A3:  Hom(a,b) <> {};
    let f1,f2 be Morphism of a, b;
    assume
A4: f*f1 = f*f2;
   reconsider g1 = f1 opp,g2 = f2 opp as Morphism of b opp, a opp;
A5: Hom(b opp,a opp) <> {} by A3,Th4;
   g1*(f opp) = f*f1 by Lm3,A1,A3
    .= g2*(f opp) by Lm3,A1,A3,A4;
   then g1=g2 by A2,A5;
   hence f1 = g2 by Def6,A3
      .=f2 by Def6,A3;
  end;
  assume that
A6: Hom(b,c) <> {} and
A7:   for a being Object of C st Hom(a,b) <> {}
  for f1,f2 being Morphism of a,b
   st f*f1=f*f2 holds f1=f2;
  thus Hom(c opp,b opp) <> {} by A6,Th4;
  let a be Object of C opp such that
A8: Hom(b opp,a) <> {};
  let g1,g2 be Morphism of b opp,a;
  assume
A9: g1*(f opp) = g2*(f opp);
   Hom(b opp,a) = Hom(opp a, opp(b opp)) by Th5
     .= Hom(opp a,b);
   then opp g1 in Hom(opp a,b) & opp g2 in Hom(opp a,b) by A8,CAT_1:def 5;
   then
   reconsider f1 = opp g1,f2 = opp g2 as Morphism of opp a,b by CAT_1:def 5;
A10: Hom(opp a,opp(b opp)) <> {} by A8,Th5;
   f*f1 = (f1 opp)*(f opp) by A6,Lm3,A10
    .= g2*(f opp) by A9,Def6,A10
    .= (f2 opp)*(f opp) by Def6,A10
    .=f*f2 by A6,Lm3,A10;
  hence thesis by A7,A10;
end;
