 reserve I for non empty set;
 reserve i for Element of I;
 reserve F for Group-Family of I;
 reserve G for Group;
reserve S for Subgroup-Family of F;
reserve f for Homomorphism-Family of G, F;

theorem Th39:
  for f being Homomorphism-Family of G, F
  ex phi being Homomorphism of G, product F
  st for g being Element of G
     holds (for j being Element of I holds (f.j).g = (proj (F,j)) . (phi.g))
proof
  let f be Homomorphism-Family of G, F;
  defpred P[object, object] means ex g0 being Element of product F
  st $2 = g0 & (for j being Element of I holds (f.j).$1 = g0.j);
  deffunc F1() = the carrier of G;
  A1: for x being object st x in F1()
  ex y being object st y in the carrier of product F &
  P[x,y]
  proof
    let x be object;
    assume x in F1();
    then reconsider xx=x as Element of G;
    defpred P1[object, object] means ex i being Element of I st
    i = $1 & $2 = ((f.i).xx);
    B1: for i, y1, y2 being object st i in I & P1[i,y1] & P1[i,y2]
        holds y1 = y2;
    B2: for i being object st i in I holds ex y being object st P1[i,y]
    proof
      let i be object;
      assume i in I;
      then reconsider ii=i as Element of I;
      consider y being object such that
      C1: y = ((f.ii).xx);
      take y;
      thus P1[i,y] by C1;
    end;
    consider y being Function such that
    B3: dom y = I and
    B4: for j being object st j in I holds P1[j, y.j]
    from FUNCT_1:sch 2(B1, B2);
    take y;
    thus y in the carrier of product F
    proof
      C1: dom y = dom (Carrier F) by B3, PARTFUN1:def 2;
      for i being Element of I holds y.i in (Carrier F).i
      proof
        let i be Element of I;
        P1[i, y.i] by B4;
        then consider ii being Element of I such that
        D1: ii=i & y.i = ((f.i).xx);
        (Carrier F).i = the carrier of F.i by Th9;
        hence thesis by D1;
      end;
      then for i being object st i in dom (Carrier F)
           holds y.i in (Carrier F).i;
      then y in product (Carrier F) by C1, CARD_3:9;
      hence thesis by GROUP_7:def 2;
    end;
    then consider g0 being Element of product F such that
    B5: g0 = y;
    take g0;
    thus y = g0 by B5;
    let j be Element of I;
    P1[j, g0.j] by B4, B5;
    hence (f.j).x = g0.j;
  end;
  consider phi being Function of F1(), the carrier of (product F)
  such that
  A2: for x being object st x in F1() holds P[x, phi.x]
  from FUNCT_2:sch 1(A1);
  reconsider phi as Function of G, product F;
  A3: for g being Element of G
  for j being Element of I
  holds (phi.g).j = (f.j).g
  proof
    let g be Element of G;
    let j be Element of I;
    P[g, phi.g] by A2;
    hence (phi.g).j = (f.j).g;
  end;
  for a, b being Element of G holds phi.(a * b) = (phi.a) * (phi.b)
  proof
    let a, b be Element of G;
    (phi.(a * b)) is Element of product (Carrier F)
    & (phi.a)*(phi.b) is Element of product (Carrier F)
    by GROUP_7:def 2;
    then B1: dom (phi.(a * b)) = I & dom ((phi.a)*(phi.b)) = I
    by PARTFUN1:def 2;
    for j being Element of I holds (phi.(a * b)).j = ((phi.a) * (phi.b)).j
    proof
      let j be Element of I;
      reconsider fj = f.j as Homomorphism of G, F.j;
      (phi.(a * b)).j = fj.(a * b) by A3
                     .= (fj.a) * (fj.b) by GROUP_6:def 6
                     .= ((phi.a)/.j) * (fj.b) by A3
                     .= ((phi.a)/.j) * ((phi.b)/.j) by A3
                     .= ((phi.a) * (phi.b))/.j by GROUP_7:1;
      hence (phi.(a * b)).j = ((phi.a) * (phi.b)).j;
    end;
    hence phi.(a * b) = (phi.a) * (phi.b) by B1;
  end;
  then reconsider phi as Homomorphism of G, product F by GROUP_6:def 6;
  take phi;
  let g be Element of G;
  for j being Element of I holds (f.j).g = (proj (F, j)) . (phi.g)
  proof
    let j be Element of I;
    (f.j).g = (phi.g).j by A3;
    hence (f.j).g = (proj (F, j)).(phi.g) by Def13;
  end;
  hence thesis;
end;
