| 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
 | |||||