A essência desta resposta é que as Máquinas de Turing podem imitar qualquer coisa que possamos programar e programamos cálculos em, com e de objetos infinitos.
Esta é uma segunda resposta focada mais na pergunta específica do que no arcabouço teórico geral que justifica a resposta, e seria definitivamente necessária para responder ao título mais geral da pergunta. É totalmente compatível com minhas respostas anteriores às perguntas do OP, ambas O que exatamente é um algoritmo? e As máquinas de turing assumem algo infinito em algum momento? , respostas nas quais desenvolvi mais o contexto teórico. Isso pode ser visto como resposta a ambas as perguntas.
As máquinas de Turing têm a capacidade de lidar com o infinito , como todos os modelos computacionais completos de Turing, embora apenas com o infinito infinito. Nosso problema é que podemos observar apenas parte desse infinito, mas temos que considerar o todo, já que a parte que podemos observar é ilimitada.
O outro problema é que só podemos lidar com entidades especificadas finitamente. Na verdade, toda a estrutura da ciência, tal como a conhecemos, cai se considerarmos entidades que não são especificadas finitamente, uma vez que torna-se impossível verificar a consistência das definições, até saber quais são as definições, pois podemos acessar apenas parte delas em um tempo finito.
Possivelmente, existe outra questão fundamental que é algo semelhante ao fato de que o fechamento sob união infinita define qualquer conjunto que você deseja, a menos que você possa restringir de forma adequada o que é permitido em tal união. Mas não tenho certeza se entendi completamente esse problema.
Como eu disse, as máquinas de Turing têm a capacidade de lidar com o infinito . Estou contradizendo outras respostas bem votadas de alguns usuários de alta reputação, que devem saber o que falam sobre um tópico tão elementar.
O problema é que Turing escolheu um modelo de computação muito elementar para atingir seu objetivo teórico. Quanto mais simples, melhor. É para modelos de computação mais avançados / sofisticados praticamente o que a linguagem de máquina é para programação: algo muito obscuro onde você não pode reconhecer nenhum dos conceitos que fazem sentido na programação de alto nível. O fato é que, como a linguagem de máquina, a TM pode imitar muito mais do que pode expressar diretamente.
23rd Mas ainda assim seria implementado como um cálculo infinito que é artificialmente parado quando a resposta certa é obtida.
Na verdade, todos os usuários que afirmam que tudo é finito, mas ilimitado em uma TM, são bastante cuidadosos ao acrescentar que consideram as Máquinas de Turing em sua definição padrão . O problema é que a definição padrão é apenas um dispositivo para simplificar a teoria, mas é praticamente irrelevante ao tentar entender as estruturas computacionais.
Na verdade, a única coisa que importa em computação é que tudo deve ser especificado finitamente de uma maneira computável, não que seja finito .
Estamos assumindo que uma máquina de turing deve ser um objeto finito. Mas isso não é verdade. Você pode definir um modelo de máquina de Turing usando uma segunda fita que é somente leitura e contém uma função tabulada para todos os valores inteiros, sem nenhum limite. Isso é infinito. Mas ele não lhe fornece nenhum poder de computação extra, desde que o conteúdo dessa fita seja especificado computavelmente (a computabilidade implica que ela é especificada finitamente). A fita extra poderia muito bem ser substituída por uma máquina TM incorporada na outra e forneceria as respostas, em vez de procurá-las na fita extra. De um nível superior, a diferença não é visível.
Do ponto de vista da realização prática, poderíamos ter uma fact
máquina de calcular os fatoriais e tabulá-los na fita extra, enquanto outra TM usaria o fatorial tabulado da fita extra, apenas aguardando na primeira TM sempre que a tabulação ainda estivesse faltando entrada. Mas a segunda máquina supõe que o conteúdo da fita seja infinito. A máquina de tabulação nem precisa trabalhar o tempo todo, mas deve retomar a computação sempre que os dados são solicitados da tabela e não são encontrados lá.
Voltando à questão, a principal diferença entre números inteiros ilimitados e a tabela infinita é apenas que os números inteiros são finitos, ilimitados, mas completamente calculados em tempo finito. A tabela infinita é calculada indefinidamente, finita, mas ainda crescendo o tempo todo até o infinito. Isso não é um problema, mas é uma diferença. Objetos infinitos são acessíveis apenas através de aproximações finitas, ... mas eles são infinitos. Números irracionais computáveis são, nesse sentido, objetos infinitos, pelo menos para sua representação como números binários.
Todos os algoritmos são definidos no contexto de alguma teoria matemática. E uma pesquisa de tabela junto com uma tabela infinita é um algoritmo. Mas é um algoritmo em uma teoria matemática que possui um conjunto infinito de axiomas finitamente definido que especificam extensivamente (e não intensivamente) os valores de uma função que axiomatiza para cada argumento inteiro. (veja minha resposta à sua pergunta anterior ). Então é sempre legítimo fazê-lo, pois você sempre pode adicionar afirmações comprovadamente verdadeiras aos axiomas de uma teoria.
As declarações de Usul, reproduzidas na sua pergunta atual, estão na minha opinião incorretas (embora tudo também seja uma questão de definição). Sua conclusão em sua resposta , que você não reproduziu, é que o uso de uma tabela infinita não pode ser considerado um algoritmo, porque só pode ser implementado por um modelo de computação não uniforme, por uma coleção de máquinas diferentes e, portanto, usos " não têm uma descrição finita que possa ser implementada para resolver o problema" inteiro "para qualquer tamanho de entradaπ
A maneira como essas entidades infinitas são computadas na prática é por meio de uma avaliação preguiçosa , computando qualquer parte necessária a qualquer momento e retomando a computação para alguns dos demais sempre que necessário. Isso é exatamente o que é proposto acima com o fact
fatorial de computação preguiçosa da
máquina a ser armazenado em uma tabela, sempre que mais dados forem necessários da tabela.
De certa forma, isso parece justificar a afirmação (na resposta de DanielV ) de que o espaço de código deve ser finito, pois a avaliação lenta será realmente baseada em algum código finito. Mas a computabilidade é um jogo generalizado de codificação, de modo que, entre outras coisas, distinguir código de dados está sempre nos olhos de quem vê. De fato, muitas linguagens de programação modernas não fazem muita diferença entre a especificação intensional
e extensional de valores, e a Denotational Semantics realmente não distingue "2 + 2" de "4". Semântica é realmente o que estamos falando quando fazemos uma pergunta como " O que é X ? ".
Essa visão da finitude do código, também vista como estática, é outra razão pela qual uma tabela infinita (considerada como parte do código) não é vista em pé de igualdade com números inteiros ilimitados usados como dados. Mas essa é outra ilusão que não sobrevive à prática de programação conhecida em metaprogramação , linguagens reflexivas e no uso da eval
função. Nesses idiomas, o código pode ser estendido sem limites pelo próprio programa em execução, enquanto o computador estiver em execução. De fato, pode-se considerar as Máquinas de Turing que modificam suas próprias regras de transição, aumentando seu número sem limites. Isso é bem parecido com o funcionamento das máquinas Universal Turing.
Ao projetar estruturas teóricas, há sempre uma tensão entre simplicidade e perspicácia ou expressividade. A simplicidade simplifica a análise da estrutura, principalmente quando se trata de provar propriedades específicas ou reduzi-la a outras estruturas. Mas muitas vezes é inconveniente para expressar conceitos de alto nível que devem ser codificados. Não programamos com máquinas de Turing, mas com linguagens de alto nível muito mais expressivas e perspícuas, e ao mesmo tempo podemos apagar algumas barreiras, como a distinção entre código e dados, com base na equivalência semântica. As máquinas de Turing parecem simples, mas podem ir muito além de sua definição elementar.