Como existe um cálculo lambda sem tipo e um cálculo lambda com tipo simples (como descrito, por exemplo, no livro Tipos e linguagens de programação de Benjamin Pierce), existe uma lógica combinatória de tipo simples?
Por exemplo, parece que os tipos naturais para os combinadores S, K e eu seriam
S : (a -> b -> c) -> (a -> b) -> a -> c
K : a -> b -> a
I : a -> a
onde a, bec são variáveis de tipo que variam sobre um conjunto de tipos T. Agora, talvez possamos começar com um único tipo base, Bool. Nosso conjunto de tipos T é então Bool, juntamente com quaisquer tipos que possam ser formados usando os três padrões
(a -> b -> c) -> (a -> b) -> a -> c
a -> b -> a
a -> a
onde a, b, c em T.
Haveria duas novas constantes no idioma.
T : Bool
F : Bool
Portanto, esse idioma consiste nos símbolos S, K, I, T e F, além de parênteses. Ele tem um tipo base Bool e os "tipos de funções" que podem ser criados a partir dos padrões combinadores S, K e I.
Este sistema pode ser feito para funcionar? Por exemplo, existe uma construção bem-digitada se-então-outro que pode ser formada apenas a partir de S, K, I, T, F?
fonte
Respostas:
Nota rápida, eu permitir que o polimorfismo paramétrico (Sistema F) neste sistema para que
S
,K
eI
pode trabalhar sobre todos os tipos.Observe que, sem a correspondência de padrões, não podemos escrever um,
if
não importa o que façamos. Não temos absolutamente nenhuma operação em booleanos. Não há nenhuma maneira de distinguirTrue
a partirFalse
. Em vez disso, tenteVamos
Bool = a -> a -> a
esclarecer.Agora é apenas uma questão de compilar algumas expressões de cálculo lambda em combinadores, o que é bastante trivial.
fonte