Dado que:
- Uma linguagem com sistemas do tipo muito expressivo (por exemplo, Idris ) também pode ter mecanismos de escape como interfaces de função estrangeira / unsafePerformIO.
- Existem assistentes de prova que podem ser usados para provar algumas propriedades de um programa escrito em um idioma que não possui um sistema de tipos capaz de expressar essas propriedades.
- A correspondência de Curry-Howard mostra que uma implementação verificada com êxito de uma função com um determinado tipo é uma prova do que é expresso por esse tipo.
Pode-se expressar provas não triviais de alguma propriedade do código de idioma estrangeiro no sistema de tipos do idioma nativo?
Por exemplo, finja que tenho uma função C chamada stable_qsort que classifica números de uma maneira terrivelmente inteligente e eficiente, mantendo a ordem dos elementos já iguais, e um programa Idris que chama stable_qsort por meio de seu FFI, mas não confio nisso relativamente obscuro Função C. Posso provar que a função não reordena elementos iguais, para todas as entradas, no meu código Idris, em vez de usar um assistente de prova separado?
fonte