Using Software to Assist Speech Impediments

It just dawned on me using my Apple Watch that you could use a simple tweak to improve dictation software, probably really easily. You just create a dataset targeted at people that have speech impediments, probably broken out by type (e.g., a lisp versus a stammer), where the training dataset is generated by people correcting text generated by the existing dictation software. That is, you use whatever dictation software you have, and then build a new dataset mapping inputs to corrected outputs. I wouldn’t even call this machine learning, it’s just a simple added layer that accounts for the fact the user has a speech impediment. In fact, you should probably allow this to be a feature in any dictation device, since someone could just have a funny voice that doesn’t map well to the training dataset or more generally, simply doesn’t perform well for whatever reason. This is a trivial adjustment, that could have real utility.

I did a quick Google search, and it looks like a simple version of this product does not exist, and instead people are using Machine Learning. There’s no way this is a hard problem, especially using machine learning. A lot of people stutter, and so there should be demand for exactly this software. I don’t have time to implement this (in particular because it requires people to generate the dataset), so you can keep this one, there it is, public domain.

On Selection and Intelligence

Intuitively, it makes sense that intelligence would persist in Nature, because for all animals, brain power is useful and therefore at a minimum shouldn’t hurt a species. That said, it’s not clear why in particular homosapiens have grown more intelligent over time. As a general matter, selection should explain it. For example, it’s generally accepted that some kind of apocalyptic event lead to the demise of the largest dinosaurs, presumably an asteroid hitting the Earth. This killed off the largest animals above ground, presumably because they needed more food to survive than the small ones, and a catastrophic event could of course limit the total amount of food available for all animals. Smaller animals could survive on less food, and then eventually get bigger once conditions improved, which seems to be roughly what happened. So we can plainly see the mechanics involved: the total food supply literally shrinks, which kills anything that needs too much food, and whether or not this is exactly what happened, it makes sense, mechanically. Now why on Earth would animals get more intelligent as a function of time?

I think the answer is the same: disaster. When disaster strikes, the ability to predict the behavior of your environment could mean the difference between life and death. Because reality is governed by physics and mathematics, disaster could again be responsible for the selection of intelligence. So it’s indirect in this view: disaster forces selection for mechanical intuition and mathematics, and both of those require intelligence. Just imagine starting a fire near a bunch of wolves, near a body of water. Now set that same fire near a bunch of monkeys. Do the same with a bunch of people. Only the stupidest people won’t realize that the water probably won’t set on fire, whereas the same is not true of the wolves, and might not be true of the monkeys. That’s all you need to have literally all animals replaced by humans, disaster, and further, that’s all you need to get rid of stupid people as well, which could explain why humans have generally become more intelligent as a function of time.

Keep in mind a UTM is equivalent to processing language, suggesting that once you speak a language, you have all the intelligence you need, as a technical matter, to do all of computable mathematics. This suggests that in some sense humanity peaked at the development of language, and I think this could explain the proliferation of Phoenician-like languages, all the way out to Mongolia, for the simple reason that the Phoenicians might have been the first people to develop a written language, of course taking into account the possibility of a prior group that was subject to disaster.

On the Complexity of a Graph

Introduction

I’ve been thinking about representational complexity for a long time, and in fact one of the first papers I wrote was on the intersection number of an infinite graph. Despite literally 20 years of thinking on the subject, for some reason, I wasn’t until today able to accurately think about the Kolmogorov Complexity of a graph. Sure, it’s a complex topic, but the answer is pretty trivial. Specifically, every graph can be represented as an N x N matrix, where N is the number of vertices. However, this is obviously too big of a structure to be the K-complexity, since it contains duplicate entries (I’m assuming it’s an undirected graph with no loops). That is, entry i,j in the matrix is the same as entry j,i, and as such contributes no new information about the graph. Therefore, the K-complexity of a graph must be less than N^2.

We can improve our measure of K-complexity by noting that any graph can be described by simply listing its edges. For example, a complete graph on three vertices can be represented by the set of vectors E = \{(1,2), (2,3), (3,1)\}. That is, each vector represents an edge, and the digits in the vector tell you the labels of the vertices connected by the edge in question. In this case E connects vertex 1 to 2, 2 to 3, and 3 to 1, producing a circuit on three vertices, i.e., a complete graph on three vertices. As a consequence, the K-complexity of a graph cannot exceed the complexity of its edge set. Each label in a graph will be less than the order of the graph (i.e., the number of vertices N), and as a result, we can encode each label in the edge set with at most \log(N) bits. Each edge consists of two labels, and so the K-complexity of a graph must be less than or equal to |E| 2\log(N) + C.

Structural Complexity

Note that |E| 2\log(N) is again an upper bound on the K-complexity of a graph, it’s just much better than N^2, since it at least takes into account the number of edges, and uses a more efficient representation of the graph. However, particular graphs can definitely be expressed in fewer bits. Specifically, the empty graph, the complete graph, and a Hamiltonian circuit, each of a given order N, can be expressed in \log(N) + C bits, where C is a constant that is the length of the program that constructs the graph, which we can think of as simply generating the list of edges that defines the graph. For example, the following Octave Code will generate a Hamiltonian circuit of any order N:

E{1} = (1,N);

for i = 2 : N – 1

E{i} = (i, i+1);

endfor

