Existe um cálculo lambda digitado completo de Turing?


Respostas:


37

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 ).

ΓM:

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))

Γf:TTΓYf:TΓf:TTΓ(λx.f(xx))(λx.f(xx)):T
Yf bem digitado, mesmo que seus constituintes não sejam bem digitados - eles não são totalmente composicionais. Uma correção simples é adicionar um combinador de ponto de correção como uma constante de idioma e fornecer uma regra delta para ele; então, é simples ter um sistema de tipos e semântica de redução com preservação de tipos . Você se afasta do cálculo lambda puro para o domínio do cálculo lambda com constantes.
Γfix:(TT)Tfixff(fixf)

Seguindo o cálculo lambda puro, um sistema de tipos interessante é o cálculo lambda com tipos de interseção.

ΓM:T1ΓM:T2ΓM:T1T2(I)ΓM:(I)

Os tipos de interseção têm propriedades interessantes com relação à normalização:

  • Um termo lambda pode ser digitado sem usar a regra , se estiver fortemente normalizando.I
  • Um termo lambda admite um tipo que não contém se tiver uma forma normal.

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

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.