By a "functional relationship" I mean "the way" a part of a system interacts with the rest of the system. In a certain sense it "doesn't matter" how the part of the system is specifically formed; the part could be changed, and provided the rest of the system is changed in a corresponding way, the functional relationship could be left the same.

Here's a random example from computer programming. Suppose the system is the following Python function.

def evalCost(hills, low, high):
    s = 0
    for x in hills:
        if x < low:
            s += (low - x)**2
        elif x > high:
            s += (x - high)**2
    return s

The declaration "s = 0" on line 2 has a certain functional relationship to the rest of the function. But if we changed line 2 to "t = 0", and also changed the later mentions of s to mentions of t, then the functional relationship between line 2 and the rest of the function would be the same. The function would do the same thing, and line 2 would play the same role in doing it.

Another example from computer programming: suppose that you have written a program designed to interact with a database and do some calculations. Now you want to write some tests for your program. In your tests, the program does not talk to the database, it instead talks to some testing mock-up that acts like the database. This mock-up has taken the role of the database, and the functional relationship between the mock-up and your program is the same as the functional relationship between the database and your program.

Another example: a running program has values at different memory locations. We might move a value from one memory location to another one, and if we also change every reference to the first memory location to a reference to the second one, then the functional relationship between the program and the value has not changed.

Another example: suppose that a function f1 takes some input and is designed to output 1 if the input is valid, and 0 if the input is invalid. Now suppose that a function f2 works exactly the same, except that it outputs 0 if the input is valid, and 1 if the input is invalid. The functional relationship between an output of 1, and f1, is the same as the functional relationship between an output of 0, and f2. This case is particularly interesting because the outward I/O behavior of f2 is different from the I/O behavior of f1, and yet the same functional relationship can be present in both.

The question is relevant to consciousness. When we perceive an image, part of which is red, presumably there must be some piece of data stored in our neurons representing that red part of the image. But it doesn't matter specifically what that data is, only its functional relationship to the rest of the brain; that piece of data could change, and as long as the rest of the system changed in a corresponding way, then the functional relationship would be preserved (and presumably we would still consciously perceive red).

What is the common thread here, and is there any way to precisely (mathematically) specify exactly what a functional relationship is? I am more interested right now in the examples from programming that I gave, than consciousness; there's lots of extra baggage if we want to talk about consciousness. But the functional relationship between parts of a computer program seems like a relatively clearer and more concrete idea, yet one that still seems difficult to formally specify.

  • A Name by any other Name runs as sweet.
    – Scott Rowe
    Aug 21 at 18:28
  • 1
    In the restricted sense that you are using the term functional relation, is it possible that you are referring to equivalence relations. For example, if we say that f1 is related to f2 when function f1 can be obtained from function f2 by a consistent change of variable name, then this relation partitions the class of all functions into equivalence classes and we would say f1 is equivalent to f2. One might also say "invariant under a change of variable name', or even identify a symmetry. And similarly for the remaining examples.
    – nwr
    Aug 21 at 18:41
  • @nwr I am indeed thinking along the lines of some type of equivalence relation, but "invariant under a change of variable name" is too narrow. I want to somehow capture the general idea.
    – causative
    Aug 21 at 18:48
  • Isn't this just the notion of isomorphism? X "plays the same role" in a system S as Y in a system T if there is an isomorphism between S and T that corresponds X to Y. To make it "functional", X and Y have to be functions as opposed to relations or something else. The "functional role" is then a pair (X,S) up to isomorphism (equivalence class of pairs).
    – Conifold
    Aug 21 at 23:46
  • @Conifold Perhaps vaguely. What precisely is an "isomorphism between systems"? In fact, what precisely is a "system"? These are interesting questions but not easy questions. Proper answers to them need to be mathematically rigorous.
    – causative
    Aug 22 at 0:46

1 Answer 1


A function in the sense you list is listed by Google as follows:

an activity or purpose natural to or intended for a person or thing.

In the example of any computational artifact, which is a machine that is designed and therefore intended to do something, the function is merely the intention of the implementer. For instance, in your Python code, the function of the declaration is to declare a numerical value in the type system, initialize it, and then manipulate it to some end.

A function in this sense, therefore, is a purpose. Note that your entire code is functional. The function signature replete with parameterization has a purpose (to specify in the scope the name of the variables that will be used as arguments). The return statement has a purpose (to end the scope and return a value to the caller). The exponentiation operator has a purpose (to exponentiate). And these subgoals in your procedures could be accomplished using different mechanisms. Some systems use the carat ('^') for instance. Some systems require a semicolon at the end of a line. Some systems require a signature before the declaration. In fact, the entire routine could be written in assembly and achieve the same effect.

Note, that not only are we free to choose a machine-specific implementation of your instructions, we needn't even use a formal language that runs on a machine. We, for instance, can specify a pseudocode. Or, we can express an algorithm in natural language as we are wont to do when describing our intentions to other people. What makes something a function is the goal it serves.

Philosophically, the relevant issue here is addressed under teleology, and when teleological language is applied to biological systems (nature as opposed to artifact), then there's an added complexity of deciphering what it means to use teleological language when no intention applies (natural selection isn't an agent in the philosophical sense). See the SEP's Teleological Notions in Biology for more information on the functions and biological systems.

In philosophy of mind, the ultimate notion that is preserved in functionalism is the idea that all aspects of the mind can be achieved with a substrate other than the brain. For instance, the human brain is obviously capable of adding numbers. Since we can build alternative systems of physical computation (SEP) that can add, it begs the question what else can we simulate. With the passing of time, than answer seems to be more and more. Today, for instance, machine learning algorithms are capable of learning through supervision or otherwise. Computer systems can process human voices. Camera systems can identify faces. These are all functions that are traditionally the domain of human intelligence. It remains to be seen if there's some functionality of that brain that cannot be built and simulated most importantly the creation of human-level semantic systems. If that happens, folks such as Ben Goetzel and their claims of AGI will be validated.

  • I have often thought along similar lines, that the meaning of a thing is really about the purpose served by that thing (e.g. what objective function the thing is helping to optimize, and how). However, translating that intuition into mathematics is the real challenge.
    – causative
    Aug 21 at 19:05
  • @causative I'd simply suggest that math is a thinking tool. So, translating purpose in mathematics is best characterized by an understanding of what the mathematics accomplishes.
    – J D
    Aug 21 at 21:22
  • Math is the thinking tool you can use when you have managed to be totally precise, down to rigorous fundamentals, about what you're talking about. The ultimate test of whether you have really, really understood something, is whether you can translate it into mathematics. If you can't do that, then maybe your ideas just fall apart into incoherence if you look closer and more rigorously at them.
    – causative
    Aug 21 at 22:22

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .