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
KS::A → B → A( 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
zsucciter:::NN→NN→(N→N)→N→N
As regras de igualdade para as adições são:
iterifziterif(succe)==if(iterife)
iter:A→(A→A)→N→A
iter
iter
pred′pred==λk.iter(z,z)(λ(n,n′).(succn,n))kλk.snd(pred′k)
N≃N×N