As a result, we can produce a Hamiltonian circuit of any order, using at most \log(N) + C bits, where C is the length of the program above in bits. Analogous code will produce a complete graph, whereas an empty graph can be produced by simply specifying N (i.e., there are no edges), which again requires exactly \log(N) + C bits, but using different code. Note that even in these cases, it’s still possible that an even shorter, presumably not universal program produces a given graph as its output when fed as the input to a UTM. That is, e.g., U(x) = M(G), where x is a binary string, U is some UTM, and M(G) is the matrix that defines the graph G. As a theoretical matter, the length of x could be even smaller than \log(N), where again N is the order of G. This would be true for empty graphs, complete graphs, and Hamiltonian circuits of order N, where the number N itself is highly compressible.

Kolmogorov-Random Graphs

It turns out it’s pretty easy to prove that Kolmogorov-Random Graphs exist, in the sense that we can produce graphs using Kolmogorov-Random strings. There’s obviously scholarship on point, but I think the ideas I’ve set out in this note are a lot easier to think about, and unify perfectly with the complexity of strings. Specifically, recall that we can represent any graph using its edge set. If we modify the method used to do so above, we can show that Kolmogorov-Random strings will produce graphs when fed as inputs to a UTM, which implies that those graphs are literally Kolmogorov-Random, in the same sense as a binary string.

Returning to the example of a complete graph on three vertices above, let’s represent that graph using three sets: the set of vertices adjacent to v_1, the set of vertices adjacent to v_2, and the set of vertices adjacent to v_3. Because it’s a complete graph on three vertices, we would have the following: \{v_2\}, \{v_3\}, \{v_1\}. Note that as we move forward in the labels, e.g., from vertex 1 to vertex 2, we gain information about the graph. Specifically, there’s no reason to include v_1 in the set of vertices adjacent to v_2, since that information is contained in the set of vertices adjacent to v_1. As a result, the maximum number of elements in the set for v_1 is N-1, and for v_2 it’s N-2, and so on. As a result, we can represent the graph as a “matrix” where the number of columns begins at N-1 for v_1, and decreases by 1 for each row. Note that as a result, the N-th row has no columns, implying that the “matrix” has N-1 rows. We can treat every entry in this “matrix” as a binary number indicating the presence or absence of a given edge. For example, if entry (1,3) is 1, then edge (1,3) is included in the graph. This is just like a regular graph matrix, except it contains no duplicate entries, and therefore the number of columns is not constant. Note that therefore, it corresponds to a binary string of length (N - 1) + (N - 2) + \ldots + 1 = \frac{N (N - 1)}{2} = N \choose 2, which is also the maximum number of edges.

Let s be a Kolmogorov-Random string of length N = n \choose 2. All we have to do is restructure s into the shape of a “matrix” described above, which will produce a graph G. Because s is Kolmogorov-Random, there cannot be another binary string shorter than s that will generate G on a UTM, by which we mean generating the edges of G. Assume such a string y exists. It follows that E(G) = U(y), which in turn will allow us to construct a “matrix” of the type above, which will in turn produce s. Because s is Kolmogorov-Random, there cannot be a string shorter than s that generates s, yet y is exactly such a string, which produces a contradiction, completing the proof.

Note that such a graph G cannot be a complete graph, since a complete graph has a trivial complexity, as we’ve seen above. It is therefore interesting that a Kolmogorov-Random Graph has a Kolmogorov Complexity of exactly the number of edges in a complete graph of the same order. Because not all numbers are of the form N = n \choose 2, we cannot say that the Kolmogorov Complexity of a Kolmogorov Random graph is always the number of edges in a complete graph of the same order, though it might nonetheless be true.

Computability and Infinite Sets of Graphs

Let H_N denote the Hamiltonian circuit of order N, and let \Gamma = \{H_1, H_2, \ldots \}. Despite the fact the set is infinite, because each such graph has a simple structure, we can define a computable test that will allow us to determine whether a graph G is in that set, or not. Just to sketch the algorithmic test, we would begin by testing the degree of each vertex in G, and if it’s not 2, the algorithm terminates and returns “false”. If the degree of each vertex is in fact 2, then we traverse the edges of the graph, and if we don’t return to the original vertex, we again return “false”, otherwise we return “true”. As a result, there is a computable test that allows us to state whether or not a given graph G is in \Gamma. Note that as a consequence, we can also generate \Gamma, using brute force, producing all graphs of orders N = 1, 2, \ldots and testing which of those belong in \Gamma. Similarly, as noted above, we can algorithmically construct a Hamiltonian circuit of all orders, and can therefore, test whether or not a given graph is in the set of graphs generated by that process. Note that the constructive algorithm above, is very different from the algorithmic test we just articulated in this section. Therefore, we have an interesting equivalence, in that the existence of an algorithmic test implies a constructive algorithm (via brute force), and a constructive algorithm implies an algorithmic test (again via brute force, e.g., in the case where there are multiple graphs of a given order).

At the same time, because the set of graphs is countably infinite, and the set of algorithms is countably infinite, the number of infinite subsets of the set of all graphs is uncountable and therefore larger than the set of all algorithms. Therefore, it must be the case that there are infinite sets of graphs that do not have an algorithmic test, and therefore do not have a constructive algorithm. One simple example follows from the existence of non-computable infinite strings. Again, the set of all infinite binary strings is uncountable, whereas the set of all algorithms is countable. As a consequence, there must be infinite strings that cannot be generated by a finite program running on a UTM.

