Eu tenho três subquestões relacionadas, destacadas pelos pontos abaixo (não, eles não podem ser divididos, se você estiver se perguntando). Andrej Bauer escreveu, aqui , que algumas funções são realizáveis através de uma máquina de Turing, mas não através do cálculo lambda. Um passo fundamental de seu raciocínio é:
Entretanto, se usarmos o cálculo lambda, então [o programa] c deve calcular um numeral representando uma máquina de Turing a partir de um termo lambda representando uma função f. Isso não pode ser feito (posso explicar por que, se você fizer isso como uma pergunta separada).
- Eu gostaria de ver uma explicação / prova informal.
Não vejo como aplicar o teorema de Rice aqui; isso se aplicaria ao problema "essa máquina de turing T e esse termo lambda em L equivalente?", porque a aplicação desse predicado em termos equivalentes gera o mesmo resultado. No entanto, a função necessária pode calcular TMs diferentes, mas equivalentes, para termos lambda diferentes, mas equivalentes.
- Além disso, se o problema é com a introspecção de um termo lambda, acho que passar uma codificação de Gödel de um termo lambda também seria aceitável, não seria?
Por um lado, dado que seu exemplo envolve calcular, no cálculo lambda, o número de etapas necessárias para uma máquina de Turing para concluir uma determinada tarefa, não estou muito surpreso.
- Mas como aqui o cálculo lambda não pode resolver um problema relacionado à máquina de Turing, pergunto-me se é possível definir um problema semelhante para o cálculo lambda e provar que ele é insolúvel em máquinas de Turing, ou se há realmente uma diferença de poder em favor de Máquinas de Turing (o que me surpreenderia).
fonte
O que Neel disse, e também o seguinte.
Eu gostaria de enfatizar ( de novo , de novo e de novo ) que a representação de assuntos de entrada e saída. Se for permitido alterar representações, podemos obter praticamente qualquer coisa (por exemplo, tornar qualquer função computável). Portanto, passar de uma representação das funções por -terms para uma representação pelos números de Gödel não é aceitável se nosso modelo de computação for -calculus (porque, então, a operação de currying torna-se incontestável por -calculus).N→N λ λ λ
Uma declaração que é realizável no modelo -term, mas não no modelo da máquina de Turing é "nem todas as funções têm um código Gödel", o que é meio bobo. Vou tentar encontrar uma melhor e editar esta resposta.λ N→N
Editar em 07-10-2013: Aqui está o que eu quis dizer com "currying torna-se incontestável". Suponha que usemos o -calculus sem tipo como nosso modelo computacional, mas depois decidimos que devemos representar os mapas com códigos Gödel (de máquinas de Turing, codificadas como números de Igreja). Parece inofensivo, certo? Afinal, acreditamos no mantra "Máquinas de Turing e cálculo são equivalentes".λ N→N λ
Bem, para que essa nova representação seja realmente uma representação válida de , precisamos também realizar aplicação e currying (porque "representar funções" significa a mesma coisa que "representar um objeto exponencial "). Especificamente, é necessário um -termo de tal modo que, sempre que o numeral Church representa , em seguida, é representado por . (Aqui escrevo para o número da Igreja que representa o número .) TalN→N λ app n¯¯¯ f:N→N f(k) appn¯¯¯k¯¯¯ n¯¯¯ n app está prontamente disponível porque equivale a um intérprete para máquinas de Turing, implementado no -calculus.λ
Mas e o curry? Para isso, precisamos do seguinte. Suponha que é um conjunto representado. Dado qualquer mapa calculado por um -term , precisamos mostrar que a transposição também é calculado por alguns -term . Mas considere o exemplo em que é o conjunto de fmaps representado por -terms é a aplicação. Então seria um mapa que atua como identidade emf : X × N → N λ t ˜ f : X → ( N → N ) λ s X N → N λ f ˜ f N → N λ λ N → N λX f:X×N→N λ t f~:X→(N→N) λ s X N→N λ f f~ N→N , mas seu realizador é um -term que converte -terms representando maps nos códigos Gödel correspondentes. Esse termo não existe (por exemplo, porque seria descontínuo em um modelo semântico topológico).λ λ N→N λ
Você pode tentar objetar que eu não deveria ter usado o conjunto representado específico dos mapas representado por -terms, porque "concordamos" que esses sejam representados pelos códigos de Gödel . Mas você estaria errado. Antes de tudo, eu poderia ter usado um diferente com uma prova mais complicada que escaparia de você, mas continuaria obtendo o mesmo resultado. Segundo, está lá na categoria e a definição de exponencial exige que o curry trabalhe com relação a todos os objetos. Você tem que respeitar a categoria. Você não pode simplesmente matá-lo aleatoriamente e tirar alguns objetos (bem, você pode, mas depois é um açougueiro).N → N X X XX N→N λ X X
fonte