Eu estava pensando em provas e tive uma observação interessante. Portanto, as provas são equivalentes aos programas pelo isomorfismo de Curry-Howard, e as provas circulares correspondem a uma recursão infinita. Mas sabemos do problema da parada que, em geral, testar se um programa arbitrário se repete para sempre é indecidível. Por Curry-Howard, isso significa que não existe um "verificador de provas" que possa determinar se uma prova usa raciocínio circular?
Sempre achei que as provas deveriam ser compostas de etapas facilmente verificáveis (que correspondem a aplicações de regras de inferência), e verificar todas as etapas dá a você a confiança de que a conclusão se segue. Mas agora estou me perguntando: talvez seja realmente impossível escrever um verificador de provas, porque não há como contornar o problema da parada e detectar o raciocínio circular?
fonte
Function
ouProgram Fixpoint
construções para provar que alguma função é total se o verificador de totalidade falhar. Um exemplo simples é a função de classificação por mesclagem nas listas. É preciso provar manualmente que dividimos listas (de tamanho> 1) em sublistas estritamente menores.Program
e similares, são um arenque vermelho. Eles não mudam a teoria. O que eles fazem é açúcar sintático para usar uma medida em uma prova: em vez de pensar que o objeto em que você está interessado fica menor, você adiciona um nível de indireção: calcule que outro objeto fique menor (por exemplo, tamanho) e prove que ele fica menor. Veja aWf
biblioteca.