Eu tenho o que chamaria de uma pergunta filosófica sobre o cálculo-λ.
Ao explorar o cálculo λ, você ficará surpreso ao ver todas as coisas que você pode fazer lá. Você pode definir números inteiros, operações aritméticas, booleanos, instruções if-then-else, loops, funções recursivas, etc. Eu acredito que isso foi provado computacionalmente completo.
Mas, por outro lado, se você considerar o que pode fazer com as funções no cálculo λ, percebe que a única coisa que pode fazer é alimentar uma função e ela retorna outra função. E esse processo nunca termina.
Então, como você pode extrair um resultado de uma computação?
Suponha que o resultado de uma expressão seja função f
. Você deseja verificar se f
é o que você esperava. Você pode testá-lo, executar uma função que você conhece, aplicar f
a ela e receber g
. Mas para verificar g
está correto, agora você precisa verificar o que g
faz. E você começa tudo de novo. Então, como você pode contar alguma coisa f
?
Parece-me que você pode substituir todas as funções no cálculo λ por uma única função, a função identidade I = λx.x
e tudo ainda funciona como descrito no cálculo λ. O numeral da Igreja 3
quando dado f
e x
retorna f(f(f(x)))
. Mas desde f
e x
só pode ser I
, ele retorna I
. I
aplicado I
e I
também retorna I
. Então, I
satisfaz a definição de 3
. Os "booleanos" (λxy.x)
e (λxy.y)
precisam de 2 argumentos, que serão I
e, I
portanto, os dois booleanos retornarão I
. Cada um é equivalente à identidade, mesmo que eles se comportem exatamente de acordo com suas definições.
Então, como você faz a diferença? Como você mostra que o cálculo λ lida com mais do que apenas uma única função?
Existe um conceito de identidade? Você pode identificar uma função imediatamente sem avaliá-la? Eu acredito que foi provado que não há como testar duas funções para igualdade.
Ou o λ-cálculo não é sobre funções, mas sobre a descrição formal do que elas fazem? Isso significaria que as expressões λ não apenas definem o que as funções fazem, mas também são os dados que as funções manipulam. Então, quando você escreve A B
, você não se aplicam A
a B
, mas você aplica a função descrita pela cadeia A
de definição formal de uma função contida em B
retornar outra definição formal.
O que realmente está acontecendo no cálculo λ? Quais são os objetos matemáticos com os quais lida?
Acompanhamento:
OK, a partir da resposta abaixo, parece que o cálculo λ não é tanto sobre funções no sentido matemático, mas sobre o subconjunto de funções que pode ser expresso como expressões λ. Ou ainda mais sobre a manipulação de expressões λ.