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
  (Z c= dom f & ex r st rng f = {r}) implies f is_differentiable_on Z &
  for x st x in Z holds (f`|Z).x = 0
proof
  reconsider cf = REAL --> In(0,REAL) as Function of REAL, REAL;
  set R=cf;
  now
    let h;
A2: now
      let n be Nat;
A4:   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,A4,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;
  set L = cf;
  for p holds L.p = 0*p;
  then reconsider L as LinearFunc by Def3;
  assume
A7: Z c= dom f;
  given r such that
A8: rng f = {r};
A9: now
    let x0;
    assume x0 in dom f;
    then f.x0 in {r} by A8,FUNCT_1:def 3;
    hence f.x0 = r by TARSKI:def 1;
  end;
A10: now
    let x0;
    assume
A11: x0 in Z;
    then consider N being Neighbourhood of x0 such that
A12: N c= Z by RCOMP_1:18;
A13: N c= dom f by A7,A12;
    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 = r - f.x0 by A9,A13
        .= r - r by A7,A9,A11
        .= L.(xx-xx0)+0
        .= L.(x-x0)+R.(x-x0);
    end;
    hence f is_differentiable_in x0 by A13;
  end;
  hence
A14: f is_differentiable_on Z by A7,Th9;
  let x0;
  assume
A15: x0 in Z;
  then
A16: f is_differentiable_in x0 by A10;
  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
A17: N c= dom f;
A18: 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 = r - f.x0 by A9,A17
      .=r - r by A7,A9,A15
      .=L.(xx-xx0) + 0
      .=L.(x-x0) + R.(x-x0);
  end;
reconsider j =1 as Element of REAL by XREAL_0:def 1;

  thus (f`|Z).x0 = diff(f,x0) by A14,A15,Def7
    .= L.j by A16,A17,A18,Def5
    .=0;
end;
