Lambda Calculus: Bagaimana konteks evaluasi "bekerja"

8

Dalam kalkulus lambda murni, kita memiliki seperangkat istilah yang didefinisikan secara induktif (tata bahasa):

e::=xλx.ee1e2

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:

e1e1e1e2e1e2
dan
e2e2ve2ve2.

Ini masuk akal, karena jika kita memiliki turunan dari ekspresi , jelas bahwa itu adalah dari formulir dan dengan demikiant=(λf.λx.fx)((λy.y)λz.z)λw.we1e2e1e2

(λf.λx.fx)((λy.y)λz.z)λw.w(λf.λx.fx)(λz.z)λw.w

Jika kita mengganti aturan kongruensi dengan konteks evaluasi: maka kita hanya perlu satu aturan untuk mengekspresikan aturan kongruensi bahasa:

E::=[]EevE
eeE[e]E[e].

Saya bingung bagaimana konteks evaluasi dapat memberi tahu kami cara mengevaluasi ekspresi t dari atas tanpa mengubah sintaksis bahasa. Saya tidak mengerti bagaimana konteks evaluasi "bekerja" tanpa menulis ulang t as

Et=(λf.λx.fx)[]λw.w

di mana t=Et[((λy.y)λz.z)] . Tidak ada alasan apriori untuk mengevaluasi t bawah nilai-panggilan tanpa pengetahuan Et . Saya benar-benar tidak tahu di mana saya salah. Dapatkah seseorang membantu memperbaiki pemikiran saya?

baffld
sumber
Reduksi bukan kongruensi dengan strategi pengurangan seperti call-by-value. Lihat juga di sini .
Martin Berger
Saya tidak mengerti jawaban Anda; penggunaan "kongruensi" Anda sebagai kata kerja tidak masuk akal bagi saya. Saya telah membaca jawaban di tautan yang Anda berikan, tetapi saya masih tidak mengerti mengapa disajikan sebagai bentuk sintaksis, namun itu tidak pernah benar-benar digunakan dalam sintaks bahasa yang didefinisikannya. E
baffld
Saya tidak menggunakan kongruensi sebagai kata kerja. Saya tidak mengerti maksud Anda. E adalah variabel meta yang berkisar pada konteks evaluasi. Konteks evaluasi adalah himpunan bagian konteks yang tepat. Konteks adalah program dengan lubang.
Martin Berger

Jawaban:

8

Kehalusannya terletak pada di mana perbedaan antara bahasa dan bahasa logam dibuat. Seperti yang ditulis oleh René Magritte :

Terima kasih untuk pipa.

(λf.λx.fx)((λy.y)(λz.z))(λw.w) adalah istilah lambda, ditulis dalam sintaks untuk istilah lambda. Sebut saja istilah lambda ini . Biarkan menjadi istilah lambda . Saya dapat menulis (dan ini adalah kesetaraan sejati): semua yang saya lakukan adalah memberi nama pada sebuah subterm. Jika Anda mempertimbangkan sisi kanan persamaan ini “ ”, itu tidak ditulis dalam sintaksis istilah-istilah lambda; itu ditulis dalam notasi matematika di mana kami mengizinkan surat untuk berdiri untuk istilah lambda.tM(λf.λx.fx)((λy.y)(λz.z))t=M(λw.w)M(λw.w)

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,

e2e2ve2ve2
e2e2ve2e2ve2ve2evuntuk nilai) dan subskrip dan bilangan prima membedakan metavariabel dengan jenis yang sama; notasi pecahan untuk menulis aksioma induktif.

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 .

eeE[e]vE[e]
E[]eeE[]eeE[e]E[e]

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)Ett=Et[(λy.y)(λz.z)](λf.λx.fx)((λy.y)(λz.z))(λw.w)

Dengan istilah , bagaimana Anda menemukan cara mengurangi?t

  • Dengan notasi menggunakan beberapa aturan, Anda harus menemukan pohon deduksi (secara umum - di sini derivasi adalah linier, jadi Anda hanya perlu menemukan rantai yang mengarah pada aksioma).
  • Dengan notasi yang menggunakan konteks evaluasi, Anda harus menemukan konteks evaluasi yang sesuai.

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.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
2
Sehubungan dengan paragraf terakhir Anda: semua ahli logika dan siapa pun yang pernah mempelajari sintaksis harus dibuat untuk menerapkan substitusi.
Andrej Bauer