MathSource Reviews: Monsters of Real Analysis
by Matthew M. Thomas
Mathematica in Education and Research, Vol. 9, issue 1

It is said in the preface to Sterling Berberian's A First Course in Real Analysis that "Mathematics is the music of science, and real analysis is the Bach of mathematics." Later in that same preface, the author describes this quotation as "foolish," but proceeds to build a case for the importance of real analysis. Trained not as a mathematician but as an engineer, your reviewer initially had the notion to question that case, perhaps even by using the same description assigned to the quotation. After all, an engineer is supposed to be results-oriented, not process-oriented, and real analysis seems indistractibly focused on the underpinnings of the process. You need not, so we engineers say,  know how the internal combustion engine works to drive the car from point A to point B. Ultimately, though, to question this case is to side with that instructor who -- through ignorance, indifference, or sloth -- lubricates her students' entry into a difficult mathematical passage with the unctuous salve of "well, you'll never make use of the following, but I have to cover it, so here it is ...." That non-helpful phrase, paraphrased, is uttered in all too many American high schools, whose students are left disillusioned by the nonchalance of their teacher: To them, mathematics becomes the music of tedium. Real analysis might not be the Bach of engineering (whatever that means), but an attack upon any important process underpinnings would not be helpful. Better that this Review attempt to be helpful.

Helping to underpin this Review are a few delightful anomalies within real analysis that even an engineer can love. These anomalies, labeled "monsters" by workers from icon Henri Poincaré to student Gabriel Chênevert (about whom more shortly), ran contrary to established norms in real analysis when they were presented, yet are an integral part of real analysis today. By way of introducing these monsters, let us pose two important questions: 1) Can there exist a function that is continuous at each irrational point and discontinuous at each rational point? 2) Can there exist a function that is continuous everywhere but nowhere differentiable? Counterintuitively, the answer to each is Yes, and we shall examine the development of each, with a bit more emphasis on the second than on the first. Illustrating each affirmative answer is our MathSource item for review, the 395-kB "Monsters.nb" file in pub/Applications/Mathematics/0210-340 labeled "Plotting the Monsters of Real Analysis" by University of Montreal student Gabriel Chênevert, whose World-Wide Web page URL and e-mail address as of this early January 2000 writing were www.jsp.umontreal.ca/~cheneveg and cheneveg@jsp.umontreal.ca, respectively. This MathSource item is very highly regarded in certain respects; we shall give our regards to those respects (but not pay our respects to those regards). We shall close with a brief assessment.

Le Premier Monstre

Can there exist a function that is continuous at each irrational point and discontinuous at each rational point? When the prevailing acumen held that drawing a continuous function meant doing so without taking your quill off the scroll, the geometrically intuitive answer was No. Our counterintuitive answer in the affirmative comes courtesy of Peter Lejeune Dirichlet, whose approach to this and other questions freed function from formula (an important emancipation whose establishment the engineer nevertheless never notices) while establishing sufficient conditions for treating a Fourier series as a function [Manheim 1964, pp. 50-53]. Behold Dirichlet's function f(x) that is continuous on all irrational x and discontinuous on all rational x: For irrational x, f(x) = 0; for rational x, x is written as a/b (a and b are whole numbers; b > 0; no non-unity positive common factor of a and b) and f(x) = 1/b. So, for x between zero and unity, f(x) = 1 for x = 0, 1; f(x) = 1/2 for x = 1/2; f(x) = 1/3 for x = 1/3, 2/3; f(x) = 1/4 for x = 1/4, 3/4; f(x) = 1/5 for x = 1/5, 2/5, 3/5, 4/5; f(x) = 1/6 for x = 1/6, 5/6; f(x) = 1/7 for x = 1/7, 2/7, 3/7, 4/7, 5/7, 6/7; et cetera ... and f(x) = 0 for the infinite number of irrational x between any two points of rational x. A plot of Dirichlet's function reveals lines of isolated data points at heights 1/n, which become more dense with increasing n [Baylis 1991, pp. 49-51]. A "Countably Many Discontinuities" page within the Seton Hall University World-Wide Web site (www.shu.edu) also examines this monster.

