Uniform continuity of objects

from the 1997  Samos Conference

I. Cnop, 
Vrije Universiteit Brussels
icnop@vub.ac.be

Introduction

We start by illustrating the concept of a function by some measurement: temperature plotted over some time interval. 
Start by reading off temperatures from and old fashioned thermometer. This consists of a thin glass tube in which some liquid may expand, and the level is read off sideways onto some scale next to the tube. Mathematics, as opposed to other sciences does this reading with arbitrary precision, and at all time instants (also determined with arbitrary precision). In a museum one can still see mechanic devices for automatic plotting on a paper drum. But this is not essential here: we suppose the final result is some line graph over some time interval and we do not really care how it was obtained.
If the readings are done with a thermometer of which the scale had been moved up or down, then this results into a vertical shift in the graph. Keep in mind that if the scale slides downwards, all readings will increase by the same amount. If the scale of the thermometer is sitting somewhat loose, it can be moved slightly off its central position and readings will be done within certain bounds (which can still be determined with arbitrary precision).This results in a band which replaces the original line graph.
If the readings are plotted against a watch which was not set right (or with reference to a different time zone), then this results in a horizontal shift in the graph. Keep in mind that if the watch is running behind, the plot of the graph will shift to the right.
We expect that readings differ little if readings are only slightly off correct time. This amounts to saying that there are no sudden jumps in temperature.
-- this phenomenon will be called continuity
It is moreover expected that such differences in readings over a small time interval depend little on the time of the actual reading
-- this phenomenon will be called uniform continuity
Wrapping this up we get the following definition of uniform continuity:
If the graph of a function is shifted slightly up and down, it can be shifted over a sufficiently small distance sideways in the band between these vertically modified positions
Traditionally this is called the epsilon-delta condition in which the vertical shift is some epsilon and the horizontal shift is given by some delta which has to be sufficiently small but positive.
Lets start by considering some shifts in graphs.

Shifting graphs

The following is chosen to be a somewhat arbitrary temperature graph

readings[t_] := 
      10 + 5 Sin[Pi t] +  .5 Cos[10 Pi t + Sin [Pi t]]
\(		Plot[readings[t], \ {t, 0, 5}]\)

\(shiftedReadings[del_] := 
	
      Table[	Plot[readings[t - h], \ {t, 0, 5}], {h, \(-del\), del, 
          del/4}]\)

shiftedReadings[ .2]

Shift these graphs sideways in an animation using the command-Y keys

\(downupReadings[eps_] := 
	
      Table[	Plot[
          readings[t] + h, \ {t, 0, 
            5}, 
			PlotRange -> {{0, 5}, {0, 20}}], {h, \(-eps\), eps, 
          eps/4}]\)

downupReadings[1]

Shift these graphs in an animation using the command-Y keys

Compare these with the most extreme sideways shifts of the graphs

eps = 1
\(downup3Readings[del_] := 
	
      Table[	Plot[
			{readings[t] - eps, readings[t - h], 
            readings[t] + eps}
		, \ {t, 0, 
            5}, 		PlotRange -> {{0, 5}, {0, 20}}]
	, {h, \(-del\), del, 
          del/4}]\)

downup3Readings[0.1]

The horizontal shifts do not remain within the boudaries
Can you find a smaller value for del for which they do?

downup3Readings[0.03]

Great! Let us now try to get more insight in this phenomenon. Coloring the bands may help.

Loading the package

<< Graphics`FilledPlot`

eps = 0.8; h =. 
\(Do[FilledPlot[
			{readings[t] - eps, readings[t] + eps, 
          readings[t - h]}
		, \ {t, 0, 
          5}, 		PlotRange -> {{0, 5}, {0, 20}}
	, \ 
        Fills\  -> \ {{{1, 3}, Hue[ .0]}, {{3, 2}, Hue[ .0]}, \ {{1, 2}, 
              Hue[ .3]}}
		, Curves\  -> \ Front]
		, {h, \(-0.1\), 
        0.1, 0.02}
]\)

Checking epsilon-delta conditions by looking at graphs on intervals

Clear[f, l, r];
f[x_] := x x x x -  3 x x
l = -3;
r = 3;

Plot[f[x], {x, l, r}]

