Who Can Name the Bigger Number?
scottaaronson.com
scottaaronson.com
In 2001, David Moews ran a BIGNUM BAKEOFF competition on the comp.lang.c newsgroup, where each entry had to be a C program (512 non-whitespace characters or fewer) returning a number from main(). The winner is the program that returns the largest number, assuming an arbitrarily-large int type.
http://groups.google.com/group/comp.lang.c/browse_thread/thr...
After reading Scott Aaronson's wonderful essay, you won't be surprised to hear that the contest was won by a theoretical computer scientist, Ralph Loader. (Second place was taken by Heiner Marxen, who is mentioned in Scott's article in connection with the Busy Beaver problem.)
Ralph Loader's remarkable program is at http://homepages.ihug.co.nz/~suckfish/busy/reduced.c, and the documented and unmangled version in http://homepages.ihug.co.nz/~suckfish/busy/busy.tar.gz
David Moews' discussion of the entries is at http://djm.cc/bignum-results.txt
Basically, many posters are missing the point that it's a mathematics challenge, not a C-challenge, which is excusable since it's posted in a C-group.
A coworker suggests a Whitespace[1] interpreter which applies the recursion theorem and then interprets a Whitespace program embedded in the source code, characters which do not count towards the size limit. We're not sure yet whether that can be done in 512 characters.
[1] http://en.wikipedia.org/wiki/Whitespace_(programming_languag...
Edit: "Wait... can you make a Quine without using a string literal?"
Also: you're disqualified :)
Actually, now that I think of it, "the largest number nameable using 1000 symbols in HOL plus a successor symbol" might work, since you can define addition, multiplication, etc. in higher-order logic using only a successor symbol.
Interesting fact: This is a fundamental jump up from first-order logic, which is a fundamental jump up from Busy Beaver, and then once you're there, it's operating at the highest level of abstraction that I know about or have ever heard of. There are things you can do to make that number bigger - picking a different ordinal for the order of logic, recursing over how you get the number of symbols - but they all amount to saying "plus one", and not jumping to a qualitatively different level of abstraction. Once you abstract over second-order logic you are, so far as I know, done.
(In case it happens to be you and not I who missed something: the said number is formally specified though uncomputable, just as much as saying BusyBeaver(100); it is not paradoxical like using English to talk about English; and it is also vastly larger than anything you can express compactly by talking about Busy Beavers and oracle machines, which was the top level of the original article.)
Going meta is really hard work. When people think they're "jumping out of the system" over and over again, they're usually actually playing in a pretty small sandbox. If you take someone who's naive about going meta and ask them to construct a large number, they often don't get anywhere close to Ackermann numbers. They think they're being brilliantly creative and recursing at the speed of light, while actually spending huge amounts of complexity to create much smaller numbers than a mathematician could describe in a few lines of code. Similarly, someone could play around all day with grand hierarchies of ordinal halting oracles, or "jump out of the system" for a billion years on end by applying the functions to themselves, and never get anywhere close to the size of the numbers that you could talk about by making the jump to first-order logic.
And after you make the jump to second-order logic, I don't know of any more other jumps like that of comparable size.
This is definitely one of those.
Pretty notation here:
So far I think you win :)
for the lazy amongst us: http://en.wikipedia.org/wiki/Knuths_up-arrow_notation
BB(BB(BB(BB(BB(…g↑↑↑↑g)))))
or a mix thereof?
edit: I'd actually try BB(BB(BB(BB(BB(…g↑↑↑↑g)))))+1, just in case.
http://en.wikipedia.org/wiki/Busy_beaver#Non-computability_o...
That‘s about a third of the way through the article. The numbers get a lot bigger after that.
As a footnote, the true dimension is no longer thought to be six — Aaronson’s essay was written in 1999 — and is now known to be at least 11. The Wikipedia article linked above has a reference for this improved lower bound.
(9||||9)!
Using knuth's up arrow notation
http://en.wikipedia.org/wiki/Knuth%27s_up-arrow_notation
And a factorial for good measure
Also, why use | when you can use ↑? ;)
How does g↑(sub_g)g compare with BB(g)?
but there isn't enough entropy left before cosmic heat death to evaluate 9^(9^9).
Here's something simple I came up with:
P(1) = 10
P(n+1) = 10^P(n)
Q(n) = P(n)^P(n)
Z(1) = Q(1)
Z(n+1) = Q(Q(n))
And then: Z(10^100)
B(b, c, 0) = 0
i < b => B(b, c, i + j * b) = i + B(b, c, j) * c
T(b, 0) = b * b
T(b, n+1) = T(T(b, n), B(b, T(b, n), n))
Z = T(2, T(2, T(2, 9)))
It is much, much larger than the number you just threw out. See http://bentilly.blogspot.com/2010/03/large-numbers.html for an explanation.
Suppose there was a metric between quarks. To be clear, are you saying: take all quarks in the universe. Take their powerset P. For each set S in P, create the complete graph K_{|S|} where edge lengths are distances. Let TSP(x, K_{|S|}) be the number of steps required to solve TSP. Sum TSP(K_{|S|}) for all S in P.
Let n be the number of quarks in the universe. The size of the powerset is 2^n. For each S in P, since TSP is solvable in exponential time, we'll upper bound the number of steps by 2^n. In other words, for each powerset, you're cost for solving TSP is at most 2^n. Therefore, the number of steps is at most 2^n * 2^n = 2^(2n), which is far smaller than say Ackermann(6, 6).
Think of it this way. Imagine your scenario, like you just laid out. Now write a program to actually find the number in question, including all input (in this case, some representation of the number you gave, which itself can be encoded as something less than the raw base 2 representation). Now, convert that program to the most efficient possible representation in the Turing Machine encoding in question, which for these sorts of problems are often surprisingly small.
Your problem fits into a small handful of states, a few tens tops, and relatively small "input" too (as encoded by the states in some manner). Therefore BB(a few tens) is at least that large. In fact, that's an unbelievable underestimation of BB(a few tens).
While we humans are thinking we're all clever stacking exponentials on exponentials, the Busy Beavers are off doing things we can't even conceive. Arrow notation and hyper arrow notation and every other such bit of notation are all very, very small functions, and therefore well covered by BB(very small); what concept or concepts does BB(50) exploit? Certainly nothing that would fit into English very comfortably.
I think this helps a human to grasp BB() at least a little; the cleverest, biggest numbers we've ever managed to express without the BB notation are usually in the form of functions quite easy to express with Turing Machines of not that many states. BB grows fast.
Is it just me or does the traveling salesman problem have (cities-1)! solutions? thus it is not exponential? and is in fact far more annoying?
As the person below answered, there are less naive ways of doing it. Check out: http://www.tsp.gatech.edu/index.html if you are interested.
1) http://qntm.org/planar obviously not the largest number but pretty big.
2) http://www.ephraimkishon.de/en/my_favorite_stories.htm The story Jewish Poker is at least one take on the old joke mentioned in the intro, and a fun read.
ready, go.
If I'm also allowed an operator, 3↑⁹⁸⁷⁶⁵⁴¹⁰2
That would be trivial to increase substantially by using some other notation for the hyperoperation, but I'm going with the presumably most familiar one. I'm sure there are bigger numbers - specifically, Wikipedia mentions Conway chains, where a→b→c = a ↑^c b, and so 2→3→4→5→6→7→8→9→10 should be quite large indeed.
Then again 2^3^4^5^6^7^8^9^(10!!!!!!!!!) is larger. Also if it's it's simply a question of symbols 9!! is larger than 9^9 so 9 followed by n ! is probably your best bet without going into higher level math like BB(BB(...(9))...)
Somehow I think that Conway's chained arrow notation is cheating.
welcome to the hotel David Hilbert...
a2 = a1^a1
...
a_n = a_(n-1)^a_(n-1)
My number is a_(a_(10^10))