Kolmogorov Complexity and Our Search for Meaning
nautil.us
nautil.us
What "uncomputable" means is that for the general case, there cannot exist a program that is guaranteed to find the Kolmogorov complexity of a given input string. This is because as we enumerate through all Turing machines from smallest to largest, some will not halt, but we can’t know if this is because the program is just running for a very long time or if it is actually going to run forever. In specific cases for short strings, we can often analytically determine whether the program will halt or not. This is also why we know the first few values of the Busy Beaver function, even though it is also uncomputable.
However, for small strings, the actual complexity you compute starting from any particular model of computation is totally dwarfed by that O(1) padding cost. So, actually computing Kolmogorov complexities of small strings is basically just pointless trivia.
Sometimes I think this distinction between "general" and "specific" is as deep as the whole idea of uncomputability. When someone says "arbitrary Turing machine" it is very difficult for a layman to wrap their head around what this means. No wonder: I'm using the word "arbitrary", which means "random", which means... uncomputable.
Just wanted to note that we have techniques for termination analysis that cover entire classes of programs of arbitrary length, not just specific short programs. See ranking function synthesis for an example. Hell, under some universal computational models, the halting problem is polynomial-time decidable for almost all programs: https://arxiv.org/abs/math/0504351.
Im tempted to debate this... in any programming language you need to use some space to differentiate a literal from code to be executed. So, according to Kolmogorov complexity, wouldn’t the shortest program to print a random number (or 0) be larger than that number?
"While a computer might find some pattern in a string, it cannot find the best pattern. We might find some short program that outputs a certain pattern, but there could exist an even shorter program. "
—Bennett, Charles H. "Logical depth and physical complexity." The Universal Turing Machine: A Half-Century Survey.
Also this treatment of K-L divergence as a measure of "Bayesian surprise": http://ilab.usc.edu/surprise/
That's all based on Shannon entropy (probabilistic), not Kolmogorov complexity (algorithmic), but there are a lot of connections between them. This paper is a pretty thorough summary: https://homepages.cwi.nl/~paulv/papers/info.pdf
And here's a paper defining algorithmic relative complexity by analogy to relative entropy: http://www.mdpi.com/1099-4300/13/4/902/pdf-vor
"We define the cross-complexity of an object x with respect to another object y as the amount of computational resources needed to specify x in terms of y, and the complexity of x related to y as the compression power which is lost when adopting such a description for x, compared to the shortest representation of x"
The only part I dislike is the title. But perhaps that was the editors. I do commend the author though on managing to write this part:
"The fact that Kolmogorov complexity is not computable is a result in pure mathematics and we should never confuse that pristine realm with the far more complicated, and messy, real world. However, there are certain common themes about Kolmogorov complexity theory that we might take with us when thinking about the real world."
I am not well versed in any of Kolmogorov's work, but the introduction certainly makes the spirit of his work much clearer.
"While a computer might find some pattern in a string, it cannot find the best pattern."
Isn't this wrong? The computer might have found the best pattern, we just cannot know that it really is the best pattern. The two ideas seem close but not quite the same thing, and I think Kolmogorov complexity and its proof is about the latter, not the former.
Anyway, I think the idea of Kolmogorov complexity is absolutely fascinating, and seems highly applicable to a wide variety of human cognitive/information processing. For example, scientific theories appear to be algorithms that "compress" our observations of the real world, and when our theories get better, the compression gets better.
Or music. I think everyone knows the phenomenon that relative novices find certain avant-garde styles to be "just noise", whereas experts find that beautiful and the simpler music boring. Well, if you don't have the "decoding algorithm" yet, the more complex piece really is noise, whereas if you have the more complex decoder, you can decode that piece and see the beauty in it (which appears to be connected to skirting close to the maximum information density you can find).
And so on.
All strings have a shortest pattern, but there's no one program that can find them all.
1. We assume "the best pattern" exists.
But what do we mean here by "exists"? If something is uncomputable does it exist? In what sense?
Programs + Input in the K-complexity world are sequences of symbols taken from a finite alphabet.
For any finite-length S, we can definitely find a program Q that produces S: Simply write the program that literally embeds and reproduces S.
Now, Q is a program+input that has finite length. So we can always find a maximal bound for the K-complexity (length of Q).
Since Q is a finite-length symbol sequence from a finite alphabet, we can consider the finite-sized subset of all symbol-sequences of length <= Q. Every single one of those sequences describes a program + input. Every one of those programs is deterministic: it will either run to completion and produce some fixed output, or never-terminate.
We know the finite upper bound exists. We know the finite set of Program+Input sequences exist. We can even enumerate all of them (and write a program to do it). We also know that each of them will deterministically either produce S or not produce S (we can't be guaranteed that we will run them all and find the results of each, but we know each of them have an intrinsic and deterministic behaviour).
Either one or more of those will produce S or not. If there are none, then our candidate Q is the shortest. If there are one or more, then the shortest of those definitely exists, since we already have the finite set it comes from in our hand.
Overall, this and other cases (Godel's work, Halting Problem) lead me down the path of accepting the mathematical truth that it's possible for there to be truths we never "reach". Truth and knowability are linked, but knowability is not a prerequisite for truth.
It wasn't an easy idea to come to terms with, but I'm relatively comfortable with it these days.
Similarly, there is definitely a shortest program that outputs a certain string and then halts. We can't always make a program to find it, but that shortest program exists nonetheless. There is no other choice! If there is no shortest program to output it, how can there be any other program?
If more programmers -especially functional programmers- were aware of this limitation, we would have avoided countless flamewars about whose language is best- where "the best language" is the one where someone has written a program to perform some task, that is shorter than some other program to perform the same task in another language sometimes written by another programmer (but often, the same one).
In the real world, there are lots of trade-offs at play when writing programs, and obviously brevity is not the only thing to optimize for. However, I think there is substantial empirical evidence that there is strong correlation between the length of a program and the number of bugs in it.
> 1. Print “100” 30 times.
> 2. Print the first 25 prime numbers.
> The Kolmogorov complexity of the first string is less than the Kolmogorov complexity of the second string because the first program is shorter than the second program.
The second also abstracts away the concept of prime numbers. All of which have their own Kolmogorov complexity, no? Is there such a thing as talking about local and externalized Kolmogorov complexity? Actually, both assume understanding of multiplication, decimal notation, printing.
Otherwise, as you said, the definition of Kolmogorov complexity becomes pointless and vacuous - every string has "Kolmogorov complexity" equal to 1!
Once you have done this and your language is Turing complete, your language's program sizes can be transformed to other languages' and vice-versa by simply emulating languages in each other (which does not necessarily give you the shortest possible program, but just a bound for its size).
Kolmogorov Complexity - it's a bit silly - http://forwardscattering.org/post/7 and More on Kolmogorov Complexity - http://forwardscattering.org/post/14
I disagree that this theorem is very deep. Even a CS-grad noob like me can easily understand several proofs of it.
I guess this depends entirely on your definition of "deep", but many extremely important and far-reaching theorems (and corresponding proofs) in computer science and mathematics are not particularly difficult to understand for a CS graduate. Ideally you should understand the proofs of various deep results.
If you already have an undergraduate degree in computer science, you will likely understand results like the CAP theorem or Noisy-Channel Coding theorem. If you don't already, you can probably get the idea in an hour or two of reading. With a little more effort you can more or less fully understand the proofs of various results in mathematics, like Bolzano-Weierstrass, Bayes, Fundamental Theorem of Calculus, etc. These are all very important results that dramatically changed the research landscape at the time they were discovered. The Pythagorean Theorem and proof (by infinite descent) of the irrationality of non-integral square roots are wildly important, but you should trivially learn those in elementary or middle school.
Basically, it's a little odd to assert a result is not deep simply because you can understand its proof. In fact, good students working through a textbook can often formulate their own proofs of important theorems before they read the author's if the book is structured especially well.
See https://math.stackexchange.com/questions/2046777/deep-theore....
The only obstacle to attaining a Turing award is probably being 50 years late, and realizing it 10 more years later...
No buono!
"The smallest number that cannot be described in less than 15 words"
...is stimulating, it is an example of a sentence that does not describe a number rather than a number whose description can not be found.