reserve B,C,D for Category;

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