To examine this monster within Mathematica, let us turn to the "Riemann's function" section of Chênevert's MathSource item. We first note that, though a successor to both Dirichlet and Gauss as chair of mathematics at the University of Göttingen, 'twas not the very able Georg Friedrich Bernhard Riemann but his mentor Dirichlet who created this monster. Chênevert does not make a strong argument to the contrary, supplying nary a footnote in support of Riemann over Dirichlet -- nor any other footnotes on any other topic -- in his MathSource item. But Chênevert does make good use of Mathematica to illustrate Dirichlet's function. Consider n = 5 for demonstration purposes: Chênevert creates

Table[{p/q, 1/Denominator[p/q]}, {q, 5}, {p, q - 1}]

and cleverly uses Union to generate an ordered listing of (p/q, 1/q) pairs for assignment to the points variable:

\(n = 5; 

    points\  = \ 
      Union\ @@\ Table[{p/q, 1/Denominator[p/q]}, {q, n}, {p, q - 1}]\)

To create a helpful plot of Dirichlet's function, let us increase n from the trivial 5 to the meaningful 250, and employ Chênevert's handiwork:

\(n = 250; 

    points\  = \ 
      Union\ @@\ Table[{p/q, 1/Denominator[p/q]}, {q, n}, {p, q - 1}]; \)

ListPlot[points,  PlotRange -> {0, .51}]

As the resulting y values just above the x-axis reveal, the isolated data points at heights 1/q do indeed become more dense with increasing n, and one can also see lines of isolated data points at these heights ("isoheights" on this plot, akin to isobars or constant pressure lines on a weather map). More salient than these isoheights, however, are the smaller triangles housed within the isosceles triangle whose apex is at (1/2, 1/2): How can you not notice the isolated data points which lie along y = x, y = x/2, y = x/3, ..., along their complements y = 1-x, y = (1-x)/2, y = (1-x)/3, ...,  along interior line y = 1 - 2x and along its mirrored (y = 1/2) line y = 2x - 1? One could go on at length about the traits of this plot, especially in regard to the "self-similarity" of some successively smaller triangles; more about such self-similarity in the context of the next monster. Suffice it to say that this portrait of le premier monstre presents considerable aesthetic appeal.

Le Deuxième Monstre

Can there exist a function that is continuous everywhere but nowhere differentiable? In the literature of real analysis, this question has received more examination than that which introduced the previous section. In the days when the difference between continuity and differentiability was not fully appreciated, the prevailing acumen held that -- except for a few troublesome points -- continuous functions were indeed differentiable. No less than André Marie Ampère (he whose name is the S.I. unit of electric current) attempted a proof of such in 1806, but the proof went awry [Manheim 1964, p. 69; Singh 1953, pp. 4-5; see Hawkins 1970, pp. 42-54 for a broader discussion]. In 1834, Nikolaj Iwanowitsch Lobatschefsky established the need to distinguish between continuity and differentiability [Manheim 1964, p. 69], thereby opening the door to a geometrically counterintuitive answer. Through lectures at the University of Berlin in 1861, and through publication in 1874, Karl Theodor Wilhelm Weierstrass delivered that answer, presenting the first function known to be continuous everywhere but nowhere differentiable: f(x) = (∑_(i = 1)^∞) (a^n) Cos[(b^n) π x], where b is an odd integer greater than one, 0 < a < 1, and ab > 1 + (3π/2) [Singh 1853, pp. 6-11; Manheim 1964, pp. 72-76]. Given the self-similar nature of segments of that function, it has come to be known as the first fractal.

