The Mind as Neural Software?  Understanding Functionalism, Computationalism, and Computational Functionalism[1]

Gualtiero Piccinini

Department of Philosophy

University of Missouri – St. Louis
599 Lucas Hall (MC 73)
One University Blvd.
St. Louis, MO 63121-4499 USA

Email: piccininig@umsl.edu

 

This is a preprint of an article whose final and definitive form will be published in Philosophy and Phenomenological Research; Philosophy and Phenomenological Research is available online at: http://www.blackwellpublishing.com/.

 

Abstract

Defending or attacking either functionalism or computationalism requires clarity on what they amount to and what evidence counts for or against them.  My goal here is not to evaluate their plausibility.  My goal is to formulate them and their relationship clearly enough that we can determine which type of evidence is relevant to them.  I aim to dispel some sources of confusion that surround functionalism and computationalism, recruit recent philosophical work on mechanisms and computation to shed light on them, and clarify how functionalism and computationalism may or may not legitimately come together.

 

 

1           Introduction

Functionalism is forty years old, computationalism is over sixty, and philosophers often conjoin them.  Yet their relationship remains obscure.  With Jerry Fodor, I am struck by “the widespread failure to distinguish the computational program in psychology from the functionalist program in metaphysics” (Fodor 2000, 104).  A recent paper by Paul Churchland (2005) epitomizes such a failure.  Churchland argues that functionalism is false, because the brain is not a classical (i.e., more or less Turing-machine-like) computing mechanism but a connectionist one.  His argument presupposes that functionalism entails classical computationalism.  But functionalism—properly understood—does not entail computationalism, either classical or non-classical.

            Assessing functionalism and computationalism requires clarity on what they amount to and what evidence counts for or against them.  My goal here is not to evaluate their plausibility.  My goal is to formulate them and their relationship clearly enough that we can determine which type of evidence is relevant to them.  I aim to dispel some sources of confusion that surround functionalism and computationalism, recruit recent philosophical work on mechanisms and computation to shed light on them, and clarify how functionalism and computationalism may or may not legitimately come together. 

            I will frame the discussion in terms of functionalism, because functionalism is the metaphysical doctrine most closely associated (and conflated) with computationalism.  But one upshot of this paper is that functionalism and computationalism need not go together.  Functionalism may be combined with a non-computational theory of mind, and computationalism may be combined with a non-functionalist metaphysics.  Once we understand how functionalism and computationalism may or may not mesh, we can generalize our picture to understand how metaphysical doctrines other than functionalism may be combined with computationalism as well as how theories other than computationalism may be combined with functionalism.

To a first approximation, functionalism is the view that the mind is the “functional organization” of the brain, or any other system that is functionally equivalent to the brain (cf. Putnam 1960, 149; 1967a, 200; 1967b, 32).  Another formulation of functionalism is that mental states are “functional states” (Putnam 1967b, 30).[2]  Putnam’s main example of a description of functional organization is the machine table of a Turing machine.  For him, a functional organization is a set of functional states with their functional relations, where a functional state is defined by its causal relations to inputs, outputs, and other functional states (under normal conditions).  Thus, under Putnam’s notion of functional organization, our two formulations of functionalism are equivalent. 

Under the broader notion of functional organization that I will defend, there is more to functional organization than individual functional states and their relations.  There are also aggregates of states, components bearing the states, functional properties of the components, and relations between the components and their properties.  Since the first formulation of functionalism is more general than the second, I prefer the first, but nothing in what follows hinges on the difference between the two.

Stronger or weaker versions of functionalism may be formulated depending on how much of the mind is taken to be functional—how many mental states, or which aspects thereof, are functional.  Are all mental states functional, or only some?  Are all aspects of mental states functional, or only, say, their non-phenomenal aspects?  How these questions are answered makes no difference here, because I’m not concerned with the plausibility of functionalism in general.  I’m concerned with what functionalism amounts to.  One question I will address is, what is functional organization?  In due course, I will examine different notions of functional organization and search for the pertinent one.

            Computationalism, for present purposes, is the view that the functional organization of the brain is computational, or that neural states are computational states.  Again, stronger or weaker versions of computationalism may be formulated depending on how much of the functional organization of the brain is taken to be computational.  But again, I will not assess the plausibility of computationalism here. 

Functionalism plus computationalism equals computational functionalism.  In a well-known slogan, computational functionalism says that the mind is the software of the brain (or any functionally equivalent system; I will omit this qualification from now on).  Taken at face value, this slogan draws an analogy between the mind and the software of ordinary, program-controlled computers.  But the same slogan is often understood to suggest, more modestly, that the mind is the computational organization of the brain—or that mental states are computational states—without the implication that such a computational organization is that of a program-controlled computer.  As we shall see, the ambiguity between the strong and the weak reading is one source of confusion in this area.

Computational functionalism has been popular among functionalists who are sympathetic to computationalist research programs in artificial intelligence, psychology, and neuroscience.  It has also encountered ferocious resistance.[3]  The present goal, however, is not to determine whether the mind is the software of the brain.  It is to understand what this means and what counts as evidence for or against it.

An important caveat.  The functionalism I am concerned with descends from some early writings of Hilary Putnam and Jerry Fodor (Putnam 1960, 1964, 1967a, 1967b; Fodor 1965, 1968a, 1968b).  It is a metaphysics of mind—the main alternatives being dualism, behaviorism, and the type-identity theory.  It accounts for minds as they are described by scientific theories and explanations.  It is also known as psychofunctionalism (Block 1980).[4]

 

2           The Analogy between Minds and Computers

At the origin of computational functionalism are analogies between some features of minds and some features of computers.  Different analogies pull towards different versions of the view.

            Putnam, the chief founder of computational functionalism, drew an analogy between the individuation conditions of mental states and those of Turing machine states (Putnam 1960, 1967a, 1967b).[5]  Putnam noticed that the states of Turing machines are individuated in terms of the way they affect and are affected by other Turing machine states, inputs, and outputs.  By the same token, he thought, mental states are individuated by the way they affect and are affected by other mental states, stimuli, and behavior.  At first, Putnam did not conclude that mental states are Turing machine states, because—he said—the mind might not be a causally closed system (Putnam 1960).  A bit later, though, Putnam reckoned that mental states can be characterized functionally, like those of Turing machines, though he added that the mind might be something “quite different and more complicated” than a Turing machine (Putnam 1967a).  Finally, Putnam went all the way to computational functionalism:  mental states are (probabilistic) Turing machine states (Putnam 1967b).

            As Putnam’s trajectory illustrates, the analogy between the individuation of mental states and that of Turing machine states does not entail computational functionalism.  The latter conclusion was reached by Putnam some time after drawing his analogy, on independent grounds.  What grounds?

            It’s hard to know for sure.  The relevant papers by Putnam contain references to the plausibility and success of computational models of mental phenomena, including Warren McCulloch and Walter Pitts’s theory of the brain.  In 1943, McCulloch and Pitts proposed a mathematical theory of neurons and their signals to the effect that, in essence, the brain is a Turing machine (without tape).[6]  A few years later, John von Neumann interpreted McCulloch and Pitts’s work as proof that “anything that can be exhaustively and unambiguously described, anything that can be exhaustively and unambiguously put into words, is ipso facto realizable by a suitable finite neural network” of the McCulloch and Pitts type (von Neumann 1951, 23).

