
theorem
  for m,n be non zero Element of NAT
  ex f be Function of [:REAL-NS m,REAL-NS n:], REAL-NS(m+n)
  st f is one-to-one & f is onto
    & ( for x be Element of REAL m, y be Element of REAL n
        holds f.(x, y) = x ^ y )
    & ( for u,v be Point of [:REAL-NS m,REAL-NS n:]
        holds f.(u + v) = f.u + f.v )
    & ( for u be Point of [:REAL-NS m,REAL-NS n:], r be Real
        holds f.(r * u) = r * f.u )
  & f.(0.[:REAL-NS m,REAL-NS n:]) = 0.(REAL-NS(m+n))
  & ( for u be Point of [:REAL-NS m,REAL-NS n:]
      holds ||.f.u.|| = ||.u.|| )
proof
  let m,n be non zero Element of NAT;

  consider f be Function of [:REAL m,REAL n:],REAL(m+n)
  such that
  A1: ( for x be Element of REAL m, y be Element of REAL n
        holds f.(x, y) = x ^ y )
  & f is one-to-one & f is onto by Th14;

  A2: the carrier of REAL-NS m = REAL m
    & the carrier of REAL-NS n = REAL n
    & the carrier of REAL-NS(m+n) = REAL(m+n) by REAL_NS1:def 4;

  reconsider f as Function of [:REAL-NS m,REAL-NS n:], REAL-NS(m+n) by A2;
  take f;

  A3: for u,v be Point of [:REAL-NS m,REAL-NS n:] holds f.(u+v) = f.u + f.v
  proof
    let u,v be Point of [:REAL-NS m,REAL-NS n:];

    consider x1 be Point of REAL-NS m, y1 be Point of REAL-NS n such that
    A4: u = [x1,y1] by PRVECT_3:18;

    consider x2 be Point of REAL-NS m, y2 be Point of REAL-NS n such that
    A5: v = [x2,y2] by PRVECT_3:18;

    reconsider px1 = x1, px2 = x2 as Element of REAL m by REAL_NS1:def 4;
    reconsider py1 = y1, py2 = y2 as Element of REAL n by REAL_NS1:def 4;
    reconsider px1x2 = x1 + x2 as Element of REAL m by REAL_NS1:def 4;
    reconsider py1y2 = y1 + y2 as Element of REAL n by REAL_NS1:def 4;

    A6: f.u
      = f.(x1, y1) by A4
    .= px1 ^ py1 by A1;

    A7: f.v
      = f.(x2, y2) by A5
    .= px2 ^ py2 by A1;

    A8: f.(u+v)
      = f.(x1 + x2, y1 + y2) by A4,A5,PRVECT_3:18
    .= px1x2 ^ py1y2 by A1;
    reconsider fu = f.u, fv = f.v, fuv = f.(u + v)
      as Element of REAL(m+n) by REAL_NS1:def 4;

    A9: fu + fv = f.u + f.v by REAL_NS1:2;
    A10: x1 + x2 = px1 + px2 by REAL_NS1:2;
    A11: y1 + y2 = py1 + py2 by REAL_NS1:2;

    A12: len(fu + fv) = m + n by CARD_1:def 7;
    A13: len px1 = m & len px2 = m by CARD_1:def 7;
    A14: len py1 = n & len py2 = n by CARD_1:def 7;
    A15: len px1x2 = m by CARD_1:def 7;
    A16: len py1y2 = n by CARD_1:def 7;

    for i be Nat st 1 <= i & i <= len fuv
    holds fuv.i = (fu + fv).i
    proof
      let i be Nat;
      assume
      A17: 1 <= i & i <= len fuv;

      per cases;
      suppose
        A18: i <= m;
        then i in Seg (len px1x2) by A15,A17;
        then i in dom px1x2 by FINSEQ_1:def 3;
        then
        A19: fuv.i = px1x2.i by A8,FINSEQ_1:def 7;
        A20: (fu + fv).i = fu.i + fv.i by RVSUM_1:11;

        i in Seg len px1 by A13,A17,A18;
        then i in dom px1 by FINSEQ_1:def 3;
        then
        A21: fu.i = px1.i by A6,FINSEQ_1:def 7;

        i in Seg(len px2) by A13,A17,A18;
        then i in dom px2 by FINSEQ_1:def 3;
        then fv.i = px2.i by A7,FINSEQ_1:def 7;

        hence fuv.i = (fu+fv).i by A10,A19,A20,A21,RVSUM_1:11;
      end;
      suppose
        m < i;
        then not i in Seg(len px1x2) by A15,FINSEQ_1:1;
        then
        A22: not i in dom px1x2 by FINSEQ_1:def 3;

        i in Seg (len fuv) by A17;
        then i in dom(px1x2 ^ py1y2) by A8,FINSEQ_1:def 3;
        then consider j be Nat such that
        A23: j in dom py1y2 & i = (len px1x2) + j by A22,FINSEQ_1:25;
        A24: fuv.i = py1y2.j by A8,A23,FINSEQ_1:def 7;
        A25: (fu + fv).i = fu.i + fv.i by RVSUM_1:11;

        j in Seg len (py1y2) by A23,FINSEQ_1:def 3;
        then j in dom py1 by A14,CARD_1:def 7,FINSEQ_1:def 3;
        then
        A26: fu.i = py1.j by A6,A13,A15,A23,FINSEQ_1:def 7;
        j in Seg(len py2) by A16,A23,CARD_1:def 7,FINSEQ_1:def 3;
        then j in dom py2 by FINSEQ_1:def 3;
        then
        fv.i = py2.j by A7,A23,A13,A15,FINSEQ_1:def 7;
        hence fuv.i = (fu + fv).i by A11,A24,A25,A26,RVSUM_1:11;
      end;
    end;
    hence thesis by A9,A12,FINSEQ_1:14,CARD_1:def 7;
  end;
  A28: for u be Point of [:REAL-NS m,REAL-NS n:],
            r be Real
        holds f.(r * u) = r * (f.u)
  proof
    let u be Point of [:REAL-NS m,REAL-NS n:],
        r be Real;

    consider x1 be Point of REAL-NS m,
              y1 be Point of REAL-NS n such that
    A29: u = [x1,y1] by PRVECT_3:18;

    reconsider px1 = x1, prx1 = r * x1 as Element of REAL m
      by REAL_NS1:def 4;

    reconsider py1 = y1, pry1 = r * y1 as Element of REAL n
      by REAL_NS1:def 4;

    A30: f.u
        = f.(x1, y1) by A29
      .= px1 ^ py1 by A1;

    A31: f.(r * u)
      = f.(r * x1, r * y1) by A29,PRVECT_3:18
      .= prx1 ^ pry1 by A1;

    reconsider fu = f.u, fru = f.(r * u)
      as Element of REAL(m+n) by REAL_NS1:def 4;

    A32: r * fu = r * f.u by REAL_NS1:3;
    A33: r * x1 = r * px1 by REAL_NS1:3;
    A34: r * y1 = r * py1 by REAL_NS1:3;
    A35: len(r * fu) = m+n by CARD_1:def 7;

    A36: len px1 = m by CARD_1:def 7;
    A37: len py1 = n by CARD_1:def 7;
    A38: len prx1 = m by CARD_1:def 7;

    for i be Nat st 1 <= i & i <= len fru
    holds fru.i = (r * fu).i
    proof
      let i be Nat;
      assume
      A39: 1 <= i & i <= len fru;

      per cases;
      suppose
        A40: i <= m;
        then i in Seg(len prx1) by A38,A39;
        then i in dom prx1 by FINSEQ_1:def 3;
        then
        A41: fru.i = prx1.i by A31,FINSEQ_1:def 7;
        A42: (r * fu).i = r * fu.i by RVSUM_1:44;
        i in Seg (len px1) by A36,A39,A40;
        then i in dom px1 by FINSEQ_1:def 3;
        then fu.i = px1.i by A30,FINSEQ_1:def 7;
        hence fru.i = (r * fu).i by A33,A41,A42,RVSUM_1:44;
      end;
      suppose
        m < i;
        then not i in Seg len prx1 by A38,FINSEQ_1:1;
        then
        A43: not i in dom prx1 by FINSEQ_1:def 3;
        i in Seg len fru by A39;
        then i in dom(prx1 ^ pry1) by A31,FINSEQ_1:def 3;
        then consider j be Nat such that
        A44: j in dom pry1 & i = (len prx1) + j by A43,FINSEQ_1:25;

        A45: fru.i = pry1.j by A44,A31,FINSEQ_1:def 7;
        A46: (r * fu).i = r * fu.i by RVSUM_1:44;
        j in Seg len (pry1) by A44,FINSEQ_1:def 3;
        then j in dom py1 by A37,CARD_1:def 7,FINSEQ_1:def 3;
        then fu.i = py1.j by A30,A36,A38,A44,FINSEQ_1:def 7;

        hence fru.i = (r * fu).i by A34,A45,A46,RVSUM_1:44;
      end;
    end;
    hence thesis by A32,A35,FINSEQ_1:14,CARD_1:def 7;
  end;

  0.[:REAL-NS m,REAL-NS n:]
  = 0.[:REAL-NS m,REAL-NS n:] + 0.[:REAL-NS m,REAL-NS n:] by RLVECT_1:4;

  then
  A47: f.(0.[:REAL-NS m,REAL-NS n:]) + f.(0.[:REAL-NS m,REAL-NS n:])
      - f.(0.[:REAL-NS m,REAL-NS n:])
    = f.(0.[:REAL-NS m,REAL-NS n:]) - f.(0.[:REAL-NS m,REAL-NS n:]) by A3
  .= 0.(REAL-NS (m+n)) by RLVECT_1:15;

  A48: f.(0.[:REAL-NS m,REAL-NS n:]) + f.(0.[:REAL-NS m,REAL-NS n:])
      - f.(0.[:REAL-NS m,REAL-NS n:])
    = f.(0.[:REAL-NS m,REAL-NS n:]) +
    (f.(0.[:REAL-NS m,REAL-NS n:] ) - f.(0.[:REAL-NS m,REAL-NS n:]))
      by RLVECT_1:28
  .= f.(0.[:REAL-NS m,REAL-NS n:]) + 0.(REAL-NS (m+n)) by RLVECT_1:15
  .= f.(0.[:REAL-NS m,REAL-NS n:]) by RLVECT_1:4;

  for u be Point of [:REAL-NS m,REAL-NS n:]
        holds ||.f.u.|| = ||.u.||
  proof
    let u be Point of [:REAL-NS m,REAL-NS n:];
    consider x1 be Point of REAL-NS m, y1 be Point of REAL-NS n
    such that
    A50: u = [x1,y1] by PRVECT_3:18;

    reconsider px1 = x1 as Element of REAL m by REAL_NS1:def 4;
    reconsider py1 = y1 as Element of REAL n by REAL_NS1:def 4;

    A51: f.u
      = f.(x1, y1) by A50
    .= px1 ^ py1 by A1;

    consider v be Element of REAL 2 such that
    A52: v = <*||.x1.||,||.y1.||*> & ||.u.|| = |.v.| by A50,PRVECT_3:18;

    reconsider fu = f.u as Element of REAL (m+n) by REAL_NS1:def 4;
    A53: ||.f.u.|| = |.fu.| by REAL_NS1:1;

    sqr px1 is Element of REAL m
      & for k be Nat st k in Seg m holds 0 <= (sqr px1).k
    proof
      thus sqr px1 is Element of REAL m;
      let k be Nat;
      assume k in Seg m;
      (sqr px1).k
        = (px1.k) ^2 by VALUED_1:11
      .= (px1.k) * (px1.k);
      hence thesis by XREAL_1:63;
    end;
    then
    A54: |.px1.| = sqrt(Sum(sqr px1)) & 0 <= Sum(sqr px1) by REAL_NS1:7;

    sqr py1 is Element of REAL n
      & for k be Nat st k in Seg n holds 0 <= (sqr py1).k
    proof
      thus sqr py1 is Element of REAL n;
      let k be Nat;
      (sqr py1).k
        = (py1.k) ^2 by VALUED_1:11
      .= (py1.k) * (py1.k);
      hence thesis by XREAL_1:63;
    end;
    then |.py1.| = sqrt(Sum(sqr py1)) & 0 <= Sum(sqr py1) by REAL_NS1:7;
    then
    A55: |.py1.| ^2 = Sum(sqr py1) by SQUARE_1:def 2;

    sqr(px1 ^ py1) is Element of REAL(m+n)
      & for k be Nat st k in Seg(m+n) holds 0 <= (sqr(px1 ^ py1)).k
    proof
      sqr(fu) is Element of REAL(m+n);
      hence sqr(px1 ^ py1) is Element of REAL(m+n) by A51;
      let k be Nat;
      (sqr(px1 ^ py1)).k
        = ((px1 ^ py1).k) ^2 by VALUED_1:11
      .= ((px1 ^ py1).k) * ((px1 ^ py1).k);
      hence thesis by XREAL_1:63;
    end;
    then
    A56: |.px1 ^ py1.| = sqrt(Sum sqr(px1 ^ py1))
        & 0 <= Sum(sqr(px1 ^ py1)) by REAL_NS1:7;

    reconsider ww = v as Point of TOP-REAL 2 by EUCLID:22;
    A57: ww `1 = ||.x1.|| by A52;
    A58: ww `2 = ||.y1.|| by A52;

    |.fu.|^2
      = Sum(sqr(px1 ^ py1) ) by A51,A56,SQUARE_1:def 2
    .= Sum((sqr px1) ^ (sqr py1)) by TOPREAL7:10
    .= Sum((sqr px1)) + Sum(sqr py1) by RVSUM_1:75
    .= |.px1.| ^2 + |.py1.| ^2 by A54,A55,SQUARE_1:def 2
    .= ||.x1.|| ^2 + |.py1.| ^2 by REAL_NS1:1
    .= ||.x1.|| ^2 + ||.y1.|| ^2 by REAL_NS1:1
    .= |.v.|^2 by A57,A58,JGRAPH_1:29;

    then sqrt(|.fu.|^2) = |.v.| by SQUARE_1:22;
    hence thesis by A52,A53,SQUARE_1:22;
  end;

  hence thesis by A1,A3,A28,A47,A48,REAL_NS1:def 4;
end;