Weierstrass' function provides the basis for the continuous everywhere but nowhere differentiable function presented by Chênevert's contribution to MathSource. More on that basis later. But history shows that Weierstrass' function was not the first through the door opened by Lobatschefsky. That honor goes to the continuous everywhere but nowhere differentiable function of Prague mathematician and Roman Catholic priest Bernhard Placidus Johann Nepomuk Bolzano. Bolzano's function was revealed by one M. Jâsek at the 16 December 1921 meeting of the Bohemian Society of Sciences, and dates back to either 1830 or 1834 (depending on the source -- Bolzano himself never published it). But while Bolzano's function pre-dates that of Weierstrass by decades, and while Bolzano was a leader in the arithmetization of real analysis, he evidently was unaware of the continuous everywhere but nowhere differentiable features of his function [Singh 1953, pp. 7-8, 24-29; Manheim 1964, pp. 69-70]. To bring this monster to life, first draw non-horizontal line PQ with midpoint M. Divide both PM and MQ into four parts of equal length; call the division points P1, P2, P3, Q1, Q2, and Q3, in that order. Now let P3' be the reflection of P3 in the horizontal through M, and let Q3' be the reflection of Q3 in the horizontal through Q. Connect points P, P3', M, Q3', and Q. Do this for each line segment and repeat ad infinitum. Manheim [p. 70] and Singh [pp. 24-26] describe identical Bolzano function construction procedures, except that the Singh reflection distances for P3' and Q3' are twice those of Manheim.

Given the importance of the Bolzano function and an apparent scarcity of function plots (Manheim offers none; Singh [p. 25] gives up half-way through the second iteration), your reviewer has thrown together the following code. Given the end points of line PQ (such as {{0,0},{1,1}}) as input, bolzano[{{0,0},{1,1}}] uses the aforementioned procedure to generate a list of {x,y} points on the Bolzano curve after one iteration. Note that users may select either γ = 1 (Manheim interpretation) or γ = 2 (Singh). The code:

γ  =  2;

