reserve y for object, X for set;
reserve x,x0,x1,x2,g,g1,g2,r,r1,s,p,p1 for Real;
reserve n,m,k for Element of NAT;
reserve Y for Subset of REAL;
reserve Z for open Subset of REAL;
reserve s1,s3 for Real_Sequence;
reserve f,f1,f2 for PartFunc of REAL,REAL;
reserve h for non-zero 0-convergent Real_Sequence;
reserve c for constant Real_Sequence;
reserve R,R1,R2 for RestFunc;
reserve L,L1,L2 for LinearFunc;

theorem Th17:
  Z c= dom f & f|Z = id Z implies f is_differentiable_on Z & for x
  st x in Z holds (f`|Z).x = 1
proof
  reconsider j =1 as Element of REAL by XREAL_0:def 1;
  reconsider cf = REAL --> In(0,REAL) as Function of REAL, REAL;
  set R = cf;
  now
    let h;
A2: now
      let n be Nat;
A3:   rng h c= dom R;
A5:   n in NAT by ORDINAL1:def 12;
      thus ((h")(#)(R/*h)).n = (h".n)*((R/*h).n) by SEQ_1:8
        .= (h".n)*(R.(h.n)) by A5,A3,FUNCT_2:108
        .= (h".n)*0
        .= 0;
    end;
    then
A6: (h")(#)(R/*h) is constant by VALUED_0:def 18;
    hence (h")(#)(R/*h) is convergent;
    ((h")(#)(R/*h)).0 = 0 by A2;
    hence lim ((h")(#)(R/*h)) = 0 by A6,SEQ_4:25;
  end;
  then reconsider R as RestFunc by Def2;
  reconsider L = id REAL as PartFunc of REAL,REAL;
  for p holds L.p = 1*p
   by XREAL_0:def 1,FUNCT_1:18;
  then reconsider L as LinearFunc by Def3;
  assume that
A7: Z c= dom f and
A8: f|Z = id Z;
A9: now
    let x;
    assume
A10: x in Z;
    then f|Z.x = x by A8,FUNCT_1:18;
    hence f.x = x by A10,FUNCT_1:49;
  end;
A11: now
    let x0;
    assume
A12: x0 in Z;
    then consider N being Neighbourhood of x0 such that
A13: N c= Z by RCOMP_1:18;
A14: for x st x in N holds f.x - f.x0 = L.(x-x0) + R.(x-x0)
    proof
      let x;
       reconsider xx = x, xx0 = x0 as Element of REAL by XREAL_0:def 1;
      assume x in N;
      hence f.x - f.x0 = x - f.x0 by A9,A13
        .= x - x0 by A9,A12
        .= L.(xx-xx0)+0
        .= L.(x-x0) + R.(x-x0);
    end;
    N c= dom f by A7,A13;
    hence f is_differentiable_in x0 by A14;
  end;
  hence
A15: f is_differentiable_on Z by A7,Th9;
  let x0;
  assume
A16: x0 in Z;
  then consider N1 being Neighbourhood of x0 such that
A17: N1 c= Z by RCOMP_1:18;
A18: f is_differentiable_in x0 by A11,A16;
  then ex N being Neighbourhood of x0 st N c= dom f & ex L,R st for x st x in
  N holds f.x - f.x0 = L.(x-x0) + R.(x-x0);
  then consider N being Neighbourhood of x0 such that
A19: N c= dom f;
  consider N2 being Neighbourhood of x0 such that
A20: N2 c= N1 and
A21: N2 c= N by RCOMP_1:17;
A22: N2 c= dom f by A19,A21;
A23: for x st x in N2 holds f.x - f.x0 = L.(x-x0) + R.(x-x0)
  proof
    let x;
     reconsider xx = x, xx0 = x0 as Element of REAL by XREAL_0:def 1;
    assume x in N2;
    then x in N1 by A20;
    hence f.x - f.x0 = x - f.x0 by A9,A17
      .= x - x0 by A9,A16
      .= L.(xx-xx0)+0
      .= L.(x-x0) + R.(x-x0);
  end;
  thus (f`|Z).x0 = diff(f,x0) by A15,A16,Def7
    .= L.j by A18,A22,A23,Def5
    .= 1;
end;
