Dato che:
- Un linguaggio con sistemi di tipo molto espressivo (ad esempio Idris ) può anche avere meccanismi di escape come interfacce di funzioni estranee / non sicuroPerformIO.
- Esistono assistenti di prova che possono essere utilizzati per dimostrare alcune proprietà di un programma scritto in una lingua che non ha un sistema di tipi in grado di esprimere tali proprietà.
- La corrispondenza Curry – Howard mostra che un'implementazione verificata con successo di una funzione con un determinato tipo è la prova di ciò che viene espresso da quel tipo.
Si possono esprimere prove non banali di alcune proprietà del codice di lingua straniera nel sistema di tipi della lingua madre?
Ad esempio, fingi di avere una funzione C chiamata stable_qsort che ordina i numeri in un modo terribilmente intelligente ed efficiente mantenendo l'ordine di elementi già uguali e un programma Idris che chiama stable_qsort tramite il suo FFI, ma non mi fido di questo relativamente oscuro Funzione C. Potrei dimostrare che la funzione non riordina elementi uguali, per tutti gli input, nel mio codice Idris invece di utilizzare un assistente di prova separato?