Combinadores para as funções recursivas primitivas


Respostas:


17

Sim, mas você deve considerar os combinadores digitados. Ou seja, você precisa fornecer a e K os seguintes esquemas de tipo: K : A → B → A S : ( A → B → C ) → ( A → B ) → ( A → C ) em que A , B e C são meta-variáveis ​​que podem ser instanciadas em qualquer tipo concreto a cada uso.SK

K:A→B→AS:(A→B→C)→(A→B)→(A→C)
A,BC

Então, você quer adicionar o tipo de números naturais para a linguagem de tipos, e adicione as seguintes combinadores: z : N s u c c : N → N i t e r : N → ( N → N ) → N → NN

z:Nsucc:N→Niter:N→(N→N)→N→N

As regras de igualdade para as adições são:

iterifz=iiterif(succe)=f(iterife)

iter:A→(A→A)→N→A
iter

iter

pred′=λk.iter(z,z)(λ(n,n′).(succn,n))kpred=λk.snd(pred′k)

N≃N×N


Portanto, isso é menor que Turing-completo em virtude da restrição aos combinadores digitados? As variáveis ​​de tipo (recursivamente) podem denotar funções sobre variáveis ​​de tipo (por exemplo, A = D -> E para alguns tipos D e E)?
— NietzscheanAI

2
SK

Neel, obrigado. Eu estaria certo ao pensar que é possível representar z, succ e iter em termos de S e K através da codificação numérica da Igreja?
— NietzscheanAI

0↦0(succx)↦x

@ Xoff: a função predecessora possui uma definição de tempo linear bem conhecida em termos de iter. Este poderia ser o objeto de uma pergunta sobre cs.stackexchange.com ...
— Cody
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.