No, not if it's still executing on a physical computer.
No, not if it's still executing on a physical computer.
I think if we look hard at the structure of CPU instruction sets, GPUs, math coprocessors and the like, we'll see even at the lowest level attempts to present analogies and manage the limits of pure logic as presented to a human consciousness. So even at the lowest level of CPUs, the language of analogy is present, and that implies that a human subject is going to supply the content "between the electrons" as it were.
There are no attempts to manage the limits of pure logic at the silicon level. The entire analogy of the CPU is to implement pure boolean logic through strict controls and limits of voltage levels in analog circuits.
The logic available to humans is the same available to CPU. Godel used pure logic to create an unprovable statement that was both true and false. What he did to create such a statement is what computers do not (yet) have, but it most certainly is not logic, and I think that would be what you say is 'between the electrons'.
But whether we can program and execute this 'insight' on a finite logic system is another question that is yet to be answered. What we can program we can execute and thus can be reduced to basic forms of symbolic logic, whether powered by electrons, pen and paper or the brain.
But this isn't the whole story either, right? What is "pure boolean logic" anyway? It doesn't exist even at the lowest levels. Logic is always applied to a statement of some kind, it doesn't exist as a pure abstraction. It's interesting you bring up Godel. Russell and Whitehead attempted to map logic to math in the Principia, and were refuted by Godel's incompleteness. I don't want to make too much of incompleteness (as many do), but let's not make too little of it either. At some point logic can only do so much for you, and you have to resort to analogy. I think this happens much earlier in CPU architecture than you're allowing for.
What you have at a low level on the CPU are a set of instructions arbitrarily (to some degree) defined to efficiently model analogical actions like "push" and "move" and "shift" and the fundamental operations that map to assembly. And here we've already moved out of the realm of pure logic -> math envisioned by Russell and we've created logic -> language, by way of analogy. This is, I would argue, a rhetorical move rather than a logical one. We've already prepared/redacted the ones and zeroes for human consumption, and assumed a specific semantic to provide for a human imagination that will accept and adapt to the semantic.
There's no magic in the computer and no analogy other than designing analog circuits that clamp voltage levels and a very large finite state machine. It's logic all the way down, limits and all, though instead of incompleteness there's incomputability. 2 sides of the same coin.
Pure boolean logic can be reduced to symbol manipulation using rules of substituion and inferrence, but, of course, what is that composed of? Godel showed that metalogic is made of logic, you just elevate the types.
What is logic made of?
BTW I know computer architecture very well. There's no analogies, just abstraction.
"The instructions in the CPU are no different from the statements in the Principia"
As the goal of the PM was to show that math was a function of logic, we can use 'statements in the Principia' and 'the classical rules of logic' interchangeably in this context.
There's two questions at play in this conversation. One is whether in principle the question of the meaning, as such, of software, can be considered apart from the whole act of perceiving the software, either as code or as the final UX.
As the idea of "meaning" always involves some kind of communication, a sign or set of signs shared between two subjects, and as the idea of software pointing back to its own internal state as the content of this communication would render the communication pointless and the signs merely tautological, I think the question of meaning must bring the subject, and the act of perception and interpretation, into consideration. Scientific statements of fact, regarding the physical position of all of the machine's atoms and electrons, have content, but not "meaning" in the common sense of that term intended in the current context.
The second question, which I'm pretty much winging here (although I have long-held opinions about the PM and its relationship to the same kinds of considerations about "meaning"), is whether CPU instruction sets, as subsets of the rules of logic, dictated by the fundamentals of CS (Babbage, Turing, et al), are "pure" expressions of logic, or whether in the act of abstracting logic into the restricted set of instructions, we've performed an analogy.
I think the same question comes to bear -- it matters which perspective you're taking, whether "meaning" is merely a construction that hides the more essential question of physicality, or whether ideas like "push" applied to things like registers and addresses and binary values are linguistic in nature and convey more than just tautological facts about the physical state of CPU internals.
I guess this pushes the question out -- why does a computer exist? To represent to the world the bare facts of its own internal state? Of course not. A 64-bit address that points to a sequence of binary values is never just that, it's always a sign that points to something else -- a person's address; a representation of an English character; a shipment of goods; a lat/long location of some specific place in the world.
So, a "move" or "shift", to you, may reduce backwards to a collection of logical operations. But even there, what has happened? Nothing's "moved" or "pushed", that's just an linguistic trick to help us think of the electrical currents being turned "off" and "on" (and even those are analogies) in mentally-manageable concepts that map to the rules of logic. To me the question of "meaning" has already been broached at this point, if we wish to see computations as significant beyond, again, tautological statements about CPU internals. If we take the latter point of view, we have mere mathematical statements that have the same point as pure math -- the elegance (if that) of its own proof, not any relationship to something external to itself. But of course, that was never the real point of computers from the very beginning.
The Godel/Russell/Whitehead question is apt here, because this is a very similar question, if not the same question. Is math a function of logic -- that is to say, can math be "true"? The point of the Principia was to bring about the dream of the Vienna Circle, a purely mathematical and systematic technical language to resolve all philosophical ambiguity once and for all. While there remain a few holdouts for that dream, the general consensus is that this did not work out -- Godel was only one of many problems with Positivism specifically, and I would argue, Analytical Philosophy in general, although in recent years the Analytical/Continental divide has been shortened.
"What is logic made of?"
Yeah. This. That's the question driving all of this.
Good conversation.
If it runs on a computer it can be reduced to a simple set of core rules that is a logic, no matter how complex, by virtue that it is running on a computer.
Real math doesn't have to follow such rules.
But of course that's not what we do as coders. The code is never "complete" -- it's always striving towards some "meaning" that is for a human being. You cannot exclude the meaning of the code from the subject that it is intended for. A human being perceiving the code is always redacting the meaning of the code, not as a function of ones and zeros, but as a function of the analogy that code creates, pointing not towards electrons but towards: a product in a warehouse; a sum of sales at the end of a quarter; a flaming ball of death hurling towards my first-person-virtual head. And so on.
In this sense the electrons/ones and zeroes are no more significant than the paper that The Iliad is written on + the ink it is written with.
All works of substance share such an 'incompleteness' and meaning. We just look to non-programming works as complete in a sense when they are recognized. But such works are constantly being rewritten in different forms in order to produce the effect they are known to be able to produce.
In the end, everything is a program in some sense whether to be executed by a brain or computer.
The point of what I was saying was to refute the idea that somehow our programs are so complex and have such amazing behaviour that they will not be reducable to a core set of rules. If the programs run on a computer they must be computable and thus reducable to a core set of rules. That's it.
Whether we can be reduced to that core set of rules is not evident yet. Using logic, a statement that denies it's own provability in the language it was writen in was crewated. Logic was not thought to be able to lie, until it did. Who knows what the right brain can make it do?
This was the statement that I started all this with. I am taking "surplus of content" to mean "a bunch of programs" in this context due to the quote speaking of a Ruby DSL. Programs can be reduced to a sequence of logical operations if they are computable, which I would take as 'core rules'.
Therefore, only non-computable programs can not be reduced to a set of core rules by the definition of computability. QED
Maybe you can explain 'it is much more than merely what happens when it runs'? Do you mean that what it took to create the program was greater than the resulting program and it's effects caused by running it? That the meta-logic used to create the program is far greater than the logic in the program itself?
I am 'much more' than the results of actions when I act. I have a past history that has created me, a physical body being used to act with, the world I am acting in, and the resulting effects of my actions, plus everything else I have missed. I that what you mean by 'much more'?
tl;dr -- Yes!
The non-tl;dr:
By "surplus of content" I meant to say that the rich, english-like syntax of something as high level as a Ruby DSL acquires rhetorical, intuitive meaning that cannot be reduced to a 1:1 symbolic relationship to the compiled instructions. But this "surplus" is supplied by the perceiving subject, in the same way that natural language itself is interpreted and redacted by the human being reading a particular work.
I didn't mean to say that mathematical magic had happened as a result of complexity.
I'm coming at this from a philosophical as well as a CS background (I studied both, but ended up in software). In philosophy, there is an ancient tension between rhetoric and logic. Logic is a brute force process -- a set of rules where the same input always produces the same output, just as (and, it turns out, according to the same rules) the same electrical series of pulses supplied to logic gates and pushed lockstep through them by the CPU clock will always produce the same output. Many analytic philosophical papers don't look all that different from a Karnaugh map describing the structure of a multiplexer, and the results of both are equally deterministic. This school of thought was galvanized by and built heavily upon the Principia we spoke of earlier.
But there's another school of thought in philosophy that uses rhetoric and poetic devices as well as logic to achieve its ends. Language in this view (From Aristotle's Rhetoric to Heidegger's Building, Dwelling, Thinking) is decidedly not deterministic, but provocative, emotive and intuitive. Human beings communicating with each other with language use analogy and a commonly shared narrative history to provoke meaning to each other, rather than reduce statements to mere facts that are reduced to true or false. This school is commonly referred to as the "Continental" school, due to its prominence in France and Germany. Analytical approaches dominate British and American universities.
So, my argument here is a function of a larger question about language itself. I'm saying that the English-like analogical techniques even at the lower levels are provocative and provide more meaning than can be reduced to the underlying logic. This is not to say that any software is less than deterministic -- of course it cannot be non-deterministic because the core functions are purely mechanistic and deterministic. So, an address changed in a DB is always changed in the same way, and a joystick moved in such a way to provide a stream of x,y coordinates to a controller will always move a character in the same way, etc.
But the meaning on the other side of those events is supplied by a subject. At an extreme level, think of a high-resolution bitmap of Rembrandt's Philosopher in Meditation. The presentation of the pixels is deterministic, but the meaning is supplied by the subject. I'm saying that to a greater or lesser degree this redaction, the interpretive gesture that supplies a surplus of meaning is taking place at basically every level of computation. To a lesser degree at the low levels ("push", and so forth), but to higher degrees the closer to English-like (3G languages, etc.) we get. Images and literature presented in UTF-8 are just radical examples on one side of the spectrum, of how deterministic CPU instructions can result in this "surplus".
>> The point of what I was saying was to refute the idea that somehow our programs are so complex and have such amazing behaviour that they will not be reducable to a core set of rules. If the programs run on a computer they must be computable and thus reducable to a core set of rules. That's it.
Considering a piece of software as a mathematical construction -- let's say, for instance, a C++ program compiled by the LLVM, and the LLVM bytecode expressed as machine instructions for the given chip, reduced to pure binary math, I totally agree with this.