\(bolzano[base_List] := 

      Union[Flatten[
          Table[{
			{base[\([i, 1]\)], base[\([i, 2]\)]}, 
				
               (*
					Above : \ the\ first\ and\ starting\ point

                					*) 
				

              			{If[OddQ[i], 
						
                  0.375 \((base[\([i + 1, 1]\)]\  - \ base[\([i, 1]\)])\) + 
                    base[\([i, 1]\)],  (*\ 2  nd\ x\ for\ slope > 0\ *) 

                  						
                  0.125 \((base[\([i + 1, 1]\)]\  - \ base[\([i, 1]\)])\) + 
                    base[\([i, 1]\)]], \  (*\ 2  nd\ x\ for\ slope < 0\ *) 

                				If[OddQ[i], 
					
                  γ 
                      \((\((0.5 
                                \((base[\([i + 1, 2]\)] - base[\([i, 2]\)])
                                  \) + base[\([i, 2]\)])\) - 

                          									
                          \((\((\((base[\([i + 1, 2]\)] - base[\([i, 2]\)])\)/
                                    \((base[\([i + 1, 1]\)] - 
                                        base[\([i, 1]\)])\))\)*

                                											
                                If[OddQ[i], 
												
                                  0.375 
                                      \((base[\([i + 1, 1]\)]\  - \ 
                                        base[\([i, 1]\)])\) + 
                                    base[\([i, 1]\)], 

                                  												
                                  0.125 
                                      \((base[\([i + 1, 1]\)]\  - \ 
                                        base[\([i, 1]\)])\) + 
                                    base[\([i, 1]\)]] + 

                              											
                              \((\(-\((
                                    \((\((base[\([i + 1, 2]\)] - 
                                        base[\([i, 2]\)])\)/
                                        \((base[\([i + 1, 1]\)] - 
                                        base[\([i, 1]\)])\))\)*
                                        base[\([i + 1, 1]\)] - 
                                      base[\([i + 1, 2]\)])\)\))\))\))\) + 

                    						
                    \((0.5 \((base[\([i + 1, 2]\)] - base[\([i, 2]\)])\) + 
                        base[\([i, 2]\)])\), 
                   (*\ 2  nd\ y\ for\ slope > 0\ *) 
				\ \ 
                  γ 
                      \((base[\([i, 2]\)] - 
									
                          \((\((\((base[\([i + 1, 2]\)] - base[\([i, 2]\)])\)/
                                    \((base[\([i + 1, 1]\)] - 
                                        base[\([i, 1]\)])\))\)*

                                											
                                If[OddQ[i], 
												
                                  0.375 
                                      \((base[\([i + 1, 1]\)]\  - \ 
                                        base[\([i, 1]\)])\) + 
                                    base[\([i, 1]\)], 

                                  												
                                  0.125 
                                      \((base[\([i + 1, 1]\)]\  - \ 
                                        base[\([i, 1]\)])\) + 
                                    base[\([i, 1]\)]] + 

                              											
                              \((\(-\((
                                    \((\((base[\([i + 1, 2]\)] - 
                                        base[\([i, 2]\)])\)/
                                        \((base[\([i + 1, 1]\)] - 
                                        base[\([i, 1]\)])\))\)*
                                        base[\([i + 1, 1]\)] - 
                                      base[\([i + 1, 2]\)])\)\))\))\))\) + 

                    						base[\([i, 2]\)]]}, \ 
               (*\ 2  nd\ y\ for\ slope < 0\ *) 
				
               (*
					Above : \ The\ second\ point, 
					\ 
                3/8\ along\ x\ \((positive\ base\ slope)\)\ or

                							1/8\ along\ x\ \((negative\ base\ slope)\)

                					*) 
				

              			{0.5 \((base[\([i + 1, 1]\)] - base[\([i, 1]\)])\) + 
                  base[\([i, 1]\)], 
				
                0.5 \((base[\([i + 1, 2]\)] - base[\([i, 2]\)])\) + 
                  base[\([i, 2]\)]}, 
				
               (*
					Above : \ The\ third\ or\ mid\ point

                					*) 
				

              			{If[OddQ[i], 
						
                  0.875 \((base[\([i + 1, 1]\)]\  - \ base[\([i, 1]\)])\) + 
                    base[\([i, 1]\)],  (*\ 4  th\ x\ for\ slope > 0\ *) 

                  						
                  0.625 \((base[\([i + 1, 1]\)]\  - \ base[\([i, 1]\)])\) + 
                    base[\([i, 1]\)]],  (*\ 4  th\ x\ for\ slope < 0\ *) 

                				If[OddQ[i], 
					
                  γ 
                      \((base[\([i + 1, 2]\)] - 
									
                          \((\((\((base[\([i + 1, 2]\)] - base[\([i, 2]\)])\)/
                                    \((base[\([i + 1, 1]\)] - 
                                        base[\([i, 1]\)])\))\)*

                                											
                                If[OddQ[i], 
												
                                  0.875 
                                      \((base[\([i + 1, 1]\)]\  - \ 
                                        base[\([i, 1]\)])\) + 
                                    base[\([i, 1]\)], 

                                  												
                                  0.625 
                                      \((base[\([i + 1, 1]\)]\  - \ 
                                        base[\([i, 1]\)])\) + 
                                    base[\([i, 1]\)]] + 

                              											
                              \((\(-\((
                                    \((\((base[\([i + 1, 2]\)] - 
                                        base[\([i, 2]\)])\)/
                                        \((base[\([i + 1, 1]\)] - 
                                        base[\([i, 1]\)])\))\)*
                                        base[\([i + 1, 1]\)] - 
                                      base[\([i + 1, 2]\)])\)\))\))\))\) + 

                    						base[\([i + 1, 2]\)], 
                   (*\ 4  th\ y\ for\ slope > 0\ *) 
				\ \ 
                  γ 
                      \((\((0.5 
                                \((base[\([i + 1, 2]\)] - base[\([i, 2]\)])
                                  \) + base[\([i, 2]\)])\) - 

                          									
                          \((\((\((base[\([i + 1, 2]\)] - base[\([i, 2]\)])\)/
                                    \((base[\([i + 1, 1]\)] - 
                                        base[\([i, 1]\)])\))\)*

                                											
                                If[OddQ[i], 
												
                                  0.875 
                                      \((base[\([i + 1, 1]\)]\  - \ 
                                        base[\([i, 1]\)])\) + 
                                    base[\([i, 1]\)], 

                                  												
                                  0.625 
                                      \((base[\([i + 1, 1]\)]\  - \ 
                                        base[\([i, 1]\)])\) + 
                                    base[\([i, 1]\)]] + 

                              											
                              \((\(-\((
                                    \((\((base[\([i + 1, 2]\)] - 
                                        base[\([i, 2]\)])\)/
                                        \((base[\([i + 1, 1]\)] - 
                                        base[\([i, 1]\)])\))\)*
                                        base[\([i + 1, 1]\)] - 
                                      base[\([i + 1, 2]\)])\)\))\))\))\) + 

                    						
                    \((0.5 \((base[\([i + 1, 2]\)] - base[\([i, 2]\)])\) + 
                        base[\([i, 2]\)])\)]}, 
               (*\ 4  th\ y\ for\ slope < 0\ *) 
					
               (*
					Above : \ The\ fourth\ point, 
					\ 
                7/8\ along\ x\ \((positive\ base\ slope)\)\ or

                							5/8\ along\ x\ \((negative\ base\ slope)\)

                					*) 
				

              			{base[\([i + 1, 1]\)], base[\([i + 1, 2]\)]}
				
               (*
					Above : \ The\ fifth\ and\ ending\ point

                					*) 
			}, 

            			\ {i, \ 1, \ Length[base] - 1}], \ 1]]\)

