 reserve G, A for Group;
 reserve phi for Homomorphism of A,AutGroup(G);
 reserve G, A for Group;
 reserve phi for Homomorphism of A,AutGroup(G);
reserve G1,G2 for Group;

theorem Th72:
  G1 is trivial implies product <*G1,G2*>, G2 are_isomorphic
proof
  assume A1: G1 is trivial;
  ex f being Homomorphism of product <*G1,G2*>, G2 st f is bijective
  proof
    set I = {1,2};
    reconsider i=2 as Element of I by TARSKI:def 2;
    set F = <*G1,G2*>;
    deffunc F1() = the carrier of product F;
    deffunc F2() = the carrier of G2;

    defpred P[Element of F1(), Element of F2()] means
    $2 = $1.i;

    AA1: for x being Element of F1()
    ex y being Element of F2() st P[x,y]
    proof
      let x be Element of F1();
      x.1 in G1 & x.2 in G2 & dom x = {1,2} by Th6;
      then reconsider y=x.i as Element of G2;
      take y;
      thus P[x,y];
    end;

    consider f being Function of F1(),F2() such that
    A2: for g being Element of F1() holds P[g,f.g]
    from FUNCT_2:sch 3(AA1);

    for a,b being Element of product F
    holds f.(a * b) = (f.a) * (f.b)
    proof
      let a,b be Element of product F;
      a.1 in G1 & a.2 in G2 & dom a = {1,2} by Th6;
      then B1a: a.1 in G1 & a.2 in G2 & len a = 2 by FINSEQ_1:2,def 3;
      then reconsider a1=a.1 as Element of G1;
      reconsider a2=a.2 as Element of G2 by B1a;
      B1: a = <* a1, a2 *> by B1a,FINSEQ_1:44;
      b.1 in G1 & b.2 in G2 & dom b = {1,2} by Th6;
      then B2a: b.1 in G1 & b.2 in G2 & len b = 2 by FINSEQ_1:2,def 3;
      then reconsider b1=b.1 as Element of G1;
      reconsider b2=b.2 as Element of G2 by B2a;
      b = <* b1, b2 *> by B2a,FINSEQ_1:44;
      hence f.(a * b) = f.(<* (a1) * (b1), (a2) * (b2) *>) by B1,GROUP_7:29
                    .= <* (a1) * (b1), (a2) * (b2) *>.i by A2
                    .= (f.a) * (b2) by A2
                    .= (f.a) * (f.b) by A2;
    end;

    then reconsider f as Homomorphism of product F,G2
    by GROUP_6:def 6;
    take f;
    for a,b being object
    st a in F1() & b in F1() & f.a = f.b
    holds a = b
    proof
      let a,b be object;
      assume a in F1();
      then reconsider aa=a as Element of product F;
      assume b in F1();
      then reconsider bb=b as Element of product F;
      assume B2: f.a = f.b;

      aa.1 in G1 & aa.2 in G2 & dom aa = {1,2} by Th6;
      then B3: aa.1 in G1 & aa.2 in G2 & len aa = 2 by FINSEQ_1:2,def 3;
      then reconsider a1=aa.1 as Element of G1;
      reconsider a2=aa.2 as Element of G2 by B3;
      B4: a = <* a1, a2 *> by B3,FINSEQ_1:44;
      bb.1 in G1 & bb.2 in G2 & dom bb = {1,2} by Th6;
      then B5: bb.1 in G1 & bb.2 in G2 & len bb = 2 by FINSEQ_1:2,def 3;
      then reconsider b1=bb.1 as Element of G1;
      reconsider b2=bb.2 as Element of G2 by B5;
      B6: b = <* b1, b2 *> by B5,FINSEQ_1:44;
      B7: a1 = 1_G1 & b1 = 1_G1 by A1;
      B8: a2 = f.a & b2 = f.b by A2;
      hence a = <* 1_G1, f.a *> by B4,B7
            .= <* 1_G1, f.b *> by B2
            .= <* b1, f.b *> by B7
            .= <* b1, b2 *> by B8
            .= b by B6;
    end;

    then A3: f is one-to-one by FUNCT_2:19;
    for y being object st y in the carrier of G2
    ex x being object st x in the carrier of product F & y = f.x
    proof
      let y be object;
      assume y in the carrier of G2;
      then reconsider yy=y as Element of G2;
      reconsider x=<*1_G1,yy*> as Element of product F;
      take x;
      thus x in the carrier of product F;
      thus y = <* 1_G1, yy *>.2
            .= f.x by A2;
    end;
    then rng f = the carrier of G2 by FUNCT_2:10;
    then f is onto by FUNCT_2:def 3;
    hence thesis by A3;
  end;
  hence product <*G1,G2*>, G2 are_isomorphic by GROUP_6:def 11;
end;
