Você pode apontar como criar a função Ackerman (na verdade, estou interessado em uma versão proposta por Rózsa Péter e Raphael Robinson) por meio de operadores mu-recursivos padrão? Tentei artigos originais de Péter e Robinson, mas o artigo de Péter usa um idioma diferente dos artigos de inglês e Robinson: "Recursão e dupla recursão" e "Funções primitivas recursivas" também não ajudam: o primeiro deles parece mais relevante, mas é tão útil. chamado operador de recursão dupla para definir a função Ackerman; portanto, neste caso, é buscada uma definição explícita do operador em termos mu-recursivos.
Mais próximo da resposta está P. Smith em “Uma introdução aos teoremas de Godel” (CUP, 2007) (29.4 A função Ackermann-Peter é μ-recursiva), mas ele apresenta o seguinte: “tornar o argumento à prova d'água é bastante tedioso, embora não seja difícil. Não há nada a ser aprendido explicando os detalhes aqui: então não vamos. ”
Também experimentei o livro de Rózsa Péter, “Funções recursivas” (1967, Academic press). Existem muitas variantes para operadores de recursão fornecidas lá. Normalmente, um reduz a outro. Acredito que exista um tipo de operador de recursão que se ajuste à definição da função Ackerman e sequência de etapas que a reduza a operadores de redursão e minimização primitivos, mas não consegui investigar o caminho todo.
fonte
Respostas:
Quebrar a função Ackermann até os operadores elementares seria realmente muito demorado, mas aqui está um esboço:
Observe que ao calcular recursivamente, em qualquer ponto do cálculo, você está lidando com uma expressão da forma A ( m 1 , A ( m 2 , … , A ( m k , z ) … ) . uma função de emparelhamento bijetivo p com inverso ( π 1 , π 2 ) , podemos codificar esse estado como p ( z , p ( kA(m,x) A(m1,A(m2,…,A(mk,z)…) p (π1,π2) (apenas p ( z , 0 ) no caso k = 0 ). Em seguida, podemos definir a função de avaliação em uma etapa, considerando um estado:p(z,p(k,p(mk,…,p(m2,m1)…) p(z,0) k=0
;e(p(z,0))=p(z,0)
;e(p(z,p(k,p(0,c))))=p(z+1,p(k−1,c))
;e(p(0,p(k,p(m+1,c))))=p(1,p(k,p(m,c)))
.e(p(z+1,p(k,p(m+1,c))))=p(z,p(k+1,p(m+1,p(m,c))))
Você obtém a função de avaliação n-step usando recursão primitiva:
e E ( n + 1 , m , x ) = e ( E ( n , m , x ) ) .E(0,m,x)=p(x,p(1,m)) E(n+1,m,x)=e(E(n,m,x))
Finalmente, envolva a recursão em torno de E para encontrar o ponto em que chegamos ao estado da forma p ( z , 0 ) - z será A ( m , x ) .μ E p(z,0) z A(m,x)
fonte
This is a variant of the idea posted by Kaveh, but I am posting anyway since it allows you to sweep many nasty details under the rug without actually doing any handwaving.
The key fact is that the graph of the Ackermann function is primitive recursive. It's not that hard to find a very crude primitive recursive boundB(m,n,w) on the code for the table of Ackermann values needed to verify that A(m,n)=w . Don't try to get sharp bounds — the cruder the easier! Something like B(m,n,w)=2mww should be good enough, but that depends on your choice of coding scheme. Since the verification of the table values can be described by a bounded formula, it is primitive recursive.
Once you have a primitive recursive definition for the graphG(m,n,w) of the Ackermann function, simply define A(m,n)=μwG(m,n,w) .
Sadly, this strategy doesn't work for all functions defined by double (or multiple) recursion. The reason it works for the Ackermann function — as you will see when trying to figure out a goodB(m,n,w) — is that it grows very monotonically. For the general case, you must use Kaveh's idea and have μ look for the appropriate table of values. This is basically the same reason why the Kleene's Normal Form Theorem needs to do a projection after applying the μ operator.
fonte