Bisakah sistem tipe berfungsi sebagai asisten bukti untuk fungsi asing?

9

Mengingat bahwa:

  1. Bahasa dengan sistem tipe yang sangat ekspresif (misalnya Idris ) juga dapat memiliki mekanisme melarikan diri seperti antarmuka fungsi asing / unsafePerformIO.
  2. Ada asisten bukti yang dapat digunakan untuk membuktikan beberapa properti dari program yang ditulis dalam bahasa yang tidak memiliki sistem tipe yang mampu mengekspresikan properti tersebut.
  3. Korespondensi Curry – Howard menunjukkan bahwa implementasi tipe-check yang berhasil dari suatu fungsi dengan tipe yang diberikan adalah bukti dari apa yang diekspresikan oleh tipe itu.

Bisakah seseorang mengungkapkan bukti non-sepele dari beberapa properti kode bahasa asing dalam sistem jenis bahasa asli?

Sebagai contoh, berpura-pura saya memiliki fungsi C yang disebut stable_qsort yang mengurutkan angka dengan cara yang sangat pintar dan efisien sambil mempertahankan urutan elemen yang sudah sama, dan program Idris yang memanggil stable_qsort melalui FFI, tapi saya tidak percaya ini relatif tidak jelas. Fungsi C. Bisakah saya membuktikan bahwa fungsi tersebut tidak menyusun ulang elemen yang sama, untuk semua input, dalam kode Idris saya alih-alih menggunakan asisten bukti terpisah?

dukereg
sumber

Jawaban:

10

Singkat cerita: tidak, Anda tidak bisa. Fungsi asing seperti kotak hitam dan jenis yang Anda anggap itu adalah janji yang Anda buat: dalam korespondensi Curry-Howard yang akan sesuai dengan menambahkan aksioma pada teori Anda.

Yang sedang berkata, ada cara. Dalam Coq misalnya, ada berbagai formalisasi standar C (misalnya karya Robbert Krebbers ). Karena Anda memiliki representasi eksplisit dari program C dan semantiknya, Anda dapat menulis kode Anda langsung di asisten bukti dan kemudian dimungkinkan untuk membuktikan beberapa propertinya.

gallais
sumber