Let \sigma be such a non-computable infinite string. Define \bar{\Gamma} as the subset of \Gamma such that H_i is included in \bar{\Gamma} if \sigma(i) = 1. That is, where \sigma(i) = 1, we include the corresponding element of \Gamma. As noted above, there is a simple algorithmic test to determine whether or not each element of \bar{\Gamma} is Hamiltonian, but this is distinct from an algorithmic test that determines whether or not a given graph G, is in \bar{\Gamma}. That is, not all Hamiltonian circuits are in \bar{\Gamma}. Now assume that such an algorithmic test T exists. It follows that we can then generate every Hamiltonian circuit starting with N = 1, and T will tell us whether or not that particular order is included in \bar{\Gamma}. If H_i is included, set binary string entry \zeta(i) = 1 and otherwise set  \zeta(i) = 0. It follows that \zeta = \sigma. However, we generated \zeta on a UTM, which is not possible, since \sigma is by definition non-computable, which leads to a contradiction. This implies T does not exist. This demonstrates that even if a set is computable, it will have non-computable subsets, just like the natural numbers, and all countable sets generally.

Properties without Computable Tests

In the previous section I noted that Hamiltonian circuits are simple structures, and therefore, we can come up with simple algorithms that test for whether or not a graph is a Hamiltonian circuit. Testing whether or not a given graph contains a Hamiltonian circuit as a subgraph is believed to be intractable. As such, there are simple structures that correspond to simple algorithms, though finding simple structures in more complex graphs is suddenly intractable. This raises the question of whether or not there are properties that cannot be tested for algorithmically at all. The answer is yes.

Order the set of all finite graphs G_1, G_2, \ldots, and let \gamma be an infinite binary string. If \gamma(i) = 1, then we can interpret this as G_1 having property \gamma given the ordering, or equivalently, view \gamma as defining a set of graphs. There are again more binary strings than there are algorithms, and therefore, in this view, more properties than there are algorithms. The question is whether there are more interesting and / or useful properties than there are algorithms, but the bottom line is, the number of properties is uncountable, and therefore the density of testable properties is zero. You might be tempted to say that all such properties are uninteresting, or not useful, but unfortunately, whether or not a program will halt is precisely one of these properties, which is both useful and interesting, suggesting at least the possibility of other such useful and interesting properties.

The Distribution of Graph Properties

Ramsey Theory is one of the most astonishing fields of mathematics, in particular, because like all combinatorics, it has intrinsic physical meaning, in that combinatorics provides information about the behavior of reality itself. What’s astonishing about Ramsey Theory in particular, is that it’s fair to say that it shows that structure increases as a function of scale, in that as objects get larger, they must have certain properties. What I realized today, is that the number of properties that they can have also grows as a function of scale. For intuition, consider all graphs on N = 1,2,3 vertices. You can see right away that the complete graph on 3 vertices is the smallest possible Hamiltonian circuit, and therefore, the smallest Hamiltonian graph. It is simply not possible to have a Hamiltonian graph with fewer vertices. This suggests the possibility that the number of properties that a graph can have grows as a function of its order, and we show using some not terribly impressive examples, that this in fact must be true, suggesting the possibility, that useful and interesting properties of objects continue to arise as a function of their scale.

Let \gamma be an infinite binary string, and define an infinite subset of the natural numbers A such that k \in \mathbb{N} is included in A if \gamma(i) = 1. Now define an infinite set of graphs \Gamma such that H_i is in \Gamma if the number of edges of H_i is divisible by A(i). Because each H_i is a Hamiltonian circuit, the number of edges in H_i is simply i. Putting it all together, we have an infinite set of graphs, each of which are Hamiltonian circuits of different orders, and whether or not a given order is included in the set, is determined by whether or not that order is divisible by the corresponding integer value in A. Note that larger graphs will have orders that are divisible by more numbers, though the number of divisors does not increase monotonically as a function of n \in \mathbb{N}. Therefore, in this view, larger graphs have more properties in the sense of being included in more sets of this type.

Complexity Versus Computability

Intuitively, there is a connection between complexity and computability. In at least one case, this is true, in that the Kolmogorov Complexity of a non-computable infinite string is countable. That is, if a string is non-computable, then there is no finite input to a UTM that will generate that string. As a result, its complexity cannot be finite. At the same time, we can simply copy the string from the input tape, to the output tape, assuming both are infinite tapes. Therefore, the Kolmogorov Complexity of a non-computable infinite string is countable. However, this intuition is subject to more careful examination in the case of infinite sets, in that you can construct non-computable sets of low-complexity objects.

Now assume that \gamma from the example in the previous section is non-computable, which implies that both A and \Gamma are non-computable. As discussed above, it follows that there is no computable test for inclusion in \Gamma. At the same time, each of the graphs in \Gamma is a Hamiltonian circuit, with a Kolmogorov Complexity of \log(N) + C. Note that the ratio \frac{\log(N)}{{N \choose 2}} approaches zero as N approaches infinity. As such, we have an infinite set of graphs that is non-computable, but each of the individual graphs are low-complexity objects, though note that the set was generated using a non-computable string.

Ancestry Test Code

As I’ve noted several times, I’ve devised an ancestry test that is impossible to argue with, using whole-genome mtDNA. See Section 6.1 of A New Model of Computational Genomics [1]. Specifically, given whole-genomes A, B, and C, if genome A is the ancestor of both genomes B and C, then it must be the case with near certainty that genomes A and B, and A and C, have more bases in common than genomes B and C. Again, see [1] for an explanation. The test in Section 6.1 of [1] is at the genome level, and as such, using a dataset of genomes, the number of tests required to compare whether an entire population is the ancestor of two other populations grows quickly as a function of population sizes. As a tractable approximation, the attached code uses the average match count between populations A and B, A and C, and B and C, which of course loses information, but should at least help you reduce the number of cases that you investigate exhaustively.

