Here’s a thread from a few weeks ago, explaining an interesting but underexplored overlap between a theoretical problem in philosophy and a practical problem in computer science:
Okay, it looks like I’m going to have to explain my take on the rule-following argument, so everyone buckle themselves in. Almost no one agrees with me on this, and I take this as a sign that there is a really significant conceptual impasse in philosophy as it stands.
So, what’s the rule-following argument? In simple terms, Wittgenstein asks us how it is possible to interpret a rule correctly, without falling into an indefinite regress of rules for interpreting rules. How do we answer this question? What are the consequences? No one agrees.
Wittgenstein himself was concerned with examples regarding rules for the use of everyday words, which is understandable given his claim that meaning is use: e.g., he asks us how we determine whether or not the word ‘doll’ has been used correctly when applied in a novel context.
Kripke picked up Wittgenstein’s argument, but generalised it by extending it to rules for the use of seemingly precise mathematical expressions: i.e., he asks us how we distinguish the addition function over natural numbers (plus), from some arbitrarily similar function (quus).
This becomes a worry about the determinacy of meaning: if we can’t distinguish addition from any arbitrarily similar function, i.e., one that diverges at some arbitrary point (perhaps returning a constant 0 after 1005), then how can we uniquely refer to plus in the first place?
Here is my interpretation of the debate. Those who are convinced by worries about the doll case extend those worries to the plus case, and those unconvinced by worries about the plus case extend this incredulity to the doll case. Everyone is wrong. The cases are distinct.
Wittgenstein deployed an analogy with machines at various points in articulating his thoughts about rules, and at some point says that it is as if we imagine a rule as some ideal machine that can never fail. This is an incredibly important image, but it leads many astray.
Computer science has spent a long time asking questions of the form: ‘How do we guarantee that this program will behave as we intend it to behave?’ There is a whole subfield of computer science dedicated to these questions, called formal verification.
This is one of those cases in which Wittgensteinians would do well to follow Wittgenstein’s injunction to look at things how they are. Go look at how things are done in computer science. Go look at how they formally specify the addition function. It’s not actually that hard.
In response to this, some will say: ‘But Pete, you are imagining an ideal machine, and every machine might fail or break at some point?’ Why yes, they might! What computer science gives us are not absolute guarantees, but relative ones: assuming x works, can we make it do y?
Presuming that logic gates work as they’re supposed to, and we keep adding memory and computational capacity indefinitely, we can implement a program that will carry out addition well beyond the capacity of any human being, and yet mean the same thing as a fleshy mathematician.
At this point, to say: ‘But there might be one little error!’ Is not only to be precious, but to really miss the interesting thing about error, namely, error correction. Computer science also studies how we check for errors in computation so as to make systems more reliable.
If there’s anyone familiar Brandom‘s account of the argument out there, consider that for him, all that’s required for something to count as norm governed is a capacity to correct erroneous behaviour. We have deliberately built these capacities into our computer systems.
We have built elaborate edifices with multiple layers of abstraction, all designed to ensure that we cannot form commands (programs) whose meaning (execution) diverges from our intentions. We have formal semantics for programming languages for this reason.
One can and should insist that the semantics of natural language terms like ‘doll’ (and even terms like ‘quasar’, ‘acetylcholine’, and ‘customer’) do not work in the same way as function expressions like ‘+’ in mathematics or programming. In fact, tell this to programmers!
But listen to them when they tell you that terms like ‘list’, ‘vector’, and ‘dependent type’ can be given precise enough meanings for us to be sure that we are representing the same thing as our machines when we use them to extend our calculative capacities.
Intentionality remains a difficult philosophical topic, but those who ignore the ways in which computation has concretely expanded the sphere of human thought and action have not proved anything special about human intentionality thereby.
Worse, they discourage us from looking for resources that might help us solve the theoretical problem posed by the ‘doll’ case in the ideas and tools that computer science has developed to solve practical problems posed by the seemingly intractable quirks of human intentionality.