It is now clear that von Neumann’s statement isn’t true, at least under its most natural interpretation.  A fortiori, McCulloch and Pitts proved nothing of the sort.  For one thing, the nervous system described by their theory is a simplified and idealized version of the real thing.  More importantly, von Neumann’s statement implicitly abuses the Church-Turing thesis.  The Church-Turing thesis says that anything that is computable in an informal sense, which is intuitively familiar to mathematicians, is computable by Turing machines.  From this, it doesn’t follow that anything that can be exhaustively and unambiguously described is computable by Turing machines.  Nor does it follow, as many would soon conclude, that everything can be simulated by Turing machines or that everything is computational.  Alas, neither von Neumann nor his early readers were especially careful about these matters.  After von Neumann, fallacious arguments from the Church-Turing thesis—sometimes in conjunction with McCulloch and Pitts’s actual or purported results—to the conclusion that the mind is computational began to proliferate.[7]

Since McCulloch and Pitts’s networks can be simulated by digital computers, von Neumann’s (unwarranted) statement entails that anything that can be exhaustively and unambiguously described can be simulated by a digital computer.  If you add to this a dose of faith in scientists’ ability to describe phenomena—“exhaustively and unambiguously”—you obtain pancomputationalism:  at a suitable level of description, everything is computational.  Thus, pancomputationalism made its way into the literature.  As Putnam put it, “everything is a Probabilistic Automaton [i.e., a kind of Turing machine] under some Description” (Putnam 1967b, 31).  Together with Putnam’s analogy between mental states and Turing machine states and the alleged plausibility of computational psychology, pancomputationalism is the most likely ground for Putnam’s endorsement of computational functionalism.

            For present purposes, the most important thing to notice is that the resulting version of computational functionalism is quite a weak thesis.  This remains true if computational functionalism is disengaged from Putnam’s appeal to Turing machine states in favor of the thesis that mental states are, more generally, computational states (Block and Fodor 1972).  If mental states are computational simply because at some level, everything is computational, then computational functionalism tells us nothing specific about the mind.  It is a trivial consequence of the purported general applicability of computational descriptions to the natural world.  This version of computational functionalism does not tell us how the mind works or what is special about it.  Such a weak thesis stands in sharp contrast with others, which derive from different analogies between features of minds and features of computers.[8]

            Both minds and many kinds of computing mechanisms manipulate complex combinatorial structures.  Minds produce natural language sentences and other complex sequences of actions.  Computing mechanisms manipulate complex strings of digits.[9]  The structures and processes in question are complex in the sense that in the interesting cases, there are recursive rules describing the structure of the inputs and outputs as well as recursive rules describing the relationship between inputs and outputs.  Furthermore, for any (universal) formalism for specifying computations (e.g., Turing machines) and any recursive function, there is a program describing a way to compute that function within that formalism.  Finally, whether a program computes a function correctly (e.g., whether it computes square roots correctly) is an open question—it’s “open to rational criticism” (Putnam 1960, 149), as it were.

            Thanks in part to the complexity of their structure and the sensitivity of computing mechanisms to such a structure, strings of digits may be systematically interpreted.  So computers’ activities are usually characterized by semantic descriptions.  For example, we say that computers do arithmetic calculations, which is an activity individuated in terms of operations on numbers, which are possible referents of digits.  This interpretability of the digits manipulated by computers has often been seen as part of the analogy between mental states and computational states, because mental states are also typically seen as endowed with semantic content.  This, in turn, has contributed to the attractiveness of computational theories of mind.[10]  But matters of mental content are controversial, and without agreement on mental content, the putative semantic analogy between mental states and computational states gives us no firm ground on which to explicate computational functionalism.  In the next section, I will argue that the semantic properties of computing mechanisms make no difference for our purposes.  Setting semantic properties aside, let’s go back to the complexity of the structures being manipulated.

            The analogy between the structures manipulated by minds and by computing mechanisms is stronger than the previous one:  prima facie, most things cannot manipulate combinatorial structures of arbitrary recursive complexity according to arbitrary recursive rules.  This stronger analogy is a likely source of some versions of computationalism, and derivatively, of computational functionalism.  But this analogy is still insufficient to underwrite the slogan “the mind is the software of the brain.”  The reason is that the analogy holds between minds and computing mechanisms in general, and many computing mechanisms (e.g., ordinary Turing machines) don’t possess any software in the relevant sense.  For the relevant notion of software, we need yet another analogy, which holds between certain mental capacities and certain capacities of program-controlled computers.

            Program-controlled computers (“computers” from now on), unlike other computing mechanisms, have an endless versatility in manipulating strings of digits.  If they are universal, they embody in a single entity the universality of whole programming systems.  Computers are versatile because they can store, manipulate, and execute programs.[11]  To a first approximation, a program is a list of instructions for executing a task defined over strings of digits.  An instruction is also a string of digits, which affects a computer in a special way.  Most computers can execute many different (appropriately written) programs—typically, within certain limits of time and memory, they can execute any program.  Because of this, computers can acquire any number of new capacities simply by acquiring and switching between programs.  They can also refine their capacities by altering their programs.  Just as minds can learn to execute a seemingly endless number of tasks, computers can execute any task, defined over strings of digits, for which they are given an appropriate program.

            This special property of computers—their capacity to store and execute programs—gives rise to the special form of explanation that we employ to account for their behavior.  How is my desktop computer letting me write this paper?  By executing a word-processing program.  How does it allow me to search the web?  By executing an Internet browsing program.  And so on for the myriad capacities of my computer.  These are explanations by program execution:

 

An explanation by program execution of a capacity C possessed by a system S is a program P for C such that S possesses C because S executes P.

 

