reserve x,y for Real,
  u,v,w for set,
  r for positive Real;

theorem Th8:
  for X,Y being set holds product <*X,Y*>, [:X,Y:] are_equipotent
  & card product <*X,Y*> = (card X)*`(card Y)
proof
  deffunc F(Function) = [$1.1,$1.2];
  let X,Y be set;
  consider f being Function such that
A1: dom f = product <*X,Y*> & for g being Function st g in product <*X,Y
  *> holds f.g = F(g) from FUNCT_5:sch 1;
A2: <*X,Y*>.2 = Y;
A3: dom <*X,Y*> = {1,2} by FINSEQ_1:2,89;
A4: <*X,Y*>.1 = X;
  thus product <*X,Y*>, [:X,Y:] are_equipotent
  proof
    take f;
    thus f is one-to-one
    proof
      let x1,x2 be object;
      assume that
A5:   x1 in dom f and
A6:   x2 in dom f and
A7:   f.x1 = f.x2;
      consider g2 being Function such that
A8:   x2 = g2 and
A9:   dom g2 = dom <*X,Y*> and
      for y being object st y in dom <*X,Y*> holds g2.y in <*X,Y*>.y by A1,A6,
CARD_3:def 5;
      consider g1 being Function such that
A10:  x1 = g1 and
A11:  dom g1 = dom <*X,Y*> and
      for y being object st y in dom <*X,Y*> holds g1.y in <*X,Y*>.y by A5,A1,
CARD_3:def 5;
A12:  [g1.1,g1.2] = f.x1 by A1,A5,A10
        .= [g2.1,g2.2] by A1,A6,A7,A8;
      now
        let z being object;
        assume z in {1,2};
        then z = 1 or z = 2 by TARSKI:def 2;
        hence g1.z = g2.z by A12,XTUPLE_0:1;
      end;
      hence thesis by A3,A10,A11,A8,A9,FUNCT_1:2;
    end;
    thus dom f = product <*X,Y*> by A1;
    thus rng f c= [:X,Y:]
    proof
      let z be object;
      assume z in rng f;
      then consider t being object such that
A13:  t in dom f and
A14:  z = f.t by FUNCT_1:def 3;
      consider g being Function such that
A15:  t = g and
      dom g = dom <*X,Y*> and
A16:  for y being object st y in dom <*X,Y*> holds g.y in <*X,Y*>.y by A1,A13,
CARD_3:def 5;
      1 in {1,2} by TARSKI:def 2;
      then
A17:  g.1 in X by A3,A4,A16;
      2 in {1,2} by TARSKI:def 2;
      then
A18:  g.2 in Y by A3,A2,A16;
      z = [g.1,g.2] by A1,A13,A14,A15;
      hence thesis by A17,A18,ZFMISC_1:87;
    end;
    let z be object;
    set g = <*z`1,z`2*>;
A19: g.1 = z`1;
A20: g.2 = z`2;
    assume
A21: z in [:X,Y:];
    then
A22: z`2 in Y by MCART_1:10;
    z`1 in X by A21,MCART_1:10;
    then
A23: g in product <*X,Y*> by A22,FINSEQ_3:124;
    z = [z`1,z`2] by A21,MCART_1:21;
    then f.g = z by A23,A1,A19,A20;
    hence thesis by A1,A23,FUNCT_1:def 3;
  end;
  hence card product <*X,Y*> = card [:X,Y:] by CARD_1:5
    .= card [:card X, card Y:] by CARD_2:7
    .= (card X)*`card Y by CARD_2:def 2;
end;