Applying the attached, it turns out, that yet again, the Denisovans test as the common ancestor of humanity (though I now think the Cameroon might be more modern than I first suspected), specifically, the common ancestor of both Heidelbergensis and Neanderthals. Further, the Phoenicians again test as the common ancestor of basically everyone alive today, including the modern Thai, Nigerians, Norwegians, Koreans, the Saqqaq (in B.C. Greenland!), the Swedes, Indians, and Chinese. As a result, I’m fairly convinced early Middle Eastern people settled a significant portion of Europe and Asia, and possibly America (given Greenland), but I can’t put a date on it. Ugarit goes back to 6,000 BC, which should leave enough time, but this is an ordinal test only, and therefore cannot be used to date the relationships. Moreover, I’ve recently cast serious doubt on the idea that mtDNA has a single, stable rate of mutation. The net point is, therefore, the ancestry test is real, and very difficult to argue with, but limited to ordinal testing; further, mtDNA doesn’t seem to have a single, stable rate of mutation; as a result, it looks plausible (1) that the Denisovans are the first humans and (2) that either the Phoenicians or people close to them (on the maternal line) we’re prolific settlers, but we don’t know when either got started.

The code is below, the balance can be found in [1]. One modification I plan to make is to use Monte-Carlo probing on the data that informs the averages. This will allow you to test a fixed portion of the genome-level data that you can scale given the power of your machine. BTW I just bought a Mac Mini running the M2 Pro chip, and I cannot recommend this machine enough, it is more than 10 times faster than my windows laptop. Running the ancestry test described above over 673 full mtDNA genomes takes about 0.5 seconds. I cannot believe this is a retail machine.

On the Age of Humanity

Introduction

My research shows unequivocally, that archaic humans are still alive today, in that many living humans carry archaic mtDNA. The obvious question is, how did archaic humans survive for so long? The answer is, they probably didn’t, but their mtDNA did, just like the widely accepted fact that many living humans carry archaic DNA generally. What makes mtDNA unique, is that it is so stable, passed from a mother to its offspring, with basically no mutations at all, even over thousands of years. One estimate claims that one mutation occurs roughly every 7,990 years, though this estimate is qualified and plainly subject to doubt. I show below that assuming this is correct, Denisovan mtDNA existed about 38,000,000 years ago.

This is obviously way earlier than anyone thinks, but it’s not totally absurd, especially in light of relatively recent finds, including Graecopithecus, which was dated to 7.2 million years ago, in Greece, not Africa, which of course implies it’s possible the species emerged much earlier in Africa itself. Also note that we’re only discussing mtDNA, not the full genome. As a result, the claim is limited to the existence of Denisovan mtDNA, not the full genome. The discussion below of course considers the case that the estimate of 7,990 years per mutation is simply wrong, which is arguably the point of this note. Specifically, not all systems have stable averages over time, and a system as complex as the human genome of course might not behave in a predictable, stable manner.

Alignment, Insertions, and Deletions

Assume you have two copies of the exact same genome, and call them A and B. Note that mtDNA is N = 16,579 bases long, and as a result, the match count between genomes A and B is 16,579 bases, or 100% of the genome. Now insert a random base in genome B, at index 2. This will shift every base after the first index in B, by 1 position. This should cause the remaining N-1 bases to match to genome A about 25% of the time. That is, because we’ve shifted one of the otherwise identical genomes by one base, whatever bases that happen to match post insertion, should be the result of chance, and because there are four possible bases, the probability of a match is 1/4. Note that a deletion will cause an analogous reduction to chance. As a result, a single insertion or deletion will cause the match count to drop to around chance, after the index of the insertion or deletion.

The work I present in, “A New Model of Computational Genomics” [1], makes use of a global alignment, which means that when comparing two genomes, you assign each base an index, and the comparisons are made by testing whether the bases are equal at each index. The match count is simply the total number of matching bases. See [1] generally. In contrast, local alignments take segments from a given genome A (e.g., bases 1 through 100), and attempt to find the highest match count anywhere in genome B (e.g., bases 100 through 200). This would therefore, ignore insertions and deletions, since e.g., in the example above, a local alignment would search all of genome A for the best match, which would produce a match count of N (i.e., 100% of the genome), with one “gap” to account for the insertion. In contrast, a global alignment (i.e., just counting matching corresponding bases) would produce a match count of 1 + approximately 0.25*(N-1) (i.e., the first matching base, plus approximately 25% of the remaining N-1 bases).

Insertions and deletions are, at least anecdotally, very impactful in terms of the affect they have, since, e.g., Williams Syndrome, Down Syndrome, and many others, are caused by insertions and deletions. As a result, it’s not surprising that local alignments don’t seem terribly useful in terms of predictive power, because they effectively ignore insertions and deletions, creating very high match counts across all human mtDNA. In contrast, the software in [1], makes use a global alignment, which ultimately allows ethnicity to be predicted with approximately 80% accuracy.

Application to Data

As noted in [1], and many other research notes I’ve written, there are plenty of modern living humans with archaic mtDNA, in particular, Denisovan mtDNA. Denisovans test as the common ancestor of all archaic humans, suggesting that they are in fact the first humans. Though technically the modern people of Cameroon test as the ancestors of the Denisovans, which is again possible because mtDNA is so stable, I’ll work instead with the actual Denisovan genomes in my dataset, which were all taken from the NIH database.  The goal of this section is to approximate the date of the first Denisovans, given the genomes of modern living humans that carry Denisovan mtDNA, and the actual Denisovan genomes recovered from Siberia. There are 8 such Denisovan genomes in the dataset, out of a total of 664 genomes. All genomes are complete mtDNA genomes, again taken from the NIH database.

