Talk:Ackermann function

message: Did anybody notice that except for the absence of a few ':' characters, that pseudo code is valid Python. --83.146.34.206 06:23, 24 Sep 2004 (UTC)
replies: text: Well... I wrote it and designed the language and I don't even know Python. So go figure. I'm sure there are some other differences, if only the emboldened keywords and the ≠ symbol. Derrick Coetzee 23:52, 1 Oct 2004 (UTC)
thread_title:  Pseudocode to Python... 

message: Just a note: in the introduction it states, "In mathematics and computer science, the Ackermann function (also known as Ackermann-Peter function) is an important example in the theory of computation.", but doesn't say what the Ackermann function is an important example of.  -Seth Mahoney 22:06, Sep 24, 2004 (UTC)
I think it is supposed to be an example of "A function of two parameters whose value grows very fast" according to . Kirbytime 02:17, 24 March 2006 (UTC)
thread_title:  Introduction 

message: At the end of the section about Inverse we can read:
:In particular, some modified functions simplify the expression by eliminating the −3 and similar terms.
Here's an example of a modified Ackermann function which simplifies the explicit formulas for each level in the hierarchy. This function is defined for positive integers m,n both starting at 1 instead of 0:
:
  A(m,n)=
   \left\{
    \begin{matrix}
     n+2,\qquad\qquad\qquad\quad\,&&\mbox{if }m=1;\ \ \qquad\qquad
    \\
     2,\qquad\qquad\qquad\qquad\quad&&\mbox{if }m>1\mbox{ and }n=1;
    \\
     A(m-1, A(m, n-1))\,&&\mbox{otherwise.}\,\qquad\qquad
    \end{matrix}
   \right.
 
This function meets:
 A(1,n) = 1 + 1 + ... (n 1's) ... + 1 + 2 = 2+n
 A(2,n) = 2 + 2 + ... (n 2's) ... + 2 = 2*n
 A(3,n) = 2 * 2 * ... (n 2's) ... * 2 = 2^n
 A(4,n) = 2 ^ 2 ^ ... (n 2's) ... ^ 2 = 2 tetrated n
  (powers are evaluated right-to-left as usual and so should the rest of operators;
   I borrowed the terms "tetrated", "pentated", etc. from "Intuitive meaning" above)
 A(5,n) = 2 tetrated 2 tetrated 2 ... (n 2's) ... tetrated 2 = 2 pentated n
 A(6,n) = 2 pentated 2 pentated 2 ... (n 2's) ... pentated 2 = 2 hexated n
 etc.
In particular, A(m,2) = 4 for all m, which implies that A(m, 3) = A(m-1, 4) for m > 1.
I think that the hierarchy is more easily understood this way.
-PGimeno 18:37, 26 Sep 2004 (UTC)
replies: text: PGimeno, do you have a reference to the modified Ackermann functions? Why do you use the same character A?  dima (talk) 13:27, 3 March 2008 (UTC)
replies: text: It's just Buck's function with reversed parameters, as seen in Mathworld but with the base cases simplified by me to get rid of the zeros, in an attempt to be didactic. The choice of the same letter A seems to be a bit unfortunate. I should undoubtly have changed it. As for a reference to modified Ackermann functions, there's one already reachable from the External Links section, namely this one:  —pgimeno (talk) 13:16, 9 November 2008 (UTC)
thread_title:  Alternative definition 

message: The explanation of mn as "m multiplied by itself n times" is not quite true.  For example, it implies that m1 means "m multiplied by itself once".  I can't see an obvious way to fix this.  Rewriting it as "1 multiplied by m n times" would be correct but maybe a bit obscure to the layman. Snottygobble 01:15, 20 Dec 2004 (UTC)
replies: text: I consider this to be one of those cases where being a little wrong in a few edge cases for the purpose of simplicity is okay. But I'll try and stick in a word or two as a reminder. Deco 03:29, 5 Feb 2005 (UTC)
replies: text: Why would this be incorrect? The empty product is 1, so I think the original explanation is still correct. 63.96.95.133 23:43, 15 May 2007 (UTC)
replies: text: A better wording would be "the product of n copies of m". JRSpriggs 07:49, 16 May 2007 (UTC)
replies: text: How about the n-fold m-multiple of 1. AJRobbins (talk) 20:20, 5 December 2007 (UTC)
thread_title: m<sup>n</sup>

message: User 213.94.207.61 made a change months ago: here.
His other edits were subtle vandalisms - he changed dates a bit and these changes didn't get caught for very long time.
(all his edits)
Can someone check whether the change in Ackermann function above is or isn't valid? Pavel Vozenilek 12:58, 26 Mar 2005 (UTC)
thread_title:  Possible vandalism - please check 

message: The Ackermann’s ‘function’ hardly counts as a function --- its array or table of values is merely a perverse pathological maze.  Indeed, it blatantly demonstrates that the clearly ill-defined Ackermann’s function is an antinomy or self-contradiction paradox just like:
(1) Cantor’s diagonal argument [the sequence of diagonal terms is actually an inherent list-inclusion-and-imposition-of-order condition for the row-listing so that the anti-diagonal-terms expression is indubitably excluded from the row-list]; or
(2) Cantor’s bone-of-contention “set of all the elements of an infinite set which are not contained in their respective images for a presumed one-to-one correspondence between the elements of the given infinite set and the members of its power set [see Wikipedia article and discussion on Cantor’s Theorem]; or
(3) the ‘liar’ paradox [“This statement is false” — which is both
true and false at the same time].
The following is a very simple counter-argument to the generally accepted claim that the Ackermann’s function is recursive but not primitive recursive:
(1) Clearly, the first row of the Ackermann’s function values table or array already enumerates the natural numbers — A(0,n) = n + 1 — or, recursively:   A(0,0) = 1, A(0,n) = A(0,n-1) + 1.
(2) The Ackermann’s function has N x N as domain and N+ as range, where N is the set of all natural numbers and N+ is the set of all positive natural numbers.  Therefore, for all natural numbers m > 0 and n ³ 0,  A(m,n) = z + 1 = A(0,z) where z is some natural number (which can be readily obtained from a non-recursive definition of the Ackermann’s function — say, using the hyper operator).  That is:
A(m,n) = A(0,z)
= A(0,A(0,z-1))
= A(0,A(0,A(0,z-2)))
= A(0,A(0,A(0,A(0,z-3))))
.
.
.
= A(0,A(0,A(0,A(0, . . . ,A(0,0)))))
— which is the standard primitive recursive successor function on the natural numbers.  In other words, every Ackermann’s function value is primitive recursively and not primitive recursively defined at the same time in the same respect — hence, its very definition indeed violates the principle of non-contradiction so it is untenable ab initio.
For example, the following is a primitive recursive definition of the Ackermann’s function:
A(m,n)	=	1	                if m = 0, n = 0
	=	A(0,n-1) + 1	        if m = 0, n > 0
	=	A(0,hyper(2,m,n+3)-4)	otherwise
where the hyper operator [see Wikipedia article on “Hyper operator”] for m > 0 is defined as:
hyper(a,1,b) = a + b
hyper(a,2,b) = a x b
hyper(a,3,b) = a ­^ b = ab
hyper(a,4,b) = a ­­^^ b = ba     [see Wikipedia article on “Tetration”]
.
.
.
hyper(a,m,b) = a ­^m-2 b
(3) Therefore, to avoid the self-contradiction, one should define the first row Ackermann’s function values from an already known recursive but not primitive recursive function — say, A(0,0) = a > 1 and, for n > 0, A(0,n) = f(A(0,n-1)) — for example, a =  10100 and f(A(0,n-1)) = A(0,n-1)A(0,n-1) — but this undercuts Ackermann’s function’s posturing as the simplest recursive but not primitive recursive function.
It must be noted that all the Ackermann function (indeed, a many-to-one relation) values do not follow a recursive single sequence — that is, they cannot be enumerated such that the later values are obtained only from earlier values in the sequence.
Moreover, the abstract algebraic commutative ring of integers or field of rational or real numbers has only addition and multiplication (as well as their respective inverse) operations initially defined.  Exponentiation (that is, iterated multiplication) is also well-defined over these number systems but tetration (see Wikipedia article) or non-standard iterated exponentiation (the exponentiation is done at the deepest level first — that is, right associative operation) is not well-defined (it violates the laws of exponents for these standard number systems — that is, its operation is not properly derived from addition and multiplication).  The fast growth of the Ackermann’s function values beginning with the A(4,n) row is attributable to the fact that their definition involve non-standard iterated exponentiation which belongs to a different number system than where primitive recursive functions are defined.
BenCawaling@Yahoo.com [25 April 2005]
:Hooray, a crank! Here's why you're wrong:
:* The Ackermann function is a function, if you define a function (like every other mathematician) to be a set of pairs. It has a procedure for computing it which provably always halts, which is enough to prove that the function exists and is unique.
:* It's not primitive recursive, and that's not "generally believed", that's a proven theorem - therefore any "counterargument" you offer is fallacious before I read it. The fact that you can expand it in terms of its own values in ways other than the recursive definition is true but irrelevent.
:* Cantor's diagonal argument is also not a paradox.
:Deco 08:01, 25 May 2005 (UTC)
thread_title: The Ackermann Recursive Function Antinomy

message: The text says:
:Haskell yields a more concise definition:
:[...]
:And so does Scheme:
I'm not convinced these add anything: the Haskell example is identical to the function pseudocode, except that all the verbose keywords get swallowed up by the ease of defining functions in Haskell, and the use of multimethods to shift the burden of argument testing from the code to the compiler. The Scheme example seems a direct copy of the pseudocode except that it swaps the names of the two arguments (and again minimizes the need for keywords).
This is not a Perl golf competition - do these examples really contribute to the article at all? Hv 15:47, 13 August 2005 (UTC)
replies: text: I agree. The Haskell one is elegant, but it's cryptic to people who don't know Haskell (read: 99% of readers), and they really disrupt the flow of the introduction, and which really has enough junk already. I removed them. Deco 21:30, 14 August 2005 (UTC)
replies: text: I'm familiar with both the languages, but I think that the Haskell version should be left in.  It's so consise and elegant.  If you can understand the wikipseudocode, you would be able to understand the haskell notation of the function.  I would say it were even easier to understand then the wiki one.  I think you should keep the Scheme version out though, whereas it is easy to follow, it is more crytic than the original. - Hahnchen 03:58, 22 August 2005 (UTC)
replies: text: Okay, that's fine. One can at least say that the Haskell version doesn't cost much in terms of space. But let's not expand it beyond that. If necessary, the partially iterative pseudocode can be removed also. Deco 05:22, 22 August 2005 (UTC)
replies: text: OK, I have restored the Haskell version and removed the partially iterative pseudocode version. —Ashley Y 23:06, 3 January 2006 (UTC)
thread_title:  Definition and properties - "more concise" 

message: The article says "...simple example of a recursive function that is not primitively recursive."  It was the first such example known, wasn't it? (IIRC from class 20 years ago) Bubba73 (talk), 03:41, 8 December 2005 (UTC)
replies: text: Nope. As the article explains, the little-known, independently-discovered Sudan function slightly predates it (at least if you trust my source). Other such functions were published before that but never proven to be non-primitive-recursive until later. Deco 03:45, 8 December 2005 (UTC)
replies: text: There's no article on the Sudan function. RJFJR 21:34, 8 December 2005 (UTC)
replies: text: This is a true fact, probably because it's so little-known. Anyone with access to the original paper by Sudan can write it though. Deco 22:56, 8 December 2005 (UTC)
thread_title:  First non-PR 

message: In the table, each line has an entry of the form f(2,(n+3)) - 3 in the n column. Whilst is is a "fudge" to get the right answer, would it be inappropriate to write the first line as 2^0 + (n+3) - 3 which evaluates to the present n+1? -- SGBailey 12:29, 29 January 2006 (UTC)
thread_title:  Sub expression within table 

message: "In fact, α(n) is less than 5 for any conceivable input size n, since A(4, 4) has a number of digits that cannot itself be written in binary in the physical universe.
:This sentence is one of at least seven comparisons to the size, in number of elementary particles, of the physical universe. I realize the size of the universe can be used as a bound on what is computable, based on memory requirements, by any "real", physical computer, or as a bound on what is expressible in some particular formal language. But beyond that, is the size of the universe just for analogy, to express how impressive the rate of growth of the function is, or does it actually have some bearing in mathematics?
:On a related note, what is meant by "conceivable" in the above sentence? I don't think I've ever heard of an entity that is definately not conceivable, although I'd imagine there is some paradox out there formulated specifically for this purpose. Formally, is the range of a(n) actually bounded above by 5? How can that be, if f(n) = A(n,n) is defined for all natural numbers? 
:I would suggest changing "for any conceivable input size" to "for any input size that is scribable in decimal notation." Anyway, I enjoyed the article very much. Thanks a lot! --Rwehr 20:06, 15 April 2006 (UTC)
replies: text: Please go ahead and edit the page. Kaimiddleton 21:02, 15 April 2006 (UTC)
replies: text: Also, has anyone done any work on the memory requirements of Ack?  It would seem that if you have a smart compiler, that does save the intermediate values, those memory requirements also get pretty large.  Looks like a space-time tradeoff to me.  It would be interesting to see any papers on this, if anyone is aware of them.  That info should be included in the article. Sword 05:04, 15 July 2006 (UTC)
thread_title:  physical universe 

message: Several links in the History section take the form '#vonHeijenoort|something', taking the user to the list of external references. Is it better to link to the wikipedia article if we have one? I changed one link (Hilbert's program) before realising there were several, so thought I'd ask! --- Richard CHSTalk 12:48, 26 June 2006 (UTC)
thread_title:  Reference links in History section 

message: One can extend the Ackermann function to the transfinite (for ordinals which have a distinguished fundamental sequence) as follows:
:A (0, n) = n+1.
:A (α+1, 0) = A (α, 1).
:A (α+1, n+1) = A (α, A (α+1, n)).
If λ is a limit ordinal with the fundamental sequence which takes k to λk, we let:
:A (λ, n) = A (λn+1, n+1).
See Large countable ordinals#Fundamental sequences for the Veblen hierarchy. JRSpriggs 09:22, 20 August 2006 (UTC)
replies: text: Let me clarify that it is only the first argument of the Ackermann function which is being extended to  infinite ordinals. The second argument and the value are still limited to natural numbers. However, I think (but have not yet proved) that by using this extention to ordinals the Ackermann function can surpass the Conway chained arrow notation as a means of naming large natural numbers. JRSpriggs 04:46, 21 August 2006 (UTC)
replies: text: Specifically, A (ωω+1, n) should rise faster as a function of n than any sequence of Conway chained arrow notations which has a relatively simple definition, such as n→n→...→n with n copies of n. JRSpriggs 04:55, 21 August 2006 (UTC)
thread_title:  Extending to transfinite ordinals 

message: I note that Susan Stepney's table chooses to always list A(5,1) as A(4,65533), thus the term appears four times in her table. Our current table instead uses A(5,1) three times, which I think is distracting because it breaks the pattern in that is otherwise clear in row 6. Another possiblity is using A(5, A(6, 0)) as the result for A(6, 1). Do you guys have a preference?--199.33.32.40 01:35, 3 February 2007 (UTC)
replies: text: I personally think its stupid if not ridiculous to give examples (i.e. tables) of a function that was designed to write things that can't be written. In other words, the only way of writing the values of the Ackermann function is to use the Ackermann function itself, or functions like it. Any attempt to do otherwise will lead to huge tables (which distorts the entire Web page, which I don't like). I think the highest value that should be written is 2^{65536} after which we should default to A(m, n) or simply (too big). AJRobbins (talk) 18:49, 15 April 2009 (UTC)
thread_title:  A(5, 1) in the table 

message: This is feeling like it might be a GA once again. I will poll some of the Math WikiProject guys and get some feedback. Then maybe some PR and on to GAN!--70.231.149.0 02:15, 4 February 2007 (UTC)
thread_title:  GA? 

message: I added two external links on the inverse Ackermann function (one to a page of mine, one to a PDF presentation by R. Seidel). The inverse Ackermann function should get its own wikipedia page. Gabn1 09:32, 22 February 2007 (UTC)
replies: text: BTW it is not strictly an inverse, because a true inverse function is a partial function (almost any natural number is not a value of Ackermann function). It is an undocumented generalization of the inverse for monotonic functions. Incnis Mrsi (talk) 08:36, 31 August 2011 (UTC)
thread_title:  Inverse Ackermann function 

message: "(this presentation is due to Rózsa Péter):"
Is this really important? No offense to anyone, but I think Rózsa Péter should be credited only as a scientist, not a Wikipedia editor (maybe on her own page, but this one seems a bit excessive...though not quite vanity, but perhaps self-promotion...) —The preceding unsigned comment was added by 128.32.42.26 (talk) 23:10, 27 February 2007 (UTC)
replies: text: The reference is not to a WikiPedia user, but to the mathematician that invented that form of the function - hence the alternative name "Ackermann-Péter function" in the first paragraph. I'm sure the wording could be improved to make that clearer, but I'm not sure exactly how. Hv 02:21, 1 March 2007 (UTC)
thread_title:  necessary comments? 

message: The explanation of why this function always terminates is confusing in my opinion. At least, it does not succinctly convince the reader that the function terminates. It states:
"The recursion is bounded because in each recursive application either m decreases, or m remains the same and n decreases. Each time that n reaches zero, m decreases, so m eventually reaches zero as well. (Expressed more technically, in each case the pair (m, n) decreases in the lexicographic order, which preserves the well-ordering of the non-negative integers.) However, when m decreases there is no upper bound on how much n can increase — and it will often increase greatly."
I don't think that the "more technical" explanation needs to be there as it interrupts the explanation. Furthermore, the "m decreases, so m eventually reaches zero" part is followed by the part stating that if m decreases there is no upper bound on how much n will increase, so it wouldn't follow that m eventually reaches zero without further inspection. I can't offer a better explanation, but I think it could be done. —The preceding unsigned comment was added by Sam Brightman (talk • contribs) 15:58, 2 April 2007 (UTC)
replies: text: May be it is worth noting that the coq proof assistant can prove termination of the ackermann function by structural induction: see https://www.lri.fr/~paulin/LASER/course-notes.pdf p.19-20. I was surprised to see that since I thought structural induction can prove termination only of primitive recursive functions. Jochen Burghardt (talk) 22:15, 3 June 2013 (UTC)
thread_title:  Termination of function 

message: I disagree with the down-grading of the Ackermann function from "mid" importance to "low" importance. It is quite important in understanding the distinction between primitive recursive functions and total recursive functions generally. See Primitive recursive function#Relationship to recursive functions, especially the last sentence which says "... a function is primitive recursive if and only if there is a natural number m such that the function can be computed by a Turing machine that always halts within A(m,n) or fewer steps, where n is the sum of the arguments of the primitive recursive function.". JRSpriggs 10:13, 10 June 2007 (UTC)
replies: text: It was definitely a borderline decision, and can of course be changed: there is always a bit of subjectivity in this kind of thing. I did appreciate the fact that the Ackermann function is important in mathematical logic as an example of a recursive function which is not primitive recursive, although I wasn't aware of the more subtle point which you quote. It would be nice to mention this fact in this article, which at the moment doesn't seem to bring out the mathematical logic aspects as well as it might. Note though, that "Low-priority" is not intended to be at all dismissive: for comparison, Area of a disk is also Low-priority, and this appears to be accepted by editors. See Wikipedia:WikiProject Mathematics/Wikipedia 1.0/Assessment and Wikipedia:WikiProject Mathematics/Wikipedia 1.0/Importance for more information. Geometry guy 10:46, 10 June 2007 (UTC)
thread_title:  Importance (or priority) of Ackermann function 

message: We need some citations and more information on the relationship between Ackermann's function and primitive recursive functions. David.Monniaux 03:55, 17 June 2007 (UTC)
thread_title:  relation to primitive recursive functions 

message: I fixed the entry for the fourth Ackermann number some time ago, and it got reverted by someone (probably carelessly).  I'm placing the incorrect text here:
An attempt to express the fourth Ackermann number, 4\uparrow\uparrow\uparrow\uparrow4, using iterated exponentiation is not practical but it can be expressed using tetration in three nested layers as shown below.  Explanation: in the middle layer, there is a tower of tetration whose full length is {4^{4^{4^{4}}}} (already a large number) and the final result is the top layer of tetrated 4's whose length equals the calculation of the middle layer.
:*\begin{matrix} \underbrace{\begin{matrix} \underbrace{4^{4^{4^{.^{.^{.{4}}}}}}} \\ {4^{4^{4^{.^{.^{.{4}}}}}}} \end{matrix}} \\ {4^{4^{4^{4}}}} \end{matrix}
The following contains the correct expressions:  notice that it actually uses tetration as claimed:
An attempt to express the fourth Ackermann number, 4\uparrow\uparrow\uparrow\uparrow4, using iterated exponentiation as above would become extremely complicated. However, it can be expressed using tetration in three nested layers as shown below. Explanation: in the middle layer, there is a tower of tetration whose full length is ^{^{^{^4}4}4}4 and the final result is the top layer of tetrated 4's whose full length equals the calculation of the middle layer. Note that by way of size comparison, the simple expression ^{^4}4 already exceeds a googolplex, so the fourth Ackermann number is quite large.
:*\begin{matrix} \underbrace{\begin{matrix} \underbrace{^{^{^{^{^{^{^{4}.}.}.}4}4}4}4} \\ ^{^{^{^{^{^{^{4}.}.}.}4}4}4}4 \end{matrix}} \\ ^{^{^{^4}4}4}4 \end{matrix}
Sorry I can't remember my password to log in and sign this.  I'll sign it later.
Ok: signed by my logged-in ID now: Kaimiddleton 21:37, 20 July 2007 (UTC)
thread_title:  4th Ackermann number 

message: Hello. I just removed a C++ metaprogramming example. It was designed in vain - the templates are highly ambiguous. Here is a transcript of the contents:
  template<int x, int y> struct ackermann       { enum { v = ackermann<x-1, ackermann<x, y-1>::v>::v } ; } ;
  template<       int y> struct ackermann<0, y> { enum { v = y+1                                     } ; } ;
  template<int x       > struct ackermann<x, 0> { enum { v = ackermann<x-1, 1>::v                    } ; } ;
  template<            > struct ackermann<0, 0> { enum { v = 1                                       } ; } ;
The second and third are equivalent. In a compiler that ignores the name, you'd wind up with a conflict. It doesn't work with GCC (at least in my test) - PGSONIC 00:59, 17 August 2007 (UTC)
thread_title:  Metaprogramming in C++ example bad 

message: I don't see a reason to show the function implemented in a dozen computer languages.  It doesn't do anything to add to the understanding of the function and is only of cursory relevance to the article.  In particular "Non-Recursive Ackermann in C++" seems more like a geek-badge than encyclopedic content.  
There is no point in showing a recursive function can be implemented with a stack as that is how recursion is --Ott2 18:32, 21 September 2007 (UTC)
replies: text: I agree that having several implementations doesn't add much content, and also it may encourage to add other implementations. IMHO a good choice will be to quote Rice's Fortran original implementation or a pseudocode version and remove all other implementations. I don't know if there's a rule that says articles should not be contests??.Ismaelbej 17:57, 18 September 2007 (UTC)
replies: text: Agreed.  The various code examples clutter up the page, and are largely irrelevant anyway -- the whole point is that this function _can_ be computed but it isn't feasible to do so except for a tiny subset of inputs. --Ott2 18:32, 21 September 2007 (UTC)
replies: text: I don't see the point of all those implementations. With the possible exception of the Haskell one, all they do is restate the recursive definition at the top of the page. Exactly how to state recursive definitions in various programming languages might be interesting information about those languages, but it isn't interesting information about the Ackermann function. I am about to remove the section. I wouldn't be averse to someone adding the original Fortran code, if anyone has it. Algebraist 22:36, 2 April 2009 (UTC)
thread_title:  Remove most of the implementations? 

message: Hello - I just came by this article and noticed a statement that I don't believe is correct (underlined):
:Despite the large values occurring in this early section of the table, some even larger numbers have been defined, such as Graham's number, which cannot be written with any small number of Knuth arrows. This number is constructed with a technique similar to applying the Ackermann function to itself recursively.
To my knowledge, iteratively repeated power towers as used in the definition of Graham's number are expressible with Ackermann functions and 5 as the first argument: First arguments 3 are in the order of powers, 4 is in the order of power towers, and 5 in the order of repeated power towers. So I would expect Graham's number to be something like A(5, n) with n something larger than 64 (but not much larger; Ackermann function is in the order of powers of 2, whereas Graham's number is defined through powers of 3). Therefore, Grahams number could not be considered an "even larger number" as stated in the article, but upper bounds can be expressed through the Ackermann function with reasonably small arguments. Comments? Thanks, Jens Koeplinger 13:28, 27 August 2007 (UTC)
replies: text: A(5, n) can be expressed with 3 upward arrows, while Graham's number needs very many.--Patrick 14:08, 27 August 2007 (UTC)
replies: text:  Since Ackermann functions are to base 2 and Graham's Number is base 3, it is very difficult to express one form in the other, obviously. However, nested Ackermann operations are roughly equal to the usual Graham definition.                   for example- A(A(A(....A(1,1)...) with 68 A's is larger than Graham's Number. Mytg8 15:01, 27 August 2007 (UTC)
replies: text: Got it, the first argument of the Ackermann function is nested, so we can't write it down with two reasonably small arguments. Thanks both, Jens Koeplinger 16:56, 27 August 2007 (UTC)

text: My bad-I should have used the Ackermann numbers,ie, A(k)=A(k,k).  So A(A(A(....A(1))...) with 68 A's is the correct form. And to think Friedman's n(4) uses A(187196,187196) A's!  Urr, A(187196) A's. One or the other.:) A tad bigger the Graham's, y'think? Mytg8 17:40, 27 August 2007 (UTC)
thread_title:  Graham's number 

message: It was already said that there are too many implementations. Thus I deleted those implementations that I considered obscure. So far so good. The Matlab implementation was promptly readded. But: Matlab is just some CAS, right? I don't see its outstanding importance, least that the Ackermann function needs to be explained in terms of this "language". (I would also be happy to see even less implementations but couldn't decide on a language.) --53.122.197.194 (talk) 13:57, 26 November 2007 (UTC)
thread_title:  Obscureness 

message: Correct me if I'm wrong, but couldn't that program be 
int ackermann(int m, int n) {
  if (m == 0)
    return n+1;
  if (n == 0)
    return ackermann(m-1, 1);
  return ackermann(m-1, ackermann(m, n-1));
}
?
Considering that it's 'written' in C and that after a return statement, it wouldn't evaluate the rest? At the very least, I would remove the "m>0" parts, because presumably if m is not zero, it is greater than zero. Sorry, can't log in account right now. Gremlinman.  —Preceding unsigned comment added by 24.218.46.235 (talk) 00:05, 5 December 2007 (UTC)
replies: text: unsigned int limits the input range to zero or positive integers, which is logical. But this C program is a joke nonetheless, totally useless even for the VAST majority of "conceivable" numbers. It seems to me like the example program is there to make the function "conceivable" also for programmers, which is a good thing. But pseudocode would be more accurate, as the limits of the language would not be so obvious. Hmm. There exist bignum libraries for C, which can tackle numbers of arbitrary size, thus letting the program rather be limited only by outer factors (including memory, time, stack size and so on), but I realize that a program using such libraries would not be as short and simple as this one, and could possible even waste more people's time because they are tempted to test a program which looks more serious...  —Preceding unsigned comment added by 129.240.72.42 (talk) 15:28, 11 April 2008 (UTC)
thread_title:  C Program 

message: There is a citation needed note on the claim that Donald Michie invented memoization.  There are citations on both his page Donald Michie and the Memoization pages.  I'm not sure whether to copy that reference here, or if it would be better to remove the claim here since there isn't anything Ackermann-specific about it, and if someone wants to go look at the memoization page they'll see the claim right at the top (and the citation).
Or could the call for citation be about the claim that compilers can do memoization automatically?  Certainly they can (Haskell for example , among plenty of others).  But again, it seems to me that such details belong on the Memoization page.
--JamesPaulWhite (talk) 06:31, 13 April 2008 (UTC)
thread_title:  Michie memoization reference  

message: Ackermann function is not "just" an example of a recursive function that is not primitive recursive. It plays a fundamental role in computability theory because it is the proper complexity measure of several algorithms, and the complexity measure of several decidable problems. For example, McAloon shows that controlled sequences of incomparable n-dimensional vectors of natural numbers have length bounded by a version of A(n,x) (see McAloon, TCS 1984). This provides an Ackermann upper bound for many algorithms that rely on Dickson's lemma for their termination.
And there exist problems with this Ackermann upper bound for which a matching lower bound can be established. An example being the equivalence of bounded Petri nets (see Mayr and Meyer, JACM 1981). PhS (talk) 20:25, 26 September 2008 (UTC)
replies: text: Some algorithmic results are already mentioned, but these are great examples to add. :-) It might help to revise the lead to emphasize that it has applications in analysis of algorithms. Dcoetzee 23:43, 26 September 2008 (UTC)
thread_title: Importance of Ackermann function? Yes!

message: I moved the definition back to the lower section. It might (I'm not quite sold) be worth adding it to the lede. But it would need to go lower in the lede, not at the top. The goal of the first part of the article is to establish context and give a general description that essentially anybody can understand. So what is presently the first paragraph really should be the first paragraph. — Carl (CBM · talk) 01:17, 29 October 2008 (UTC)
thread_title:  lede section 

message: Having read the article linked to as well as all blog comments falling under that article made by xkcd, I see nowhere where he claims his "xkcd number" is the largest ever concisely defined.  The article says that Adam Clarkson considered the Clarkkkkson number to be the largest ever concisely defined.  Then he says his intuition is that the xkcd number is probably larger but he is not sure, and asks if any of his readers can demonstrate which is larger.  Therefore I am amending the sentence.Incantar (talk) 07:14, 11 March 2009 (UTC)
thread_title:  in popular culture - the xkcd number 

message: I cannot find the definition by Rózsa Péter and Raphael Robinson that is referenced in the History section.
150.252.46.189 (talk) 22:51, 26 March 2009 (UTC)
replies: text: The Péter–Robinson function is the one that is defined in the 'Definition and properties' section and is generally called the Ackermann function. Algebraist 23:15, 26 March 2009 (UTC)
thread_title:  Missing definition? 

message: The article states that 'one should not confuse the primitive recursive functions with those definable by primitive recursion'.
As far as I understand things, the primitive recursive functions are exactly those definable by primitive recursion (i.e.
without general recursion), so, unless people have valid objections, I will delete the sentence. 
--Acipsen (talk) 18:18, 28 December 2009 (UTC)
thread_title:  primitive recursive vs. primitive recursion 

message: Why is this section in Ackermann function? No mention is made of the function at all. It would be better moved in toto to Knuth's up arrow page. OR to convert 1^1, 2^^2, 3^^^3 etc into Ackermann function calls some how. -- SGBailey (talk) 21:17, 9 July 2010 (UTC)
thread_title: Ackermann numbers

message: I am going to delete the section on extending the Ackerman functions to the complex plane. It appears to be based on a misunderstanding. As this link shows http://mathoverflow.net/questions/2944/, one can find many different entire functions that agree with say A(m,n) for a fixed m and all n. The present section seems to doubt that there is any extension at all.
Perhaps something different was meant. If so someone else can rewrite the section and restore it. But as it is, I find actively misleading. MathHisSci (talk) 23:19, 16 December 2010 (UTC)
thread_title:  Will delete the extension section 

message: xkcd is awesome!  — Preceding unsigned comment added by AdamDavid (talk • contribs) 21:25, 17 April 2011 (UTC)
thread_title:  why not plug graham's number into the ackermann function? 

message: The forth equation in History is WRONG.  — Preceding unsigned comment added by 72.129.87.43 (talk) 00:36, 28 July 2011 (UTC)
thread_title:  ERROR in forth equation in History. 

message: I've just deleted 7 programming examples. I see no reason we need them. If your programming language supports recursion and you've passed Computer Science 101, then you know how to turn this function into code. It exposes no interesting issues in computer science. The output of the function isn't even interesting in any sense; it's just a simple example of a computable function that's not primitive recursive. The only way code for this function could be interesting if it were showing how to implement a recursive function in a language that doesn't natively support that, and I don't think this is the right article for that.
If we do need a programming example, can we at least have one pseudo-code one instead of seven examples?--Prosfilaes (talk) 18:46, 7 May 2012 (UTC)
thread_title:  Programming Examples 

message: In the current page: 
"Logician Harvey Friedman defines a version of the Ackermann function as follows:
:For n = 0: A(m, n) = 1
:For m = 1: A(m, n) = 2n
:Else: A(m, n) = A(m - 1, A(m, n - 1))
He also defines a single-argument version A(n) = A(n, n).[6]" 
I'm recommending, whether or not Friedman originally used 'A' when introducing his function, that Wikipedia change the letter for his function, to 'F' maybe. The reason is in the next para from the article,(see under next line): it's not going to be clear to a reader in a hurry which 'A' is talked about. Maybe it doesn't matter mathematically which 'A' is talked about, if the exact same argument can show both aren't prim recursive, but it's still confusing.
"A single-argument version A(k) = A(k, k) that increases both m and n at the same time dwarfs every primitive recursive function, including very fast-growing functions such as the exponential function, the factorial function, multi- and superfactorial functions, and even functions defined using Knuth's up-arrow notation (except when the indexed up-arrow is used). It can be seen that A(n) is roughly comparable to fω(n) in the fast-growing hierarchy.
This extreme growth can be exploited to show that f, which is obviously computable on a machine.... "
76.218.104.120 (talk) 08:54, 8 January 2014 (UTC)
replies: text: I just got confused by this. Which of the definitions are really equivalent (define the same function) and which are different (and how do they relate to the Ackermann’s function)? The cited PDF is not available now, but I found Friedman’s version of Ackermann’s function in abstract of one of his papers, which might be the one originally cited. It seems he defines it only for m, n ≥ 1. Palec90 (talk) 00:54, 12 January 2015 (UTC)
thread_title:  Possible confusion between Ackermann's function and Friedman's function because both use the capital letter A 

message: Editor CBM has reverted automated edits made to this article that remove the article from .  I have added  to the top of the page which I think will prevent the bot from revisiting.
—Trappist the monk (talk) 19:46, 12 January 2014 (UTC)
replies: text: Support the bot's edit. The article need not retain deprecated parameters. Glrx (talk) 00:37, 13 January 2014 (UTC)
replies: text: The word "deprecated" means that future uses should be avoided; it does not mean that current uses should be changed. Also, I see no reason to think that this article uses CS1. It may use templates which could also be used for CS1, but that is a separate matter. The same templates can be used to achieve many citation styles by putting various information into various fields; that does not mean there is an error. Indeed the use of the cite templates on this page long predates the existence of CS1 (2007 vs. 2010-2011). — Carl (CBM · talk) 01:06, 13 January 2014 (UTC)
replies: text:  Who said either way was an error? In any event, "deprecated" does not mean that all previous work is cast in stone and may not be changed. Yes, there are lots of silly little bots that make micro changes that tickle watch lists and waste lots of human editors' time. I get that. And breaking a date into separate year/month/day fields avoids more silliness with different bots/scripts coming around to change mdy format into dmy or ymd. And still other bots changing "date=1984" into "year=1984". Even with all of that nonsense, I think the date field is far and away more common than separate fields. Furthermore, keeping the date in one field avoids some common data errors when templates get copied and changed. I'm not big on consistency, but the change appears reasonable, and other editors are doing the work (they aren't making me do it). The change is OK by me. Glrx (talk) 03:08, 13 January 2014 (UTC)
thread_title:  CS1 deprecated date parameters 

message: I removed these two equations involving the   m [ ]  notation, since it was unclear what it means.  
:\varphi(m, n, 3) = m [4] (n+1),\,\!
:\varphi(m, n, p) \gtrapprox m [p+1] (n+1)\ \ (p \ge 4).\,\!
In any case I think these equations are not essential, since a full definition of the 3 argument Ackermann function is given in the following Definition and Properties section. Perhaps the m notation has a standard meaning in the literature of hypercomputation, of which I am unaware, but if so I think a further explanation is needed in the present context.CharlesHBennett (talk) 19:34, 6 July 2015 (UTC)
replies: text: For what it's worth, m [4] (n+1) makes use of what Hyperoperation#Notations calls "Square bracket notation", with a[n]b = a \uparrow^{n-2} b (see Knuth's up-arrow notation). As you write, the notation as it was used in section Ackermann function#History was unclear. It is however also used later, in section Ackermann function#Ackermann numbers. Anyway, the article used to use the (I think) more conventional up-arrow notation, see , 2014-09-30. – Tobias Bergemann (talk) 20:23, 6 July 2015 (UTC)
replies: text: The paragraph was never adjusted to account for the removal of those equations - there was still a colon to this day! - so I put 'em back in. I used the up-arrow version that was there back in 2014, since that should be (marginally) more familiar than m[] notation. - Naleh (talk) 08:17, 2 March 2018 (UTC)
thread_title:  Undefined m[] notation 

message: Does this function have any real-world applications, or is it only interesting in theoretical math? -- Beland (talk) 22:45, 21 October 2015 (UTC)
thread_title:  Applications 

message: Substituted at 19:44, 1 May 2016 (UTC)
thread_title: Assessment comment

message: Ackermann's original function \phi(m,n,p) is presented in the article under History, but the Ackermann-Péter function appears earlier than it, in the introduction. Would it be appropriate to move the "true" Ackermann function to the introduction and present it before leading into the simplified Ackermann-Péter function? The latter is of course better-known, but I think it may be more correct to present Ackermann's original function first. 00dani (talk) 01:18, 30 August 2016 (UTC)
replies: text: I think that the 3-argument version is of historical interest, while the 2-argument version is what is usually called the "Ackerman function". Since this article is not primarily historical, putting the contemporary usage first and the history later seems reasonable to me. — Carl (CBM · talk) 01:33, 30 August 2016 (UTC)
thread_title:  Should we prioritise Ackermann's original function? 

message: Hello fellow Wikipedians,
I have just modified  on Ackermann function. Please take a moment to review my edit. If you have any questions, or need the bot to ignore the links, or the page altogether, please visit this simple FaQ for additional information. I made the following changes:
*Added archive https://web.archive.org/web/20080504224223/http://mathgate.info:80/cebrown/notes/vonHeijenoort.php to http://mathgate.info/cebrown/notes/vonHeijenoort.php
*Added  tag to http://www.math.osu.edu/~friedman.8/pdf/AckAlgGeom102100.pdf
*Added archive https://web.archive.org/web/20070821224819/http://yucs.org:80/~gnivasch/alpha/index.html to http://www.yucs.org/~gnivasch/alpha/index.html
When you have finished reviewing my changes, please set the checked parameter below to true or failed to let others know (documentation at ).
Cheers.—InternetArchiveBot (Report bug) 12:26, 3 October 2016 (UTC)
thread_title:  External links modified 

message: The following "proof" of the fact that the Ackermann function is not primitive recursive was added to the article. I have removed it since it is extremely unclear and at the very least contains numerous typos. The definition of the class \mathcal{A} is not clear since x is not defined (presumably it is the maximum of the xi?). AxelBoldt (talk) 03:20, 26 April 2017 (UTC)
thread_title:  Proof section moved here 

message: Rules:
 B(m, n) =
\begin{cases}
A(n, 1) & \mbox{if } m = 0 \\
B(m-1, 1) & \mbox{if } m > 0 \mbox{ and } n = 0 \\
B(m-1, B(m, n-1)) & \mbox{if } m > 0 \mbox{ and } n > 0.
\end{cases}
  B(2, 0)
= B(1, 1)
= B(0, B(1, 0))
= B(0, B(0, 1))
= B(0, A(1, 1))
= B(0, A(0, A(1, 0)))
= B(0, A(0, A(0, 1)))
= B(0, A(0, 2))
= B(0, 3)
= A(3, 1)
= A(2, A(3, 0))
= A(2, A(2, 1))
...
= A(2, A(1, 3))
...
= A(2, A(0, 4))
= A(2, 5)
...
= 13
  B(3, 0)
= B(2, 1)
= B(1, B(2, 0))
...
= B(1, 13)
= A(B(1, 12), 1)
= A(A(B(1, 11), 1), 1)
...
= A(A(A(A(A(A(A(A(A(A(A(A(B(1, 1), 1), 1), 1), 1), 1), 1), 1), 1), 1), 1), 1), 1)
...
= A(A(A(A(A(A(A(A(A(A(A(A(13, 1), 1), 1), 1), 1), 1), 1), 1), 1), 1), 1), 1)
= A(A(A(A(A(A(A(A(A(A(A(A(12, A(13, 0)), 1), 1), 1), 1), 1), 1), 1), 1), 1), 1), 1)
= A(A(A(A(A(A(A(A(A(A(A(A(12, A(12, 1)), 1), 1), 1), 1), 1), 1), 1), 1), 1), 1), 1)
  B(4, 0)
= B(3, 1)
= B(2, B(3, 0))
= B(2, <too large>)
That's pretty salad, but not super salad. -- EZ132 (Talk | Contributions | Uploads | log)  —Preceding undated comment added 17:00, 18 February 2020 (UTC)
thread_title:  Ackermann B function 

message: Gabriel NivaschInverse Ackermann, "Inverse Ackermann Without Pain" gives another form of the Inverse Ackermann function. First he defines the inverse ackermann hierarchy:
\begin{alignat}{3} \alpha_1(n)&=\left \lceil \frac{n}{2} \right \rceil \\ \alpha_k(1)&=0 \\ \alpha_k(n)&=1+\alpha_k(\alpha_{k-1}(n)) \end{alignat}
Then the inverse ackermann function is defined by \alpha(n)=\min\{x:\alpha_x(n)\le3\}, the smallest integer k so that \alpha_k(n)\le3. The two-parameter version is defined by \alpha(m,n)=\min\{x:a_x(n)\le3+\frac{m}{n}\}. This definition might be easier to understand. -- EZ132 (Talk | Contributions | Uploads | log)  —Preceding undated comment added 16:59, 18 February 2020 (UTC)
thread_title:  Alternate form of inverse ackermann 

message: :"Note that not being primitive recursive does not mean that it cannot be calculated using a for loop."
This note links to an author's personal page (where he also sells Jesus books, not that there's anything wrong with that) containing code that very well may be, but isn't obviously, an Ack implementation. Just to be clear: of course you can calculate anything with for-loops if you simulate a program stack and recursion using dynamic memory. An example isn't required, and this one is not particularly illustrative because readers who aren't aware you can do this are going to have to accept that it works on faith. The bigger problem, however, is that this statement and link appears at the end of a proof that has nothing to do with a claim about for-loops. I think the claim and link should be removed from the proof section as it is unrelated. It may be worthwhile to add the link to a section discussing the for-loop thing, but only if more context is provided—but I am not convinced this is a good idea either because the example is not very illuminating. TricksterWolf (talk) 21:58, 22 June 2021 (UTC)
replies: text: I concur, when people describe the primitive recursive functions in terms of “bounded for loops” they mean a for loop where the number of iterations is calculated in advance and the count of the iteration cannot be manipulated inside the loop. The linked program is “bounded” by the length of an array that has its length modified by the execution of the looped block. A C-style for loop f(i=0,i<expression,i++) isn’t that kind of for loop if you can modify i or reevaluate “expression” based on variables that may have been changed m. I’m going to go ahead and remove it since I think it is phrased imprecisely and could lead to confusion unless clarification is added about what kinds of for loops are usually meant by “bounded for loop”. 136.25.104.172 (talk) 21:24, 8 October 2021 (UTC)
thread_title:  Non-sequitur claim should be removed.