"Penyusun penyertifikasi" biasanya berarti sesuatu yang sedikit berbeda: itu berarti Anda memiliki penyusun yang dapat membuktikan bahwa kode mesin yang dipancarkannya dengan benar mengimplementasikan semantik tingkat tinggi. Artinya, ini adalah bukti bahwa tidak ada bug kompiler. Program yang diberikan orang ke kompiler masih bisa salah, tetapi kompiler akan menghasilkan versi kode mesin yang benar dari program yang salah. Kisah sukses terbesar di sepanjang baris ini adalah kompiler terverifikasi CompCert , yang merupakan kompiler untuk sebagian besar dari C.
Compiler Compcert itu sendiri adalah sebuah program dengan bukti kebenaran (dilakukan dalam Coq), yang menjamin bahwa jika menghasilkan kode untuk suatu program, itu akan benar (sehubungan dengan semantik operasional perakitan & C yang digunakan desainer CompCert). Upaya memeriksa mesin-mesin ini cukup besar; biasanya bukti kebenarannya berkisar antara 1x hingga 100x ukuran program yang Anda verifikasi. Menulis program dan bukti yang diperiksa dengan mesin adalah keterampilan baru yang harus Anda pelajari - ini bukan matematika atau pemrograman seperti biasa, meskipun itu tergantung pada kemampuan untuk melakukan keduanya dengan baik. Rasanya seperti Anda mulai dari awal, seperti menjadi programmer pemula lagi.
Tidak ada hambatan teoretis khusus untuk ini. Satu-satunya hal di sepanjang baris ini adalah teorema Blum Size bahwa untuk semua bahasa di mana semua program total, Anda dapat menemukan program dalam bahasa rekursif umum yang akan setidaknya secara eksponensial lebih besar ketika diprogram dalam bahasa total. Cara untuk memahami hasil ini adalah bahwa bahasa total mengkodekan tidak hanya sebuah program, tetapi juga bukti terminasi. Jadi, Anda dapat memiliki program pendek dengan bukti terminasi panjang. Namun, ini tidak terlalu penting dalam praktik, karena kita hanya akan pernah menulis program dengan bukti terminasi yang dapat dikelola.
EDIT: Dai Le meminta penjelasan tentang poin terakhir.
Ini sebagian besar merupakan klaim pragmatis, berdasarkan pada fakta bahwa jika Anda dapat memahami mengapa suatu program bekerja, maka tidak mungkin bahwa alasannya adalah berjuta-juta halaman sepanjang invarian. (Invarian terpanjang yang pernah saya gunakan adalah beberapa halaman, dan apakah mereka membuat pengulas menggerutu! Dapat dimengerti juga, karena invarian adalah alasan mengapa program bekerja menghilangkan semua narasi yang membantu orang memahaminya.)
Tetapi ada juga beberapa alasan teoretis juga. Pada dasarnya, kita tidak tahu banyak cara untuk secara sistematis menciptakan program yang bukti kebenarannya sangat panjang. Metode utama adalah (1) mengambil logika di mana Anda membuktikan kebenaran, (2) menemukan properti yang tidak dapat secara langsung dinyatakan dalam logika itu (bukti konsistensi adalah sumber khas), dan (3) menemukan program yang bukti kebenaran bergantung pada keluarga konsekuensi yang dapat diungkapkan dari properti yang tidak dapat diungkapkan. Karena (2) tidak dapat diekspresikan, ini berarti bahwa bukti dari setiap konsekuensi yang dapat diekspresikan harus dilakukan secara independen, yang memungkinkan Anda meledakkan ukuran bukti kebenaran. Sebagai contoh sederhana, perhatikan bahwa dalam logika tingkat pertama dengan relasi induk, Anda tidak bisa mengekspresikan relasi leluhur.kk) dapat diekspresikan, untuk setiap tetap . Jadi dengan memberikan program yang menggunakan beberapa properti leluhur hingga beberapa kedalaman (katakanlah, 100), Anda dapat memaksa bukti kebenaran dalam FOL untuk memuat bukti dari properti tersebut seratus kali lipat.k
Pandangan canggih tentang subjek ini disebut "matematika terbalik", dan merupakan studi yang mengharuskan aksioma untuk membuktikan teorema yang diberikan. Saya tidak tahu banyak tentang itu, tetapi jika Anda memposting pertanyaan tentang aplikasinya ke CS, dan saya yakin setidaknya Timothy Chow, dan mungkin beberapa orang lain, akan dapat memberi tahu Anda hal-hal menarik.