I was short with Joe Felsenstein in the comments section of “Stark Incompetence,” a post in which I address, well, um, the stark incompetence on display in a recent publication of Eric Holloway. I have apologized to Joe, and promised to make amends with a brief post on the topic that he wants to address. Now, the topic is a putative model that Eric introduced in “Mutual Algorithmic Information, Information Non-growth, and Allele Frequency” (or perhaps an improved version of the model). Here is a remark that I addressed to Joe:
Tom English: As you know, if a putative model is logically inconsistent, then it is not a model of anything. I claim that that EricMH’s putative model is logically inconsistent. You had better prove that it is consistent, or turn it into something that you can prove is consistent, before going on to discuss its biological relevance.
I will not have to go far into Eric’s post to identify inconsistencies. After explaining the inconsistencies, which I doubt can be eliminated, I will remark on why the “model” is not worth salvaging. The gist is that Eric’s attempted analysis puts a halting, output-generating simulator of a non-halting, non-output-generating evolutionary process in place of the process itself. An analysis of the simulator would not, in any case, be an analysis of the simuland.
In the following passage from his post, Eric describes a randomized procedure, dubs it an evolutionary algorithm, and then asserts the existence of a halting program that implements the procedure.
The alleles are 1s and 0s, and the gene G a bitstring of N bits. A gene’s fitness is based on how many 1s it has, so fitness(G) = sum(G). The population consists of a single gene, and evolution proceeds by randomly flipping one bit, and if fitness is improved, it keeps that gene, otherwise it keeps the original. Once fitness(G) = N, the evolutionary algorithm stops and outputs G, which consists of N 1s. The bitstring that is N 1s will be denoted Y. We will denote the evolutionary algorithm E, and it is prefixed on an input bitstring X of length N that will be turned into the bitstring of N 1s, so executing the pair on a universal Turing machine outputs the bitstring of 1s: U(E,X) = Y.
The first thing to note is that the randomized procedure is not an algorithm: it halts with probability less than one. That is, by a simple inductive argument, for all natural numbers the probability is less than one that the procedure halts after or fewer bit flips. Indeed, the probability is greater than zero that the procedure performs bit flips without improving fitness. Thus if you were to turn the procedure into an algorithm by stipulating that it performs at most bit flips, there would be a nonzero probability that gene remains equal to input when the algorithm halts, no matter how large you make The problem is not the particular randomized procedure that Eric has chosen. Evolutionary procedures do not converge surely to local fitness maxima in discrete spaces (except in trivial cases).
It is gobsmacking for me, though probably not for you (I labored over “Stark Incompetence” in hope that everyone would be as astonished by something coming from Eric as I am by many of his claims), to see Eric flatly assert that the randomized “algorithm” is a program for a deterministic computer. To put it plainly, a universal Turing machine cannot flip bits randomly. Eric’s “model” is inconsistent, and thus is not a model. To get randomness, Eric must
- draw the deterministic bit-flipping program randomly, or
- endow the deterministic bit-flipping program with a pseudo-random number generator, and supply the program with a random seed as input (along with ).
However, this will not produce consistency, because Eric has predicated, with the expression that the program surely halts with an output that is maximal in fitness — no ifs, ands, or buts. His subsequent argument requires it. But his prior specification of the random bit-flipping procedure does not allow it.
The map is not the territory
Computer programs used by scientists to model evolutionary processes commonly signal the occurrence of events of interest to the scientists, and halt when the scientists are uninterested in gathering further data. An exceedingly naive response, most prominently on display in the “evolutionary informatics” of Marks, Dembski, and Ewert, is to analyze a program, and claim that the analysis applies to the modeled process — as though the evolutionary process itself signals the occurrence of events and halts.
I am not going to dig into Eric Holloway’s attempt at analysis. You should be able to see for yourself, if you have any business discussing what he has done, that it is literally the program that enters into the analysis, and not the evolutionary process that is simulated by the program. It ought to be obvious that an evolutionary process does not “know” when fitness is maximized, let alone announce the genome for which fitness is maximal. The part of the program that detects and announces the event in which fitness is maximized, and subsequently halts, is not part of the (simulation of the) evolutionary process. It is a monitor of the simulated process, and can be decoupled from the simulation per se, even though it is usually tightly coupled with the simulation in practice. I advise against struggling to make Eric’s inconsistent “model” into one that is internally consistent, because the result would be a bogus, though consistent, “model” that mistakes the simulation software for the evolutionary process itself.