reserve X,Y,Z for RealLinearSpace;

theorem
  ex I be LinearOperator of
    R_VectorSpace_of_LinearOperators(X,R_VectorSpace_of_LinearOperators(Y,Z)),
    R_VectorSpace_of_BilinearOperators(X,Y,Z) st I is bijective
   & for u be Point of
     R_VectorSpace_of_LinearOperators(X,R_VectorSpace_of_LinearOperators(Y,Z))
     holds
       for x be Point of X,y be Point of Y
       holds (I.u).(x,y) = (u.x).y
  proof
    set XC = the carrier of X;
    set YC = the carrier of Y;
    set ZC = the carrier of Z;
    consider I0 being Function of Funcs(XC,Funcs(YC,ZC)), Funcs([:XC,YC:],ZC)
    such that
    A1: I0 is bijective
      & for f being Function of XC,Funcs(YC,ZC)
        for d, e being object st d in XC & e in YC
        holds (I0 . f) . (d, e) = (f . d) . e by NDIFF_6:1;
    set LXYZ = the carrier of R_VectorSpace_of_LinearOperators
      (X,R_VectorSpace_of_LinearOperators(Y,Z));
    set BXYZ = the carrier of R_VectorSpace_of_BilinearOperators(X,Y,Z);
    set LYZ = the carrier of R_VectorSpace_of_LinearOperators(Y,Z);
    now
      let x be object;
      assume x in Funcs(XC, LYZ); then
      consider f being Function such that
      A5: x = f & dom f = XC & rng f c= LYZ by FUNCT_2:def 2;
      rng f c= Funcs(YC, ZC) by A5,XBOOLE_1:1;
      hence x in Funcs(XC, Funcs( YC,ZC)) by A5,FUNCT_2:def 2;
    end; then
    A6: Funcs(XC, LYZ) c= Funcs(XC, Funcs(YC,ZC)) by TARSKI:def 3; then
    LXYZ c= Funcs(XC, Funcs( YC,ZC)) by XBOOLE_1:1; then
    reconsider I = I0 | LXYZ as Function of LXYZ,Funcs ([:XC,YC:],ZC)
      by FUNCT_2:32;
    A7: for x being Element of LXYZ holds
        ( for p be Point of X,q be Point of Y holds
          ex G be LinearOperator of Y,Z
          st G = x.p & (I.x).(p,q) = G.q )
        & I.x in BXYZ
    proof
      let f be Element of LXYZ;
      A8: I.f = I0.f by FUNCT_1:49;
      A9: f in Funcs(XC, Funcs( YC,ZC)) by A6,TARSKI:def 3,XBOOLE_1:1; then
      A10: f is Function of XC, Funcs(YC,ZC) by FUNCT_2:66;
      reconsider g = f as Function of XC, Funcs(YC,ZC) by A9,FUNCT_2:66;
      reconsider F = f
        as LinearOperator of X,R_VectorSpace_of_LinearOperators(Y,Z)
          by LOPBAN_1:def 6;
      thus for x be Point of X,y be Point of Y holds
           ex G be LinearOperator of Y,Z
           st G = f.x & (I . f) . (x,y) = G.y
      proof
        let x be Point of X,y be Point of Y;
        g.x = F.x; then
        reconsider G = g.x as LinearOperator of Y,Z by LOPBAN_1:def 6;
        take G;
        thus thesis by A1,A8;
      end;
      reconsider BL = I0.f as Function of [:X,Y:],Z by A9,FUNCT_2:5,66;
      A14: for x1,x2 be Point of X, y be Point of Y
           holds BL.(x1+x2,y) = BL.(x1,y) + BL.(x2,y)
      proof
        let x1,x2 be Point of X, y be Point of Y;
        A15: BL.(x1,y) = (F.x1).y by A1,A10;
        A16: BL.(x2,y) = (F.x2).y by A1,A10;
        A17: BL.(x1+x2,y) = (F.(x1+x2)).y by A1,A10;
        F.(x1+x2) = F.x1 + F.x2 by VECTSP_1:def 20;
        hence thesis by A15,A16,A17,LOPBAN_1:16;
      end;
      A18: for x be Point of X, y be Point of Y, a be Real
           holds BL.(a*x,y) = a * BL.(x,y)
      proof
        let x be Point of X, y be Point of Y, a be Real;
        A19: BL.(a*x,y) = (F.(a*x)).y by A1,A10;
        A20: BL.(x,y) = (F.x).y by A1,A10;
        F.(a*x) = a * F.x by LOPBAN_1:def 5;
        hence thesis by A19,A20,LOPBAN_1:17;
      end;
     A21: for x be Point of X, y1,y2 be Point of Y
           holds BL.(x,y1+y2) = BL.(x,y1) + BL.(x,y2)
      proof
        let x be Point of X, y1,y2 be Point of Y;
        reconsider Fx = F.x as LinearOperator of Y,Z by LOPBAN_1:def 6;
        A22: BL.(x,y1) = Fx.y1 by A1,A10;
        A23: BL.(x,y2) = Fx.y2 by A1,A10;
        BL.(x,y1+y2) = Fx.(y1+y2) by A1,A10;
        hence thesis by A22,A23,VECTSP_1:def 20;
      end;
      A25: for x be Point of X, y be Point of Y, a be Real
           holds BL.(x,a*y) = a * BL.(x,y)
      proof
        let x be Point of X, y be Point of Y, a be Real;
        reconsider Fx = F.x as LinearOperator of Y,Z by LOPBAN_1:def 6;
        A26: BL.(x,y) = Fx.y by A1,A10;
        BL. (x,a*y) = Fx.(a*y) by A1,A10;
        hence thesis by A26,LOPBAN_1:def 5;
      end;
      reconsider BL as BilinearOperator of X,Y,Z
        by A14,A18,A21,A25,LOPBAN_8:11;
      BL in BXYZ by Def6;
      hence I.f in BXYZ by FUNCT_1:49;
    end; then
    rng I c= BXYZ by FUNCT_2:114; then
    reconsider I as Function of LXYZ,BXYZ by FUNCT_2:6;
    A28: for x1,x2 be Element of LXYZ holds I.(x1+x2) = I.x1 + I.x2
    proof
      let x1,x2 be Element of LXYZ;
      for p be Point of X,q be Point of Y
      holds (I.(x1+x2)).(p,q) = (I.x1).(p,q) + (I.x2).(p,q)
      proof
        let p be Point of X,q be Point of Y;
        consider Gx1p be LinearOperator of Y,Z such that
        A29: Gx1p = x1.p & (I.x1).(p,q) = Gx1p.q by A7;
        consider Gx2p be LinearOperator of Y,Z such that
        A30: Gx2p = x2.p & (I.x2).(p,q) = Gx2p.q by A7;
        consider Gx1x2p be LinearOperator of Y,Z such that
        A31: Gx1x2p = (x1+x2).p & (I.(x1+x2)).(p,q) = Gx1x2p.q by A7;
        (x1+x2).p = x1.p + x2.p by LOPBAN_1:16;
        hence thesis by A29,A30,A31,LOPBAN_1:16;
      end;
      hence thesis by Th16;
    end;
    for x be Element of LXYZ, a be Real holds I.(a*x) = a * I.x
    proof
      let x be Element of LXYZ, a be Real;
      for p be Point of X,q be Point of Y
      holds (I.(a*x)).(p,q) = a * (I.x).(p,q)
      proof
        let p be Point of X, q be Point of Y;
        consider Gxp be LinearOperator of Y,Z such that
        A33: Gxp = x.p & (I.x).(p,q) = Gxp.q by A7;
        consider Gxap be LinearOperator of Y,Z such that
        A34: Gxap = (a*x).p & (I.(a*x)).(p,q) = Gxap.q by A7;
        (a*x).p = a * x.p by LOPBAN_1:17;
        hence thesis by A33,A34,LOPBAN_1:17;
      end;
      hence thesis by Th17;
    end;
    then
    reconsider I as LinearOperator of
      R_VectorSpace_of_LinearOperators(X,
        R_VectorSpace_of_LinearOperators(Y,Z)),
      R_VectorSpace_of_BilinearOperators(X,Y,Z)
        by A28,LOPBAN_1:def 5,VECTSP_1:def 20;
    A36: for u be Point of R_VectorSpace_of_LinearOperators
          (X,R_VectorSpace_of_LinearOperators(Y,Z)) holds
          for x be Point of X,y be Point of Y holds
          (I.u).(x,y) = (u.x).y
    proof
      let u be Point of R_VectorSpace_of_LinearOperators
        (X,R_VectorSpace_of_LinearOperators(Y,Z));
      let p be Point of X,q be Point of Y;
      consider G be LinearOperator of Y,Z such that
      A37: G = u.p & (I.u).(p,q) = G.q by A7;
      thus (I.u).(p,q) = (u.p).q by A37;
    end;
    for y being object st y in BXYZ holds
    ex x being object st x in LXYZ & y = I.x
    proof
      let y be object;
      assume
      A39: y in BXYZ; then
      y in Funcs ([:XC,YC:],ZC); then
      y in rng I0 by A1,FUNCT_2:def 3; then
      consider f be object such that
      A40: f in Funcs (XC,Funcs (YC,ZC)) & I0 . f = y by FUNCT_2:11;
      reconsider f as Function of XC,Funcs (YC,ZC) by A40,FUNCT_2:66;
      reconsider BL = y as BilinearOperator of X,Y,Z by A39,Def6;
      reconsider BLp = BL
        as Point of R_VectorSpace_of_BilinearOperators(X,Y,Z)
          by Def6;
      A42: dom f = XC by FUNCT_2:def 1;
      for x being object st x in XC holds f . x in LYZ
      proof
        let x be object;
        assume
        A43: x in XC; then
        reconsider fx = f.x as Function of YC,ZC by FUNCT_2:5,66;
        reconsider xp = x as Point of X by A43;
        A44: for p be Point of Y,q be Point of Y
             holds fx.(p+q) = fx.p + fx.q
        proof
          let p be Point of Y,q be Point of Y;
          A45: BL.(xp,p) = fx.p by A1,A40;
          A46: BL.(xp,q) = fx.q by A1,A40;
          BL.(xp,p+q) = fx.(p+q) by A1,A40;
          hence fx.(p+q) = fx.p +fx.q by A45,A46,LOPBAN_8:11;
        end;
        for p be Point of Y,a be Real holds fx.(a*p) = a * fx.p
        proof
          let p be Point of Y,a be Real;
          A48: BL.(xp,p) = fx.p by A1,A40;
          BL.(xp,a*p) = fx.(a*p) by A1,A40;
          hence fx.(a*p) = a * fx.p by A48,LOPBAN_8:11;
        end; then
        reconsider fx as LinearOperator of Y,Z
          by A44,LOPBAN_1:def 5,VECTSP_1:def 20;
        fx in LYZ by LOPBAN_1:def 6;
        hence f.x in LYZ;
      end; then
      reconsider f as Function of XC,LYZ by A42,FUNCT_2:3;
      A50: for x1,x2 be Point of X holds f.(x1+x2) = f.x1 + f.x2
      proof
        let x1,x2 be Point of X;
        reconsider fx1x2 = f.(x1+x2)
          as LinearOperator of Y,Z by LOPBAN_1:def 6;
        reconsider fx1 = f.x1 as LinearOperator of Y,Z by LOPBAN_1:def 6;
        reconsider fx2 = f.x2 as LinearOperator of Y,Z by LOPBAN_1:def 6;
        for y be Point of Y holds fx1x2.y = fx1.y + fx2.y
        proof
          let y be Point of Y;
          A51: BL.(x1,y) = fx1.y by A1,A40;
          A52: BL.(x2,y) = fx2.y by A1,A40;
          BL.(x1+x2,y) = fx1x2.y by A1,A40;
          hence fx1x2.y = fx1.y + fx2.y by A51,A52,LOPBAN_8:11;
        end;
        hence f.(x1+x2) = f.x1 + f.x2 by LOPBAN_1:16;
      end;
      for x be Point of X,a be Real holds f.(a*x) = a*f.x
      proof
        let x be Point of X,a be Real;
        reconsider fx = f.x as LinearOperator of Y,Z by LOPBAN_1:def 6;
        reconsider fax = f.(a*x) as LinearOperator of Y,Z by LOPBAN_1:def 6;
        for y be Point of Y holds fax.y = a * fx.y
        proof
          let y be Point of Y;
          A54: BL.(x,y) = fx.y by A1,A40;
          BL.(a*x,y) = fax.y by A1,A40;
          hence fax.y = a * fx.y by A54,LOPBAN_8:11;
        end;
        hence f.(a*x) = a * f.x by LOPBAN_1:17;
      end; then
      reconsider f as LinearOperator of X,
        R_VectorSpace_of_LinearOperators(Y,Z)
          by A50,LOPBAN_1:def 5,VECTSP_1:def 20;
      A56: f in LXYZ by LOPBAN_1:def 6;
      take f;
      thus thesis by A40,A56,FUNCT_1:49;
    end; then
    A58: rng I = BXYZ by FUNCT_2:10;
    reconsider I as LinearOperator of R_VectorSpace_of_LinearOperators
        (X,R_VectorSpace_of_LinearOperators(Y,Z)),
      R_VectorSpace_of_BilinearOperators(X,Y,Z);
    take I;
    I is one-to-one onto by A1,A58,FUNCT_1:52,FUNCT_2:def 3;
    hence thesis by A36;
  end;
