Recursão do curso de valores - Course-of-values recursion

Na teoria da computabilidade , a recursão do curso de valores é uma técnica para definir funções teóricas dos números por recursão . Em uma definição de uma função f por recursão de curso de valores, o valor de f ( n ) é calculado a partir da sequência .

O fato de que tais definições podem ser convertidas em definições usando uma forma mais simples de recursão é freqüentemente usado para provar que funções definidas por recursão de curso de valores são recursivas primitivas . Ao contrário da recursão de curso de valores, na recursão primitiva o cálculo de um valor de uma função requer apenas o valor anterior; por exemplo, para uma função recursiva primitiva 1-ária g, o valor de g ( n +1) é calculado apenas a partir de g ( n ) e n .

Definição e exemplos

A função fatorial n ! é recursivamente definido pelas regras

Esta recursão é uma recursão primitiva porque calcula o próximo valor ( n +1)! da função com base no valor de n e no valor anterior n ! da função. Por outro lado, a função de Fib ( n ), que retorna a n th número de Fibonacci , está definido com as equações recursivas

Para calcular Fib ( n +2), os dois últimos valores da função Fib são necessários. Finalmente, considere a função g definida com as equações de recursão

Para calcular g ( n +1) usando essas equações, todos os valores anteriores de g devem ser calculados; nenhum número finito fixo de valores anteriores é suficiente em geral para o cálculo de g . As funções Fib eg são exemplos de funções definidas por recursão de curso de valores.

Em geral, uma função f é definida por recursão de curso de valores se houver uma função recursiva primitiva fixa h tal que para todo n ,

onde é um número de Gödel que codifica a sequência indicada. Em particular

fornece o valor inicial da recursão. A função h pode testar seu primeiro argumento para fornecer valores iniciais explícitos, por exemplo, para Fib, pode-se usar a função definida por

onde s [ i ] denota extração do elemento i de uma sequência codificada s ; isso é facilmente visto como uma função recursiva primitiva (assumindo que uma numeração de Gödel apropriada seja usada).

Equivalência para recursão primitiva

Para converter uma definição por recursão de curso de valores em uma recursão primitiva, uma função auxiliar (auxiliar) é usada. Suponha que alguém queira ter

.

Para definir f usando recursão primitiva, primeiro defina a função de curso de valores auxiliar que deve satisfazer

onde o lado direito é considerado uma numeração de Gödel para sequências .

Assim, codifica os primeiros n valores de f . A função pode ser definida por recursão primitiva porque é obtida anexando ao novo elemento :

,

onde append ( n , s , x ) calcula, sempre que s codifica uma sequência de comprimento n , uma nova sequência t de comprimento n + 1 tal que t [ n ] = x e t [ i ] = s [ i ] para todos os i < n . Esta é uma função recursiva primitiva, sob a suposição de uma numeração de Gödel apropriada; h é considerado primitivo recursivo para começar. Assim, a relação de recursão pode ser escrita como recursão primitiva:

onde g é ele próprio recursivo primitivo, sendo a composição de duas dessas funções:

Dada , a função original f pode ser definida por , o que mostra que também é uma função recursiva primitiva.

Aplicação a funções recursivas primitivas

No contexto de funções recursivas primitivas , é conveniente ter um meio de representar sequências finitas de números naturais como números naturais únicos. Um desses métodos, a codificação de Gödel , representa uma sequência de inteiros positivos como

,

onde p i representa o i ésimo. Pode-se mostrar que, com esta representação, as operações ordinárias em sequências são todas recursivas primitivas. Essas operações incluem

  • Determinando o comprimento de uma sequência,
  • Extrair um elemento de uma sequência dado seu índice,
  • Concatenando duas sequências.

Usando esta representação de sequências, pode-se ver que se h ( m ) é recursiva primitiva, então a função

.

também é recursivo primitivo.

Quando a sequência pode incluir zeros, ela é representada como

,

o que permite distinguir os códigos das sequências e .

Limitações

Nem toda definição recursiva pode ser transformada em uma definição recursiva primitiva. Um exemplo conhecido é a função de Ackermann , que tem a forma A ( m , n ) e provavelmente não é recursiva primitiva.

Na verdade, cada novo valor A ( m +1, n ) depende da sequência de valores previamente definidos A ( i , j ), mas os i -s e j -s para os quais os valores devem ser incluídos nesta sequência dependem deles mesmos anteriormente valores calculados da função; a saber ( i , j ) = ( m , A ( m +1, n )). Assim, não se pode codificar a sequência de valores computada anteriormente de uma maneira recursiva primitiva da maneira sugerida acima (ou de nenhuma maneira, visto que essa função não é recursiva primitiva).

Referências

  • Hinman, PG, 2006, Fundamentals of Mathematical Logic , AK Peters.
  • Odifreddi, PG, 1989, Teoria da Recursão Clássica , Holanda do Norte; segunda edição, 1999.