Explanation by program execution applies only to systems, such as computers, that have the capacity to execute programs.  Other relevant systems include certain automatic looms.  Even though computers are not the only class of systems subject to explanation by program execution, computers have other interesting properties that they do not share with other program-controlled mechanisms.  The main difference is that the processes generated by computer programs depend on the precise configuration of the input data (viz., the input strings of digits) for their application:  to each string of input data there corresponds a different computation.  Furthermore, typical computers have an internal memory in which they can store and manipulate their own data and programs, and they can compute any recursive function for as long as they have time and memory space.

            These remarkable capacities of computers—to manipulate strings of digits and to store and execute programs—suggest a bold hypothesis.  Perhaps brains are computers, and perhaps minds are nothing but the programs running on neural computers.  If so, then we can explain the multiple capacities minds exhibit by postulating specific programs for those capacities.  The versatility of minds would then be explained by assuming that brains have the same special power that computers have:  the power to compute by storing and executing programs.[12]  This is the true source of the computational functionalist slogan:  the mind is the software of the brain.

            Compare this version of computational functionalism to the first one.  Here we have a putative explanation of human behavior, based on an analogy with what explains computers’ behavior.  This version tells us how the mind works and what’s special about it:  the brain has the capacity of storing and executing different programs, and the brain’s switching between programs explains its versatility.  It is quite a strong thesis:  of all the things we observe, only brains and computers exhibit such seemingly endless ability to switch between tasks and acquire new skills.  Presumably, there are few if any other systems whose behavior is explained in terms of (this type of) program execution.

            If we take this formulation of computational functionalism seriously, we ought to find an adequate explication of program execution.  We ought to make explicit what differentiates systems that compute by executing programs from other kinds of system.  For if minds are to be interestingly analogous to some aspect of computers, there must be something that minds and computers share and other systems lack—something that accounts for the versatility of minds and computers as well as the explanation of this versatility by program execution.  Unfortunately, the received view of software implementation, which is behind the standard view of program execution, does not satisfy this condition of adequacy.

 

3           Troubles with Program Execution

Ever since Putnam (1967b) formulated computational functionalism, the received view of software implementation has been as follows.  If there are two descriptions of a system, a physical description and a computational description, and if the computational description maps onto the physical description, then the system is a physical implementation of the computational description and the computational description is the system’s software.[13]

The problem with this view is that it turns everything into a computer.  As was mentioned in the previous section, everything can be given computational descriptions.  For instance, some cosmologists study the evolution of galaxies using cellular automata.  According to the received view of software implementation, this turns galaxies into hardware running the relevant cellular automata programs.  If satisfying computational descriptions is sufficient for implementing them in the sense in which ordinary computers execute their programs, then everything is a computer executing its computational descriptions.  This is not only counterintuitive—it also trivializes the notion of computer as well as the analogy at the origin of computational functionalism.  If the mind is the software of the brain in the sense in which certain cellular automata are the software of galaxies, then the analogy between minds and computers becomes an analogy between minds and everything else.  As a consequence, the strong version of computational functionalism collapses into something very much like the weak one.

            To make matters worse, the same system satisfies many computational descriptions.  An indefinite number of cellular automata—using different state transition rules, different time steps, or cells that represent regions of different sizes—map onto the same physical dynamics.  Furthermore, an indefinite number of formalisms different from cellular automata, such as Turing machines or C++ programs, can be used to compute the same functions computed by cellular automata.  Given the received view of software implementation, it follows that galaxies are running all these programs at once.[14]

By the same token, brains implement all their indefinitely many computational descriptions.  If the mind is the software of the brain, as computational functionalism maintains, then given the standard view of software implementation, we obtain either indeterminacy as to what the mind is, or that the mind is a collection of indefinitely many pieces of software.  This is not a promising metaphysics of mind, nor is it a way of explaining mental capacities in terms of program execution.[15]

            The problem under discussion should not be confused with a superficially similar problem described by Putnam (1988) and Searle (1992).  They argue that any physical system implements a large number of computations, or perhaps every computation, because a large number of (or perhaps all) state transitions between computational states can be freely mapped onto the state transitions between the physical states of a system.  For example, I can take the state transitions my web browser is going through and map them onto the state transitions my desk is going through.  As a result, my desk implements my web browser.  I can establish the same mapping relation between a large number of (or perhaps all) computations and physical systems.  From this, Putnam and Searle conclude that the notion of computation is observer-relative in a way that makes it useless to the philosophy of mind.  Their argument is based on the received view of software implementation, and we might avoid its conclusion by abandoning the received view.

But even under the received view of software implementation, Putnam and Searle’s problem is not very serious.  As many authors have noted (e.g., Chrisley 1995, Copeland 1996, Chalmers 1996a, Bontly 1998, Scheutz 2001), the computational descriptions employed by Putnam and Searle are anomalous.  In the case of kosher computational descriptions—the kind normally used in scientific modeling[16]—the work of generating successive descriptions of a system’s behavior is done by a computer running an appropriate program (e.g., a weather forecasting program), not by the mapping relation.  In the sort of descriptions employed in Putnam and Searle’s argument, instead, the descriptive work is done by the mapping relation.

In our example, my web browser does not generate successive descriptions of the state of my desk.  If I want a genuine computational description of my desk, I have to identify states and state transitions of the desk, represent them by a computational description (thereby fixing the mapping relation between the computational description and the desk), and then use a computer to generate subsequent representations of the state of the desk, while the mapping relation stays fixed.  So, Putnam and Searle’s alleged problem is irrelevant to genuine computational descriptions.  Still, the problem under discussion remains:  everything can be given an indefinite number of bona fide computational descriptions.

To solve this problem, we must conclude that being described computationally is insufficient for implementing software, which is to say, we must go beyond the received view of software implementation.  The same point is supported by independent considerations.  The word ‘software’ was coined to characterize specific mechanisms called ‘computers’.  Computers perform different activities from those performed by other mechanisms such as drills or valves—let alone galaxies.  We consider the invention of computers in the 1940s a major intellectual breakthrough—the discovery of something new.  We have specific disciplines—computer science and computer engineering—that study the peculiar activities and characteristics of computers and only computers.  For all these reasons, a good account of software implementation must draw a principled distinction between computers and other systems.

Philosophers have largely ignored this problem, and the charitable reader may legitimately wonder why.  A first part of the answer is that philosophers interested in computationalism have devoted most of their attention to explaining mental phenomena, leaving computation per se largely unanalyzed. 

