Na página da Wikipedia para Combinadores de ponto fixo, está escrito o texto bastante misterioso
O combinador Y é um exemplo do que torna o cálculo Lambda inconsistente. Portanto, deve ser encarado com desconfiança. No entanto, é seguro considerar o combinador Y quando definido apenas na lógica matemática.
Eu entrei em algum tipo de romance de espionagem? O que no mundo significa as afirmações de que -calculus é "inconsistente" e que deve ser "considerado com suspeita" ?
Respostas:
É inspirado em eventos reais, mas a maneira como é declarada é quase irreconhecível e "deve ser encarada com desconfiança" não faz sentido.
A consistência tem um significado preciso na lógica: uma teoria consistente é aquela em que nem todas as afirmações podem ser provadas. Na lógica clássica, isto é equivalente à ausência de uma contradição, teoria ou seja, um é inconsistente se e somente se há uma declaraçãotal que a teoria prova ambose sua negação.A ¬ AA A ¬A
Então, o que isso significa em relação ao cálculo lambda? Nada. O cálculo lambda é um sistema de reescrita, não uma teoria lógica.
É possível visualizar o cálculo lambda em relação à lógica. Considere as variáveis como representando uma hipótese em uma prova, as abstrações lambda como provas sob uma determinada hipótese (representada pela variável) e a aplicação como reunindo uma prova condicional e uma prova da hipótese. Então a regra beta corresponde à simplificação de uma prova aplicando o modus ponens , um princípio fundamental da lógica.
Isso, no entanto, só funciona se a prova condicional for combinada com uma prova da hipótese correta. Se você tem uma prova condicional que assume e também tem uma prova de , não pode combiná-las. Se você deseja que essa interpretação do cálculo lambda funcione, é necessário adicionar uma restrição para que apenas as provas da hipótese adequada sejam aplicadas a provas condicionais. Isso é chamado de sistema de tipos e a restrição é a regra de digitação que diz que, quando você passa um argumento para uma função, o tipo do argumento deve corresponder ao tipo de parâmetro da função.n=3 n=2
A correspondência de Curry-Howard é um paralelo entre cálculos digitados e sistemas de prova.
Um cálculo digitado que possui um combinador de pontos fixos como permite construir um termo de qualquer tipo (tente avaliar ); portanto, se você interpretar a lógica através da correspondência de Curry-Howard, obterá uma teoria inconsistente. Consulte O combinador Y contradiz a correspondência de Curry-Howard? para mais detalhes.Y Y(λx.x)
Isso não é significativo para o cálculo lambda puro, ou seja, para o cálculo lambda sem tipos.
Em muitos cálculos digitados, é impossível definir um combinador de ponto fixo. Esses cálculos digitados são úteis em relação à sua interpretação lógica, mas não como base para uma linguagem de programação completa de Turing. Em alguns cálculos digitados, é possível definir um combinador de ponto fixo. Esses cálculos digitados são úteis como base para uma linguagem de programação completa de Turing, mas não com relação à sua interpretação lógica.
Em conclusão:
fonte
true
efalse
, e proposições eram coisas que tinham saída com valor booleano. (e só foram consideradas proposições sobre o domínio das coisas onde ele faz a saída de um valor booleano).Eu gostaria de adicionar um ao que o @Giles disse.
A correspondência de Curry-Howard faz um paralelo entre os termos (mais especificamente, os tipos de termos ) e os sistemas de prova.λ λ
Por exemplo, tem o tipo (onde significa "função de para "), que corresponde à instrução lógica . A função possui o tipo , correspondente a . Podemos converter qualquer tipo de cálculo lambda em uma tautologia lógica, de certa forma, "correspondência de padrões" em funções.λx.λy.x a→(b→a) a→b a b a⟹(b⟹a) λx.λy.xy (a→b)→(a→b) (a⟹b)⟹(a⟹b)
O problema surge quando consideramos o combinador Y, definido como . O problema surge porque esperamos que o combinador Y, como um combinador de "ponto de correção", tenha o tipo (porque leva uma função de um tipo para o mesmo tipo e encontra um ponto para essa função, que possui esse tipo). Converter isso em uma instrução lógica gera . Isso é uma contradição:( a → a ) → a ( aλf.(λx.f(xx))(λx.f(xx)) (a→a)→a (a⟹a)⟹a
Aceitar em um sistema de tipos leva ao sistema de tipos que é inconsistente. Isso significa que podemos(a→a)→a
fonte
fix
. Você pode apenas afirmar que não é uma constante para cada tipo . Isso já lhe dará um sistema inconsistente no que diz respeito ao CH, pois implicaria que todo tipo é habitado por . Além disso, você pode adicionar -rules para fazer calcular, e isso transformaria, digamos, o STLC com naturais em um sistema completo de Turing, mas você não precisa adicionar essas regras computacionais e o sistema ainda seria inconsistente. A f i x (λx.x)δ f i x