Чи може система типу слугувати допоміжним помічником для сторонніх функцій?


9

Враховуючи, що:

  1. Мова з дуже експресивними системами типу (наприклад, Idris ) також може мати механізми виходу, як інтерфейси іноземних функцій / unsafePerformIO.
  2. Є помічники доказування, які можуть бути використані для доведення деяких властивостей програми, написаної мовою, яка не має системи типів, здатної виражати ці властивості.
  3. Кореспонденція Кері-Говарда показує, що успішно перевірена типом реалізація функції із заданим типом є доказом того, що виражається цим типом.

Чи можна висловити нетривіальні докази деякої властивості коду іноземної мови у типовій системі рідної мови?

Наприклад, зробіть вигляд, що у мене є функція C під назвою stable_qsort, яка сортує числа жахливо розумним та ефективним способом, зберігаючи порядок вже рівних елементів, та програма Idris, яка викликає stabil_qsort через свою FFI, але я не вірю цьому відносно незрозумілому C функція. Чи можу я довести, що функція не впорядковує рівних елементів для всіх входів у своєму коді Idris замість того, щоб використовувати окремий помічник підтвердження?

Відповіді:


10

Довга коротка історія: ні, ти не можеш. Іноземна функція схожа на чорну скриньку, і тип, який ви їй присвоюєте, - це обіцянка, яку ви даєте: у листуванні Керрі-Говарда, що відповідатиме доданню аксіоми до вашої теорії.

Це, як кажуть, є способи. Наприклад, у Кока є різні формалізації стандарту С (наприклад, робота Роберта Кребберса ). Оскільки у вас є чітке представлення програм C та їх семантики, ви можете написати свій код безпосередньо в помічнику перевірки, і потім можливо довести деякі його властивості.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.