
theorem Th29:
  for X being non empty 1-sorted, I being non empty set for J
  being TopStruct-yielding non-Empty ManySortedSet of I
  for f being Function of X,
  I-TOP_prod J for i being Element of I holds (commute f).i = proj(J,i)*f
proof
  let X be non empty 1-sorted, I be non empty set;
  let J be TopStruct-yielding non-Empty ManySortedSet of I;
  let f be Function of X, I-TOP_prod J;
A1: the carrier of I-TOP_prod J = product Carrier J by WAYBEL18:def 3;
  let i be Element of I;
A2: dom Carrier J = I by PARTFUN1:def 2;
A3: rng f c= Funcs(I, Union Carrier J)
  proof
    let g be object;
    assume g in rng f;
    then consider h being Function such that
A4: g = h and
A5: dom h = I and
A6: for x being object st x in I holds h.x in (Carrier J).x
by A1,A2,CARD_3:def 5;
    rng h c= Union Carrier J
    proof
      let y be object;
A7:   dom Carrier J = I by PARTFUN1:def 2;
      assume y in rng h;
      then consider x being object such that
A8:   x in dom h and
A9:   y = h.x by FUNCT_1:def 3;
      h.x in (Carrier J).x by A5,A6,A8;
      hence thesis by A5,A8,A9,A7,CARD_5:2;
    end;
    hence thesis by A4,A5,FUNCT_2:def 2;
  end;
  dom f = the carrier of X by FUNCT_2:def 1;
  then
A10: f in Funcs(the carrier of X, Funcs(I, Union Carrier J)) by A3,
FUNCT_2:def 2;
  then commute f in Funcs(I, Funcs(the carrier of X, Union Carrier J)) by
FUNCT_6:55;
  then
A11: ex g being Function st commute f = g & dom g = I & rng g c= Funcs(the
  carrier of X, Union Carrier J) by FUNCT_2:def 2;
  then (commute f).i in rng commute f by FUNCT_1:def 3;
  then consider g being Function such that
A12: (commute f).i = g and
A13: dom g = the carrier of X and
  rng g c= Union Carrier J by A11,FUNCT_2:def 2;
A14: now
    let x be object;
A15: dom proj(Carrier J, i) = product Carrier J by CARD_3:def 16;
    assume x in the carrier of X;
    then reconsider a = x as Element of X;
    consider h being Function such that
A16: f.a = h and
    dom h = I and
    for x being object st x in I holds h.x in (Carrier J).x
by A1,A2,CARD_3:def 5;
    (proj(J,i)*f).a = proj(J,i).(f.a) by FUNCT_2:15
      .= (proj (Carrier J, i)).(f.a) by WAYBEL18:def 4
      .= h.i by A1,A16,A15,CARD_3:def 16;
    hence g.x = (proj(J,i)*f).x by A10,A12,A16,FUNCT_6:56;
  end;
  dom (proj(J, i)*f) = the carrier of X by FUNCT_2:def 1;
  hence thesis by A12,A13,A14,FUNCT_1:2;
end;
