reserve I for set,
  x,x1,x2,y,z for set,
  A for non empty set;
reserve C,D for Category;
reserve a,b,c,d for Object of C;
reserve f,g,h,i,j,k,p1,p2,q1,q2,i1,i2,j1,j2 for Morphism of C;
reserve f for Morphism of a,b,
        g for Morphism of b,a;
reserve g for Morphism of b,c;
reserve f,g for Morphism of C;

theorem
  c is_a_product_wrt p1,p2 iff c opp is_a_coproduct_wrt p1 opp, p2 opp
proof
  set i1 = p1 opp,i2 = p2 opp;
  thus c is_a_product_wrt p1,p2 implies c opp is_a_coproduct_wrt p1 opp, p2 opp
  proof
    assume that
A1: dom p1 = c & dom p2 = c and
A2: for d,f,g st f in Hom(d,cod p1) & g in Hom(d,cod p2) ex h st h in
    Hom(d,c) & for k st k in Hom(d,c) holds p1(*)k = f & p2(*)k = g iff h = k;
    reconsider gg = p1 as Morphism of dom p1, cod p1 by CAT_1:4;
A3:  Hom(dom gg,cod gg) <> {} by CAT_1:2;
    then
A4:  gg opp = p1 opp by OPPCAT_1:def 6;
    thus
A5: cod i1 = c opp by A1,A3,A4,OPPCAT_1:10;
    reconsider gg = p2 as Morphism of dom p2, cod p2 by CAT_1:4;
A6:  Hom(dom gg,cod gg) <> {} by CAT_1:2;
    then
A7:  gg opp = p2 opp by OPPCAT_1:def 6;
    thus
A8: cod i2 = c opp by A1,A6,A7,OPPCAT_1:10;
    let d be Object of C opp, f,g be Morphism of C opp;
    assume that
A9: f in Hom(dom i1,d) and
A10: g in Hom(dom i2,d);
    reconsider gg = i2 as Morphism of dom i2, cod i2 by CAT_1:4;
A11:  Hom(dom gg,cod gg) <> {} by CAT_1:2;
    opp g in Hom(opp d,opp(dom i2)) by A10,OPPCAT_1:6;
    then
A12:  opp g in Hom(opp d,cod opp i2) by A11,OPPCAT_1:13;
    reconsider gg = i1 as Morphism of dom i1, cod i1 by CAT_1:4;
A13:  Hom(dom gg,cod gg) <> {} by CAT_1:2;
    opp f in Hom(opp d, opp(dom i1)) by A9,OPPCAT_1:6;
    then opp f in Hom(opp d, cod opp i1) by A13,OPPCAT_1:13;
    then consider h such that
A14: h in Hom(opp d,c) and
A15: for k st k in Hom(opp d,c) holds p1(*)k = opp f & p2(*)k = opp g iff
    h = k by A2,A12;
    take h opp;
    h opp in Hom(c opp,(opp d) opp) by A14,OPPCAT_1:5;
    hence h opp in Hom(c opp,d);
    let k be Morphism of C opp;
    assume
A16: k in Hom(c opp,d);
    then opp k in Hom(opp d,opp(c opp)) by OPPCAT_1:6;
    then
A17: (opp i1)(*)(opp k) = f & (opp i2)(*)(opp k) = g iff h opp = k by A15;
    dom k = c opp by A16,CAT_1:1;
    then opp(k(*)i1) = f & opp(k(*)i2) = g iff h opp = k
     by A8,A5,A17,OPPCAT_1:18;
    hence thesis;
  end;
  assume that
A18: cod i1 = c opp & cod i2 = c opp and
A19: for d being Object of C opp, f,g being Morphism of C opp st f in
  Hom(dom i1,d) & g in Hom(dom i2,d) ex h being Morphism of C opp st h in Hom(c
opp,d) & for k being Morphism of C opp st k in Hom(c opp,d)
   holds k(*)i1 = f & k(*)
  i2 = g iff h = k;
    reconsider gg = p1 as Morphism of dom p1, cod p1 by CAT_1:4;
A20:  Hom(dom gg,cod gg) <> {} by CAT_1:2;
    then
A21:  gg opp = p1 opp by OPPCAT_1:def 6;
A22: dom p1 = c opp by A18,A20,A21,OPPCAT_1:10;
    reconsider gg = p2 as Morphism of dom p2, cod p2 by CAT_1:4;
A23:  Hom(dom gg,cod gg) <> {} by CAT_1:2;
    then
A24:  gg opp = p2 opp by OPPCAT_1:def 6;
A25:  dom p2 = c opp by A18,A23,A24,OPPCAT_1:10;
  hence dom p1 = c & dom p2 = c by A22;
  let d,f,g;
  assume that
A26: f in Hom(d,cod p1) and
A27: g in Hom(d,cod p2);
  g opp in Hom((cod p2)opp,d opp) by A27,OPPCAT_1:5;
  then
A28: g opp in Hom(dom (p2 opp),d opp) by A23,A24,OPPCAT_1:12;
  f opp in Hom((cod p1) opp,d opp) by A26,OPPCAT_1:5;
  then f opp in Hom(dom (p1 opp),d opp) by A20,A21,OPPCAT_1:12;
  then consider h being Morphism of C opp such that
A29: h in Hom(c opp,d opp) and
A30: for k being Morphism of C opp st k in Hom(c opp,d opp) holds k(*)i1 =
  f opp & k(*)i2 = g opp iff h = k by A19,A28;
  take opp h;
  thus opp h in Hom(d,c) by A29,OPPCAT_1:5;
  let k;
  assume
A31: k in Hom(d,c);
  then k opp in Hom(c opp,d opp) by OPPCAT_1:5;
  then
A32: (k opp)(*)i1 = f opp & (k opp)(*)i2 = g opp iff h = k opp by A30;
A33:  cod k = c by A31,CAT_1:1;

     reconsider ff=p1 as Morphism of dom p1, cod p1 by CAT_1:4;
     reconsider gg=k as Morphism of dom k, dom p1 by A33,A22,CAT_1:4;
A34:   Hom(dom k,cod k)<>{} & Hom(dom p1,cod p1)<>{} by CAT_1:2;
     then
A35:   ff opp = p1 opp by OPPCAT_1:def 6;
A36:   gg opp = k opp by A34,A33,A22,OPPCAT_1:def 6;
A37:   (p1(*)k) opp = (k opp)(*)(p1 opp) by A22,A34,A33,A35,A36,OPPCAT_1:16;
     reconsider ff=p2 as Morphism of dom p2, cod p2 by CAT_1:4;
     reconsider gg=k as Morphism of dom k, dom p2 by A33,A25,CAT_1:4;
A38:   Hom(dom k,cod k)<>{} & Hom(dom p2,cod p2)<>{} by CAT_1:2;
     then
A39:   ff opp = p2 opp by OPPCAT_1:def 6;
A40:   gg opp = k opp by A38,A33,A25,OPPCAT_1:def 6;
  (p2(*)k) opp = (k opp)(*)(p2 opp) by A38,A33,A39,A40,A25,OPPCAT_1:16;
  hence thesis by A37,A32;
end;