If we fix a minimum match threshold of 50% of the genome, we find that 82 non-Denisovan genomes are at least a 50% match to at least one Denisovan genome. These are living, modern humans that carry Denisovan mtDNA. The average match count over all such genomes is 11,779.32 bases, or 71.05% of the full genome. This means that since the Denisovan cave, 100% – 71.05% = 28.95% of the genome has mutated. This is 4,799.62 bases.

Though the rate at which mtDNA mutates is still a subject of discussion, as noted above, one cited figure is one mutation per 7,990 years. This would put the age of the Siberian Denisovans at 38,348,963.80 years before the present. This is way out of the ballpark for the low-end of what I’ve seen regarding the dates of these finds, which is around 300,000 years ago. As noted above, it’s at least possible that the modern living Denisovans instead carry the mtDNA of the ancestors of the Siberian Denisovans, which would again force us to reject the date of 38,348,963.80 years before the present. However, the data suggests this is not the case. See Section 6 of [1] generally.

It could also be the case that a single insertion or deletion is causing the match count to drop to around 70% of the genome when comparing the Siberian Denisovans to modern living humans. That is, there’s a single insertion of deletion further down the genome that causes the balance of the genome match count to drop to around 70%. This would not require that much time, since it is technically a single mutation. We can however rule this out by looking at the distribution of the matching bases along the genome. This can be done by grouping sequential bases (i.e., bases 1 through K, K+1 through 2K, etc), and then counting the percentage of matching bases in those segments. If the matching percentage of bases in each segment is always significantly above 25%, then it simply cannot be the case that the resultant match count is due to a single insertion or deletion within a given segment. The chart below shows the average percentage of matching bases for all 8 of the Siberian Denisovan genomes when compared to all other genomes that have at least a 50% match, breaking the full genome into 100 segments of 165 bases each.

You can plainly see that it’s not the result of a single insertion or deletion, since the match count is always above 40% of the bases in each segment. That said, there is still plainly a portion of the genome from around segment 5 to segment 40, that seems to have been impacted by insertions and deletions, but this is distinct from a single trivial insertion or deletion. As a result, we have an enormous amount of change to account for when comparing Siberian Denisovan mtDNA to the mtDNA carried by some modern, living humans. This again implies that either the estimated rate of mutation is wrong (probably correct) or the dates associated with the Siberian cave are way off (not as convincing). The software for this is below, and the balance of the software can be found in [1].

mtDNA and IQ

Introduction

I’ve noticed in the past that Finns have significantly higher IQ’s than the Swedes and Norwegians. This is in my opinion the group of people to study if you’re interested in the nature of intelligence, because they’re all very similar people, from roughly equally rich nations, in the same part of the world, which should allow innate ability to take control. One notable difference is that the Finns speak an Uralic language, whereas the Norwegians and Swedes speak a Germanic language. There could be something to this, but investigating the problem again today led me to what seems an inescapable conclusion, that whatever the connection is between mtDNA and intelligence, it simply cannot account for the distribution of IQ as it exists.

Instead I now believe that brain structure is the most important factor in intelligence, which simply cannot be controlled by mtDNA in any credible way. Specifically, my thinking is rooted in algorithmic complexity, that if you have two equally powered machines, running different algorithms that accomplish the same task, then the machine with the more efficient algorithm of the two will be the most powerful of the two. Translated to biology, if you have two brains that both consume the same amount of power per unit of time, and have the same “clock rate”, one brain could still be vastly more powerful than the other, due simply to different structure. This could explain e.g., the fact that some birds can talk, whereas some dogs will eat until they vomit, despite the fact that birds have brain volumes that are a small fraction of a dog’s brain volume.

mtDNA and Intelligence

Despite the apparent complexity of the subject, this is going to be a short note, because the idea that mtDNA controls for IQ is apparently nonsense, despite the scholarship on the topic (not picking on anyone, but here’s a decent article that runs through some credible arguments for the role of mtDNA in intelligence). But as you’ll see, whole-genome sequencing throws the argument in the garbage.

There’s no nice way to say this, but the Roma people have pretty low IQs, but what’s most interesting about them, is that they are basically identical to each other, and all other people of that maternal line, including about 100% of Papuans, 67% of Russians, and about 30% of Taiwanese people. If you want to test the results yourself, you can see my paper, “A New Model of Computational Genomics” [1], which includes all the software, and a detailed walkthrough to explain how I end up with these numbers. At a high level, the Papuans, Russians, and Taiwanese people in this group of Roma lineage, are all a 99% match to the Iberian Roma, with respect to their mtDNA. If mtDNA controlled intelligence, then all of those populations should have similarly low IQ’s, since they’re basically identical to the Roma. This is just not true, and instead the Taiwanese have around the highest and second highest IQ on Earth, and the Russians have roughly the same IQ as the Norwegians and Swedes, despite the fact that Russia is, quite frankly, poor and dysfunctional compared to Norway and Sweden.

One important note, though you’ll often hear that “humans are 98% monkey”, or some nonsense like that, the algorithms in [1] use what’s called a global alignment, and as a consequence, they’re extremely sensitive to changes in position, causing e.g., the Roma to have little more than chance in common with some people (i.e., about 25% of the mtDNA bases). This sensitivity is probably why the software in [1] is so powerful, and is able to predict ethnicity with about 80% accuracy, using mtDNA alone (which is pretty amazing). In contrast, NIH’s BLAST algorithm uses a local alignment, and so it deliberately seeks to maximize the number of matching bases, by shifting two genomes around, causing everyone to look the same, and therefore, throwing away valuable information about the genome.

