In earlier parts of this series, we’ve looked at operators that take a number coming in, and produce a number coming out. We’ve looked at stringing these operators together in a chain, and we’ve looked at combinations of operators that somehow net out all their effects so that the net result is that nothing changes: the output is identical to the input. We specifically looked at pairs of operators that net out the effect of the other. We saw, for example, that “subtract 4” precisely undoes the effect of “add 4”, and that such inverse operators can be helpful in figuring out what must have been on a particular input to produce a desired effect on the output.
So far in this series, we haven’t really touched on functions and properties, at least not by name. So let’s redress this now, in a preliminary kind of way, and then get back to it later in more detail.
The notion of a function is important in the history of mathematics, and the modern formulation in terms of relations (usually not encountered until college) is clean and powerful. That formulation, as so many other concepts in modern mathematics, is extensional rather than intentional, which means that we look at behavior only. We simply look at pairs of values (one value going in, the other value coming out) rather than make any assumptions about any kind of mechanism that produces those values coming out. The modern function, in other words, is pretty much a black box.
This modern conception of a function is not necessarily the one that wants to be introduced at the secondary school level. For one, some of the key ideas of what a function is can be formulated as well as understood independent of these careful set-theoretic notions. For example, when we say that the time it takes for a particular ball to fall to the ground is a function of the height at which you drop that ball, a large part of what we mean by that is that the time for the ball to fall does not depend on the day of the week, or on the color of the shirt of the person dropping it, or on the price of his or her watch or how many letters there are in his or her given name. At the same time, the time for the ball to fall to the ground may well depend on certain details of the experimental setup, which may have to be carefully delineated, e.g. to exclude the presence of an eager puppy. Yet no matter how carefully we prescribe the experimental setup, we are likely to overlook some aspects that might be relevant but often taken for granted: don’t do the experiment on a bus in motion, don’t do the experiment during an earthquake, don’t do the experiment in an elevator, don’t do the experiment in an airplane. In the physical sciences, the phenomenon to guard against is known by the phrase “hidden variables”, in the world of computers and computation, the phenomenon is usually called “hidden state”. An example from the world of computers: the time it takes on your computer to open the same spreadsheet may have grown longer as your computer has grown older; this has nothing to do with the speed of the electrons or the processor or the RAM memory chips – those don’t age. It has everything to do with the various software that got installed, wittingly or unwittingly, and that causes a piece of itself to be run whenever you start up your computer. This is permanent state, on the disc drive, and in the registry (on Windows), and on the other side of all your USB connections. There’s other hidden state, but this summary will do for a start.
When you watch kids work with calculators, you can easily observe that they have a working model of this phenomenon of state. They tend to hit the CLEAR button a lot, it is their way to get back to a known state, especially after they lose track of what buttons they pushed. “Did I hit the wrong button? I’m not sure… CLEAR.” After CLEAR is pressed, the screen shows a zero, but kids quickly learn that pressing the 0 key is no substitute for CLEAR.
In all the boxes we’ve been playing with, like the one in the picture above, the relationship between what goes in and what comes out, is a function. The number that comes out, in the example box, is simply the number going in with eight added to it. The number that comes out does not depend on the weather, does not depend on the whim of the person pressing buttons, does not depend on the day of the week or the month of the year. It only depends on the number going in. It is a function of the number going in. For the behavior of the box to fit the mathematical notion of a function, it is not important that there is a matching “undo” box that will cancel out its effect. The box below is a simple example of a function that has no matching “undo”:
In the left box, the action of the operator is expressed in words; in the right box, the standard notation for this is given: |⁻4| = 4, |⁻6| = 6, |7| = 7, |0| = 0. The standard name for this is “absolute value”. I prefer to think of it in terms of the number line: how far is this number away from zero. But you can think of this operator in any way you like; regardless of how we think of it, there is no “undo” for this one. After all, both |⁻4| = 4 and |4| = 4, so you can’t recover what went in from seeing what came out: the 4 that came out could have come from a 4 going in, or from a ⁻4 going in. Unless there is hidden state, some storage associated with the box that kept track of the numbers that went in, and which storage the “undo” box would be able to access, the undo box would have no way of deciding whether 4 or ⁻4 should be produced.