Враховуючи, що:
- Мова з дуже експресивними системами типу (наприклад, Idris ) також може мати механізми виходу, як інтерфейси іноземних функцій / unsafePerformIO.
- Є помічники доказування, які можуть бути використані для доведення деяких властивостей програми, написаної мовою, яка не має системи типів, здатної виражати ці властивості.
- Кореспонденція Кері-Говарда показує, що успішно перевірена типом реалізація функції із заданим типом є доказом того, що виражається цим типом.
Чи можна висловити нетривіальні докази деякої властивості коду іноземної мови у типовій системі рідної мови?
Наприклад, зробіть вигляд, що у мене є функція C під назвою stable_qsort, яка сортує числа жахливо розумним та ефективним способом, зберігаючи порядок вже рівних елементів, та програма Idris, яка викликає stabil_qsort через свою FFI, але я не вірю цьому відносно незрозумілому C функція. Чи можу я довести, що функція не впорядковує рівних елементів для всіх входів у своєму коді Idris замість того, щоб використовувати окремий помічник підтвердження?