Getting back to the core topic, if you pay attention to this limited set of facts, mtDNA is in the garbage as a driver of intelligence, and moreover, the role of poverty is not exactly clear either, since Russia is really poor compared to Norway and Sweden, and yet they have roughly the same IQs. So what is driving this? Cynically, I think IQ testing is really just testing for basic education (when you look at a map), which is absent in the truly poorest countries, but that doesn’t mean that we can’t debunk the connection between mtDNA and intelligence. But to be clear, I do think intelligence is genetic, and in anomalous cases like Finland, Cambodia, and Suriname, IQ becomes something interesting, because it’s at least a test. I just doubt it’s mtDNA driving the bus.

Some Answers from Computer Science

Even if we posit arguendo (which is not very nice) that there’s something wrong with Roma mtDNA, this would simply imply that they have low energy per unit of time, perhaps as a function of fixed caloric intake and environment. To make this less abstract, let’s fix a Norwegian guy (not Roma) and a Russian guy (Roma), and give them the same food, education, climate, environment, clothes, etc., over a lifetime. Under this assumption, the Russian guy will produce less energy over his lifetime, and therefore, his brain has a lower output. But this is garbage as an argument, for mechanical reasons: if the Russian guy has a more efficient brain, then he doesn’t need as much power to run his brain. As a consequence, his output over a lifetime could in fact be higher.

To make things completely concrete, if you use a brute force method to sort a list of 10 letters, you’ll have to perform 10! = 3,628,800 calculations. If you instead use my parallel method, you’ll have to make between 3 and 4 calculations. As you can plainly see, there is an ocean between these two approaches to solving even the simple problem of sorting a list. As a consequence, the most sensible answer is, in my opinion, that brain structure controls for intelligence, for the simple reason, that it encodes the algorithms we use to solve the problems we face every day. Some people have fast ones, some people have dumb ones, and then there’s (probably) most people in the middle.

Returning to the birds versus dogs analogy, I think it’s not ridiculous to argue that birds have vastly more efficient brains than dogs, that something along the lines of computational efficiency is taking place in the brain of a bird, that allows it to perform complex tasks, with a smaller, presumably lower-energy brain. For the same reasons, this could explain the obvious fact that some people are wildly more intelligent than others, despite (possibly) having the same maternal line. Because intelligence varies within a given ethnicity, I can tell you that you are e.g., Norwegian, with high accuracy using just your mtDNA, but there’s no way of knowing (to my knowledge) whether you’re one of the dumb ones. This doesn’t preclude identifying deficiencies in mtDNA that will make you dangerously ill, and therefore not very bright, but it just doesn’t make sense that the means of power-production controls the most complex structure in the Universe –

It’s a single bean, in an ocean of genetic information.

Time as a measurement, not a dimension

I came to the conclusion last night, that I may have wasted a lot of time, thinking about time as an actual dimension of space. In my defense, I’m certainly not the first physicist or philosopher to do so. Specifically, my entire paper, A Computational Mode of Time-Dilation [1], describes time as a measurement of physical change, not a dimension. Nonetheless, it produces the correct equations for time-dilation, without treating time as a dimension, though for convenience, in a few places, I do treat it as a dimension, since a debate on the corporeal nature of time is not the subject of the paper, and instead, the point is, you can have objective time, and still have time-dilation.

As a general matter, my view now is that reality is a three-dimensional canvas, that is updated according to the application of a rule, effectively creating a recursive function. See Section 1.4 of [1]. Because [1] is years old at this point, this is obviously not a “new” view, but one that I’ve returned to, after spending a lot of time thinking about time as an independent dimension, that could, e.g., store all possible states of the Universe. The quantum vacuum was one of the primary drivers for this view, specifically, that other realities temporarily cross over into ours, and because that’s presumably a random interaction, you should have a net-zero charge (i.e. equal representation from all charges), momentum, etc, on average, creating an otherwise invisible background to reality, save for extremely close inspection.

I don’t think I’m aware of any experiment that warrants such an exotic assumption, and I’m not even convinced the quantum vacuum is real. As such, I think it is instead rational to reject the idea of a space of time, until there is an experiment that, e.g., literally looks into the future, as opposed to predicting the future using computation.

I’ll concede the recursive function view of reality has some problems without time as a dimension, because it must be implemented in parallel, everywhere in space, otherwise, e.g., one system would update its states, whereas another wouldn’t, creating a single reality with multiple independent timelines. This is not true at our scale, and I don’t think there’s any experiment that shows it’s true at any scale. So if time doesn’t really exist as a dimension, we still need the notion of syncopation, which is in all fairness, typically rooted in time. But that doesn’t imply time is some form of memory of the past, or some projection of the future.

This is plainly an incomplete note, but the point is to reject the exotic assumptions that are floating around in modern physics, in favor of something that is far simpler, yet works. Reality as a recursive function makes perfect sense, taking the present moment, transforming it everywhere, producing the next moment, which will then be the present, with no record of the past, other than by inference from the present moment.

We’re still left with the peculiar fact that all of mathematics seems immutable (e.g., all theorems of combinatorics govern reality, in a manner that is more primary than physics, since they can never change or be wrong), but that doesn’t imply time is a dimension, and instead, my view, is that mathematics is beyond causation, and simply an aspect of the fabric of reality, whereas physics is a rule, that is applied to the substance contained in reality, specifically, energy. Physics doesn’t seem to change, but it could, in contrast, mathematics will never change, it’s just not possible.

