reserve G,F for RealLinearSpace;

theorem Th6:
  for X,Y be non-empty non empty FinSequence
  ex I be Function of [: product X,product Y :],product(X^Y)
  st I is one-to-one & I is onto
  & for x,y be FinSequence st x in product X & y in product Y
  holds I.(x,y) = x^y
  proof
    let X,Y be non-empty non empty FinSequence;
    defpred P[object,object,object] means
    ex x,y be FinSequence st x=$1 & y=$2 & $3 = x^y;
    A1:for x,y be object st x in product X & y in product Y
    ex z be object st z in product (X^Y) & P[x,y,z]
    proof
      let x,y be object;
      assume A2: x in product X & y in product Y; then
      consider g be Function such that
      A3: x = g & dom g = dom X
      & for z be object st z in dom X holds g.z in X.z by CARD_3:def 5;
      A4:dom g = Seg len X by A3,FINSEQ_1:def 3; then
      reconsider g as FinSequence by FINSEQ_1:def 2;
      consider h be Function such that
      A5: y = h & dom h = dom Y
      & for z be object st z in dom Y holds h.z in Y.z by A2,CARD_3:def 5;
      A6:dom h = Seg len Y by A5,FINSEQ_1:def 3; then
      reconsider h as FinSequence by FINSEQ_1:def 2;
      A7:len g = len X & len h = len Y by A4,A6,FINSEQ_1:def 3;
      A8:dom (g^h) = Seg (len g + len h) by FINSEQ_1:def 7
      .= Seg len (X^Y) by A7,FINSEQ_1:22
      .= dom (X^Y) by FINSEQ_1:def 3;
      for z be object st z in dom (X^Y) holds (g^h).z in (X^Y).z
      proof
        let z be object;
        assume A9:z in dom (X^Y); then
        reconsider k=z as Element of NAT;
        per cases by A9,FINSEQ_1:25;
        suppose A10: k in dom X; then
          A11:  g.k in X.k by A3;
          g.k = (g^h).k by A10,A3,FINSEQ_1:def 7;
          hence (g^h).z in (X^Y).z by A11,A10,FINSEQ_1:def 7;
        end;
        suppose ex n be Nat st n in dom Y & k=len X + n; then
          consider n be Nat such that
          A12:   n in dom Y & k=len X + n;
          A13:  h.n in Y.n by A12,A5;
          h.n = (g^h).k by A12,A7,A5,FINSEQ_1:def 7;
          hence (g^h).z in (X^Y).z by A13,A12,FINSEQ_1:def 7;
        end;
      end; then
      (g^h) in product (X^Y) by A8,CARD_3:9;
      hence thesis by A3,A5;
    end;
    consider I be Function of [:product X,product Y:], product (X^Y) such that
    A14: for x,y be object st x in product X & y in product Y
    holds P[x,y,I.(x,y)] from BINOP_1:sch 1(A1);
    A15:
    for x,y be FinSequence st x in product X & y in product Y
    holds I.(x,y) = x^y
    proof
      let x,y be FinSequence;
      assume x in product X & y in product Y; then
      ex x1,y1 be FinSequence st x=x1 & y=y1 & I.(x,y)=x1^y1 by A14;
      hence thesis;
    end;
    now let z1,z2 be object;
      assume A16: z1 in [:product X,product Y:] & z2 in [:product X,product Y:]
      & I.z1=I.z2;
      consider x1,y1 be object such that
      A17:  x1 in product X & y1 in product Y & z1=[x1,y1]
      by A16,ZFMISC_1:def 2;
      consider x2,y2 be object such that
      A18:  x2 in product X & y2 in product Y & z2=[x2,y2]
      by A16,ZFMISC_1:def 2;
      consider xx1,yy1 be FinSequence such that
      A19: xx1=x1 & yy1=y1 & I.(x1,y1) = xx1^yy1 by A14,A17;
      consider xx2,yy2 be FinSequence such that
      A20: xx2=x2 & yy2=y2 & I.(x2,y2) = xx2^yy2 by A14,A18;
      A21:dom xx1 = dom X by A17,A19,CARD_3:9
      .= dom xx2 by A18,A20,CARD_3:9;
      xx1 = (xx1^yy1) | (dom xx1) by FINSEQ_1:21
      .= xx2 by A16,A17,A18,A19,A20,A21,FINSEQ_1:21;
      hence z1=z2 by A16,A17,A18,A19,A20,FINSEQ_1:33;
    end; then
    A22:I is one-to-one by FUNCT_2:19;
    now let w be object;
      assume w in product (X^Y); then
      consider g be Function such that
      A23:  w = g & dom g = dom (X^Y)
      & for i be object st i in dom (X^Y) holds g.i in (X^Y).i
by CARD_3:def 5;
      A24: dom g = Seg len (X^Y) by A23,FINSEQ_1:def 3; then
      reconsider g as FinSequence by FINSEQ_1:def 2;
      set x = g | (len X);
      set y = g/^(len X);
      A26: x^y = g by RFINSEQ:8;
      A27:len(X^Y) = len X + len Y by FINSEQ_1:22; then
      A28:len X <=len(X^Y) by NAT_1:11;
      A29:len g= len (X^Y) by A24,FINSEQ_1:def 3; then
      len(g|len X) = len X by A27,FINSEQ_1:59,NAT_1:11; then
      A30:dom x = Seg len X by FINSEQ_1:def 3
      .= dom X by FINSEQ_1:def 3;
      for z be object st z in dom X holds x.z in X.z
      proof
        let z be object;
        assume A31:z in dom X; then
        reconsider k = z as Element of NAT;
        A32:  dom X c= dom (X^Y) by FINSEQ_1:26;
        A33: x.k = g.k by A31,A26,A30,FINSEQ_1:def 7;
        X.k = (X^Y).k by A31,FINSEQ_1:def 7;
        hence x.z in X.z by A33,A23,A31,A32;
      end; then
      A34: x in product X by A30,CARD_3:9;
      dom x = Seg len X by A30,FINSEQ_1:def 3; then
      A35:len x = len X by FINSEQ_1:def 3;
      len y = len g - len X by A28,A29,RFINSEQ:def 1
      .= len Y by A29,A27; then
      Seg len y = dom Y by FINSEQ_1:def 3; then
      A36:dom y = dom Y by FINSEQ_1:def 3;
      for z be object st z in dom Y holds y.z in Y.z
      proof
        let z be object;
        assume A37:z in dom Y; then
        reconsider k=z as Element of NAT;
        A38: y.k = g.(len X + k) by A37,A26,A35,A36,FINSEQ_1:def 7;
        Y.k = (X^Y).(len X + k) by A37,FINSEQ_1:def 7;
        hence y.z in Y.z by A38,A23,A37,FINSEQ_1:28;
      end; then
      A39: y in product Y by A36,CARD_3:9;
      reconsider z = [x,y] as Element of [:product X,product Y:]
      by A34,A39,ZFMISC_1:87;
      w = I.(x,y) by A23,A26,A15,A34,A39
      .= I.z;
      hence w in rng I by FUNCT_2:112;
    end; then
    product (X^Y) c= rng I by TARSKI:def 3; then
    product (X^Y) = rng I by XBOOLE_0:def 10; then
    I is onto by FUNCT_2:def 3;
    hence thesis by A15,A22;
  end;
