
theorem
  for C being non empty category, c1,c2,a,b being Object of C,
      p1 being Morphism of a,c1, p2 being Morphism of a,c2,
      q1 being Morphism of b,c1, q2 being Morphism of b,c2
  st Hom(a,c1) <> {} & Hom(a,c2) <> {} & Hom(b,c1) <> {} & Hom(b,c2) <> {} &
     a,p1,p2 is_product_of c1,c2 & b,q1,q2 is_product_of c1,c2
  holds a,b are_isomorphic
  proof
    let C be non empty category;
    let c1,c2,a,b be Object of C;
    let p1 be Morphism of a,c1;
    let p2 be Morphism of a,c2;
    let q1 be Morphism of b,c1;
    let q2 be Morphism of b,c2;
    assume
A1: Hom(a,c1) <> {} & Hom(a,c2) <> {} & Hom(b,c1) <> {} & Hom(b,c2) <> {};
    assume
A2: a,p1,p2 is_product_of c1,c2;
    assume
A3: b,q1,q2 is_product_of c1,c2;
    ex ff being Morphism of a,b, gg being Morphism of b,a st
    Hom(a,b)<>{} & Hom(b,a)<>{} & gg * ff = id- a & ff * gg = id- b
    proof
      consider f be Morphism of a,b such that
A4:   q1 * f = p1 & q2 * f = p2 &
      for h1 being Morphism of a,b st q1 * h1 = p1 & q2 * h1 = p2
      holds f = h1 by A1,A3,Def10;
      consider g be Morphism of b,a such that
A5:   p1 * g = q1 & p2 * g = q2 &
      for h1 being Morphism of b,a st p1 * h1 = q1 & p2 * h1 = q2
      holds g = h1 by A1,A2,Def10;
      take f,g;
      thus
A6:  Hom(a,b)<>{} by A1,A3,Def10;
      thus
A7:  Hom(b,a)<>{} by A1,A2,Def10;
      set g11 = q1 * f;
      set g12 = q2 * f;
      consider h1 be Morphism of a,a such that
A8:   p1 * h1 = g11 & p2 * h1 = g12 & for h being Morphism of a,a
      st p1 * h = g11 & p2 * h = g12 holds h1 = h by A1,A2,Def10;
A9:   p1 * (g * f) = g11 by A1,A5,A7,A6,CAT_7:23;
A10:   p2 * (g * f) = g12 by A1,A5,A7,A6,CAT_7:23;
A11:  p1 * id- a = g11 by A1,A4,CAT_7:18;
A12:  p2 * id- a = g12 by A1,A4,CAT_7:18;
      thus g * f = h1 by A8,A9,A10 .= id- a by A8,A11,A12;
      set g21 = p1 * g;
      set g22 = p2 * g;
      consider h2 be Morphism of b,b such that
A13:   q1 * h2 = g21 & q2 * h2 = g22 & for h being Morphism of b,b
      st q1 * h = g21 & q2 * h = g22 holds h2 = h by A1,A3,Def10;
A14:   q1 * (f * g) = g21 by A1,A4,A7,A6,CAT_7:23;
A15:   q2 * (f * g) = g22 by A1,A4,A7,A6,CAT_7:23;
A16:  q1 * id- b = g21 by A1,A5,CAT_7:18;
A17:  q2 * id- b = g22 by A1,A5,CAT_7:18;
      thus f * g = h2 by A13,A14,A15 .= id- b by A13,A16,A17;
    end;
    hence a,b are_isomorphic by CAT_7:def 11;
  end;
