Uma Introdução a Cálculo Lambda
Este artigo serve como uma uma introdução simples de cálculo lambda.
Definição
Cálculo lambda ou Cálculo λ pode ser chamado a linguagem de programação universal mais pequena do mundo. Foi originalmente desenvolvido pelo Alonzo Church provavelmente entre 1930 e 1940 para uso no estudo de propriedades de funções efectivamente computáveis. Também é uma área de estudo da teoria da computação que faz parte da ciência da computação. Foi introduzido como mecanismo para formalizar o conceito de computação efetiva.
O que é uma função efetivamente computável?
De acordo com a tese de Church-Turing, funções computáveis são exatamente as funções que podem ser calculadas usando um dispositivo mecânico de cálculo dado uma quantidade ilimitada de espaço de armazenamento e de tempo de execução. De maneira equivalente, a mesma tese define que qualquer função que possui um algoritmo é computável. Observe que um algoritmo, neste sentido, é interpretado como sendo uma sequência de passos que uma pessoa, com tempo ilimitado e caneta e papéis infinitos, pode seguir.
Como pode ser definida como linguagem de programação universal?
Cálculo λ é universal no sentido de que qualquer função computável pode ser expressado e avaliado com seu formalismo e é o equivalente da máquina do Turning. Contudo cálculo λ enfatiza o uso de regras de transformações e não se importa com a máquina que implementa as suas funções.
Conceito central de λ Cálculo
O conceito central em cálculo λ é a expressão ou termo lambda. Um “nome” também chamado “variável” é um identificador e, neste caso, pode ser qualquer um das letras a,b,c… Um termo lambda ou expresssão lambda pode ser definida recursivamente das seguintes maneiras:
<expressão> := <nome> | <função> | <aplicação>
<função> := λ<nome>.<expressão>
<aplicação> := <expressão><expressão>
Uma expressão lambda pode estar envolto de parênteses para dar mais clareza. Por exemplo T é um termo lambda, (T) é equivalente á T. As únicas palavras chaves usadas na linguagem são λ e o ponto final (.).
Para evitar desordem com parênteses, adotamos a
A convenção que a aplicação é associada a partir da esquerda, isso é, o termo lambda:
é expressado da seguinte maneira:
Com essa definição um único identificador é um termo λ. Um exemplo simples de uma função:
Esta expressão identifica a função identidade. O nome após o λ é o identificador do argumento da função. A expressão após o ponto é (Neste caso o x) é chamado o corpo da definição da função.
Podemos aplicar uma função a um termo lambda. Um exemplo de aplicação:
Este é a função identidade aplicado ao y. Parênteses são usadas para evitar ambiguidade. Aplicações são avaliadas por substituir o argumento x (neste caso o y) no corpo da definição da função:
Nesta transformação a notação:
é usado para indicar que todas ocorrências de x serão substituidas com y no lado direto. Os nomes das funções não carregam nenhum significado. São apenas “place holders”, isso é eles identificam como organizar uma função quando é avaliada. Portanto,
e consequentemente. Usamos:
para indicar que quando A é equivalente a B, A é o um sinonimo de B.
No próximo artigo irei abordar sobre variáveis livres e atadas e outros assuntos relacionados com a teoria da computação.
Muito obrigado por ter lido este artigo. Não esqueça de partilhar este artigo com teus amigos no mundo da computação! 😄