Prop sangat berguna untuk ekstraksi program karena memungkinkan kita untuk menghapus bagian-bagian kode yang tidak berguna. Sebagai contoh, untuk mengekstrak algoritma penyortiran kami akan membuktikan pernyataan "untuk setiap daftarℓ ada daftark sedemikian sehinggak dipesan dank adalah permutatiom dariℓ ". Jika kita menuliskan ini dalam Coq dan ekstrak tanpa menggunakanProp , kita akan mendapatkan:
- "untuk semua ℓ ada k " akan memberi kita peta
sort
yang membawa daftar ke daftar,
- "sedemikian rupa sehingga dipesan" akan memberikan fungsi yang berjalan melalui k dan memeriksa apakah itu diurutkan, dank
verify
k
- " adalah permutasi dari ℓ " akan memberikan permutasi yang membawa ℓ ke k . Perhatikan bahwa ini bukan hanya pemetaan, tetapi juga pemetaan terbalik bersama dengan program yang memverifikasi bahwa kedua peta tersebut benar-benar terbalik.kℓ
pi
ℓkpi
Sementara hal-hal tambahan tidak sepenuhnya tidak berguna, dalam banyak aplikasi kami ingin menyingkirkannya dan tetap adil sort
. Hal ini dapat dicapai jika kita menggunakan ke negara " k memerintahkan" dan " k adalah permutasi dari ℓ ", tapi tidak "untuk semua ℓ ada k ".Propkkℓℓk
Secara umum, cara umum untuk mengekstrak kode adalah dengan mempertimbangkan pernyataan bentuk mana x adalah input, y adalah output, dan ϕ ( x , y ) menjelaskan apa artinya bagi y menjadi output yang benar. (Dalam contoh di atas A dan B adalah jenis daftar dan ϕ ( ℓ , k ) adalah " k dipesan dan k adalah permutasi dari ℓ .") Jika ϕ ada di P r o p maka ekstraksi memberikan peta f :∀x:A.∃y:B.ϕ(x,y)xyϕ(x,y)ySEBUAHBϕ ( ℓ , k )kkℓϕP r o p sehingga φ ( x , f ( x ) ) berlaku untuk semua x ∈ A . Jika ϕ ada di S e t maka kita juga mendapatkan fungsi g sedemikian sehingga g ( x ) adalah bukti bahwa ϕ ( x , f ( x ) ) berlaku, untuk semua x ∈ Af: A → Bϕ ( x , f( x ) )x ∈ AϕS e tgg( x )ϕ ( x , f( x ) )x ∈ A. Seringkali buktinya tidak berguna secara komputasional dan kami lebih suka membuangnya, terutama ketika itu bersarang jauh di dalam beberapa pernyataan lainnya. memberi kita kemungkinan untuk melakukannya.P r o p
Ditambahkan 2015-07-29: Ada pertanyaan apakah kita bisa menghindari sama sekali dengan secara otomatis mengoptimalkan "kode tidak berguna diekstraksi". Hingga taraf tertentu kita dapat melakukan itu, misalnya semua kode yang diekstraksi dari fragmen negatif dari logika (barang-barang yang dibangun dari tipe kosong, tipe unit, produk) tidak berguna karena hanya bergerak di sekitar unit. Tapi ada desain keputusan asli seseorang harus membuat ketika menggunakan P r o p . Berikut ini adalah contoh simpe, di mana Σ berarti bahwa kita berada dalam T y p e dan ∃ berarti kita berada dalam P r o p . Jika kita ekstrak dari
P r o pP r o pΣT y p e∃P r o p
kita akan mendapatkan program yang menguraikan n menjadi bit terendah b dan bit yang tersisa k , yaitu, ia menghitung semuanya. Jika kita mengekstrak dari
Π n : N Σ b : { 0 , 1 } ∃ k : N
Πn:NΣb:{0,1}Σk:Nn=2⋅k+b
nbk
maka program hanya akan menghitung bit terendah
b . Mesin tidak dapat menentukan mana yang benar, pengguna harus mengatakan apa yang diinginkannya.
Πn:NΣb:{0,1}∃k:Nn=2⋅k+b
b