The entity - All is code
By Sylvain Magne
1 - Evolution is an algorithm
a - Definition of algorithm
b - Evolution, a recursive algorithm
c - A replicating recursive algorithm
2 - All is code
a - Mathematics' equivalence
b - The universe is made of codes
c - Why take the code's eye view?
3 - The code
a - Medium
b - Reader and Actions
c - Language
d - Code
e - Coding systems
4 - Conclusion
In this chapter, I want to show that the “entity” that R. Dawkins refers to, can be understood as a code, a kind of computer program. And this, whether we are talking about actual computer programs, or genes or cultural traits. I will first remind us that the theory of evolution itself is an algorithm, a kind of code. I will then show how we can rigorously look at the universe and understand it as a pile of codes, by taking what I call the code’s eye view on the universe. Once R. Dawkins’ entity is understood as a code we can finally start describing this elusive “entity” in more practical details.
As a matter of fact, the theory of evolution and the concept of replicator are models based on algorithms and mathematics. Mathematics are fundamental to any science indeed but algorithms and computer programs become more and more important in modeling our understanding of the universe. It turns out that algorithms are more universal than one may think at first.
An algorithm consists simply of a series of well defined step by step operations. The concept of algorithm is central to any computing process. Quite simply, every computer program is an algorithm or made of algorithms. But algorithms are also part of our everyday life. A recipe is a form of algorithm as well, and so is a guide to build a piece of furniture or the rules of a board game. These algorithms tell you how to go about executing a specific task with a simple set of rules. Algorithms can also be found in nature. Within the living cells, the replication of DNA molecules follows a very precise step by step algorithm.
Algorithms can be “run” once or many consecutive times. By brushing one’s teeth everyday we are using a recursive algorithm. Recursive algorithms are simply algorithms that are typically run again and again. For example, when creating a puff pastry one needs to flatten and fold the dough many times over, thus repeating a simple algorithm in order to create the thin layers of the pastry. Learning a poem by heart through repeated reading and recitation is also a recursive algorithm. With regard to evolution, it is through generations and generations that the genes get selected by natural selection, undergoing the same recurring selective process. Evolution is therefore the result of recursive algorithms.
The particularity of the evolutionary algorithm is that it is circular, by the fact that it applies to itself, making copies of itself, the copies then make more copies of themselves and so on allowing for a continued process that can potentially go on forever. This way, genes make copies of themselves through reproduction into new generations that will, in turn, make copies of themselves, thus allowing for populations to grow and spread. Evolution is a rather simple algorithm that anyone can grasp easily. There is nothing difficult to it. What can be more difficult to grasp is the effect, on the long run, of recursive algorithms, especially when errors and accidents happen along the way, which is the case in nature. Life has been going on for a long time and the algorithm of evolution has had the leisure to run many times indeed. A lot can happen in that time, so much that it can lead to the complexity of life that we know today.
All of this to say that evolution is an algorithm and that the algorithm’s perspective may well be the best angle to study evolution. So let’s try, before we take the point of view of the replicator, to take the point of view of algorithms.
As it turns out, algorithms are more than “just algorithms”. They’re not just something that sometimes happens to be an algorithm. Indeed, if one looks at the universe from a certain point of view, then everything is algorithm. Or so mathematics say.
Algorithms are nothing else than mathematical objects. Mathematics is the best and only real tool that we have to model the world around us. Mathematics are fascinating for the fact that they allow us to model the world in such simple and elegant ways. A simple mathematical formula can explain and predict the movements of planets with perfect accuracy and scientists find it very efficient to look at the world and make sense of it through mathematics. Evolution is no exception.
Now there are two slightly different angles that one can use to look at the world. Since the boom of computers and their ability to run algorithms we have had a rather new perspective on the world which, in some cases can be easier to grasp. For example, one equation will not be enough to model the formation of galaxies but by using computers and complex algorithms we can simulate the creation of galaxies with our desktop computers. This new approach would simply be impossible and out of reach without the use of computers. Algorithms help us understand the workings of such complex systems as galaxies, the weather, evolution and many complex chaotic systems.
However, the relevance of algorithms goes even further. In fact it has been shown that the relationship between mathematics and computer algorithms is more fundamental than expected. The French mathematician and neuroscientist Jean-Louis Krivine has changed the way one can look at the universe in a rather revolutionary way.
Jean-Louis Krivine has helped greatly to demonstrate mathematically the equivalence between maths and a particular programming language called Lambda Calculus. Strictly, for the purpose of this argument, it doesn't really matter to know what the Lambda Calculus is. What is important is to understand what the equivalence means. Basically, J.L.K.’s equivalence means that for all mathematical theorems there exists a computer program that is equivalent, and reciprocally for every computer program there exists an equivalent mathematical object. As a result, there is a strict equivalence between maths and computer programs, in other words, maths are computer programs and computer programs are maths.
What this fact implies is that where we may understand things mathematically, we can also understand them as programs. Science has shown us how we can look at the world and understand it in mathematical terms, in other words, with equations. What J.L.K.’s equivalence tells us, is that we can just as well and rigorously change our perspective and look at the universe as if it were a computer. The laws of gravity, quantum mechanics, and every scientific laws are indeed equivalent to computer programs with this particular fact that the programer and the computer are one and the same, the universe itself. In other words the universe is a giant computing system constantly firing lines of codes.
Now, it’s all very well but why would it be interesting for memetics to look at the universe as a computer? Why take the point of view of the code?
The point of this is to show that R. Dawkins’ “entity” can be understood as an algorithm, or a code, simply because, as we have just seen, anything in the universe can be understood as a code. The good thing about this is that, unlike the elusive “entity”, the code is something that we can hope to study and understand. We can now try and see what we can learn about replicators from the fact that they are codes and not just vague “entities”. We can now hope to lift the misunderstanding that stems from the mysterious “entity”.
Also depending on what subject scientists are studying it may be easier to take one view or another. When it comes to the movements of planets, a purely mathematical approach may be simpler, but when it comes to chaotic systems such as the weather, algorithms are more practical. It is easy to see that, when studying genes, the code’s eye view may come more naturally, simply because genes are codes and because of the complexity and chaotic nature of it all.
Now that we know that entities can be understood as algorithms or programs or codes, we should hope to use our “code goggles” and reinterpret the concepts of genes and memes. If we know better what a code is, we’ll know better what genes and memes are, right?
So do we actually understand what algorithms and codes are? Again, we’ll have to agree on what a code is exactly in order to be as clear as possible on the nature of replicators. I would like to be sure that we have defined the core concepts of the replicator as accurately as possible. It would be no use replacing the word “entity” with the word “code” if one could not define the latter precisely. In the next chapter we will try and define the codes the best we can.
I have already used several words to talk about codes, such as algorithm and program. I will use the word code instead of algorithm or program for it is less specific to the realm of computer science and applies in practice to more fields. Now the question is; what is a code exactly?
Unfortunately, there is no universal definition of the code, at least none that I know of. This means that we may need to offer our own definition. There are for sure many uses for the word “code” in a wide variety of cultural fields. For example, we speak of highway code, dress code, secret code, penal code, code of honour, bar code, zip code, genetic code, computer code, code of conduct, etc.. the list goes on. On top of that there are many synonyms of the word "code" such as "rule", "law", "theorem", "principle", "policy", “directive”, "program", "algorithm", "recipe", "method", "procedure", etc.
Here, I wish to use the word code to talk about all and any of those types of code. Remember that at the end of the day, all is code. So In order to agree on the meaning of code and for the purpose of better defining the concept of replicator it is important to define the code as precisely as possible. Yet, what I am looking for here is the most general definition possible, a universal definition of code that would be central to any type of code and still be very precise.
In order to be coherent I will start by considering the computer code. After all, this is the code that was shown to be equivalent to mathematical objects and therefore most universal. Given a computer code, what could we say about that code?
Quite simply, a computer code could be said to be a set of instructions. Indeed, all there is in a computer code are series of commands written in computer language for a computer to read and execute, nothing more nothing less than instructions.
By definition, the very existence of a computer code implies that there should be a computer to read that code. If there were no computer to read the code in the first place, there could be no code for it. What else than a computer can read a computer code? This also implies that the computer code is written in a specific language. There are many computer languages and if the language used is not right then the code is unreadable. Also, let’s not forget that computer codes don’t float up in the air, they need a disc or some kind of memory device to be stored on.
All of these elements, such as a storage device, a computer and a compatible language are necessary elements for the code to exist and make sense. They are in fact inseparable. If one of those parts were to be missing, the code would be meaningless. But that’s not all. There is one last piece that is important. The computer which is reading the code needs to be able to perform actions accordingly to the instructions of the code. If the computer could not do that it would be exactly as if it weren’t actually reading the code, it would be as if it were blind, and therefore it would actually simply fail at being the reader of the code. By necessity, the reader needs to be able to perform actions, the very actions that the code commands.
I believe there is no need for anything more other than these conditions to be true for the code to exist. All these parts are necessary and sufficient for a code to be.
I also believe that these elements are necessary for all types of codes, computer codes and others. Take the genetic code for instance. Its medium is made of chains of nucleotides, the reading of the code is done by the cell hosting the genetic material and acting as a computer, the genes need to be written in proper genetic terms to be able to instruct the cell correctly, and finally the cell needs to be able to read and act accordingly to the code. In the same way as the computer code, the genetic code would be lost if any of the reader, the medium or the language were missing or faulty. And again the same could be said of a cultural element such as a recipe for example. Its medium would be the paper and ink it is written on, the reader would be the cook and the language would have to be one which the cook can read so he can cook. And then again, if any of these elements were to be missing the recipe would be unusable.
So, the code, no matter its nature, is part of a necessary group of five elements and cannot work without this group. So again, this group contains:
As a result we could offer a definition of the code as follows:
Again we may need to go a little further and make sure we define each of these elements as clearly as possible. What more could be said of the code, the medium, the language, the reader and the actions?
The medium is intimately linked to the code. So much that in some cases we could confuse the code and the medium, and it may be necessary to really look closely to work out which is what. I will elaborate this point in the Code section further down.
The medium allows two things: the storage of the code, of course, but also its transportation, and different media will have different properties. The medium will thus confer to the code its specs such as its physical size, it’s weight, its robustness and longevity, its precision, its accessibility, its manoeuvrability, etc.
This means that codes’ fitness will be very dependent on their media’s properties.
Examples of media are magnetic or optical discs for computer programs, DNA molecules for the genetic code, sound waves for words, etc.
Through evolution, the natural biological media such as DNA or RNA have many great advantages. For instance they are extremely small in size, robust, and of digital type. These are great characteristics for a medium to have. Comparatively, sound waves are a poor medium as they are short lived, large in size and analog. The trend with technology is clearly towards better, stronger, faster, smaller and generally more reliable media. This trend makes perfect sense from an evolutionary perspective.
The reader is the code’s best friend. Codes and readers are meant to be together like a specific key is meant for a specific keyhole. The reader is quite simply the device that reads the code. By reading I mean that it understands the code enough to act accordingly to the instructions provided by the code. If the reader cannot follow the instructions with the right actions then it may as well be blind.
To qualify as a reader, this reader must be able to read at least two different codes and must be able to act in at least two distinct ways accordingly to these codes. A reader may act in many various ways by transforming the environment or by transforming itself. Its actions may also consist in writing more code or erasing code. That’s what readers do, they read codes and transform the world.
Although a reader needs to be a proper “actor” there is one particular action which consists in doing nothing. I believe that this act of “doing nothing” can be regarded as an action as well, as long as there is at least one other action possible that does something (anything except for nothing) and which can be differentiated from the “doing nothing” action. These are the two minimum actions that any reader should be capable of: “doing something” and “doing nothing”. This said, pretty much anything can work as a reader for one code or another, even a piece of rock or a single elementary particle can act as a reader to another rock or particle, simply by interacting or not interacting.
The reader includes everything that is directly involved in generating the actions, however large this reader may need to be. It could be as large as being everything that the code is not. This said, although it may seem necessary to include the sun as part of a reader when the sun is providing the main energy source for that reader, it may be more convenient to consider a smaller range for the reader and limit this range to a human body or a laptop computer for example. But it may be necessary in some cases to consider larger readers, particularly when considering larger timescales.
Every reader has a point of entry, a point in space and time where the code is read. This has some importance because the point of entry will have characteristics that the code will need to comply with. This point of entry will confer characteristics to both the reader and the code, just like the medium confers characteristics to the code. A gene needs to find its way into a cell, a sound wave needs to find its way into an ear, and a computer disc needs to find its way into a disk drive. This constraint is actually a good way to find the code. If we ask the “question where is the code?” then one simply need to find the entry point and we should find it there.
Other point of limitation are the actions a reader can achieve. Not all readers are equal and their range of skills vary. A code can only expect of a reader what that reader can do. The nature of the actions of a reader may be just about anything one can think of and again it may consist in modifying the environment as well as modifying itself.
Now if the universe is made of codes then what are readers exactly? Aren’t they supposed to be codes as well?
Yes indeed, readers are codes too. Anything in the universe could be regarded as a code that could be read by some reader. Readers are just codes that can read other codes and readers contain codes that can be read by other readers. It’s all a matter of perspective. A computer programme such as your web browser is a code and this program can also read other codes which are web pages, these web pages can read other codes such as flash files, and so on. Other example, flowers are the readers of their own genes and the bees read the flowers to choose the ones they will harvest.
So the existence of readers is a matter of perspective. Readers and codes exist relatively to one another. All is code but some codes can be the readers of other codes. We could imagine readers that are readers of each other or codes of each other. It’s all relative.
To identify and decipher a code, the reader and the code need to share the same language. Without this, the code remains indecipherable and therefore inaccessible.
All languages have specific characteristics. For instance, any language is made of terms, bits of code, just like words make up our own language and genes make up the genetic language. The terms of a language are those specific terms that are irreducible ie the terms that cannot be cut into smaller meaningful pieces. It consists of, on one hand the alphabet, the elementary blocks of the language such as letters, GTCA molecules for genes or “1” and “0” for computer language, and on the other hand a set of predefined combinations or words such as “tree” or “cat” or, in the case of genes, codons. A code is therefore a subset of the language, a specific series of terms. Those terms are derived solely from all the original terms of the language, just like a sentence is made of words from the dictionary. A random set of terms such as “mlCw e8T4t-3n2” will most likely be meaningless and therefore may not constitute a rightful code. Furthermore, languages have rules that define how the terms can be arranged in order for them to make sense. These rules of arrangement are known as grammatical rules. As a consequence, a code needs to respect two things in order to be readable. It needs to use proper terms of the language, i.e. the right words, and it needs to sequence those terms properly according to the grammatical rules.
It is important to notice that it is the reader that sets the rules. For the code to be read it is up to the code to fit the rules of the reader. This means that the meaning of a code is relative to the reader. For example the English word “we”, if heard by a French ear, will be understood as “oui”, meaning “yes” in French. One same code will have different meanings relatively to the reader. This relative aspect is of great importance to my efforts of redefining the replicator, but we will come back to it later.
Here again, languages are not all equal. Just like computer languages have evolved to allow programmers more freedom or ease when programming, any language will offer different possibilities to the code and may influence its fitness.
As mentioned earlier, it can be tricky sometime to make the difference between the code and its medium.
If the code is not the medium, then what is the code? If the ink on the paper is not the code then what is? The code is something rather intangible for it is not in the matter itself but in the arrangement of that matter. For example, in the case of text, the code is in the particular arrangement of the ink, more precisely in the geometric shapes of the letters. When drawing a circle, the circle is not in the ink but in the arrangement of that ink, an arrangement that resembles a circle. It is interesting to note that where letters are two dimensional arrangements of matter, words are one dimensional sequences of letters. The geometric shapes of letters are abstract objects, and this is true of all codes, all codes are abstract objects. The same goes for DNA, quite obviously. The code of genes is not the molecules themselves, but their arrangement, or to be more precise, their sequence. For good reasons, genes are described as sequences of nucleotides. And again, the same goes for computers in very much the same way. Computer programs are indeed written as sequences of elementary “bits” which can be stored on many various types of media. Codes often come in one dimensional sequences of bits. Such is the case for sounds, genes and computer programs. But they can also come in multiple dimensional forms. Such is the case of images. Images are typically two dimensional but can also be three dimensional. Also, everyday objects such as a door key for example can carry three dimensional codes. Food involves usually even higher number of dimensions, putting together shapes, colours, taste, smell and textures. Computers can potentially handle codes of much higher amount of dimensions.
A consequence of this is that one can’t exactly see or touch a code. One can only read a code by interacting with its medium, by seeing or touching its medium or by other means of reading. The procedure of reading is what will turn the code into meaning.
I call a coding system, any system containing codes, media and readers. Our universe is a coding system obviously but computers and brains can be regarded as coding systems on their own. Coding systems can be complex and contain sub coding systems themselves. For example computer run programmes that can run sub programmes with their own codes and so on. Also our brains have their own internal workings but are also part of a larger social coding system that exists only within groups of people.
It can be interesting to study how coding systems may arise by chance, like life arose on earth.
I hope I managed to show clearly that the world can be understood from the point of view of the code. Thus showing that a replicator is itself a code and consequently holds the characteristics of any code. This important fact will now help us understand better what replicators are. We have defined Richard Dawkin’s “entity” as a code and it is time now to tackle the meaning of “copy”.