A second part of the answer is that computationalist philosophers typically endorse the semantic view of computation, according to which computational states are individuated, at least in part, by their content (for a recent example, see Shagrir 2001, 2006).  The semantic view appears to offer protection to the received view of software implementation, because independently of the semantic view, it is plausible that only some things, such as mental states, are individuated by their content.  If computational states are individuated by their content and content is present only in few things, then explanation by program execution will apply at most to things that have content, and the trivialization of the notion of software is thereby avoided.  Unfortunately, the protection offered by the semantic view is illusory.  Here, there is no room for the in-depth treatment the semantic view of computation deserves.  I have given such a treatment elsewhere (Piccinini 2004c, 2008); I will only reiterate its results.

First, even the conjunction of the received view of software implementation and the semantic view of computation does not capture the notion of program execution that applies to ordinary computers.  Computers (and some automatic looms, for that matter) execute programs whether or not the digits they manipulate have content, and there are mechanisms that perform computations defined over interpreted strings of digits just like those manipulated by computers but do so without executing programs (e.g., many calculators).  Second, there are computationalists who maintain that content plays no explanatory or individuative role in a computational theory of mind (Stich 1983, Egan 1992, 2003).  Conjoining computationalism with the semantic view of computation begs the question of whether computational states are individuated by their content.  Finally, and most seriously, the semantic view of computational states is incorrect, because computability theorists and computer designers—i.e., those to whom we should defer in individuating computational states—individuate computational states without appealing to their semantic properties.  For these reasons, the semantic view of computation needs to be rejected, and cannot restore to health the received view of software implementation.

To a first approximation, the distinction between computers and other systems can be drawn in terms of program execution, where program execution is understood informally as a special kind of activity pertaining to special mechanisms (cf. Fodor 1968b, 1975; Pylyshyn 1984).  Computers are among the few systems whose behavior we normally explain by invoking the programs they execute.[17]  When we do so, we explain each activity of a computer by appealing to the unique program being executed.  A program may be described in many different ways:  instructions, subroutines, whole program in machine language, assembly language, or higher level programming language.  But modulo the compositional and functional relations between programs and their components at different levels of description, a computer runs one and only one program at any given time.  An expert can actually retrieve the unique program run by a computer and write it down, instruction by instruction.

True, modern computers can run more than one program “at once,” but this has nothing to do with applying different computational descriptions to them at the same time.  It has to do with computers’ capacity to devote some time to running one program, quickly switch to another program, quickly switch back, and so forth, creating the impression that they are running several programs at the same time.  (Some so-called supercomputers can execute many programs in parallel.  This is because they have many different processors, i.e., program-executing components.  Each processor executes one and only one program at any given time.)[18]  All of this is in need of non-circular explication.  A good account of software implementation must say why computers execute programs while most other systems don’t, and hence what minds need to be like in order to be the putative software of brains.  To prepare for that, it’s time to clarify the relationship between functionalism and computationalism.

 

4           Mechanistic Functionalism

According to functionalism, the mind is the functional organization of the brain.  According to computationalism, the functional organization of the brain is computational.  These theses are prima facie logically independent—it should be possible to accept one while rejecting the other.  But according to one construal, functional organizations are specified by computational descriptions connecting a system’s inputs, internal states, and outputs (Putnam 1967b, Block and Fodor 1972).  Under this construal, functional organizations are ipso facto computational, and hence functionalism entails computationalism.  This consequence makes it impossible to reject computationalism without also rejecting functionalism, which may explain why attempts at refuting functionalism often address explicitly only its computational variety (e.g., Block 1978, Churchland 2005).  The same consequence has led to Fodor’s recent admission that he and others conflated functionalism and computationalism (2000, 104).

            To avoid conflating functionalism and computationalism, we need a notion of functional organization that doesn’t beg the question of computationalism.  The broadest notion of functional organization is the purely causal one, according to which functional organization includes all causal relations between a system’s internal states, inputs, and outputs.  Given this notion, functionalism amounts to the thesis that the mind is the causal organization of the brain, or that mental states are individuated by their causal properties.  Indeed, this is how functionalism is often formulated.  The good news is, this version of functionalism is not obviously committed to computationalism, because prima facie, causal properties are not ipso facto computational.  The bad news is, this version of functionalism is too weak to underwrite a theory of mind.

The causal notion of functional organization applies to all systems with inputs, outputs, and internal states.  A liberal notion of input and output generates an especially broad causal notion of functional organization, which applies to all physical systems.  For instance, every physical system may be said to take its state at time t0 as input, go through a series of internal states between t0 and tn, and yield its state at tn as output.  A more restrictive notion of input and output generates more interesting notions of functional organization.  For instance, opaque bodies may be said to take light of all wavelengths as input and yield light of only some wavelengths plus thermal radiation as output.  Still, the purely causal notion of functional organization is too vague and broad to do useful work in the philosophy of mind (and computation, for that matter).  How should the notions of input and output be applied?  Which of the many causal properties of a system are relevant to explaining its capacities?  Does this purely causal version of functionalism entail computationalism?  To answer these questions, we need to restrict our attention to the causal properties of organisms and artifacts that are relevant to explaining their specific capacities.

To fulfill this purpose, we turn to the notion of functional analysis.  Functional analysis was introduced in modern philosophy of mind by Fodor (1965, 1968a).  He used examples like the camshaft, whose function is to lift an engine’s valve so as to let fuel into the piston.  The camshaft has many causal properties, but only some of them, such as its capacity to lift valves, are functionally relevant—relevant to explaining an engine’s capacity to generate motive power.  Fodor argued that psychological theories are functional analyses, like our analysis of the engine’s capacity in terms of the functions of its components.

When Fodor defined psychological functional analysis in general, however, he departed from his examples and assimilated psychological functional analyses to computational descriptions.[19]  Several other authors developed a similar notion of functional analysis, retaining Fodor’s assimilation of functional analyses to computational descriptions (Cummins 1975, 1983, 2000, Dennett 1978, Haugeland 1978, Block 1995).  If functional organizations are specified by functional analyses and functional analyses are computational descriptions, then functional organizations are ipso facto computational.  The mongrel of functional analysis and computational description is another source of the conflation between functionalism and computationalism.

To avoid this conflation, we need a notion of functional organization that has the relevant explanatory power—like Fodor et al’s—but does not commit us to the view that every functionally organized system is computational.  The recent revival of mechanisms in the philosophy of science offers us what we need.  Not only do mechanisms satisfy our need; a formulation of functionalism in terms of mechanisms is also independently motivated.  For an important lesson of recent philosophy of science is that (the relevant kind of) explanation in the special sciences, such as psychology and neuroscience, takes a mechanistic form[20]:

