Dalam kalkulus lambda murni, kita memiliki seperangkat istilah yang didefinisikan secara induktif (tata bahasa):
Di bawah strategi evaluasi panggilan-oleh-nilai, kami memiliki aturan inferensi untuk pengurangan beta dan aturan tentang cara mengevaluasi aplikasi (aturan kongruensi). Saya mencoba memahami bagaimana konteks evaluasi dapat menggantikan aturan kongruensi tanpa benar-benar mengubah sintaks bahasa. Tanpa konteks evaluasi, kami memiliki yang berikut:
Ini masuk akal, karena jika kita memiliki turunan dari ekspresi , jelas bahwa itu adalah dari formulir dan dengan demikian
Jika kita mengganti aturan kongruensi dengan konteks evaluasi: maka kita hanya perlu satu aturan untuk mengekspresikan aturan kongruensi bahasa:
Saya bingung bagaimana konteks evaluasi dapat memberi tahu kami cara mengevaluasi ekspresi dari atas tanpa mengubah sintaksis bahasa. Saya tidak mengerti bagaimana konteks evaluasi "bekerja" tanpa menulis ulang as
di mana . Tidak ada alasan apriori untuk mengevaluasi bawah nilai-panggilan tanpa pengetahuan . Saya benar-benar tidak tahu di mana saya salah. Dapatkah seseorang membantu memperbaiki pemikiran saya?
Jawaban:
Kehalusannya terletak pada di mana perbedaan antara bahasa dan bahasa logam dibuat. Seperti yang ditulis oleh René Magritte :
Ketika kita menulis aturan seperti ia menyatakan aksioma berikut: untuk istilah lambda dan dan nilai apa saja , jika dikurangi menjadi lalu dikurangi menjadi . Di sini kita kembali menggunakan meta-notasi (yaitu notasi matematis untuk alasan tentang suatu bahasa): panah untuk menyatakan relasi reduksi; metavariables di mana huruf menunjukkan jenis ( untuk istilah lambda,
Ketika kita menulis aturan sekali lagi adalah meta-notasi, bagian dari bahasa logam dan bukan dari lambda sintaks jangka panjang. Aturannya berarti: untuk setiap istilah lambda dan dan setiap konteks evaluasi , jika dikurangi menjadi maka dikurangi menjadi .
Jika kita memanggil konteks dengan nama (meta-) , maka . Sekali lagi, ini adalah persamaan antara dua istilah lambda, yaitu istilah lambda yang sama ada di kedua sisi dari tanda sama. Apa yang kita miliki di sebelah kiri dan di kanan adalah dua meta-notasi berbeda untuk istilah lambda yang sama : satu yang menggunakan nama yang kami berikan untuk itu, yang lain yang sedikit lebih rumit melibatkan konteks yang kami beri nama.(λf.λx.fx)[⋅](λw.w) Et t=Et[(λy.y)(λz.z)] (λf.λx.fx)((λy.y)(λz.z))(λw.w)
Dengan istilah , bagaimana Anda menemukan cara mengurangi?t
Tata bahasa konteks evaluasi mengikuti struktur aturan evaluasi, jadi ini sebenarnya bukan dua metode tetapi dua cara berbeda untuk mengekspresikan definisi yang sama.
Untuk memahami hal ini, saya sangat merekomendasikan latihan berikut: dalam bahasa favorit Anda, terapkan evaluasi nilai-nilai-panggilan-lambda secara langsung, dengan tipe yang mewakili istilah-istilah lambda dan fungsi yang melakukan satu langkah reduksi.
sumber