Measuring Uncertainty in Ancestry

In my paper, A New Model of Computational Genomics [1], I presented an algorithm that can test whether one mtDNA genome is the common ancestor of two other mtDNA genomes. The basic theory underlying the algorithm is straightforward, and cannot be argued with:

Given genomes A, B, and C, if genome A is the ancestor of genomes B and C, then it must be the case that genomes A and B, and A and C, have more bases in common than genomes B and C. This is a relatively simple fact of mathematics, that you can find in [1], specifically, in footnote 16. However, you can appreciate the intuition right away: imagine two people tossing coins simultaneously, and writing down the outcomes. Whatever outcomes they have in common (e.g., both throwing heads), will be the result of chance. For the same reason, if you start with genome A, and you allow it to mutate over time, producing genomes B and C, whatever bases genomes B and C have in common will be the result of chance, and as such, they should both mutate away from genome A, rather than developing more bases in common with each other by chance. This will produce the inequalities |AB| > |BC| and |AC| > |BC|, where |AB| denotes the number of bases genomes A and B have in common.

For the same reason, if you count the number of matches between two populations at a fixed percentage of the genome, the match counts between populations A, B, and C, should satisfy the same inequalities, for the same reason. For example, fix the matching threshold to 30% of the full genome, and then count the number of genomes between populations A and B that are at least a 30% match or more to each other. Do the same for A and C, and B and C. However, you’ll have to normalize this to an [0,1] scale, otherwise your calculations will be skewed by population size. My software already does this, so there’s nothing to do on that front.

By iteratively applying the population-level test for different values of M, we can also generate a measure of uncertainty associated with our observation. That is, not only can we test whether the inequalities are satisfied, we can also generate a measure of uncertainty associated with the test.

Specifically, fix M to some minimum value, which we select as 30% of the full genome size N, given that 25% is the expected matching percentage produced by chance, and 30% is meaningfully far from chance (again, see Footnote 16 of [1]). Further, note that as M increases, our confidence that the matches between A and B and A and C, are not the result of chance, increases. For intuition, note that as we increase M, the set of matching genomes can only grow smaller. Similarly, our confidence that the non-matching genomes between B and C will not be the result of chance decreases as a function of M. For intuition, note that as we increase M, the set of non-matching genomes can only grow larger.

As a result the minimum value for which the inequalities are satisfied informs our confidence in the B to C test, and the maximum value of M for which the inequalities are satisfied informs our confidence in the A to B and A to C tests. Specifically, the probability the B to C test is the result of chance is informed by the difference between the minimum M – N25%, whereas the A to B and A to C tests are informed by the difference N – M, where M is the maximum M. Note this difference is literally some number of bases, that is in turn associated with a probability (see again, Footnote 16 in [1]), and a measure of Uncertainty (see Section 3.1 of [1]). This allows us to first test whether or not a given population is the common ancestor of two other populations, and then further, assign a value of Uncertainty to that test.

Phoenicians as Common Ancestor

In a previous article, I showed that the people of Cameroon test as the ancestors of Heidelbergensis, Neanderthals, and Denisovans, with respect to their mtDNA. The obvious question is, how is it that archaic humans are still alive today? The answer is that they’re probably not truly archaic humans, but that their mtDNA is truly archaic. This is possible for the simple reason that mtDNA is remarkably stable, and can last for thousands of years without changing much at all. However, there’s still the question of where modern humans come from, i.e., is there a group of people that test as the common ancestors of modern human populations. The answer is yes, and it’s the Phoenicians, in particular, a group of mtDNA genomes found in Puig des Molins. Astonishingly, the Phoenicians test as the common ancestor of the Pre-Roman Egyptians (perhaps not terribly astonishing), and the modern day Thai and Sri Lankans, the latter two being simply incredible, and perhaps requiring a reconsideration of purported history.

The overall test is straight forward, and cannot be argued with: Given genomes A, B, and C, if genome A is the ancestor of genomes B and C, then it must be the case that genomes A and B, and A and C, have more bases in common than genomes B and C. This is a relatively simple fact of mathematics, that you can find in my paper, A New Model of Computational Genomics [1], specifically, in footnote 16. However, you can appreciate the intuition right away: imagine two people tossing coins simultaneously, and writing down the outcomes. Whatever outcomes they have in common (e.g., both throwing heads), will be the result of chance. For the same reason, if you start with genome A, and you allow it to mutate over time, producing genomes B and C, whatever bases genomes B and C have in common will be the result of chance, and as such, they should both mutate away from genome A, rather than developing more bases in common with each other by chance. This will produce the inequalities |AB| > |BC| and |AC| > |BC|, where |AB| denotes the number of bases genomes A and B have in common.

For the same reason, if you count the number of matches between two populations at a fixed percentage of the genome, the match counts between populations A, B, and C, should satisfy the same inequalities, for the same reason. For example, fix the matching threshold to 30% of the full genome, and then count the number of genomes between populations A and B that are at least a 30% match or more to each other. Do the same for A and C, and B and C. However, you’ll have to normalize this to an [0,1] scale, otherwise your calculations will be skewed by population size. My software already does this, so there’s nothing to do on that front.

