Jeśli się uwzględni:
- Język z bardzo ekspresyjnymi systemami typów (np. Idris ) może również mieć mechanizmy specjalne, takie jak interfejsy funkcji obcych / niebezpieczne SafePerformIO.
- Istnieją asystenci sprawdzania, których można użyć do udowodnienia niektórych właściwości programu napisanego w języku, który nie ma systemu typów zdolnego do wyrażania tych właściwości.
- Korespondencja Curry-Howard pokazuje, że udana implementacja funkcji z danym typem z potwierdzeniem typu jest dowodem na to, co wyraża ten typ.
Czy można wyrazić nietrywialne dowody posiadania jakiejś własności kodu języka obcego w systemie pisma w języku ojczystym?
Na przykład, udawaj, że mam funkcję C o nazwie stable_qsort, która sortuje liczby w strasznie sprytny i wydajny sposób, zachowując jednocześnie kolejność już równych elementów, oraz program Idris, który wywołuje stable_qsort za pośrednictwem swojego FFI, ale nie ufam tak stosunkowo niejasnemu Funkcja C. Czy mogę udowodnić, że funkcja nie zmienia kolejności równych elementów dla wszystkich danych wejściowych w moim kodzie Idris zamiast używać osobnego asystenta proof?