Chaitin's Constant
en.wikipedia.org
en.wikipedia.org
Mathematician GregoryChaitin defines elegance in computer programming in this way: A computer program written in a given language is elegant if no smaller program written in the same language has the same output. He goes on to prove that it is impossible to prove that a given program above a certain very low level of complexity is elegant.
https://wiki.c2.com/?ChaitinElegance
And he gave some examples in his book.
http://jillian.rootaction.net/~jillian/science/chaitin/www.c...
See the example code in LISP here:
Doesn't this in fact prove that numbers are discovered, not invented?
He defines elegance to be "N". He defines
N = 1
356 + N != N
Thus, real numbers are real.
From the article:
>> [what is] the probability that a randomly constructed program will halt [?]
Where are you in life when this is a question that needs to be pondered? My bet is you're at a point where (when?) you question nature and/or human nature.
>> Real numbers are real
I meant to say, real numbers existed all along and were discovered, as opposed to being an invention.
What made me come to this conclusion? Here's Chaitin (paraphrased):
- run a process that through a series of operations produces a scalar, deterministically.
- alter that process.
- observe that the scalar has increased/decreased in value.
I.e. numbers are "real".
"If you know the output you'd like, it's impossible to know how much code it will take to get there."
> It is straightforward to compute upper bounds for K(s) – simply compress the string s with some method, implement the corresponding decompressor in the chosen language, concatenate the decompressor to the compressed string, and measure the length of the resulting string – concretely, the size of a self-extracting archive in the given language.
This is analogous (but not exactly) to the Travelling Salesman Problem: we “can’t” (in the case of Kolmogorov complexity, literally cannot) get the exact number, but getting a nearly perfect estimate of the number has cheap-and-easy algorithms.
It’s fun to think about what an exact solution to computable Kolmogorov complexity would “mean”, though, sort of like it’s fun to think about the consequences of https://en.wikipedia.org/wiki/Hypercomputation: as a consequence of calculating the Kolmogorov complexity, you’d be optimally compressing the input data, identifying every possible nuance of self-similarity in the input, no matter on what level of abstraction it occurred. The intermediate model of the informational content required to construct the compressor would be immense—possibly a description of all mathematical theorems in the relevant axiom system, and all scientific laws governing the relevant generator-of-structure (e.g. physics, chemistry, biology, human psychology, etc.) Such a system really could “understand the universe from a grain of sand.”
I don't get it, why couldn't you "simply" iterate through every program shorter than the string you're trying to compress, compiling and running each while discarding the ones with the wrong output and halting when you either find a working program or run out of shorter strings to try?
Edit: Oh, I get it now, you can't tell whether or not a given long-running program will eventually produce the target string without solving its halting problem.
Exactly right! I kinda think that these non-computable problems are all sort-of the same problem, just viewed from different angles.
I would hesitate to call code golf elegant in most instances.
For an extensional definition: a machine-code ISA, and its assembly language, are both the same formal language, just different notations for it. The assembly language is more verbose compared to the machine-code, but there’s a bijection between their semantics. Chaitin Elegance, for this formal language, would measure the byte-size of the program in its machine-code formulation, not in its assembler formulation. Long variable names in the assembler formulation don’t matter; but long function bodies do, if they coerce near jumps into far jumps.
For another example: picture doing code-golf in Forth, where your goal is to minimize the number of Forth words you use in your program, not the number of bytes per se. (Note that in this case the “optimal notation” you’re measuring the elegance of doesn’t exist anywhere except in the in-memory state of the Forth VM, where it’s the compiled threaded-code representation of your program with all words represented as pointers.)
I've read plenty of "pop math" books, and this one stands out as somewhat odd. It's also a quick read and, somewhat uncommonly, written by a person closely connected to the topic - so I'd recommend it.
Gregory Chaitin Lecture at Carnegie-Mellon University in 2000, he gives a bit of history of parts of math/computing that leads up to him talking about qualities of random. He touches on Cantor, Bertrand Russell, Hilbert, Gödel and Turing.
Or is it pure theoretical concept with interesting emerging properties.
The idea is useful yes.
Well that's the crux of my question, how can it be useful wen its completely undefined.
If you're asking about it's practical use, it has none.
Chaitin constants Omega_U are perhaps the most obvious specific example of uncomputable numbers. They are also known to be transcendental.
Calude et al. (2002) computed the first 64 bits of Chaitin's constant Omega_U for a certain universal Turing machine as
Omega_U = 0.0000001000000100000110..._2 (2) = 0.00787499699...
Can you explain your intuition for this step?
This set is countable: each one of these programs represents a single number, and you can use Gauss to transform any program into a integer and vice-versa. What's amazing is that almost every real number you heard about is part of this set: pi, e, and √2 can all be nicely put into a well-defined countable set.
The set of the reals is uncountable, which means that almost every number is uncomputable like Chaitin's constant.
I still feel the diagonal argument is the clearest intuition for defining an uncountable set.
Personally, I never found the diagonal argument intuitive. The proof with the nested open intervals in a sequence was easier for me to understand, but that's probably because I have more of a background in CS.
Almost every real number is not only not computable, they aren't even definable.
http://jillian.rootaction.net/~jillian/science/chaitin/www.c...
He also writes in his book:
http://jillian.rootaction.net/~jillian/science/chaitin/www.c...
So in a way, in all three cases, Gödel, Turing, and I, we already have a new ``biological'' complicated mathematics, the mathematics of the third millennium, or at least of the 21st century. [As a child I used to dream that I was in the far future, in a library, desperate to see how it had all turned out, desperate to see what science had achieved. And I would take a volume off the shelf and open it, and all I could see were words, words, words, words that made no sense at all... Writing this book brings back long-forgotten thoughts and the unusual lucidity I experience when my research is going well and everything seems inevitable.]
Fulton's constant is any number of 9s. E.g., 9, 999, or 999999.