Philosophy & Technology
The phenomenon of digital computation is explained (often differently) in computer science, computer engineering and more broadly in cognitive science. Although the semantics and implications of malfunctions have received attention in the philosophy of biology and philosophy of technology, errors in computational systems remain of interest only to computer science. Miscomputation has not gotten the philosophical attention it deserves. Our paper fills this gap by offering a taxonomy of
... tions. This taxonomy is underpinned by a conceptual analysis of the design and implementation of conventional computational systems at various levels of abstraction. It shows that 'malfunction' as it is typically used in the philosophy of artefacts only represents one type of miscomputation. 1. The purely abstract notion of a computable function and the problem domain; 2. The algorithm for solving the computational problem; 3. The transition from an algorithm to a program (in some systems); and 4. The physical execution of the program on some computational system. In what follows, we take computation to be the execution of algorithm(s) 1 and also rely on an extensional characterisation of computation. We maintain that finite state automata, pushdown automata, TMs, conventional digital computers and calculators-all compute. As well, primitive Boolean gates (e.g. AND/OR/NOT gates) and some combinational circuits, such as half adders and full adders, compute but only trivially. If we adopt a broad (and vague) definition of algorithm, such as 'a well-defined sequence of steps that always finishes and produces an answer' (Hopcroft et al. 2001, p. 373), then it is easy to argue that the aforementioned systems compute by executing algorithms. In the present discussion, we shall only be concerned with miscomputations in systems of this type. Whilst computation has certainly received attention in the literature, surprisingly, miscomputation still lacks a sound characterisation, despite its pervasiveness. One exception in the philosophical literature is the mechanistic account of computation, in the context of which Gualtiero Piccinini emphasises the importance of miscomputation for any adequate account of physical computation (Piccinini 2007, p. 505). A more recent exception in the literature is the instructional information processing account, which gives reasons for the occurrence of computational errors in both trivial and nontrivial computational systems (Fresco & Wolf unpublished). Insofar as physical computational systems are susceptible to errors and verification methods have been developed in computer science to either prevent or isolate such errors, they certainly need to be addressed by any adequate account of computation. Still, the characterisation of miscomputation offered by Piccinini is too narrow. He characterises miscomputation as a kind of malfunction, that is, as an event in which the computational system fails to fulfil its function. Piccinini lists many cases of miscomputation, including a failure of a hardware component, a faulty interaction between hardware and software, a mistake in computer design and a programming error (Piccinini 2007, pp. 523-524). But, as we argue below, malfunction (what we call operational malfunction in the context of our analysis) is only one source of miscomputation. A mistake in computer design, for example should not be classified as an operational malfunction, yet, it still counts as a miscomputation. The objective of this paper is to offer a multi-layered analysis of miscomputation. Already in 1950, Alan Turing made the following observations about 'mistakes' in computational systems.