O que é o λ-calculus essencialmente?


11

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 fa ela e receber g. Mas para verificar gestá correto, agora você precisa verificar o que gfaz. 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.xe tudo ainda funciona como descrito no cálculo λ. O numeral da Igreja 3quando dado fe xretorna f(f(f(x))). Mas desde fe xsó pode ser I, ele retorna I. Iaplicado Ie Itambém retorna I. Então, Isatisfaz a definição de 3. Os "booleanos" (λxy.x)e (λxy.y)precisam de 2 argumentos, que serão Ie, Iportanto, 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 Aa B, mas você aplica a função descrita pela cadeia Ade definição formal de uma função contida em Bretornar 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 λ.


2
Você poderia reformular a pergunta final para algo um pouco menos orientado para a opinião? Deve haver uma resposta sólida e não opinativa para isso.
Telastyn 19/09/14

Da minha educação, o cálculo λ existe apenas para fazer meu cérebro doer. Ainda não tenho certeza de como passei intacta nessa aula.

Respostas:


9

É realmente impossível determinar a equivalência semântica dos termos do cálculo lambda. Esta é uma aplicação do teorema de Rice. No entanto, é fácil comparar termos sintaticamente , ou seja, testar se eles têm exatamente a mesma estrutura (equivalentemente, se a "representação de string" for a mesma). Isso é realmente tudo o que você precisa para obter resultados.

Por exemplo, para calcular funções n = f(i)dos naturais para os naturais, você fornece a codificação da igreja icomo parâmetro para sua função de cálculo lambda, aplica regras de redução até parar e inspeciona o termo resultante. Se corresponder à estrutura dos números da igreja, extraia o número nque codifica. Esse é o seu resultado. Se o termo resultante não se parecer com um numeral de igreja ou a redução não parar, a função será indefinida em i.

Os termos efetivamente exercem dupla função como "código" e "dados". Isso não é nada de especial: a fita de uma máquina de Turing (uma corda sobre algum alfabeto) pode ser --- e freqüentemente é --- interpretada como uma codificação de uma máquina de Turing ou de algum aspecto dela. Da mesma forma, os bits na memória principal de uma máquina von Neumann podem ser uma codificação de um programa ou uma codificação de outra coisa. Ou até os dois ao mesmo tempo. É apenas a "perspectiva padrão" que difere.


A expressão do resultado de um cálculo envolvendo números da Igreja sempre será resolvida para a forma canônica como (λfx.f (f (fx)))? Ou você pode obter expressões equivalentes diferentes do mesmo numeral?
Florian F

@FlorianF Estou quase certo de que existem termos não canônicos (até a equivalência alfa), mas, se houver, eles podem ser evitados com a construção cuidadosa do programa.
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.