Existe algum cálculo lambda digitado completo de Turing? Se sim, quais são alguns exemplos?
computability
lambda-calculus
type-theory
Bola de neve
fonte
fonte
Respostas:
Sim claro. Muitos cálculos lambda digitados aceitam apenas termos fortemente normalizadores , por design, portanto não podem expressar cálculos arbitrários. Mas um sistema de tipos pode ser o que você quiser; torná-lo amplo o suficiente e você pode expressar todos os cálculos determinísticos.
Um sistema de tipo trivial que engloba um fragmento completo de Turing do cálculo lambda é aquele que aceita todos os termos como bem digitados (com um tipo superior ).
Mais praticamente, as linguagens de programação funcional tipicamente estaticamente possuem em seu núcleo um cálculo lambda tipificado, que permite que um combinador de ponto fixo também seja tipificado. Por exemplo, comece com o cálculo lambda de digitação simples (ou o sistema de tipo ML ou sistema F ou qualquer outro sistema de tipo de sua escolha) e adicione uma regra que faça algum combinador de ponto de fixação como bem digitado. As regras conforme apresentadas acima são bastante desajeitadas, pois criam termos comoY=λf.(λx.f(xx))(λx.f(xx))
Seguindo o cálculo lambda puro, um sistema de tipos interessante é o cálculo lambda com tipos de interseção.
Os tipos de interseção têm propriedades interessantes com relação à normalização:
Consulte Caracterização de termos lambda que possuem tipos de união para obter uma idéia de por que os tipos de interseção têm um escopo tão notável.
Portanto, você tem um sistema de tipos que define uma linguagem completa de Turing (já que todos os termos são bem digitados) e uma caracterização simples de cálculos finais. Obviamente, como esse sistema de tipos caracteriza a normalização, não é decidível.
Uma observação sobre os nomes das regras e : eles não têm significado formal, mas são escolhidos deliberadamente. o significa "introdução", porque estas são regras de introdução - elas introduzem o símbolo ( ou ) no tipo abaixo da linha. Dualmente, você encontrará regras de eliminação, quando um símbolo aparecer acima da linha, mas não abaixo. Por exemplo, a regra para verificar tipicamente uma expressão lambda no cálculo lambda de tipo simples é a regra de introdução para , e a regra para verificar tipicamente um aplicativo é a regra de eliminação para . ( ∧ I ) I ∧ ⊤ → →(⊤I) (∧I) I ∧ ⊤ → →
fonte