Un sistema di tipi può servire come assistente di prova per funzioni straniere?


9

Dato che:

  1. Un linguaggio con sistemi di tipo molto espressivo (ad esempio Idris ) può anche avere meccanismi di escape come interfacce di funzioni estranee / non sicuroPerformIO.
  2. 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à.
  3. 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?

Risposte:


10

Per farla breve: no, non puoi. Una funzione estranea è come una scatola nera e il tipo a cui ti attribuisci è una promessa che fai: nella corrispondenza Curry-Howard che corrisponderebbe all'aggiunta di un assioma alla tua teoria.

Detto questo, ci sono modi. In Coq, ad esempio, ci sono varie formalizzazione dello standard C (ad esempio il lavoro di Robbert Krebbers ). Poiché si dispone di una rappresentazione esplicita dei programmi C e della loro semantica, è possibile scrivere il codice direttamente nell'assistente di prova ed è quindi possibile dimostrare alcune delle sue proprietà.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.