Perbedaan Antara Semantik Operasional Kecil dan Besar

28

Apa perbedaan mendasar antara semantik operasional kecil dan besar?

Saya mengalami kesulitan memahami apa itu dan motivasi untuk memiliki keduanya.

Simon Morgan
sumber
1
Artikel Wikipedia tentang semantik operasional terlihat menjanjikan ... sampai orang menyadari bahwa jumlah total informasi di bagian "Semantik langkah besar" adalah "Bagian ini memerlukan ekspansi. (Februari 2011)."
David Richerby
1
Apa sumber belajar Anda? Apa isinya tentang masalah ini? Apa yang kamu pikirkan? Petunjuk: apa semantik langkah besar x = 0; while ( true ) { x = x + 1; }?
Raphael
@ Raphael saya sedang membaca Memahami Komputasi . Pikiranku adalah bahwa pendekatan langkah kecil adalah untuk mengurangi ekspresi menjadi sub-ekspresi sampai tidak dapat dikurangi lebih jauh dan kemudian mengevaluasi itu. Langkah besar tampaknya adalah tentang mengevaluasi hal-hal langsung tetapi saya tidak benar-benar ada perbedaan yang menarik antara kedua metode karena keduanya tampaknya tentang menelusuri konstruksi tingkat yang lebih tinggi.
Simon Morgan
Langkah besar adalah tentang menelusuri dari konstruksi tingkat yang lebih tinggi dengan mengevaluasi sub-konstruksi dan langkah kecil dengan mengurangi konstruksi yang lebih besar, sekali lagi, ke dalam sub-konstruksi itu.
Simon Morgan

Jawaban:

32

Semantik langkah kecil mendefinisikan metode untuk mengevaluasi ekspresi satu langkah perhitungan pada satu waktu. Secara formal, semantik langkah kecil untuk bahasa ekspresi E adalah relasi →:E×E disebut relasi reduksi . Semantik langkah kecil menjelaskan apa yang terjadi pada ekspresi secara detail. Itu dapat memberikan akun yang tepat bahkan program non-terminasi, dengan rantai tak terbatas e0e1e2 . Program terminating adalah program sedemikian rupa sehingga e0e1v veE,ve

Di ujung lain dari spektrum adalah semantik denotasional . Semantik denotasi memberikan "makna" untuk setiap ungkapan. Ini adalah fungsi dari ekspresi ke denotasi: ( disebut domain). Ruang denotasi dapat sepenuhnya tidak terkait dengan ruang sintaksis, misalnya dapat berupa ekspresi yang dievaluasi ke suatu angka dan dapat berupa sekumpulan angka seperti atau .[[]]:EDDEDNR

Semantik langkah besar adalah jenis di tengah. Sebuah semantik besar-langkah pada bahasa ekspresi dan seperangkat nilai adalah hubungan . Ini mengaitkan ekspresi dengan nilainya (kemungkinan beberapa nilai jika bahasanya tidak deterministik). Seringkali, nilai khusus digunakan untuk ekspresi non-terminating.EV⇓:E×V

Jadi mengapa kita memiliki ketiga konsep ini? Semua gagasan ini dapat saling memodelkan satu sama lain, tetapi model tersebut menambah tingkat kerumitan.

  • Diberikan semantik langkah-kecil , Anda dapat menentukan semantik langkah-besar yang sesuai yang menghubungkan setiap ekspresi dengan nilainya (atau nilainya, jika reduksi tidak deterministik): jika jika ada rantai dan tidak dapat mengurangi lebih jauh. Perhatikan bahwa secara umum Anda tidak dapat merekonstruksi semantik langkah kecil dari semantik langkah besar. Misalnya, semua ekspresi non-terminating tidak dapat dibedakan di bawah semantik langkah besar.evee1vv
  • Mengingat besar-langkah semantik , Anda dapat mengatakan bahwa itu kecil-langkah semantik pada . Ini tidak terlalu berguna.⇓:E×VEV
  • Diberikan semantik langkah-kecil , Anda dapat menentukan semantik denotasi yang sesuai di mana denotasi ekspresi adalah himpunan rantai reduksi mulai dari itu. Ini memenuhi definisi formal, tetapi itu tidak terlalu berguna, karena menambahkan overhead teori set ke objek yang lebih mudah untuk dipikirkan dengan melihat langsung pada sintaks.
  • Diberikan semantik denotasi , Anda dapat mendefinisikan semantik langkah kecil dengan menambahkan semua kemungkinan denotasi sebagai nilai dalam bahasa. Itu membutuhkan penciptaan nilai-nilai yang bukan bagian dari sintaks yang dapat ditulis oleh programmer, yang berarti bahwa beberapa hasil yang menarik harus menyatakan "untuk semua program yang dapat ditulis oleh programmer" daripada "untuk semua program". Yang ini juga sangat tidak berguna.[[]]
  • Diberikan semantik langkah besar , Anda dapat menentukan semantik denotasi terkait di mana domain adalah sekumpulan nilai: . Jika semantik langkah besar bersifat deterministik (setiap ekspresi dikurangi menjadi satu nilai), Anda dapat menentukan semantik denotasi sederhana di mana domain adalah himpunan nilai.[[e]]={vev}
  • Sebaliknya, dengan semantik denotasional , Anda dapat menentukan semantik langkah besar . Sekali lagi yang ini tidak ada gunanya.[[]]E[[]]

