Lambda calculus: perbedaan antara konteks dan konteks evaluasi

12

Pertama, saya ingin mengatakan bahwa teks saya di bawah ini mungkin mengandung kesalahan, jadi silakan tunjukkan kesalahan dalam perumusan pertanyaan saya.

Pertimbangkan kalkulus lambda yang tidak diketik dengan boolean dan jika-pernyataan yang istilahnya diberikan oleh sintaks ini:

 t ::= v | t t | if t t t | x
 v ::= \x.t | #t | #f

Konteks C dalam hal ini akan diberikan sesuai dengan sintaks ini:

C ::= [-] | \x. C | C t | t C | if C t t | if t C t | if t t C 

Selain itu, seseorang dapat mendefinisikan konteks evaluasi E menurut sintaksis lain ini:

E ::= [-] | \x. E | v E | E t | if E t t 

Saya membagi pertanyaan saya menjadi tiga sub-poin yang ingin saya bahas.

  1. Kapan kedua konsep ini digunakan? Sebagai contoh, saya tahu bahwa konteks evaluasi digunakan untuk mendefinisikan semantik kalkulus, tetapi penggunaan konteks masih agak sulit dipahami saya. Saya juga ingin konfirmasi pengetahuan saya di sini.
  2. Kapan satu lebih disukai dari yang lain dan mengapa?
  3. Bisakah Anda menunjukkan artikel yang relevan yang dapat membantu saya menyelesaikan masalah ini?

sumber

Jawaban:

15

Konteks digunakan untuk banyak tujuan, tetapi biasanya untuk mendefinisikan kongruensi pada program. Konteks evaluasi adalah bagian dari konteks. Mereka biasanya digunakan untuk mendefinisikan hubungan reduksi. Biarkan saya memberi contoh masing-masing.

Salah satu cara formal untuk mendefinisikan kesetaraan program adalah dengan mengatakan bahwa dua program dan N adalah sama secara kontekstual, mereka dapat menggantikan satu sama lain dalam setiap konteks tanpa perubahan perilaku. Kita dapat mendefinisikan ini sebagai berikut: M dan N secara kontekstual sama disediakan untuk semua konteks penutup C [ ] untuk M dan N : C [ M ] t jika dan hanya jika C [ N ] t . Kami mengatakan konteks mendekati untuk M , NMNMNC[]MNC[M]tC[N]tM,Njika atau C [ N ] tidak memiliki variabel bebas. Ekspresi M t berarti bahwa program M mengurangi sejumlah langkah hingga nilai t . (Sebagai tambahan, catat bahwa definisi kesetaraan kontekstual lebih terlibat untuk gagasan kaya perhitungan, misalnya proses bersamaan.)C[M]C[N]MtMt

MNE[M]E[N]
λλMNλx.Mλx.NλLaporan Revisi Pada Teori Sintaksis Kontrol Sekuensial dan Negara oleh Felleisen dan Hieb.
Martin Berger
sumber
14

[]

C::=[]xtCCtλx.C

C[]tC[t]t[]C[t][]t

(λx.M)NβM{xN}
M{xN}xNM

tMNxt=(λx.M)Nttt=(λx.M)NtCMNxt=C[(λx.M)N]C[M{xN}]

(λx.M)NβM{xN}(β)MβNC[M]βC[N](γ)
(λx.M)NβM{xN}(β)MβNλx.Mβλx.N(Cλ)MβNMPβNP(C@<)MβNPMβPN(C@>)

Definisi ini menghasilkan reduksi beta, yaitu gagasan evaluasi yang memungkinkan pengurangan subterm apa pun. Komputasi seperti yang dilakukan dalam bahasa pemrograman sering tidak memungkinkan pengurangan subterma di dalam fungsi: aturan pengurangan hanya dapat diterapkan di tingkat atas, atau di sisi kiri atau sisi kanan aplikasi. Kita dapat mengekspresikan ini dengan mendefinisikan jenis konteks baru yang tidak memungkinkan semua bentuk sintaksis: Kita dapat menggunakan sintaks ini untuk mendefinisikan gagasan semantik evaluasi non-parsial: Kami juga dapat menyajikan definisi ini dengan memperluasnya, seperti yang kami lakukan di atas untuk pengurangan beta penuh:

D::=[]xtDDt
(λx.M)NnpM{xN}MnpND[M]npD[N]
D
(λx.M)NnpM{xN}(β)MnpNMPnpNP(C@<)MnpNPMnpPN(C@>)
D akan disebut konteks evaluasi karena digunakan untuk mendefinisikan pengertian evaluasi. Konteks evaluasi bukanlah jenis konteks khusus; alih-alih, menyebutnya konteks evaluasi adalah masalah konteks apa yang digunakan .

Saya akan memberikan satu lagi contoh konteks. Mari kita mendefinisikan nilai berdasarkan sintaks berikut: Sekarang mari kita tentukan jenis konteks lain: Dibandingkan dengan atas, lubang dapat berada di sisi fungsi aplikasi jika argumen aplikasi tersebut adalah sebuah nilai. Tetapkan pengurangan berikut: V

V::=xV1Vnλx.M
E::=[]MEEV
D
(λx.M)VcbvaM{xV}(βcbva)MβNE[M]cbvaE[N](γcbva)
Dengan batasan bahwa argumen fungsi harus menjadi nilai dalam aturan pertama dan bahwa abstraksi lambda bukan konteks, kami mendefinisikan strategi evaluasi panggilan-oleh-nilai. Dengan pembatasan lebih lanjut bahwa argumen dievaluasi sebelum fungsi, ini adalah panggilan urutan aplikatif berdasarkan nilai.
Gilles 'SANGAT berhenti menjadi jahat'
sumber
1
Definisi konteks evaluasi Anda yang terakhir lebih dekat dengan gagasan Felleisen dan Hieb yang asli. Mereka adalah sarana sintaksis untuk membantu mengekspresikan urutan evaluasi persyaratan kalkulus. Konteks evaluasi adalah jenis khusus konteks, karena memungkinkan seseorang untuk secara unik memfaktorkan istilah ke dalam konteks dan redex (jika mungkin), dengan demikian menunjukkan, secara deterministik, di mana langkah pengurangan berikutnya harus terjadi.
Dave Clarke
@DaveClarke Sebagai tambahan, Anda juga dapat menggunakan konteks evaluasi untuk menentukan evaluasi untuk gagasan perhitungan non-deterministik, di mana Anda tidak memiliki dekomposisi unik ke dalam konteks evaluasi dan memperbaiki kembali.
Martin Berger
@ MartinBerger: Memang.
Dave Clarke
@DaveClarke Apakah maksud Anda “ konteks evaluasi deterministik adalah jenis konteks khusus”? Saya dapat mengambil serangkaian konteks yang sewenang-wenang dan menentukan strategi evaluasi berdasarkannya.
Gilles 'SO- stop being evil'
@Gilles: Konteks evaluasi dapat menentukan strategi pengurangan deterministik. Saya tidak berpikir saya telah melihat ungkapan "konteks evaluasi deterministik". Mereka tentu saja merupakan jenis konteks khusus. Saya setuju dengan komentar Anda; intinya adalah bahwa jawaban Anda tidak melihat signifikansi historis dari konteks evaluasi, yang menentukan definisi deterministik tentang reduksi.
Dave Clarke