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 Th54:
  x1 <> x2 implies (c is_a_product_wrt p1,p2 iff c
  is_a_product_wrt (x1,x2)-->(p1,p2))
proof
  set F = (x1,x2)-->(p1,p2), I = {x1,x2};
  assume
A1: x1 <> x2;
  thus c is_a_product_wrt p1,p2 implies c is_a_product_wrt F
  proof
    assume
A2: c is_a_product_wrt p1,p2;
    then dom p1 = c & dom p2 = c;
    hence F is Projections_family of c,I by Th44;
    let b;
    let F9 be Projections_family of b,I such that
A3: cods F = cods F9;
    set f = F9/.x1, g = F9/.x2;
A4: x1 in I by TARSKI:def 2;
    then (cods F)/.x1 = cod(F/.x1) by Def2;
    then cod f = cod(F/.x1) by A3,A4,Def2;
    then
A5: cod f = cod p1 by A1,Th3;
A6: x2 in I by TARSKI:def 2;
    then (cods F)/.x2 = cod(F/.x2) by Def2;
    then cod g = cod(F/.x2) by A3,A6,Def2;
    then
A7: cod g = cod p2 by A1,Th3;
    dom g = b by A6,Th41;
    then
A8: g in Hom(b,cod p2) by A7;
    dom f = b by A4,Th41;
    then f in Hom(b,cod p1) by A5;
    then consider h such that
A9: h in Hom(b,c) and
A10: for k st k in Hom(b,c) holds p1(*)k = f & p2(*)k = g iff h = k
           by A2,A8;
    take h;
    thus h in Hom(b,c) by A9;
    let k such that
A11: k in Hom(b,c);
    thus (for x st x in I holds (F/.x)(*)k = F9/.x ) implies h = k
    proof
      assume
A12:  for x st x in I holds (F/.x)(*)k = F9/.x;
      then (F/.x2)(*)k = g by A6;
      then
A13:  p2(*)k = g by A1,Th3;
      (F/.x1)(*)k = f by A4,A12;
      then p1(*)k = f by A1,Th3;
      hence thesis by A10,A11,A13;
    end;
    assume h = k;
    then
A14: p1(*)k = f & p2(*)k = g by A10,A11;
    let x;
    assume x in I;
    then x = x1 or x = x2 by TARSKI:def 2;
    hence thesis by A1,A14,Th3;
  end;
  assume
A15: c is_a_product_wrt F;
  then
A16: F is Projections_family of c,I;
  x2 in I by TARSKI:def 2;
  then
A17: dom(F/.x2) = c by A16,Th41;
  x1 in I by TARSKI:def 2;
  then dom(F/.x1) = c by A16,Th41;
  hence dom p1 = c & dom p2 = c by A1,A17,Th3;
  let d,f,g such that
A18: f in Hom(d,cod p1) and
A19: g in Hom(d,cod p2);
  dom f = d & dom g = d by A18,A19,CAT_1:1;
  then reconsider F9 = (x1,x2) --> (f,g) as Projections_family of d,I by Th44;
  cods F = (x1,x2)-->(cod p1,cod p2) by Th7
    .= (x1,x2)-->(cod f,cod p2) by A18,CAT_1:1
    .= (x1,x2)-->(cod f,cod g) by A19,CAT_1:1
    .= cods F9 by Th7;
  then consider h such that
A20: h in Hom(d,c) and
A21: for k st k in Hom(d,c) holds (for x st x in I holds (F/.x)(*)k = F9/.
  x ) iff h = k by A15;
  take h;
  thus h in Hom(d,c) by A20;
  let k such that
A22: k in Hom(d,c);
  thus p1(*)k = f & p2(*)k = g implies h = k
  proof
    assume
A23: p1(*)k = f & p2(*)k = g;
    now
      let x;
      assume x in I;
      then x = x1 or x = x2 by TARSKI:def 2;
      then F/.x = p1 & F9/.x = f or F/.x = p2 & F9/.x = g by A1,Th3;
      hence (F/.x)(*)k = F9/.x by A23;
    end;
    hence thesis by A21,A22;
  end;
  assume
A24: h = k;
  x2 in I by TARSKI:def 2;
  then (F/.x2)(*)k = F9/.x2 by A21,A22,A24;
  then
A25: (F/.x2)(*)k = g by A1,Th3;
  x1 in I by TARSKI:def 2;
  then (F/.x1)(*)k = F9/.x1 by A21,A22,A24;
  then (F/.x1)(*)k = f by A1,Th3;
  hence thesis by A1,A25,Th3;
end;