Secara operasional, semantik langkah kecil sesuai dengan melihat setiap operasi yang dilakukan oleh penerjemah untuk bahasa tersebut. Semantik langkah besar hanya melihat nilai yang dihasilkan. Semantik denotasional melihat pada interpretasi matematis yang mungkin atau mungkin tidak ada hubungannya dengan apa yang terjadi pada komputer.

Semantik langkah kecil adalah yang paling jelas. Ini jelas memberikan informasi yang berguna tentang program yang tidak berakhir. Secara umum, ini memberikan informasi terperinci tentang perilaku program.

Semantik denotasional mengubah konstruksi sintaksis menjadi objek matematika yang arbitrer; ia dapat mengekspresikan apa pun yang diinginkan para ilmuwan (Anda dapat mendefinisikan denotasi ekspresi sebagai semua rantai reduksi yang mungkin darinya), tetapi dengan biaya menambahkan tingkat kerumitan. Ini digunakan ketika kita ingin memisahkan beberapa detail seperti bagaimana tepatnya ekspresi dievaluasi.

Semantik langkah besar ada di tengah: ia mengabstraksi rincian evaluasi tetapi mempertahankan sifat sintaksis hasilnya. Biasanya konsep ini digunakan ketika ada semantik langkah kecil yang mendasarinya, sebagai cara untuk mengekspresikan secara ringkas “ ”sebagai“ ”. Dalam konstruksi seperti itu, sementara konsepnya sangat berbeda (satu memungkinkan kita untuk berbicara tentang langkah-langkah perhitungan individu dan tentang program non-terminating, yang lain tidak), definisi akan terlihat sangat mirip, karena dalam kasus ini aturan yang menentukan semantik langkah besar pada dasarnya berbentuk “if dan… dan dan(e1,,en),ee1en and e,eneeene1e2envvadalah nilai maka ”.e1v

Gilles 'SANGAT berhenti menjadi jahat'
sumber
Saya juga mempelajari ini, tetapi saya memiliki masalah dengan sesuatu yang Anda katakan dalam jawaban Anda yang ingin saya klarifikasi. Anda berkata, "Semantik langkah besar itu ada di tengah." Namun, bukankah langkah kecil sebenarnya menjadi model 'menengah'? Pertimbangkan ungkapan: A: ((5 + 7) + 3) B: ((5 + 5) + 5) C: ((1 + 2) + 1) D: ((2 + 1) + 1) Denotasional akan mengklasifikasikan bahkan C dan D dengan nilai yang berbeda (mungkin "C" dan "D"), dan langkah besar akan mengklasifikasikan keduanya sebagai "4" dan keduanya A dan B sebagai "15" Namun, langkah kecil akan memberi Anda "(12 + 3) "dan" (10 + 5) "untuk A dan B, dan" (3 + 1) "untuk C dan D.
Timothy Swan
@TimothySwan Dengan asumsi Anda ingin mendefinisikan evaluasi aritmatika yang biasa, semantik denotasi tidak akan membedakan C dan D. Semantik langkah-kecil akan mendefinisikan rantai reduksi seperti . Semantik langkah besar akan sangat mirip dengan semantik denotasional: vs . Angka dalam semantik langkah besar adalah yang ada dalam sintaksis bahasa sedangkan angka dalam semantik denotasional adalah yang dari metatori, tetapi perbedaannya tidak terlihat atau penting dalam contoh sederhana ini. ((2+1)+1)3+14((2+1)+1)3[[((2+1)+1)]]=444
Gilles 'SO- stop being evil'
Jadi ketika Anda berkata, 'Semantik denotasi memberikan "makna" untuk setiap ungkapan.' Anda tidak bermaksud secara unik mengidentifikasi ekspresi diri mereka sendiri, tetapi semacam arti evaluasi-independen? Bisakah Anda memberikan contoh sederhana yang menunjukkan dengan jelas perbedaan antara semantik langkah-besar dan semantik? Juga, tolong jelaskan 3dalam ((2+1)+1)⇓3Saya menebak 'denotasional' adalah nilai akhir-semua, tetapi dalam contoh apa 'langkah besar' tidak harus memetakan langsung ke sana? Apakah perbedaannya ada hubungannya dengan konteks, seperti (a + 1)tergantung pada lingkungan yang mengandung a?
Timothy Swan
@TimothySwan Selama tidak ada efek samping, tidak ada non-determinisme, dan tidak ada fungsi, semantik denotasi dari sebuah ekspresi adalah nilai yang dievaluasi. Non-determinisme adalah cara yang baik untuk menggambarkan perbedaan antara langkah besar dan denotasional: denotasi ekspresi adalah seperangkat nilai yang dapat dimiliki: , sedangkan semantik langkah besar akan memiliki banyak penilaian yang dapat diterima: dan dan ... Itu salah ketik. [[rand(1..n)]]={1,2,,n}rand(1..n)1rand(1..n)23
Gilles 'SANGAT berhenti menjadi jahat'