Clear[vband];
\(vband[f_, l_, r_, eps_] := 
      FilledPlot[{f[x] - eps, f[x] + eps}, {x, l, r}
		, 
        DisplayFunction -> Identity
		, 
        AspectRatio -> Automatic]\)

vband[f, l, r,  .2]

Show[Graphics[%], DisplayFunction -> $DisplayFunction]

Clear[move];
\(move[f_, l_, r_, delta_] := \ 
      Table[Plot[f[x + h], {x, l, r}
, DisplayFunction -> Identity
, 
          AspectRatio -> Automatic]
, {h, \(-delta\), delta, 
          delta/5}]\)

move[f, l, r,  .2]

\(Do[Show[{vband[f, l, r,  .2], \(move[f, l, r,  .06]\)[\([j]\)]}, 
        DisplayFunction -> $DisplayFunction
		, \ 
        PlotRange -> {{\(-3\), 3}, {\(-3\), 3}}]
, {j, 11}]\)

The conclusion is that the function moves sidewise inside the green area in the interval  [ -1.5,1.5 ]

This is confirmed by magnifying the extreme shifts.

(It is also posible to animate the final two graphics).

but that where it is steep only small variations permit to stay inside the green band.

\(Show[{vband[f, l, r,  .2], \(move[f, l, r,  .04]\)[\([1]\)]}, 
      DisplayFunction -> $DisplayFunction
		, \ 
      PlotRange -> {{\(-1\), 1}, {\(-2\), 0.5}}]\)

\(Show[{vband[f, l, r,  .2], \(move[f, l, r,  .04]\)[\([11]\)]}, 
      DisplayFunction -> $DisplayFunction
		, \ 
      PlotRange -> {{\(-1\), 1}, {\(-2\), 0.5}}]\)

Show[%,  PlotRange -> {{0,  .5}, {-0.5,  .5}}]

<< Algebra`AlgebraicInequalities`

Has a reference for solving inequalities automatically without relying on graphs

Next we introduce colorcoding for

\(g1 = 
      Plot[If[x\ x - x > 0, x\ x\  - \ x, 0], {x, \(-2\), 4}
		, 
        PlotStyle -> Hue[0.4]
		, DisplayFunction -> Identity]\)

Show[Graphics[g1], DisplayFunction -> $DisplayFunction]

\(g2 = 
      Plot[If[x\ x - x < 0, x\ x\  - \ x, 0], {x, \(-2\), 4}
		, 
        PlotStyle -> Hue[0]
		, DisplayFunction -> Identity]\)

Show[{g1, g2}, DisplayFunction -> $DisplayFunction]

Checking epsilon-delta conditions  automatically

<< Algebra`InequalitySolve`

Can be used to check epsilon-delta conditions automatically without relying on graphs
Remark: This works only with 1 variable polynomial inequalities!

f[x] - eps  <=  f[x + h]  <= f[x] + eps

Clear[f]; f[x_] := x x x x -  3 x x; eps =  .2; 
    h =  .1;

InequalitySolve[f[x + h] >= f[x] - eps  && f[x + h] <= f[x] + eps, 
      x]

check this with eps fixed for varying h

\(Table[
        InequalitySolve[f[x + h] >= f[x] - eps\  && f[x + h] <= f[x] + eps, 
          x]
, {h, \(- .1\),  .1,  .02}] // TableForm\)

Conclusion: the smaller h , the larger the interval or set on which the inequality is true.
For large h, it remains only true where the growth of the function is slow (the graph is not steep)

check this with h fixed for varying eps

\(Table[
        InequalitySolve[f[x + h] >= f[x] - eps\  && f[x + h] <= f[x] + eps, 
          x]
, {eps,  .01,  .1,  .01}] // TableForm\)

Conclusion: the smaller eps , the smaller the interval or set on which the inequality is true

eps =  .4

epsLines = Table[j eps/4, {j, -4, 4}] // N

g[x_, h_] :=  f[x + h]  -  f[x - h]

ContourPlot[g[x, h], {x, -2, 2},  {h, 0,  .5}, 
      Contours -> epsLines]

Conclusion: the higher up in this graph , the smaller the interval of x es where we can shift over the corresponding value of h. 
Outside (white and black areas the function is too steep

Smaller values of epsilon can be considered using

Contours -> 0.1  epsLines

Growth is slowest near 0 and near the roots of the derivative

Solve[D[f[x], x] == 0, x]

% // N