We then define a function to allow for iterative applications of bolzano[], in the spirit intended by the Prague native:

op[base_List,  nn_]  :=  Nest[bolzano,  base,  nn]

Finally we call upon ListPlot[] to illustrate the Bolzano curve after seven iterations. (Note that the points are so dense that the PlotJoined -> False option setting does not lessen the crowding):

\(ListPlot[op[{{0, 0}, {1, 1}}, 7], 

      			\ {PlotJoined\  -> \ False, AspectRatio\  -> \ 1, \ 
        PlotRange\  -> \ {{0, 1}, {0, 2}}}]\)

How ironic that a monster should bear such a strong resemblance to scenic forest timberline. Perhaps the Bolzano curve is monstrous only to those who must find the global maximum after a start from the valley of x = y = 1/2. And given the self-similarity inherent in this curve, one could present this 170-year-old monster as the first fractal; arguably, it is more aesthetically pleasing than the better-known continuous everywhere but nowhere differentiable example from Weierstrass. Still, it is not Bolzano but Weierstrass whose function is considered a basis for generalized continuous everywhere but nowhere differentiable functions. For example, consider (∑_(n = 1)^∞) (a^n) δ[(b^n) x], where δ(x) = x for 0 <= x <= 0.5, and δ(x) = 1 - x for 0.5 <= x <= 1. In 1930, B. L. Van der Waerden considered the case in which a = 0.1 and b = 10, and there is some question as to whether this function is truly nowhere differentiable [Singh 1953, pp. 11-12]. We cite it here only because Chênevert in his Monsters.nb notebook refers to a "Van der Waarden's function" as continuous everywhere but nowhere differentiable. The example in the Monsters.nb notebook makes use of not a = 0.1 and b = 10, but a = 0.5 and b = 2. The case of b = 1/a = 2 is not unprecedented in the literature of real analysis, and we shall examine it in the context of both that literature and Chênevert's notebook. Left as an exercise for the reader is whether Chênevert's error (regarding this case and "Van der Waarden") is one of spelling, referencing, or mathematical presentation.

In the absence of a revelation before the Bohemian Society of Sciences, the function (∑_(n = 1)^∞) (a^n) δ[(b^n) x], where δ(x) = x for 0 <= x <= 0.5, δ(x) = 1 - x for 0.5 <= x <= 1, and b = 1/a = 2 is at least a century old. It was introduced as "a simple example of the continuous function without derivative" by Japanese number theorist Teiji Takagi [Takagi 1901-1903], and a three-dimensional rendering of this function was named "Mount Takagi" in his honor [Mandelbrot 1988]. Since the Takagi curves have a completely ordered structure, they have been deemed inappropriate for modeling natural phenomena, and this inappropriateness has led to enhancements such as the Binary Random Takagi Curves [Dubuc 1989]. The function introduced by Takagi is also known as the "blancmange" function; given credit for that name is John Mills -- a colleague of David Tall at the University of Warwick [Tall 1981]. Tall's paper also lauds the use of illustrations in real analysis, suggesting that such use had become verboten in the wake of work by Bolzano, Dirichlet, Riemann, Weierstrass, et al. Of course: Had computers and Mathematica been around a century ago, we would have had a comprehensive examination of a and b values in this function early on, and advocating "Takagi" vs. "blancmange" vs. "Van der Waerden" vs. "Van der Waarden" for the function name would seem silly.

