[Search for users] [Overall Top Noters] [List of all Conferences] [Download this site]

Conference rusure::math

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

2082.0. "Ackermann Function" by RUSURE::EDP (Always mount a scratch monkey.) Thu May 15 1997 10:34

    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.RTitleUserPersonal
Name
DateLines
2082.1BEGIN::YODERIt's 999,943 to 1 but it just might workThu May 15 1997 10:3514
    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.2Correct, but try Altavista for AckermannHERON::BLOMBERGTrapped inside the universeThu May 15 1997 10:438
    
    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.3SPECXN::DERAMODan D'EramoThu May 15 1997 12:087
        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.4AMCFAC::RABAHYdtn 471-5160, outside 1-810-347-5160Fri May 16 1997 10:198
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.5as much of the table as I can handleAMCFAC::RABAHYdtn 471-5160, outside 1-810-347-5160Fri May 16 1997 10:3831
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.6JAMIN::OSMANEric Osman, dtn 226-7122Thu May 22 1997 14:396
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.7SPECXN::DERAMODan D&#039;EramoThu May 22 1997 17:5627
        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