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 & 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;