In Monsters.nb, Chênevert first presents the function that we call δ(x):

δ[x_]  :=  
      If[x - Floor[x]  <=  1/2, x - Floor[x], 1 - x + Floor[x]]

He then uses that function in creating the base for the Takagi or blancmange function. The actual function results from the summation of this base from unity to infinity:

ϕ[n_][x_] := δ[(2^n) x]/(2^n)

In a move that would make Warwick's David Tall proud, Chênevert next illustrates the first three iterations of that infinite sum, showing the Takagi or blancmange function to be the sum of iterated sawtooth functions, with the amplitude and frequency of each iterated function half and twice (respectively) that of the previous iteration:

Plot[{ϕ[0][x], ϕ[1][x], ϕ[2][x], 
        ϕ[3][x]}, {x, 0, 1}, PlotRange -> {0, .5}, 
      PlotStyle -> {GrayLevel[0], GrayLevel[.8]}]

When we plot the sum of twenty iterated sawtooth functions (20 ≈ ∞ for our purposes), we get the Takagi or blancmange function:

Plot[Sum[ϕ[i][x],  {i,  0,  20}], {x, 0, 1}, 
      PlotRange -> {0, .75}, PlotStyle -> {GrayLevel[0]}]

Another monster is born. Or, at least, illustrated.

"Grade Me ... Look at Me ..."

"The PTA Disbands" is an episode of the animated television show The Simpsons which originally aired in April 1995 on the FOX Network in the U. S. In this episode, which wickedly satirizes the American public school system, the teachers have gone on strike, thus closing the local grade school -- to the delight of young miscreant Bart Simpson but to the horror of his model student of a little sister, Lisa.  While school is out, Lisa exhibits withdrawal symptoms including delirium and heightened anxiety, as induced by the absence of homework, quizzes, examinations ... graded feedback in general. In the throes of her angst, Lisa wanders up to her mother, haplessly begging "Grade me ... look at me ... evaluate and rank me!" Marge Simpson responds by scribbling a large "A" on a blank sheet of paper, and handing it to her forlorn daughter, who accepts it and departs amidst sighs and crazed muttering.

Your reviewer thought of Lisa Simpson in "The PTA Disbands" upon encountering World-Wide Web sites such as www.deja.com, www.epinions.com, and www.sstreams.com. These sites offer their visitors the opportunity to evaluate and rank a wide variety of consumer products, as well as see the evaluations and read (and rate) the reviews from other visitors. Online bookseller Amazon.com not only does the same for customer reviews/ratings of its books, music, and videos, but also categorizes customer-reviewers based on the personal information they knowingly or unwittingly provide. Consider: As of 10 January 2000, the fourth edition of The Mathematica Book ranked 21,317th in hardcover book sales through Amazon.com, but was 19th among the learned technologists comprising the Los Alamos National Laboratory "Purchase Circle." Amazon.com visitors learn that those who bought edition Four also purchased books by the likes of Glynn, Gray, Gaylord, Abell, Maeder, and the staff of Wolfram Research ... obviously other books dealing with Mathematica. Four customer-reviewers had assessed edition Four. Of the four reviews, three offered unqualified praise, while the fourth offered general praise peppered with specific criticisms. Of the four reviews, each of the three praise-effusers was rated "helpful" by only one person, while the sole imperfection-flagger was rated helpful by three. One might thus assume that a helpful review is a detailed review, but nowhere within these sites can one learn what background knowledge the customer-reviewers bring to bear on their reviews.  If the lack of statistical significance in the ratings doesn't cause concern, the unrevealed customer-reviewer background knowledge should. (Food for thought for those who might wish to add reviews/ratings to items in MathSource.)

