reserve x for object;
reserve x0,r,r1,r2,g,g1,g2,p,y0 for Real;
reserve n,m,k,l for Element of NAT;
reserve a,b,d for Real_Sequence;
reserve h,h1,h2 for non-zero 0-convergent Real_Sequence;
reserve c,c1 for constant Real_Sequence;
reserve A for open Subset of REAL;
reserve f,f1,f2 for PartFunc of REAL,REAL;
reserve L for LinearFunc;
reserve R for RestFunc;

theorem
  [#](REAL) c= dom f & f is_differentiable_on [#](REAL) & (for x0 holds
  0 <= diff(f,x0)) implies f|[#]REAL is non-decreasing
proof
  assume
 [#](REAL) c= dom f;
  assume that
A1: f is_differentiable_on [#](REAL) and
A2: for x0 holds 0 <= diff(f,x0);
  now
    let r1,r2;
    assume that
A3: r1 in [#](REAL) /\ dom f and
A4: r2 in [#](REAL) /\ dom f and
A5: r1 < r2;
    set rx = max(r1,r2);
    set rn = min(r1,r2);
A6: r2 + 0 < rx + 1 by XREAL_1:8,XXREAL_0:25;
    rn - 1 < r2 - 0 by XREAL_1:15,XXREAL_0:17;
    then r2 in {g2: rn - 1 < g2 & g2 < rx + 1} by A6;
    then
A7: r2 in ].rn - 1, rx + 1.[ by RCOMP_1:def 2;
    r2 in dom f by A4,XBOOLE_0:def 4;
    then
A8: r2 in ].rn - 1, rx + 1.[ /\ dom f by A7,XBOOLE_0:def 4;
A9: for g1 holds g1 in ].rn - 1, rx + 1 .[ implies 0 <= diff(f,g1) by A2;
    f is_differentiable_on ].rn - 1, rx + 1.[ by A1,FDIFF_1:26;
    then
A10: f|].rn-1,rx+1.[ is non-decreasing by A9,ROLLE:11;
A11: r1 + 0 < rx + 1 by XREAL_1:8,XXREAL_0:25;
    rn - 1 < r1 - 0 by XREAL_1:15,XXREAL_0:17;
    then r1 in {g1: rn - 1 < g1 & g1 < rx + 1} by A11;
    then
A12: r1 in ].rn - 1, rx + 1.[ by RCOMP_1:def 2;
    r1 in dom f by A3,XBOOLE_0:def 4;
    then r1 in ].rn - 1, rx + 1.[ /\ dom f by A12,XBOOLE_0:def 4;
    hence f.r1 <= f.r2 by A5,A10,A8,RFUNCT_2:22;
  end;
  hence thesis by RFUNCT_2:22;
end;
