
theorem
for D,E,F be non empty set holds
 ex I be Function of Funcs(D,Funcs(E,F)), Funcs([:D,E:],F)
  st I is bijective
   & for f be Function of D,Funcs(E,F), d,e be object st d in D & e in E
      holds (I.f).(d,e) = (f.d).e
proof
   let D,E,F be non empty set;
   defpred P[object,object] means
    ex f be Function of D,Funcs(E,F), g be Function of [:D,E:],F
     st $1=f & $2=g &
        for d,e be object st d in D & e in E holds g.(d,e) = (f.d).e;
A1:for x be object st x in Funcs(D,Funcs(E,F))
    ex y be object st y in Funcs([:D,E:],F) & P[x,y]
   proof
    let x be object;
    assume x in Funcs(D,Funcs(E,F)); then
    consider f being Function such that
A2: x = f & dom f = D & rng f c= Funcs(E,F) by FUNCT_2:def 2;
    reconsider f as Function of D,Funcs(E,F) by FUNCT_2:2,A2;
    deffunc F0(object, object) = (f.$1).$2;
A3:for x,y be object st x in D & y in E holds F0(x,y) in F
    proof
     let d,e be object;
     assume A4: d in D & e in E; then
     f.d is Function of E,F by FUNCT_2:5,66;
     hence thesis by A4,FUNCT_2:5;
    end;
    consider g being Function of [:D,E:],F such that
A5: for x,y be object st
       x in D & y in E holds g.(x,y) = F0(x,y) from BINOP_1:sch 2(A3);
    g in Funcs([:D,E:],F) by FUNCT_2:8;
    hence thesis by A2,A5;
   end;
   consider I be Function of Funcs(D,Funcs(E,F)), Funcs([:D,E:],F) such that
A6: for x be object st x in Funcs(D,Funcs(E,F)) holds P[x,I.x]
     from FUNCT_2:sch 1(A1);
A7:for f be Function of D,Funcs(E,F), d,e be object st d in D & e in E holds
     (I.f).(d,e) = (f.d).e
   proof
    let f be Function of D,Funcs(E,F), d,e be object;
    assume A8: d in D & e in E;
    f in Funcs(D,Funcs(E,F)) by FUNCT_2:8; then
    ex f0 be Function of D,Funcs(E,F), g0 be Function of [:D,E:],F
     st f=f0 & I.f=g0 &
      for d,e be object st d in D & e in E holds g0.(d,e) = (f0.d).e by A6;
    hence (I.f).(d,e) = (f.d).e by A8;
   end;
   now let z1,z2 be object;
    assume A9: z1 in Funcs(D,Funcs(E,F))
              & z2 in Funcs(D,Funcs(E,F)) & I.z1=I.z2; then
    reconsider z1f = z1, z2f = z2 as Function of D,Funcs(E,F) by FUNCT_2:66;
    now let d be object;
     assume A10: d in D; then
A11: z1f.d is Function of E,F & z2f.d is Function of E,F by FUNCT_2:5,66;
     now let e be object;
      assume A12: e in E; then
      (z1f.d).e = (I.z2f).(d,e) by A7,A10,A9;
      hence (z1f.d).e = (z2f.d).e by A7,A10,A12;
     end;
     hence z1f.d = z2f.d by A11,FUNCT_2:12;
    end;
    hence z1=z2 by FUNCT_2:12;
   end; then
A13:I is one-to-one by FUNCT_2:19;
   now let w be object;
    assume w in Funcs([:D,E:],F); then
    reconsider wf = w as Function of [:D,E:],F by FUNCT_2:66;
    defpred P[object,object] means
     ex f be Function of E,F st
      $2=f &
      for e be object st e in E holds f.e = wf.($1,e);
A14: for d be object st d in D ex y be object st y in Funcs(E,F) & P[d,y]
    proof
     let d be object;
     assume A15: d in D;
     deffunc F0(object) = wf.(d,$1);
A16: for e be object st e in E holds F0(e) in F
     proof
      let e be object;
      assume e in E; then
      [d,e] in [:D,E:] by A15,ZFMISC_1:def 2;
      hence thesis by FUNCT_2:5;
     end;
     consider f being Function of E,F such that
A17:  for e be object st e in E holds f.e = F0(e) from FUNCT_2:sch 2(A16);
     f in Funcs(E,F) by FUNCT_2:8;
     hence thesis by A17;
    end;
    consider zf be Function of D,Funcs(E,F) such that
A18:  for d be object st d in D holds P[d,zf.d] from FUNCT_2:sch 1(A14);
A19: zf in Funcs(D,Funcs(E,F)) by FUNCT_2:8;
A20: now let d,e be set;
     assume A21: d in D & e in E; then
A22: (I.zf).(d,e) = (zf.d).e by A7;
     ex L be Function of E,F st
        zf.d = L
      & for e be object st e in E holds L.e = wf.(d,e) by A18,A21;
     hence (I.zf).(d,e) = wf.(d,e) by A22,A21;
    end;
    I.zf is Function of [:D,E:],F by A19,FUNCT_2:5,66; then
    I.zf = w by BINOP_1:1,A20;
    hence w in rng I by A19,FUNCT_2:112;
   end; then
   Funcs([:D,E:],F) c= rng I by TARSKI:def 3; then
   I is onto by FUNCT_2:def 3,XBOOLE_0:def 10;
   hence thesis by A7,A13;
end;