A mechanism M with capacities C is a set of spatiotemporal components A1, …, An, their functions F, and F’s relevant causal and spatiotemporal relations R, such that M possesses C because (i) M contains A1, …, An, (ii) A1, …, An have functions F organized in way R, and (iii) F, when organized in way R, constitute C.

 

A mechanism in the present sense exhibits its capacities thanks to its components, their functions, and their organization.  Biologists ascribe functions to types of biological traits (e.g., the digestive function of stomachs) and engineers ascribe them to types of artifacts and their components (e.g., the cooling function of refrigerators).  The functions ascribed to traits and artifacts are distinct from their accidental effects (e.g., making noise or breaking under pressure), and hence are only a subset of their causal powers.  As a consequence, tokens of organs and artifacts that do not perform their functions may be said to malfunction or be defective.

As I will use the term, a mechanism’s functional organization includes the states and activities of components, the spatial relations between components, the temporal relations between the components’ activities, and the specific ways the components’ activities affect one another.  For example, the heart pumps blood into the arteries.  This simple mechanistic description can begin to be unpacked as follows:  (i) the mechanism includes a heart (component), arteries (components), and blood (input/output), (ii) the heart pumps the blood (activity of the heart), (iii) the heart is attached to the arteries in a certain way (spatial relation), (iv) the blood enters the arteries after it leaves the heart (temporal relation), (v) the heart’s pumping causes the blood to enter the arteries (active relation).  The relevant spatial relations between components may continue to hold even when the mechanism is not functioning.  Not so for most temporal and active relations.  Much more could be said about functional organization.  The important point is that the functional organization of a mechanism is a necessary condition for the mechanism to do what it does.

Different notions of mechanism may be generated by employing different notions of function.[21]  Drawing from William Wimsatt’s helpful taxonomy, we find three especially pertinent notions (Wimsatt 1972, 4-5).  Perspectival functions are causal powers that are relevant according to a view or perspective of what the system is doing.  Evaluative functions are causal powers that contribute to a system’s proper functioning.  Teleological functions are causal powers that contribute to fulfilling the goal(s) of the system or its users.

These three notions are related.  Fulfilling goals is one way of functioning properly, especially if proper functioning is defined as fulfilling one’s goals, though something may function properly without fulfilling its goals.  Functioning properly may be all that is needed to fulfill one’s goals, especially if one’s goal is to function properly, though something may fulfill its goals without functioning properly.  So evaluative and teleological functions may or may not go together.  Furthermore, goals and standards of proper functioning define perspectives that we may take towards a system.  Thus, as Wimsatt points out, evaluative and teleological functions are special cases of perspectival functions.  But the notion of perspectival function is broader than the others:  there are perspectives towards a system that have nothing to do with proper functioning or goals.

The above notions of function (as well as goals, proper functioning, and perspectives) need naturalistic explications.  There is no shortage of literature devoted to that, and I cannot hope to resolve the debate on functions here.[22]  For present purposes, I’ll limit myself to the following caveats.

First, different authors offer slightly different accounts of mechanisms, and not all of them employ the word ‘function’.  But those differences are irrelevant here.  All accounts of mechanisms may be subsumed under the above template by using the broad notion of perspectival function.

Second, there may be several legitimate notions of mechanisms, corresponding to different notions of function.  Any notion of function that aspires to be relevant here, however, must be naturalistic.  Which of the more precise notions of mechanism is most adequate to account for the explanatory practices that are relevant to the science and metaphysics of mind is a question that need not be resolved here.

Third, any further explication of the notion of function or mechanism cannot rely on the notion of computation in such a way as to turn all mechanisms into computing mechanisms, on pain of begging the question of computationalism again.  Fortunately, computation plays no such role in current explications of these notions.  As a result, appealing to mechanisms does not beg the question of computationalism.

This shows that we need not fasten together functions and computations as Fodor and his followers did.  When we appeal to the function of camshafts to explain the capacities of engines, our function ascription is part of a mechanistic explanation of the engine’s capacities in terms of its components, their functions, and their organization.  We do not appeal to programs executed by engines, nor do we attribute any computation to engines.  In fact, most people would consider engines good examples of systems that do not work by executing programs (or more generally, by performing computations).  The same point applies to the vast majority of mechanisms, with the notable exception of computers and other computing mechanisms (including, perhaps, brains).

Fourth and finally, we should not confuse the teleological notion of function with the etiological account of teleology.  The etiological account of teleology in terms of evolutionary history is perhaps the most popular one, but it might not suit our present purposes.[23]  What matters here is that teleological functions ground a robust notion of functional organization without relying on the notion of computation.  The question of how teleological functions ought to be explicated is surely important, but I can remain neutral about it.[24]

The systems studied by most special sciences, including neuroscience, psychology, and computer science, are mechanisms.  Investigators in these disciplines analyze systems (e.g., trees) by breaking them down into component parts (e.g., roots) and discovering (or in engineering, designing) the functions of those parts (e.g., supporting the tree and absorbing water from the soil).  Neuroscientists and psychologists elaborate their theories in the same way:  they partition the brain or mind into components (e.g., the suprachiasmatic nuclei or episodic memory) and they ascribe them functions (respectively, regulating circadian rhythms and storing records of events).  Mutatis mutandis, computer scientists do the same thing:  they partition a computer into components (e.g., the memory and the processor) and ascribe them functions (respectively, storing data as well as instructions and executing instructions on the data). 

Since mechanisms give us the notion of functional organization that is relevant to understanding theories in psychology, neuroscience, and computer science, we should adopt this notion of functional organization in our formulation of functionalism.  We can give a novel and improved formulation of functionalism, which does justice to the original motivations of functionalism without begging the question of computationalism.  Functionalism about a system S should be construed as the thesis that S is the functional organization of the mechanism that exhibits S’s capacities.  We can now explicate the claim that the mind is the functional organization of the brain:  the brain is the relevant mechanism, and the mind is its functional organization.  This mechanistic functionalism preserves functionalism’s insight while doing justice to the relevant scientific practices.