Of the aforementioned World-Wide Web sites, www.sstreams.com is particularly noteworthy. This site bills itself as the "marketplace for engineers and scientists developing technical software solutions in the industry and education by using high-level programming languages and environments." Offered through this site are items related to IDL, LabVIEW, MATLAB, Maple V, Mathematica, and S-Plus. The Mathematica link leads to further Mathematica links to publications, businesses, events, jobs, programs, resources, and skills. As of early January 2000, the "programs" link led to 16 applications from Wolfram Research, 19 third-party applications, and 45 shareware/freeware applications. Of the 45 shareware/freeware applications, your reviewer found that only six had been rated; of those six, three received what was (at least then) a high rating of 4 1/2 (out of 5) stars. And what did those three programs have in common? All three -- including an item labeled "Plotting the Monsters of Real Analysis" -- were developed by one Gabriel Chênevert from the Univ. of Montreal. Another point of commonality was that each of the Chênevert Three had received only one rating apiece, whereas the 4-star "Mathematica and C home page" link by Jens-Peer Kuska received thirteen ratings. What's more: the Chênevert Three were the only contributions from Chênevert among the 45 shareware/freeware applications. While your reviewer leaves his readers to draw their own conclusions on the basis of these facts, he wonders whether Lisa Simpson would have eased her delirium by giving herself  an "A" during that teachers strike five years ago ....

Assessment

In MathSource item pub/Applications/Mathematics/0210-340 by Gabriel Chênevert, we find no formal references, and the attributions of functions to Riemann and "Van der Waarden" seem to have missed their mark. Nor is there any acknowledgement of the fathers of real analysis in general, or of the origins of the two monsters in particular ... even though formal references and historical development are by no means criteria for entry into MathSource. Nevertheless, Chênevert is but a student, so some latitude is in order during a critique. Readers who would like to learn more about real analysis are advised to consult Baylis [1991] and Bryant [1990]; both works provide an introduction and are relatively readable -- and Bryant's choice of title humors those of us awaiting Yet Another Way to Teach Introductory Calculus Using Mathematica. Were your reviewer compelled to assign a rating to "Monsters.nb" in MathSource item pub/Applications/Mathematics/0210-340, he would assign less than 4 1/2 (out of 5) stars. Someone has to break the trend.

References

Baylis, John. What Is Mathematical Analysis? Macmillan Education Ltd., Houndmills, UK (1991).

Berberian, Sterling K. A First Course in Real Analysis, Springer-Verlag, New York (1994).

Bryant, Victor. Yet Another Introduction to Analysis, Cambridge University Press, Cambridge (1990).

Dubuc, Benoit. "On Takagi Fractal Surfaces," Canadian Mathematical Bulletin, 32(3), 377-384 (1989).

Hawkins, Thomas. Lebesgue's Theory of Integration: Its Origins and Development, University of Wisconsin Press, Madison, Wisconsin (1970).

Mandelbrot, Benoit B. "Fractal Landscapes Without Creases and With Rivers," The Science of Fractal Images, edited by Heinz-Otto Peitgen and Dietmar Saupe, Springer-Verlag, New York (1988).

Manheim, Jerome H. The Genesis of Point Set Topology, Pergamon Press, Oxford (1964).

Singh, A. N. "The Theory and Construction of Non-Differentiable Functions," in E. W. Hobson et al, Squaring the Circle and Other Monographs, Chelsea Publishing Company, New York (1953).

Takagi, T. "A Simple Example of the Continuous Function Without Derivative," Proceedings of the Physico-Mathematical Society of Japan, 1 (series 2), 176-177 (1901-1903) [Singh 1953, p. 51 also refers to a T. Takagi paper titled "A Simple Example of Continuous Function Without Derived Function" and appearing in Journal of the Physical School in Tokyo, 14, 1-2 (1904)].

Tall, David. "The Blancmange Function: Continuous Everywhere but Differentiable Nowhere," Mathematical Gazette, 66(435), 11-22 (1981).

About the Author

Trained in chemical engineering at Washington University in St. Louis and a registered Professional Engineer in the state of Missouri since 1991, Matthew M. Thomas regards real analysis with a little bemusement but more than a little respect. An inveterate Breaker of Things, he would gleefully cast a continuous-but-nowhere-differentiable function within a seemingly innocuous problem, submit that problem to Newton-Raphson neophytes, and reveal the secret only later.

thomas@wuche2.wustl.edu