| Title: | Mathematics at DEC |
| Moderator: | RUSURE::EDP |
| Created: | Mon Feb 03 1986 |
| Last Modified: | Fri Jun 06 1997 |
| Last Successful Update: | Fri Jun 06 1997 |
| Number of topics: | 2083 |
| Total number of notes: | 14613 |
The Ackermann function is:
A(0,n) = n+1,
A(m+1,0) = A(m,1), and
A(m+1,n+1) = A(m,A(m+1,n)).
As I recall, the values of A(n,n) increase too quickly for any program
with only bounded loops to compute. A bounded loop is one for which
the number of iterations is calculated before the loop begins.
Is that correct? Does anybody recall the proof? And would somebody
like to recommend a textbook that includes this, along with discussion
of recursive and recursively enumerable functions? I'm looking for
something good to keep in my library, since I didn't keep my college
textbook.
-- edp
Public key fingerprint: 8e ad 63 61 ba 0c 26 86 32 0a 7d 28 db e7 6f 75
To find PGP, read note 2688.4 in Humane::IBMPC_Shareware.
| T.R | Title | User | Personal Name | Date | Lines |
|---|---|---|---|---|---|
| 2082.1 | BEGIN::YODER | It's 999,943 to 1 but it just might work | Thu May 15 1997 09:35 | 14 | |
The proof is that the Ackermann function isn't a "primitive recursive
function." My old text is Rogers, "Theory of Recursive Functions and
Effective Computability," which gives a definition of primitive
recursive functions on p.8 and then doesn't bother with them. It does
mention that a proof that the 3-argument Ackermann function isn't
primitive recursive is given in Pe'ter, Ro'sza, "Rekursive funktionen,"
Academiai Kiado, Budapest.
The proof I read when in college consisted, as I recall, of proving
that primitive recursive functions couldn't grow faster (as a function
of their arguments) faster than a certain rate which was slower than
the rate of growth of Ackermann's function.
| |||||
| 2082.2 | Correct, but try Altavista for Ackermann | HERON::BLOMBERG | Trapped inside the universe | Thu May 15 1997 09:43 | 8 |
Try Altavista. Several hits on Ackermann's function. And I think
you are correct, at Univ of Erlangen I found the statement
"Sie w�chst schneller als alle primitiv-rekursiven", growing faster
than all primitive recursive functions.
/Ake
| |||||
| 2082.3 | SPECXN::DERAMO | Dan D'Eramo | Thu May 15 1997 11:08 | 7 | |
If the function n -> f(n) is primitive recursive, then there
will be an integer k such that f(n) < A(k, n) for all but at
most finitely many n. One of my books at home outlines a
proof. There will be a relationship between k and the maximum
nesting depth of the bounded loops.
Dan
| |||||
| 2082.4 | AMCFAC::RABAHY | dtn 471-5160, outside 1-810-347-5160 | Fri May 16 1997 09:19 | 8 | |
A(0,n) = n+1 A(1,n) = n+2 A(2,n) = 2n+3 A(3,n) = A(2,A(3,n-1)) = 2*A(3,n-1)+3 = 2**(n+3)-3 A(4,n) = A(3,A(4,n-1)) = 2**(A(4,n-1)+3)-3 What's the closed form of A(4,n)? | |||||
| 2082.5 | as much of the table as I can handle | AMCFAC::RABAHY | dtn 471-5160, outside 1-810-347-5160 | Fri May 16 1997 09:38 | 31 |
A(0,n) = n+1 A(1,n) = n+2 A(2,n) = 2n+3 A(3,n) = 2**(n+3)-3 A(m+1,0) = A(m,1) A(m+1,n+1) = A(m,A(m+1,n)) A | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | ---+--------+-----------------------+-------------+-----------------+-------------+-------------+-----+------+------+ 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | ---+--------+-----------------------+-------------+-----------------+-------------+-------------+-----+------+------+ 1 | A(0,1) | A(0,A(1,0)) | A(0,A(1,1)) | A(0,A(1,2)) | A(0,A(1,3)) | A(0,A(1,4)) | | 2 | A(0,2) | A(0,3) | A(0,4) | A(0,5) | A(0,6) | | | 3 | 4 | 5 | 6 | 7 | ---+--------+-----------------------+-------------+-----------------+-------------+-------------+ 2 | A(1,1) | A(1,A(2,0)) | A(1,A(2,1)) | A(1,A(2,2)) | | 3 | A(1,3) | A(1,5) | A(1,7) | | | 5 | 7 | 9 | ---+--------+-----------------------+-------------+-----------------+-------------+-------------+-----+------+------+ 3 | A(2,1) | A(2,A(3,0)) | A(2,A(3,1)) | A(2,A(3,2)) | A(2,A(3,3)) | | | | | | 5 | A(2,5) | A(2,13) | A(2,29) | A(2,61) | A(2,124) | | | | | | 13 | 29 | 61 | 125 | 253 | 509 | 1021 | 2045 | ---+--------+-----------------------+-------------+-----------------+-------------+-------------+-----+------+------+ 4 | A(3,1) | A(3,A(4,0)) | A(3,A(4,1)) | A(3,A(4,2)) | | 13 | A(3,13) | A(3,65533) | A(3,2**65536-3) | | | 65533 | 2**65536-3 | 2**2**65536-3 | ---+--------+-----------------------+-------------+-----------------+ 5 | A(4,1) | A(4,A(5,0)) | A(4,A(5,1)) | | 65533 | A(4,65533) | | | 2**2**...**2**65536-3 | | | 65532 | ---+--------+-----------------------+ 6 | A(5,1) | ---+--------+ | |||||
| 2082.6 | JAMIN::OSMAN | Eric Osman, dtn 226-7122 | Thu May 22 1997 13:39 | 6 | |
I've often wondered, is there any rhyme or reason to Ackermann's choice of function ? It seems like an intentionally obscure definition, almost as though it were merely picked to "demonstrate" recursion. /Eric | |||||
| 2082.7 | SPECXN::DERAMO | Dan D'Eramo | Thu May 22 1997 16:56 | 27 | |
Eric, see topic 640 here for a little more background.
The variation given in .0 of Ackermann's function,
A(0,n) = n+1,
A(m+1,0) = A(m,1), and
A(m+1,n+1) = A(m,A(m+1,n))
is set up so that
A(m+1, 1) = A(m, A(m+1,0)) = A(m, A(m, 1))
A(m+1, 2) = A(m, A(m+1,1)) = A(m, A(m, A(m, 1)))
A(m+1, 3) = ... = A(m, A(m, A(m, A(m, 1))))
etc. Basically the function n -> A(m+1, n) is defined via
primitive recursion over the function n -> A(m, n). For each
fixed m the function n -> A(m, n) is primitive recursive, but
each increment to m requires one more nested loop of the
programming language in topic 640 to compute it. The overall
function m,n -> A(m,n) and the function n -> A(n,n) both fail
to be primitive recursive. [They need unbounded loops to
compute.]
In one sense it is one of the simplest ways to directly define
a computeable but not primitive recursive function.
Dan
| |||||