Under this mechanistic version of functionalism, a system is individuated by its component parts, their functions, and their relevant causal and spatiotemporal relations.  The functional states of the system are individuated by their role within the mechanistic explanation of the system.  The states of the system are not only individuated by their relevant causal relations to other states, inputs, and outputs, but also by the component to which they belong and the function performed by that component when it is in that state.  This applies to all mechanisms, including computing mechanisms.  For example, pace Putnam, ordinary Turing machine states are individuated not only as having the function of generating certain outputs and other internal states on the basis of certain inputs and states, but also as being states of the active device (as opposed to the tape), which is a component of the Turing machine and has the functions of moving along the tape, reading the tape, and writing on it.[25]

            Mechanistic functionalism has a further great advantage, which is especially relevant to the concerns of this paper:  it is based on a notion of mechanism that offers us the materials for explicating the notion of program execution, and more generally, computation.

 

5           Mechanisms, Computation, and Program Execution

A mechanism may or may not perform computations; a mechanism that performs computations—a computing mechanism—may or may not do so by executing programs.  To illustrate the latter distinction, consider Turing machines.  Turing machines are made out of a tape of unbounded length, an active device that can take a number of states, letters from a finite alphabet, and relations (specified by a machine table) between tape, active device, states, and letters.  Of course, Turing machines are usually thought of as abstract, in the same sense in which mathematically-defined triangles and circles are abstract.  Like triangles and circles, Turing machines can be physically implemented.  Physically implemented Turing machines and other concrete computing mechanisms operate on concrete counterparts of strings of letters, which I call ‘strings of digits’.  Whether abstract or concrete, Turing machines are mechanisms, subject to mechanistic explanation no more and no less than other mechanisms.[26]

Some Turing machines compute only one function.  Other Turing machines, called ‘universal’, can compute any computable functions.  This difference in computation power has a mechanistic explanation.  Universal Turing machines, unlike non-universal ones, treat some digits on their tape as programs; they manipulate their data by appropriately responding to the programs.  Because of this, universal Turing machines—unlike non-universal ones—may be said to execute the programs written on their tape.  The behavior of all Turing machines is explained by the computations they perform on their data, but only the behavior of universal Turing machines is explained by the execution of programs.  Besides Turing machines, many other mechanisms compute:  finite state automata, pushdown automata, RAM machines, etc.  Of these, some compute by executing programs and some don’t.  Of those that do, some are universal and some aren’t.

Like Turing machines, the capacities of most biological systems and artifacts are mechanistically explained in terms of their components and functions (Bechtel and Richardson 1993, Craver and Darden 2001).  Unlike Turing machines, the capacities of most biological systems are not explained by appealing to putative computations they perform, let alone programs that they execute (except, of course, in the case of brains and other putative computing mechanisms).

            So, explaining a capacity by program execution is not the same as explaining it computationally, which is not the same as explaining it mechanistically.  Rather, explaining a (computational) capacity by program execution is a specific kind of computational explanation, which is a specific kind of mechanistic explanation.  Computers are subject to explanation by program execution because of their peculiar mechanistic properties.  More generally, computing mechanisms are subject to computational explanation because of their peculiar mechanistic properties, some of which (though not all) they share with computers.

            The rest of this section is devoted to explicating the above distinctions.  First, I will identify the subclass of mechanisms that perform computations and whose (relevant) capacities are explained by the computations they perform.[27]  Second, I will identify the subclass of computing mechanisms that execute programs and whose (relevant) activities are explained by the programs they execute.  Once we have an account of these distinctions, we will have the resources to explicate computational functionalism.

Most mechanisms are partially individuated by their capacities.  For instance, stomachs are things whose function is to digest food, and refrigerators are things whose function is to lower the temperature of certain regions of space.  Capacities, in turn, may be analyzed in terms of inputs received from the environment and outputs delivered to the environment.  Stomachs take undigested food as input and yield digested food as output; refrigerators take their inside at a certain temperature as input and deliver the same region at a lower temperature as output.  Inputs and outputs may be taxonomized in many ways, which are relevant to the capacities to be explained.  In our examples, foods and temperatures are taxonomized, respectively, in terms of whether and how they can be processed by stomachs and refrigerators in the relevant ways.  Being a specific kind of mechanism, computing mechanisms are individuated by inputs and outputs of a specific kind and by a specific way of processing those inputs and outputs.

The inputs and outputs that are relevant to computing mechanisms are what computability theorists call strings of letters, or symbols.[28]  A string of digits, as I’m using the term, is a concrete counterpart of a string of letters.  What does it take for a concrete entity to be a string of digits?  I will now sketch an answer in mechanistic terms.  A digit is a particular that belongs to one and only one of a finite number of relevant types.  The digits’ types are unambiguously distinguishable (and hence individuated) by the effects they have on the mechanism that manipulates them.  That is, every digit of the same type affects a mechanism in the same way relative to generating the mechanism’s output, and each type of digit affects the mechanism in a different way relative to generating the mechanism’s output.

In other words, ceteris paribus, if Digit1 and Digit2 are of the same type, then substituting Digit1 for Digit2 results in the exact same computation (type) with the same output string (type), whereas if Digit1 and Digit2 are of different types, then substituting Digit1 for Digit2 results in a different computation, which may generate a different output string.[29]  This property of digits differentiates them from many other classes of particulars, such as temperatures and bites of food, which belong to indefinitely many relevant types.  (There is no well-defined functional classification of temperatures or foods such that every temperature or bite of food belongs to one among a finite number of relevant types).

            A string is a list of permutable digits individuated by the digits’ types, their number, and their order within the string.  Every finite string has a first and a last digit member, and each digit that belongs in a string (except for the last member) has a unique successor.  A digit within a string can be substituted by another digit without affecting the other digits’ types, number, or position within the string.  In particular, when an input string is processed by a mechanism, ceteris paribus, the digits’ types, their number, and their order within the string make a difference to what output string is generated. 

