Apa ini "matematika diskrit" seperti-notasi gaya yang digunakan untuk aturan formal?

18

Dalam makalah "A Datatype JSON Replicated-Free Replicated" , saya menemukan notasi ini untuk mendefinisikan secara resmi "aturan":

Beberapa "aturan" yang ditunjukkan di koran] [1

Apa sebutan notasi ini? Bagaimana saya membacanya?

Sebagai contoh:

  • yang DOCaturan tidak memiliki apa-apa di "pembilang" nya - mengapa tidak?
  • yang EXECdan GETaturan tampaknya memiliki dua istilah yang terpisah di atas garis, apa itu berarti?
  • yang VARaturan menonjol sedikit juga, karena sementara banyak aturan lainnya menggunakan semacam panah (yang saya akan ambil untuk berarti "menyiratkan") di bagian atas yang satu ini hanya tampaknya mengatakan bahwa x adalah elemen dari sesuatu.
  • hampir semuanya dibumbui dengan inisial Ap,yang digambarkan teks sebagai "keadaan replika p dijelaskan oleh Ap, fungsi parsial terbatas" - bagaimana pembaca yang cerdas dari notasi ini cenderung "melihat" bagian dari setiap aturan?

Situs ini memang menyarankan pertanyaan terkait yang memiliki beberapa notasi yang tampak sangat mirip, pada pertanyaan. Apa pentingnya ⟨B, s⟩ -> ⟨B ', s'⟩ sebagai aturan awal dalam pertanyaan ini tentang langkah kecil semantik? - ini ditandai sebagai semantik Operasional , dan yang tampaknya menjadi petunjuk kuat. Apakah itu memang kerangka di mana saya harus menafsirkan angka-angka ini? Bisakah Anda dengan mudah merangkum ini dalam bentuk "kursus kilat" sehingga, bahkan jika saya tidak dapat memverifikasi kebenaran bukti mereka, saya setidaknya bisa mendapatkan sedikit lebih banyak pemahaman tentang apa yang mereka katakan di bagian ini?

natevw
sumber

Jawaban:

25

Ini adalah notasi standar untuk aturan inferensi . Tempat diletakkan di atas garis horizontal, dan kesimpulan diletakkan di bawah garis. Dengan demikian, akhirnya tampak seperti "fraksi", tetapi dengan satu atau lebih proposisi logis di atas garis dan satu proposisi di bawah garis. Jika Anda melihat label (misalnya, "BIARKAN" atau "VAR" dalam contoh Anda) di sebelahnya, itu hanya nama yang dapat dibaca manusia untuk mengidentifikasi aturan tertentu.

Anda mungkin juga melihat ini disebut sebagai deduksi alami atau deduksi alami gaya Gentzen .

Ini adalah notasi umum dalam literatur bahasa pemrograman. Anda akan melihatnya di semua tempat. Sangat mudah untuk jenis kesimpulan dan bukti terstruktur rekursif yang muncul di bidang itu.

Anda akan melihat notasi ini digunakan untuk mengekspresikan aksioma / aturan. Anda dapat menganggap setiap aksioma sebagai templat dengan "meta-variable" (mis. Expr ); Anda dapat mengganti setiap meta-variabel dengan beberapa sintaks dari bahasa pemrograman (mis., ekspresi apa pun yang valid dalam bahasa pemrograman), dan Anda akan mendapatkan instance aturan. Aturan inferensi menjanjikan bahwa jika semua proposisi di atas garis adalah benar (untuk beberapa contoh template, di mana Anda secara konsisten mengganti setiap metavariabel dengan nilai yang sama di seluruh aturan), maka proposisi di bawah garis akan benar juga .

DW
sumber
2
Salah satu penggunaan penting adalah menentukan inferensi tipe Hindley-Milner: jawaban untuk "Bagian mana dari Milner-Hindley yang tidak Anda pahami?" Membahas cara membaca dan menggunakan seperangkat aturan itu.
DylanSp
Satu koreksi kecil: premis dan kesimpulannya adalah penilaian , bukan proposisi . Proposisi adalah bentuk penilaian tertentu. Sejalan dengan itu, penilaian terbukti , tidak benar (karena gagasan kebenaran sulit untuk didefinisikan dan tidak benar-benar menarik untuk semantik bahasa pemrograman).
Gardenhead
7

Berikut adalah penjelasan yang sangat informal yang mungkin membantu orang yang tidak terbiasa dengan notasi formal untuk mendapatkan kesempatan. Itu tidak menggantikan definisi formal!

The Ap adalah keadaan sistem atau program Anda berjalan. "Status" dapat berarti banyak hal, tetapi dalam kasus ini tampaknya menyertakan daftar semua variabel lokal yang ditentukan dan nilainya. Mengapa Ap berfungsi? Karena itu cara yang mudah untuk mengekspresikan penugasan variabel: Ap (x) memberikan nilai variabel x .

Sekarang, mari kita ambil aturan EXEC sebagai contoh. Ini mendefinisikan semantik mengeksekusi perintah cmd1 diikuti oleh cmd2 perintah , yaitu, apa yang terjadi dengan keadaan Ap sistem ketika menjalankan cmd1 diikuti oleh cmd2 .

  • Di atas garis: Ini adalah premis-premis. Apa yang mereka katakan: "Biarkan cmd1 menjadi perintah. Jika Anda menjalankan perintah cmd1 ketika sistem Anda dalam keadaan Ap , sistem Anda akan berakhir dalam keadaan baru Ap ' ."
  • Di bawah garis: Di sini aturan menjelaskan apa artinya menjalankan dua perintah cmd1 dan cmd2 secara berurutan. Apa yang dikatakannya: "Dengan asumsi sistem Anda dalam keadaan Ap , mengeksekusi cmd1 dan kemudian cmd2 berarti mengeksekusi cmd2 ketika sistem Anda dalam keadaan Ap ' " (ingat bahwa Ap' adalah keadaan yang Anda dapatkan setelah menjalankan cmd1 , seperti yang didefinisikan dalam tempat).

Aturan lain menggambarkan semantik dari perintah dan ekspresi individu. Sebagai contoh, aturan VAR menjelaskan apa artinya "mengeksekusi" suatu variabel: Jika x adalah variabel lokal (di atas garis), lalu apa artinya mengevaluasi / mengeksekusi variabel x ? Itu ditulis di bawah garis: Ketika program Anda dalam keadaan Ap , mengevaluasi x memberi Anda nilai x , yaitu Ap (x) .

Saya harap itu membantu.

trunklop
sumber
Terima kasih, ini sangat membantu untuk memahami dan persis apa yang saya cari! Namun itu membuat pertanyaan pertama saya tidak terjawab: apakah notasi ini memiliki nama, secara umum dan / atau dalam konteks khusus ini? Dugaan saya adalah "semantik operasional", tetapi jawaban lain di sini sejauh ini mengatakan mereka hanya "aturan inferensi". Saya kira jika saya mengajukan pertanyaan dua bagian, saya pantas mendapatkan jawaban yang terpisah, tetapi sekarang saya terpecah antara yang mana yang akan diterima :-)
natevw
1
@natevw Mereka adalah aturan inferensi. Semantik operasional hanyalah salah satu dari banyak hal yang biasanya dinyatakan dengan aturan inferensi.
Gilles 'SANGAT berhenti menjadi jahat'