reserve G,F for RealLinearSpace;

theorem
  for X,Y be non empty RealNormSpace-Sequence
  holds ex I be Function of product <* product X,product Y *>,product (X^Y)
  st I is one-to-one & I is onto
  & ( for x be Point of product X, y be Point of product Y
  holds ex x1,y1 be FinSequence
  st x=x1 & y=y1 & I.<*x,y*> = x1^y1 )
  & ( for v,w be Point of product <* product X,product Y *>
  holds I.(v+w) = I.v + I.w )
  & ( for v be Point of product <* product X,product Y *>,
  r be Element of REAL
  holds I.(r*v)=r*(I.v) )
  & I.(0.(product <* product X,product Y *>)) = 0.product (X^Y)
  & ( for v be Point of product <* product X,product Y *>
  holds ||. I.v .|| = ||.v.|| )
  proof
    let X,Y be non empty RealNormSpace-Sequence;
    set PX = product X;
    set PY = product Y;
    set PXY = product(X^Y);
    consider K be Function of [:PX,PY:],PXY such that
    A1: K is one-to-one & K is onto
    & ( for x be Point of PX, y be Point of PY
    holds ex x1,y1 be FinSequence st x=x1 & y=y1 & K.(x,y) = x1^y1 )
    & ( for v,w be Point of [:PX,PY:] holds K.(v+w) = K.v + K.w )
    & ( for v be Point of [:PX,PY:], r be Element of REAL
    holds K.(r*v)=r*(K.v) )
    & K.(0.[:PX,PY:]) = 0.PXY
    & ( for v be Point of [:PX,PY:] holds ||. K.v .|| = ||.v.|| ) by Th17;
    consider J be Function of [:PX,PY:],product<*PX,PY*> such that
    A2: J is one-to-one & J is onto
    & ( for x be Point of PX, y be Point of PY holds J.(x,y) = <*x,y*> )
    & ( for v,w be Point of [:PX,PY:] holds J.(v+w) = J.v + J.w )
    & ( for v be Point of [:PX,PY:], r be Real
    holds J.(r*v)=r*(J.v) )
    & 0. product <*PX,PY*> = J.(0.[:PX,PY:])
    & ( for v be Point of [:PX,PY:] holds ||. J.v .|| = ||.v.|| ) by Th15;
    A3:rng J = the carrier of product <*PX,PY*> by A2,FUNCT_2:def 3; then
    reconsider JB=J" as Function of the carrier of product <*PX,PY*>,
    the carrier of [:PX,PY:] by A2,FUNCT_2:25;
    A4:dom (J") = rng J & rng (J") = dom J by A2,FUNCT_1:33; then
    A5:dom (J") = the carrier of product <*PX,PY*> by A2,FUNCT_2:def 3;
    A6:rng (J") = the carrier of [:PX,PY:] by A4,FUNCT_2:def 1;
    reconsider I= K*JB as Function of product <*PX,PY*>,PXY;
    take I;
    thus I is one-to-one by A1,A2;
    rng K = the carrier of PXY by A1,FUNCT_2:def 3; then
    rng I = the carrier of PXY by A6,FUNCT_2:14;
    hence I is onto by FUNCT_2:def 3;
    thus for x be Point of PX, y be Point of PY
    holds ex x1,y1 be FinSequence st x=x1 & y=y1 & I.<*x,y*> = x1^y1
    proof
      let x be Point of PX, y be Point of PY;
      consider x1,y1 be FinSequence such that
      A7:  x=x1 & y=y1 & K.(x,y) = x1^y1 by A1;
      A8: J.(x,y) = <*x,y*> by A2;
      [x,y] in the carrier of [:PX,PY:]; then
      A9: [x,y] in dom J by FUNCT_2:def 1;
      I.<*x,y*> = K.(JB.(J.[x,y])) by A8,A5,FUNCT_1:13; then
      I.<*x,y*> = x1^y1 by A7,A9,A2,FUNCT_1:34;
      hence thesis by A7;
    end;

    thus for v,w be Point of product <*PX,PY*> holds I.(v+w) = I.v + I.w
    proof
      let v,w be Point of product <*PX,PY*>;
      consider x be Element of the carrier of [:PX,PY:] such that
      A10:  v=J.x by A3,FUNCT_2:113;
      consider y be Element of the carrier of [:PX,PY:] such that
      A11:  w=J.y by A3,FUNCT_2:113;
      x in the carrier of [:PX,PY:] & y in the carrier of [:PX,PY:]
      & x + y in the carrier of [:PX,PY:]; then
      x in dom J & y in dom J & x + y in dom J by FUNCT_2:def 1; then
      A12:JB.v = x & JB.w = y & JB.(J.(x+y)) = x+y by A10,A11,A2,FUNCT_1:34;
      v in rng J & w in rng J by A3; then
      A13:v in dom JB & w in dom JB by A2,FUNCT_1:33;
      v+w = J.(x+y) by A10,A11,A2; then
      I.(v+w) = K.(x+y) by A12,A5,FUNCT_1:13
      .= K.x + K.y by A1
      .= (K*JB).v + K.(JB.w) by A12,A13,FUNCT_1:13;
      hence I.(v+w) = I.v + I.w by A13,FUNCT_1:13;
    end;
    thus for v be Point of product <*PX,PY*>, r be Element of REAL
    holds I.(r*v)=r*(I.v)
    proof
      let v be Point of product <*PX,PY*>, r be Element of REAL;
      consider x be Element of the carrier of [:PX,PY:] such that
      A14:  v=J.x by A3,FUNCT_2:113;
      x in the carrier of [:PX,PY:]; then
      x in dom J by FUNCT_2:def 1; then
      A15:JB.v = x by A14,A2,FUNCT_1:34;
      v in rng J by A3; then
      A16:v in dom JB by A2,FUNCT_1:33;
      r*x in the carrier of [:PX,PY:]; then
      A17: r*x in dom J by FUNCT_2:def 1;
      r*v =J.(r*x) by A14,A2; then
      I.(r*v) = K.(JB.(J.(r*x))) by A5,FUNCT_1:13;
      hence I.(r*v) = K.(r*x) by A17,A2,FUNCT_1:34
      .= r*(K.x) by A1
      .= r*(I.v) by A15,A16,FUNCT_1:13;
    end;
    thus I.(0.(product<*PX,PY*>)) = 0.product(X^Y)
    proof
      0.([:PX,PY:]) in the carrier of [:PX,PY:]; then
      A18:0.([:PX,PY:]) in dom J by FUNCT_2:def 1;
      0. product <*PX,PY*> in rng J by A3; then
      0.(product <*PX,PY*>) in dom JB by A2,FUNCT_1:33; then
      I.(0.(product <*PX,PY*>)) = K.(JB.(J.(0.([:PX,PY:])))) by A2,FUNCT_1:13;
      hence I.(0.(product <*PX,PY*>)) = 0.PXY by A1,A18,A2,FUNCT_1:34;
    end;
    thus for v be Point of product <*PX,PY*> holds ||. I.v .|| = ||.v.||
    proof
      let v be Point of product <*PX,PY*>;
      consider x be Element of the carrier of [:PX,PY:] such that
      A19:  v=J.x by A3,FUNCT_2:113;
      x in the carrier of [:PX,PY:]; then
      A20:x in dom J by FUNCT_2:def 1;
      v in rng J by A3; then
      v in dom JB by A2,FUNCT_1:33; then
      I.v = K.(JB.(J.x)) by A19,FUNCT_1:13
      .= K.x by A20,A2,FUNCT_1:34; then
      ||. I.v .|| =||.x.|| by A1;
      hence ||. I.v .|| = ||.v.|| by A2,A19;
    end;
  end;