The fact that digits are organized into strings further differentiates strings of digits from the inputs and outputs of other functionally analyzable systems.  Neither temperatures nor bites of food are organized into strings in the relevant sense.  The comparison is unfair, because neither bites of food nor temperatures are digits to begin with.  But let us suppose, for the sake of the argument, that we could find a way to unambiguously taxonomize bites of food into finitely many (functionally relevant) types.  For instance, we could taxonomize bites of food into protein bites, fat bites, etc.  If such a taxonomy were viable, it would turn bites of food into digits.  Still, sequences of bites of food would not constitute strings of digits, because digestion—unlike computation—is largely indifferent to the order in which an organism bites its food.

            Among systems that manipulate strings of digits, some do so in a special way:  under normal conditions, they produce output strings of digits from input strings of digits in accordance with a general rule, which applies to all relevant strings and depends on the inputs (and perhaps the internal states) for its application.[30]  The rule in question specifies the function computed by the system.  Some systems manipulate strings without performing computations over them.  For instance, a genuine random number generator yields strings of digits as outputs, but not on the basis of a general rule defined over strings.  (If it did, its output would not be genuinely random.)  Systems that manipulate strings of digits in accordance with the relevant kind of rule deserve to be called computing mechanisms.

            The activities of computing mechanisms are explained by the computations they perform.  For example, if you press the buttons marked ‘21’, ‘:’, ‘7’, and ‘=’, of a (well-functioning) calculator, after a short delay it will display ‘3’.  The explanation of this behavior includes the facts that 3 is 21 divided by 7, ‘21’ represents 21, ‘:’ represents division, ‘7’ represents 7, ‘=’ represents equality, and ‘3’ represents 3.  But most crucially, the explanation involves the fact that under those conditions, the calculator performs a specific calculation:  to divide its first input datum by the second.  The capacity to calculate is explained, in turn, by an appropriate mechanistic explanation.  Calculators have input devices, processing units, and output devices.  The function of the input devices is to deliver input data and commands from the environment to the processing units, the function of the processing units is to perform the relevant operations on the data, and the function of the output devices is to deliver the results to the environment.  By iterating this explanatory strategy, we can explain the capacities of a calculator’s components in terms of its components’ functions and their organization.

            Until now, I’ve sketched an explication of computing mechanisms in general:  computing mechanisms are mechanisms whose function is manipulating strings of digits according to appropriate rules; their behaviors are explained by the computations they perform.  There remains to explicate the more interesting notion of a (program-controlled) computer—a mechanism that computes by executing programs.

Computers have special processing units, usually called processors.  Processors are capable of performing a finite number of primitive operations on input strings (of fixed length) called ‘data’.  Which operation a processor performs on its data is determined by further strings of digits, called ‘instructions’.  Different instructions cause different operations to be performed by a processor.  The performance of the relevant operation in response to an instruction is what constitutes the execution of that instruction.  A list of instructions constitutes a program.  The execution of a program’s instructions in the relevant order constitutes the execution of the program.  So, by executing a program’s instructions in the relevant order, a computer processor executes the program.  This is a brief mechanistic explanation of (program-controlled) computers and their capacity to execute programs in terms of their components, functions, and organization.  The capacity of a processor to execute instructions can be further explained by a mechanistic explanation of the processor in terms of its components, their functions, and their organization.[31]

Only computing mechanisms of a specific kind, namely computers, have processors capable of executing programs (and memories for storing programs, data, and results).  This is why only the capacities of computers, as opposed to the capacities of other computing mechanisms—let alone mechanisms that do not perform computations—are explained by program execution.  Computational explanation by program execution says that there are strings of digits whose function is to determine a sequence of operations to be performed by a processor on its data.

In other words, program execution requires that (a state of) part of the computer functions as a program; in an explanation by program execution, ‘program’ is used as a function term.  The way a program determines what the computer does is cashed out in terms of the computer’s mechanistic properties.  A program-controlled computer is a very specific kind of computing mechanism, which has the capacity to execute programs.  This is why the appeal to program execution is explanatory for computers—because it postulates programs and processors inside computers.

            As a consequence, when the behavior of ordinary computers is explained by program execution, the program is not just a description.  The program is also a (stable state of a) physical component of the computer, whose function is to generate the relevant capacity of the computer.  Programs are physically present within computers, where they have a function to perform.  Somehow, this simple and straightforward point seems to have been almost entirely missed in the philosophical literature.[32]

 

6           Computational Functionalism

We now have the means to explicate computational functionalism:

 

Computational functionalism:  the mind is the software of the brain. 

 

In the broadest sense, this may be interpreted to say that the mind is (some aspect of) the computational organization of the brain, where computational organization is the functional organization of a computing mechanism and the brain is assumed to be a computing mechanism.  In other words, systems that realize minds are mechanisms that manipulate strings of digits according to general rules; the mind is the collection of functional states and properties such that the mechanism manipulates those strings in accordance with those rules.

            This broad interpretation cashes out the general analogy between minds and many computing mechanisms, according to which both minds and computing mechanisms manipulate complex combinatorial structures in accordance with appropriate rules.  This version of computational functionalism is compatible with any nontrivial version of computationalism, including connectionist computationalism.  But as I pointed out in Section 2, this analogy is neither as strong nor as explanatory as the analogy between minds and (program-controlled) computers.  The more general analogy is not based on the notion of software used in computer science, which is the notion that explains the capacities of (program-controlled) computers and inspires the slogan “the mind is the software of the brain.”  Accordingly, in explicating computational functionalism we should give precedence to the literal notion of software.  (I’ll come back to this more general formulation later.)

            In its strong and literal form, computational functionalism says that (i) the brain contributes to the production of behavior by storing and executing programs, in the sense sketched in the previous section, and (ii) the mind is constituted by the programs stored and executed by the brain, plus, perhaps, the states and processes generated by executing those programs.  As in the broader version of computational functionalism, the mind is an aspect of the computational organization of a computing mechanism; in addition, the computing mechanism is a program-controlled computer and the mind is its programs (plus, perhaps, the states and processes generated by executing the programs).  This doctrine has some interesting consequences for the study of minds and brains.

Computational functionalism licenses explanations of mental capacities by program execution.  This is a kind of mechanistic explanation, which explains mental capacities by postulating a specific kind of mechanism with specific functional properties.  Briefly, the postulated mechanism includes memory components, which store programs, and at least one processor, which manipulates and executes them.  Together, the interaction between memories and processors determines how the system processes its data and produces its outputs.  The capacities of the system are explained as the result of the processing of data performed by the processor(s) in response to the program(s).

Computational functionalism entails that minds are multiply realizable, in the sense in which different tokens of the same type of computer program can run on different kinds of hardware.  So if computational functionalism is correct, then—pace Bechtel and Mundale 1999, Shapiro 2000, Churchland 2005 and other foes of multiple realizability—mental programs can also be specified and studied independently of how they are implemented in the brain, in the same way in which one can investigate what programs are (or should be) run by digital computers without worrying about how they are physically implemented.  Under the computational functionalist hypothesis, this is the task of psychological theorizing.  Psychologists may speculate on which programs are executed by brains when exhibiting certain mental capacities.  The programs thus postulated are part of a mechanistic explanation for those capacities.

