Apa perbedaan antara hubungan logis dan simulasi?

29

Saya seorang pemula yang bekerja pada metode yang membuktikan kesetaraan program. Saya telah membaca beberapa makalah tentang mendefinisikan hubungan logis atau simulasi untuk membuktikan bahwa dua program setara. Tetapi saya cukup bingung tentang dua teknik ini.

Saya hanya tahu hubungan logis didefinisikan secara induktif sementara simulasi didasarkan pada coinduction. Mengapa mereka didefinisikan sedemikian rupa? Apa pro dan kontra mereka masing-masing? Yang mana yang harus saya pilih dalam situasi yang berbeda?

Hongjin Liang
sumber
1
Anda mungkin ingin memberikan tautan ke makalah ini yang sudah Anda baca. Ini akan membuatnya lebih jelas contoh spesifik mana yang membingungkan Anda.
Marc Hamann
1
Untuk hubungan logis, saya telah membaca makalah Hur dan Dreyer baru-baru ini "Hubungan logis Kripke antara ML dan perakitan" (POPL'11). Juga saya telah membaca bab-bab klasik dalam buku Pierce "Topik Lanjutan dalam Jenis dan Bahasa Pemrograman". Saya menemukan hubungan logis didefinisikan secara induktif pada struktur tipe bahasa, tetapi bagaimana jika bahasa tersebut tidak memiliki struktur tipe (seperti C)? (Sepertinya pertanyaan lain, saya kira.)
Hongjin Liang
1
Sebagai simulasi, saya telah membaca makalah asli "Hukum aljabar untuk nondeterminisme dan konkurensi" oleh Hennessy dan Milner. Koutavas dan Wand "Bisimulasi kecil untuk alasan tentang program imperatif tingkat tinggi" (POPL'06) tidak dapat dipahami oleh saya dan saya tidak yakin mengapa mereka menyebut metode mereka "bisimulasi".
Hongjin Liang
3
akan lebih baik jika Anda memasukkan informasi yang Anda berikan dalam komentar di pos. Anda dapat mengedit pertanyaan Anda dengan mengklik tautan edit di bawah pertanyaan.
Kaveh
1
@ HongjinLiang: Jika Anda tidak memiliki struktur tipe (atau jika Anda memiliki tipe rekursif), Anda dapat menggunakan hubungan logis langkah-diindeks - dengan hubungan logis Anda menggunakan induksi pada jenis, dengan langkah-indeks Anda melakukan induksi pada langkah-langkah pengamatan. Anda akan menemukan petunjuk dalam pernyataan penelitian Amal Ahmed: ccs.neu.edu/home/amal/ahmed-research.pdf . (Tinjauan umum tentang penelitian tentang hubungan logis adalah pembicaraan dari Derek Dreyer dan dalam pernyataan penelitiannya: mpi-sws.org/~dreyer/research.pdf ).
Blaisorblade

Jawaban:

20

Saya punya jawaban untuk pertanyaan ini yang mungkin novel. Bahkan, saya masih memikirkannya selama 6 bulan terakhir, dan itu belum ditulis di surat kabar.

Tesis umum adalah bahwa prinsip-prinsip penalaran relasional seperti "hubungan logis", "simulasi", dan bahkan "invarian" adalah manifestasi dari abstraksi data atau penyembunyian informasi. Di mana pun ada informasi yang disembunyikan, prinsip-prinsip ini akan muncul.

Orang pertama yang menemukannya adalah ahli teori automata. Automata memiliki status tersembunyi. Jadi, Anda perlu alasan relasional untuk berbicara tentang kesetaraan mereka. Ahli teori Automata berjuang dengan homomorfisme untuk sementara waktu, menyerah, dan muncul dengan gagasan yang disebut "penutup relasional", yang merupakan bentuk hubungan simulasi.

Milner mengambil gagasan itu dalam sebuah makalah yang sedikit diketahui tetapi sangat mendasar yang disebut " Gagasan aljabar simulasi antar program " pada tahun 1971. Hoare mengetahuinya dan menggunakannya untuk menghasilkan " Bukti kebenaran representasi data " pada tahun 1972 (tetapi digunakan fungsi abstraksi bukan hubungan karena dia pikir itu "lebih sederhana"). Dia kemudian mencabut klaim kesederhanaan dan kembali menggunakan hubungan dalam " Penyempitan data yang disempurnakan ". Reynolds menggunakan penalaran relasional dalam " Craft of Programming", Bab 5 (1981). Dia pikir hubungan lebih alami dan umum daripada fungsi abstraksi. Jika Anda kembali dan membaca bab ini, Anda akan menemukan ide-ide parametrisitas relasional yang mengintai, menunggu untuk ditemukan. Tentu saja, dua tahun kemudian, Reynolds menerbitkan "Jenis, abstraksi dan polimorfisme parametrik" (1983).

Sepertinya semua ide ini tidak ada hubungannya dengan tipe, tetapi mereka benar-benar melakukannya. Bahasa Stateful dan model telah built-in abstraksi data. Anda tidak perlu mendefinisikan "tipe data abstrak" untuk menyembunyikan informasi. Anda cukup mendeklarasikan variabel lokal dan menyembunyikannya. Kita bisa mengajarkannya kepada siswa tahun pertama di kelas-kelas Jawa dalam beberapa minggu pertama. Tanpa keringat.

Bahasa dan model fungsional, di sisi lain, harus menyembunyikan informasinya melalui tipe . Model fungsional tidak memiliki abstraksi data bawaan. Kita harus menambahkannya secara eksplisit, menggunakan atau . Jadi, jika Anda menerjemahkan bahasa stateful ke bahasa fungsional, Anda akan melihat semua keadaan lokal diterjemahkan ke dalam variabel tipe. Untuk deskripsi eksplisit tentang cara kerjanya, lihat makalah saya " Objek dan kelas dalam bahasa seperti Algol ", tetapi ide-ide itu benar-benar berasal dari Reynolds 1981 ("The Essence of Algol"). Kami hanya memahami ide-ide klasik yang lebih baik sekarang.

Ambil dua mesin dan yang ingin Anda buktikan setara. Milner 1971 mengatakan, mendefinisikan hubungan antara keadaan dan dan menunjukkan bahwa kedua mesin mempertahankan hubungan. Reynolds parametricity mengatakan, anggap keadaan mesin sebagai milik tipe dan . Tentukan hubungan antara mereka. Jika mesin-mesin dari tipe dan , parameter oleh jenis negara mereka, kemudian periksa bahwa dua mesin terkait oleh hubungan . M M M X X R F ( X ) F ( X ) F ( R )MMMMXXRF(X)F(X)F(R)

Jadi, simulasi dan parametrisitas relasional pada dasarnya adalah ide yang sama . Ini bukan hanya kemiripan yang dangkal. Yang pertama dibuat untuk bahasa stateful di mana ada abstraksi data bawaan. Yang terakhir dibuat untuk bahasa stateless di mana abstraksi data diperoleh melalui variabel tipe.

Lalu bagaimana dengan hubungan logis? Di permukaan, hubungan logis tampaknya menjadi ide yang lebih umum. Sedangkan parametrikitas berbicara tentang bagaimana menghubungkan variabel tipe dalam model yang sama, hubungan logis tampaknya menghubungkan tipe di berbagai model. (Dave Clarke menulis eksposisi yang brilian tentang ini sebelumnya.) Tetapi perasaan saya (dan masih perlu diperagakan) bahwa ini adalah contoh dari beberapa bentuk parametrikitas tipe yang lebih tinggi yang belum dirumuskan. Tetap disini untuk kemajuan lebih lanjut di bagian depan itu.


[Catatan ditambahkan] Koneksi antara hubungan logis dan simulasi dibahas dalam makalah kami baru-baru ini Hubungan logis dan parametrik: Program Reynolds untuk Teori Kategori dan Bahasa Pemrograman .

Uday Reddy
sumber
F(R)Rfunctor F
FR:XXF(R):F(X)F(X)F(R)F(R)
14

Salah satu perbedaan utama adalah bahwa hubungan logis digunakan sebagai teknik untuk menunjukkan bahwa kelas program (misalnya, input ke kompiler) sesuai dengan kelas program lain (misalnya, output dari kompiler), sedangkan hubungan simulasi digunakan untuk menunjukkan korespondensi antara dua program.

Kesamaan antara dua gagasan adalah bahwa keduanya mendefinisikan hubungan yang digunakan untuk menunjukkan korespondensi antara dua entitas yang berbeda. Dalam beberapa hal, orang dapat menganggap relasi logis sebagai relasi simulasi yang didefinisikan secara induktif pada sintaks tipe. Tetapi berbagai jenis hubungan simulasi ada.

Hubungan logis dapat digunakan untuk menunjukkan korespondensi antara bahasa seperti ML dan terjemahannya ke dalam bahasa assembly, seperti dalam makalah yang Anda baca. Relasi logis didefinisikan secara induktif pada struktur tipe. Relasi logis menyediakan sarana komposisional untuk menunjukkan, misalnya, bahwa terjemahan benar, dengan menunjukkan bahwa terjemahan itu benar untuk setiap konstruktor tipe. Pada tipe fungsi kondisi kondisi kebenaran akan mengatakan sesuatu seperti, terjemahan fungsi ini mengambil input yang diterjemahkan dengan baik ke output yang diterjemahkan dengan baik.

Hubungan logis adalah teknik serbaguna untuk bahasa berdasarkan kalkulus lambda. Aplikasi lain dari hubungan logis termasuk (dari sini ): mengkarakterisasi kemampuan lambda, menghubungkan definisi semantik denotasional, mengkarakterisasi polimorfisme parametrik, memodelkan interpretasi abstrak, memverifikasi representasi data, mendefinisikan semantik abstrak sepenuhnya dan memodelkan keadaan lokal dalam bahasa tingkat tinggi.

Hubungan simulasi umumnya digunakan untuk menunjukkan kesetaraan dua program. Biasanya program semacam itu menghasilkan semacam pengamatan, seperti mengirim pesan di saluran. Satu program P mensimulasikan Q lain jika P dapat melakukan semua yang dapat dilakukan Q, meskipun mungkin lebih.

Bisimulasi, secara kasar, adalah dua hubungan simulasi yang disatukan. Anda menunjukkan bahwa program P dan mensimulasikan program Q dan program Q dapat mensimulasikan program P dan Anda memiliki bisimulasi, meskipun kondisi tambahan umumnya ada. Entri Wikipedia tentang bisimulasi adalah titik awal yang baik (lebih tepat). Ada ribuan varian gagasan, tetapi ini adalah gagasan mendasar yang telah diciptakan kembali dalam kurang lebih bentuk ilmu komputer, logika modal, dan teori model yang sama. Artikel Sangiorgi memberikan sejarah ide yang indah.

Satu makalah yang membangun hubungan antara dua gagasan adalah Catatan tentang Hubungan Logika Antara Semantik dan Sintaksis oleh Andy Pitts yang menggunakan hubungan logis, akhirnya gagasan semantik yang didefinisikan secara sintaksis, untuk membuktikan sifat tertentu tentang bisimulasi aplikatif , yang merupakan gagasan sintaksis murni.

Dave Clarke
sumber
Terima kasih banyak atas penjelasan terperinci Anda! Saya akan membaca referensi Anda dan mencoba mencari koneksi mendalam / perbedaan antara keduanya.
Hongjin Liang
apakah Anda yakin dengan pernyataan "Anda menunjukkan bahwa program P dan mensimulasikan program Q dan program Q dapat mensimulasikan program P dan Anda memiliki bisimulasi."? Misalkan A = (a. (B + c)) + (a.b + ac) dan B = a.b + ac ketika sejauh yang saya tahu A mirip dengan B, B mirip dengan A, tapi A dan B tidak bisimilar.
András Salamon
@ András: Anda benar. Pernyataan saya tidak cukup tepat. Perbedaannya disarikan dengan frasa "Beberapa kondisi tambahan mungkin ada".
Dave Clarke
Hennessy dan Milner mendefinisikan tiga jenis hubungan kesetaraan dalam makalah asli mereka untuk bisimulasi dan memberikan beberapa contoh untuk menggambarkan perbedaan mereka. Pernyataan asli Anda sebenarnya adalah yang sedang dalam makalah mereka, yang lebih lemah dari bisimulasi dan lebih kuat dari jejak kesetaraan. Saya tidak yakin ekuivalensi mana yang lebih baik. Mungkin itu tergantung pada penggunaan praktis.
Hongjin Liang
Simulasi juga digunakan sebagai teknik bukti untuk menetapkan perbaikan data antara dua tipe data. Setiap bukti simulasi tersebut berhubungan dengan seluruh kelas program. Lihat misalnya [1] untuk detailnya. Ini menunjukkan bahwa perbedaan antara kedua konsep tersebut bahkan lebih blurrier. [1]: CAR Hoare, He J, dan JW Sanders. Prespecification dalam penyempurnaan data. Information Processing Letters , 25: 71-76, 1987.
Kai
8

Dua jenis hubungan tampaknya digunakan dalam konteks yang berbeda. Simulasi logis untuk bahasa yang diketik dan hubungan simulasi ketika berhadapan dengan proses kalkulus atau modal logika ditafsirkan melalui sistem transisi. Dave Clarke telah memberikan banyak penjelasan intuitif, jadi saya hanya akan menambahkan beberapa petunjuk yang dapat membantu.

Telah ada upaya untuk mengkarakterisasi kedua konsep menggunakan interpretasi abstrak. Mungkin bukan yang Anda inginkan, tetapi setidaknya kedua gagasan diperlakukan dalam kerangka matematika yang sama.

Samson Abramsky menggunakan hubungan logis untuk membuktikan kesehatan dan penghentian analisis ketelitian untuk kalkulus Lambda malas ( Abstrak Interpretasi, Hubungan Logis, dan Ekstensi Kan ). Dia juga menunjukkan bahwa hubungan logis mendefinisikan fungsi abstraksi dalam pengertian koneksi Galois dari interpretasi abstrak. Baru-baru ini, Backhouse dan Backhouse menunjukkan bagaimana membangun koneksi Galois untuk tipe orde tinggi dari koneksi Galois untuk tipe dasar dan bahwa konstruksi ini dapat dijelaskan secara setara menggunakan hubungan logis ( Logical Relations dan Galois Connections ). Dengan demikian, dalam konteks spesifik bahasa fungsional yang diketik, kedua gagasan itu setara.

Hubungan simulasi menandai pelestarian properti antara struktur Kripke untuk berbagai modal dan logika temporal. Alih-alih tipe, kami memiliki modalitas dalam logika. Hubungan simulasi juga mendefinisikan koneksi Galois dan karenanya, abstraksi. Orang dapat bertanya apakah abstraksi ini memiliki sifat khusus. Jawabannya adalah bahwa abstraksi standar adalah suara dan abstraksi berbasis hubungan simulasi selesai. Gagasan kelengkapan adalah sehubungan dengan koneksi Galois, yang mungkin tidak sependapat dengan interpretasi yang intuitif. Lini pekerjaan ini telah dikembangkan oleh David Schmidt ( Hubungan Biner Struktur-Melestarikan untuk Abstraksi Program ), dan Francesco Ranzato dan Francesco Tapparo ( Pelestarian Kuat Umum dengan Interpretasi Abstrak ).

Vijay D
sumber
Jawaban Anda sangat membantu yang menghubungkan konsep-konsep dengan interpretasi abstrak. Terima kasih!
Hongjin Liang
Sebuah pertanyaan yang tulus: Saya bukan ahli, tetapi bukankah Reynolds (1983, "Jenis, abstraksi dan parametrik polimorfisme") sudah mendefinisikan hubungan logis yang merupakan koneksi Galois (Bagian 6)? Satu-satunya perbedaan yang saya perhatikan: dia tidak mengatakan istilah "koneksi Galois" tetapi hanya "fungsi adjoin setara antara perintah parsial dianggap sebagai kategori", dan dia membatasi ke domain. OTOH, Backhouse dan Backhouse mengutip Reynolds tetapi tidak membahas klaim ini, dengan satu atau lain cara.
Blaisorblade
6

Saya akan mengatakan bahwa kedua konsep ini agak kabur. Keduanya tentang hubungan biner dari mekanisme komputasi yang entah bagaimana mewujudkan gagasan kesetaraan. Relasi logis didefinisikan oleh induksi tipe-struktur, sementara simulasi dapat didefinisikan sesuka Anda, tetapi istilah ini merujuk pada koinduksi.

π

Martin Berger
sumber
Referensi Anda sangat bagus! Saya belum pernah mendengar hubungan logis untuk program bersamaan sebelumnya. Terima kasih! Saya kira kesulitan mendefinisikan hubungan logis adalah dalam menemukan struktur tipe. Dengan struktur tipe yang sama, hubungan logis dapat didefinisikan antara bahasa pemrograman yang berbeda. Di sisi lain, simulasi memerlukan program pemodelan oleh sistem transisi negara, yang mungkin tidak mudah jika program ditulis untuk model negara yang berbeda.
Hongjin Liang
Halo! Ya, menemukan struktur tipe yang tepat mungkin tidak selalu mudah. Anda dapat menentukan simulasi menggunakan sistem transisi yang berbeda untuk dua kalkulus yang ingin Anda bandingkan. Orang bisa berpendapat bahwa definisi simulasi lemah tidak hanya itu. Yang Anda perlukan untuk mendefinisikan simulasi adalah hubungan untuk membandingkan label transisi.
Martin Berger