In this case, I’ve run several tests, all of which use the second population-level method described above. We begin by showing that the Phoenicians are the common ancestor of the modern day Sri Lankans and Sardinians. For this, set the minimum match count to 99.65% of the full genome size. This will produce a normalized score of 0.833 between the Phoenicians and Sri Lankans, and 0.800 between the Phoenicians and Sardinians. However, the score between the Sri Lankans and the Sardinians is 0.200, which plainly satisfies the inequality. This is consistent with the hypothesis that the Phoenician maternal line is the ancestor of both the modern day Sri Lankans and Sardinians. Setting the minimum match count to 88.01% of the genome, we find that the score between the Phoenicians and the Pre-Roman Egyptians is 0.500, and the score between the Phoenicians and the Sri Lankans is 1.000. The score between the Pre-Roman Egyptians and the Sri Lankans is instead 0.000, again satisfying the inequality. This is consistent with the hypothesis that the Phoenicians are the common ancestor of both the Pre-Roman Egyptians and the modern day Sri Lankans.

This seems peculiar, since the Phoenicians are Middle Eastern people, and the genomes in question are from Ibiza. However, the Phoenicians in particular were certainly sea-faring people, and moreover, civilization in the Middle East goes back to at least Ugarit, which could date as far back as 6,000 BC. Though not consistent with purported history, this at least leaves open the possibility that people from the Middle East traveled to South Asia. This might sound too ambitious for the time, but the Phoenicians made it to Ibiza from the Middle East, which is roughly the same distance as the Middle East to Sri Lanka, both of which are islands. Once you’re in South Asia, the rest of the region becomes accessible.

If this is true, then it shouldn’t be limited to Sri Lanka, and this is in fact the case. In particular, the Thai also test as the descendants of the Phoenicians, using the same analysis. Even more interesting, both the modern day Norwegians, Swedes, and Finns test as the descendants of the Thai, again using the same analysis. Putting it all together, it seems plausible that early Middle Eastern civilizations not only visited but settled South Asia, and that some of them came back, in particular to Egypt, and Scandinavia. This could explain why the Pre-Roman Egyptians are visibly Asian people, and further, why Thai-style architecture exists in early Scandinavia. Though the latter might sound totally implausible, it is important to note that some Thai and Norwegian people are nearly identical on the maternal line, with about 99.6% of the genome matching. Something has to explain that. Also note that the Sri Lankan maternal line was present throughout Europe around 33,000 BC. This suggests plainly that many Europeans, and the Classical World itself, descend from the Phoenicians. That somewhat remote populations also descend from them is not too surprising, in this context.

Further, there are alarming similarities between the Nordic religions and alphabet, and the Canaanite religions and alphabet, in particular, the gods El / Adon and Odin, with their sons, Baal and Baldur, respectively. Once you place greater emphasis on genetic history, over written history, this story sounds perfectly believable. Further still, if people migrated back from South Asia to the West, then this should again not be limited to Scandinavia, and this is in fact the case. Astonishingly, the Pre-Roman Egyptians test as the descendants of the Thai people, using the same analysis. Obviously the Pre-Roman Egyptians were not the first Africans, and in fact, everything suggests they’re South Asian, and for the same reason, none of this implies that modern day Scandinavians are the first Scandinavians, and instead, again, it looks like many Norwegians and Finns are instead, again, South Asian.

Finally, this is all consistent with the obvious fact that the most advanced civilizations in the world, i.e., the Classical World, are all proximate to the Middle East, suggesting that the genesis of true human intelligence, could have come from somewhere near Phoenicia.

On the improbability of reproductive selection for drastic evolution

Large leaps in evolution seem to require too much time to make sense. Consider the fact that about 500 bases separate human mtDNA from that of a gorilla or a chimp. That’s a small percentage of the approximately 16,000 bases that make up human mtDNA, but the number of sequences that are 500 bases in length is 4^ 500, which has approximately 300 digits. As a consequence, claiming that reproductive selection, i.e., the birth of some large number of children, that were then selected for fitness by their environment, is the driver of the change from ape to man, makes no sense, as there’s simply not enough time or offspring for that to be a credible theory, for even this small piece of its machinery, which is the evolution of mtDNA.

However, if we allow for evolution at the cellular level in the individual, over the lifetime of the individual, then it could explain how e.g., 500 extra bases end up added to the mtDNA of a gorilla, since there are trillions of cells in humans. That is, floating bases are added constantly, as insertions, in error, and when lethal, the cell in question dies off. However, if not lethal, and instead beneficial, this could occur throughout the body of the organism, causing the organism to evolve within its own lifetime, by e.g., changing its mtDNA through such a large scale, presumably beneficial insertion, like the one that divides apes from humanity.

This implies four corollaries:

1. It is far more likely that any such benefits will be passed on from the paternal line, since men constantly produce new semen. In contrast, women produce some fixed number of eggs by a particular age. As a result, men present more opportunities to pass down mutations of this type, if those mutations also impact their semen.

2. There must be some women who are capable of producing “new eggs” after a mutation, otherwise the mutation that caused gorilla mtDNA to evolve into human mtDNA, wouldn’t persist.

3. If you argue instead that such drastic mutations occur in the semen or the eggs, then you again have the problem of requiring too much time, since it would require a large number of offspring, that are then selected for lethal and non-lethal traits. This is the same argument we dismissed above. That is, the number of possible 500 base insertions is too large for this to be a credible theory. As a consequence, drastic mutations cannot be the result of reproductive selection, period, and require another explanation, for which cellular mutations within the individual seem a credible candidate.

4. If true, then it implies the astonishing possibility of evolution within the lifetime of an individual. This sounds far fetched, but cancer is a reality, and is a failure at the cellular level, that causes unchecked growth. The argument above implies something similar, but beneficial, that occurs during the lifetime of an individual, permeating its body, and thereby impacting its offspring.