theorem
  c is_a_product_wrt p1,p2 & cod p1 is terminal implies c,cod p2 are_isomorphic
proof
  set a = cod p1, b = cod p2;
  assume that
A1: c is_a_product_wrt p1,p2 and
A2: a is terminal;
  set f = id(b),g = term(b,a);
  dom g = b & cod g = a by A2,Th35;
  then f in Hom(b,b) & g in Hom(b,a) by CAT_1:27;
  then consider h such that
A3: h in Hom(b,c) and
A4: for k st k in Hom(b,c) holds p1(*)k = g & p2(*)k = f iff h = k by A1;
A5: dom h = b by A3,CAT_1:1;
A6: dom p2 = c by A1;
  then reconsider p = p2 as Morphism of c,b by CAT_1:4;
A7: cod h = c by A3,CAT_1:1;
  then
A8: cod(h(*)p) = c by A5,CAT_1:17;
A9: dom p1 = c by A1;
  then
A10: cod(p1(*)(h(*)p)) = a by A8,CAT_1:17;
A11: dom(h(*)p) = c by A6,A5,CAT_1:17;
  then
A12: h(*)p in Hom(c,c) by A8;
  dom(p1(*)(h(*)p)) = c by A9,A11,A8,CAT_1:17;
  then
A13: p1(*)(h(*)p) = term(c,a) by A2,A10,Th36
    .= p1 by A2,A9,Th36;
A14: Hom(c,b)<>{} by A6,CAT_1:2;
  take p;
  thus Hom(c,b) <> {} & Hom(b,c) <> {} by A6,A3,CAT_1:2;
   reconsider h as Morphism of b,c by A3,CAT_1:def 5;
  take h;
  thus p*h = p(*)h by A14,A3,CAT_1:def 13
     .= id b by A3,A4;
   p(*)h = id cod p by A3,A4;
  then
A15:  p2(*)(h(*)p) = (id cod p)(*)p by A6,A5,A7,CAT_1:18
    .= p by CAT_1:21;
  thus id c = h(*)p by A1,A13,A12,Th58,A15
           .= h*p by A14,A3,CAT_1:def 13;
end;