The biggest surprise is that when interpreted literally, computational functionalism entails that the mind is a physical component (or a stable state of a component) of the brain, in the same sense in which computer program tokens are physical components (or stable states of components) of computers.  As a consequence, even a brain that is not processing any data—analogously to an idle computer, or even a computer that is turned off—might still have a mind, provided that its programs are still physically present.  This consequence seems to offend some people’s intuitions about what it means to have a mind, but it’s independently plausible.  It corresponds to the sense in which people who are asleep or otherwise unconscious still have minds.  Their minds are “causally quiescent,” as David Armstrong puts it (1981).

Computational functionalism describes the mind as a program, which means that the function of the mind is to determine which sequences of operations the brain has to perform.  This presupposes a particular mechanistic explanation of the brain as a program-controlled computer, i.e., a mechanism with certain components that have certain functions and a certain organization.  Whether a system is a particular kind of mechanism is an empirical question.  In this important respect, computational functionalism turns out to incorporate a strong empirical hypothesis.

Philosophers of mind have usually recognized that computationalism is an empirical hypothesis in two respects.  On the one hand, there is the empirical question of whether a computer can be programmed to exhibit all of the capacities that are peculiar to minds.  This is one traditional domain of artificial intelligence.  On the other hand, there is the empirical question of whether all mental capacities can be explained by program execution.  This is one traditional domain of cognitive psychology.  As to neuroscience, computationalists have traditionally considered it irrelevant to testing their hypothesis, on the grounds that the same software can be implemented by different kinds of hardware.  This attitude is unsatisfactory in two respects.

First, as we have seen, at least two important construals of functionalism are such that they entail computationalism.  But if computationalism is a logical consequence of the metaphysical doctrine of functionalism, then the empirical status of computationalism is tied to that of functionalism:  if functionalism is a priori true (as some philosophers believe), then computationalism should need no empirical testing; conversely, any empirical disconfirmation of computationalism should disconfirm functionalism too.  An important advantage of my proposed reformulation of functionalism is that it does not entail computationalism.  This leaves computationalism free to be an empirical hypothesis about the specific functional organization of the brain, which—when conjoined with functionalism—gives rise to computational functionalism. 

But second, if computationalism is an empirical hypothesis to the effect that mental capacities are the result of program execution, it isn’t enough to test it by programming computers and attempting to explain mental capacities by program execution.  Indeed, to assume that this is enough for testing it begs the question of whether the brain is the sort of mechanism that could run mental programs at all—whether it is a (program-controlled) computer.  Assuming that the mind is the software of the brain presupposes that the brain has components of the relevant kinds, with the relevant functional and organizational properties.

Whether the brain is a kind of program-controlled computer is itself an empirical question, and if the brain were not functionally organized in the right way, computational functionalism about the mind would turn out to be false.  This shows computational functionalism to incorporate an empirical hypothesis that can be effectively tested only by neuroscience.  Whether brains are one kind of mechanism or another can only be determined by studying brains. 

This sense in which computational functionalism embodies an empirical hypothesis is more fundamental than the other two.  If the brain is a (program-controlled) computer, then both classical artificial intelligence and classical cognitive psychology have a fair chance of succeeding.  But if the brain is not a computer, then classical artificial intelligence and cognitive psychology may or may not succeed in ways that depend on the extent to which it is possible to reproduce the capacities of systems that are not computers by executing programs.  It may be possible to reproduce all or many mental capacities by computational means even though the brain is not a computer, the mind is something other than the programs running on the brain, or both.  The extent to which this is possible is a difficult question, which there is no room to address here. 

I have formulated and discussed computational functionalism primarily using the notion of program execution, because the analogy between minds and program-controlled computers is the motivation behind the strong version of computational functionalism.  There is no question that many of those who felt the pull of the analogy between some features of minds and some features of computers—such as Alan Turing, John von Neumann, Jerry Fodor, Allen Newell, and Herbert Simon—did so in part because of the explanatory power of program execution.

But as I noticed at the beginning of this essay, computational functionalism is ambiguous between a strong and a weak reading.  It is equally obvious that many other authors, who are (or were at one point) sympathetic to the analogy between some features of minds and some features of computers, such as Hilary Putnam, Robert Cummins, Paul and Patricia Churchland, Michael Devitt and Kim Sterelny (1999), and even Warren McCulloch and Walter Pitts (at least in 1943), would resist the conclusion that the brain stores and executes programs.  Is there a way to cash out their view without falling into the trivial conclusion that the mind can be described computationally in the sense in which anything else can?  Indeed there is.  Their view is captured by the more general formulation of computational functionalism mentioned at the beginning of this section.

The account of computational explanation I sketched in Section 5 applies to all computing mechanisms, regardless of whether they are controlled by programs.  In fact, computation by program execution is explicated in terms of the more general notion of computation tout court.  Roughly, computation is the manipulation of data and (possibly) internal states according to an appropriate rule.  (Computation by program execution, then, is computation performed in response to instructions that encode the relevant rule.)  The digital computers we use every day compute by executing programs, but ordinary (i.e., non-universal) Turing machines, finite state automata, and many connectionist networks perform computations without executing programs.

To cover theories that don’t appeal to program execution, all we need to do is interpret computational functionalism in terms of computation tout court, without appealing to program execution.  According to this generalized computational functionalism, the mind is (some aspect of) the computational organization of a (computing) mechanism, regardless of whether that mechanism is a program-controlled computer, a connectionist computing mechanism, or any other kind of computing mechanism (e.g., a finite state automaton).  Given the generalized formulation, psychological explanations need not invoke the execution of programs—they can invoke either program execution or some other kind of computation (connectionist or otherwise) that is presumed to generate the behavior to be explained.  This kind of explanation is still a mechanistic explanation that appeals to the manipulation of strings of digits in accordance with an appropriate rule by appropriate components with appropriate functions.  Hence, this generalized formulation of computational functionalism still presupposes that the brain has the relevant mechanistic properties, which can be studied empirically by neuroscience.  Given this generalization, computational functionalism is compatible with any computational theory of mind, including connectionist computationalism.

Abandoning the strong analogy between minds and computers (based on program execution), as the generalized version of computational functionalism does, produces a loss of explanatory power.  The generalized version of computational functionalism still appeals to computation in explaining mental capacities, but it can no longer appeal to the flexibility that comes with the ability to acquire, store, modify, and execute different programs.  Which computing mechanisms are powerful enough to explain mental capacities?  We do not have room here to enter this complex debate (Macdonald and Macdonald 1995, Aizawa 2003).  But by drawing attention to all functional and organizational aspects of computing mechanisms at all relevant levels, the account here proposed promises to push this debate forward.

The present account sheds light on some other old disputes too.  Two mental capacities that are especially contentious are intentionality and consciousness.