Defina algumas funções básicas:
pni:Nn→N:(x1,x2,…,xn)↦xi
A partir de agora vou usar para denotar ( x 1 , x 2 , … , x n )xn¯(x1,x2,…,xn)
Defina uma composição:
Funções dadas
- cada um com a assinatura N k → Ng1,g2,…,gmNk→N
- f:Nm→N
Construa a seguinte função:
h:Nk→N:xk¯↦h(xk¯)=f(g1(xk¯),g2(xk¯),…,gm(xk¯))
Defina recursão primitiva:
Funções dadas
- f:Nk→N
- g:Nk+2→N
Construa a seguinte função (por partes):
h:Nk+1→N:(xk¯,y+1)↦{f(xk¯),g(xk¯,y,h(xk¯,y)),y+1=0y+1>0
Todas as funções que podem ser feitas usando composições e recursão primitiva em funções básicas são chamadas recursivas primitivas . É assim chamado por definição. Embora exista um link com funções que se autodenominam, não é necessário tentar vinculá-las. Você pode considerar a recursão um homônimo.
Essa definição e construção acima foram construídas por Gödel (algumas outras pessoas também estavam envolvidas) na tentativa de capturar todas as funções computáveis, ou seja, existe uma Máquina de Turing para essa função. Observe que o conceito de uma máquina de Turing ainda não foi descrito, ou era pelo menos muito vago.
Felizmente, alguém chamado Ackermann apareceu e definiu a seguinte função:
- Ack:N2→N
- Ack(0,y)=y+1
- Ack(x+1,0)=Ack(x,1)
- Ack(x+1,y+1)=Ack(x,Ack(x+1,y))
Esta função é computável, mas não há como construí-la usando apenas as construções acima! (ie não é recursivo primitivo) Isso significa que Gödel e seu grupo falharam em capturar todas as funções computáveis em sua construção!Ack
Gödel teve que expandir sua classe de funções de modo poderia ser construído. Ele fez isso definindo o seguinte:Ack
Minimização ilimitada
- g:Nk→N
- SE
ENTÃO g ( ¯ x k ) = y
ELSE g ( ¯ x k ) não está definido.[f(xk¯,y)=0 AND f(xk¯,z) is defined ∀z<y AND f(xk¯,z)≠0]
g(xk¯)=y
g(xk¯)
Este último pode ser difícil de entender, mas basicamente significa que é a menor raiz de f (se existir uma raiz).g((x1,x2,…,xk))f
Todas as funções que podem ser construídas com todas as construções definidas acima são chamadas recursivas . Novamente, o nome recursivo é apenas por definição e não necessariamente tem correlação com funções que se chamam. Na verdade, considere isso um homônimo.
Funções recursivas podem ser funções recursivas parciais ou funções recursivas totais . Todas as funções recursivas parciais são funções recursivas totais. Todas as funções recursivas primitivas são totais. Como exemplo de uma função recursiva parcial que não é total, considere a minimização da função sucessora. A função sucessora não tem raízes, portanto sua minimização não está definida. Um exemplo de uma função recursiva total (que usa minimização) é .Ack
Agora Gödel foi capaz de construir o função, bem com a sua classe alargada de funções. De fato, toda função que pode ser computada por uma máquina de Turing pode ser representada usando as construções acima e vice-versa, toda construção pode ser representada por uma máquina de Turing.Ack
Se você estiver intrigado, tente aumentar a classe de Gödel. Você pode tentar definir o 'oposto' da minimização ilimitada. Ou seja, maximização ilimitada , ou seja, a função que encontra a maior raiz. No entanto, você pode achar que calcular essa função é difícil (impossível). Você pode ler o problema Busy Beaver , que tenta aplicar a maximização ilimitada.