Para elaborar um pouco as declarações "é impossível", aqui está um esboço de prova simples.
Podemos modelar algoritmos com saída da Turing Machines que param com sua saída em sua fita. Se você deseja ter máquinas que podem parar, aceitando com saída na fita ou rejeitando (nesse caso, não há saída), você pode facilmente criar uma codificação que permita modelar essas máquinas com a opção "parar ou parar", não há máquinas "rejeitadas".
Agora, suponha que eu tenha um algoritmo P para determinar se duas dessas TMs têm a mesma saída para cada entrada. Então, dado uma TM A e uma entrada X , posso construir uma nova TM B que opera da seguinte maneira:
- Verifique se a entrada é exatamente X
- Se sim, insira um loop infinito
- Se não, execute A na entrada
Agora eu posso correr P em A e B . B não para em X , mas tem a mesma saída que A para todas as outras entradas, portanto, se e somente se A não para em X , esses dois algoritmos têm a mesma saída para cada entrada. Mas P foi assumida para ser capaz de dizer se dois algoritmos têm a mesma saída para cada entrada, de modo que se tivéssemos P poderíamos dizer se uma máquina pára arbitrárias sobre uma entrada arbitrária, que é o Deter problema. Como o problema da parada é conhecido como indecidível, P não pode existir.
Isso significa que não há uma abordagem geral (computável) para determinar se dois algoritmos têm a mesma saída que sempre funciona; portanto, você deve aplicar um raciocínio específico ao par de algoritmos que você está analisando. No entanto, na prática, pode haver abordagens computáveis que funcionem para grandes classes de algoritmos, e certamente existem técnicas que você pode usar para tentar elaborar uma prova para qualquer caso específico. A resposta de Dave Clarke fornece algumas coisas relevantes para você analisar aqui. O resultado da "impossibilidade" se aplica apenas à criação de um método genérico que resolva o problema de uma vez por todas, para todos os pares de algoritmos.