Aturan bingkai sebagai perubahan-pemelihara?


18

Sebuah aturan bingkai , seperti yang diberikan di bawah ini, menangkap gagasan bahwa, mengingat program cdengan prasyarat pyang memegang sebelum berjalan dan postcondition qyang memegang sesudahnya, beberapa kondisi menguraikan rharus memegang baik sebelum dan sesudah cberjalan. ( Konektif *mensyaratkan bahwa argumennya terpisah.) Seringkali, kondisi pra dan pasca adalah keadaan tumpukan, dan cmerupakan program yang efektif yang memodifikasi tumpukan dengan beberapa cara.

    {p} c {q}
----------------- (where no free variable in r is modified by c)
{p * r} c {q * r}

Diskusi tentang aturan bingkai yang saya lihat selalu tampak berfokus pada bagaimana bagian yang terpisah dari tumpukan, rdipertahankan. Ini memungkinkan "penalaran lokal": ketika berpikir tentang efek yang cdimilikinya, kita dapat mengabaikan rbagian tumpukan dan hanya memusatkan perhatian pada bagian yang benar-benar berubah. Tetapi cara lain untuk melihatnya adalah bahwa perubahan dari pkeq dipertahankan, meskipun rsekarang duduk di sana. Dengan kata lain, penting bahwa kita berakhir dengan kondisi akhir {q * r}, bukan {q' * r}untuk beberapa lainnya q'.

Jadi, pertanyaan saya adalah apakah ada perawatan dari aturan frame yang dibahas atau merek penggunaan pelestarian-of-perubahan-dari- p-to- qhal.


Satu jawaban untuk pertanyaan saya sendiri ada di makalah ini: software.imdea.org/~gotsman/papers/interproc-sas06.pdf , dalam kalimat (penekanan milik saya) "Jika P memastikan jejak C dialokasikan, maka menurut Frame, mengeksekusi C di hadapan memori tambahan R menghasilkan perilaku yang sama , dan C tidak menyentuh memori tambahan. " Ini yang "menghasilkan perilaku yang sama" yang saya cari seseorang untuk tunjukkan, selain hanya "C tidak menyentuh memori tambahan". (Terima kasih kepada @kaosjester untuk tautannya.)
Lindsey Kuper

1
Jika Anda membaca bukti kesehatan dari aturan frame dan aturan lain dari Separation Logic, Anda akan menemukan bahwa mereka melakukan apa yang Anda cari, yaitu, mereka berbicara tentang bagaimana perubahan dari ke q dipertahankan. Perhatikan lokalitas dan bingkai properti yang disebutkan di sana. pq
Uday Reddy

Jawaban:


11

Tapi properti no-change-to- qproperty ini sebenarnya tidak berlaku!

Pertimbangkan {emp} x := alloc(0) {x |-> 0}. Sekarang, jika saya membingkai y |-> 3, saya mengerti

{y |-> 3} x := alloc(0) {x |-> 0 * y |-> 3}

tetapi, dengan aturan konsekuensi, saya bisa mengubah postcondition menjadi

{y |-> 3} x := alloc(0) {(x |-> 0 /\ x != y) * y |-> 3}

Untuk membuat ini lebih konkret, anggaplah yangkanya 37. Ketika saya menjalankan perintah alokasi di tumpukan yang benar-benar kosong, mungkin saja saya akan akhirnya mengalokasikan alamat 37, jadi x = 37. Tetapi, jika saya mulai dengan tumpukan yang berisi sel tunggal di alamat y = 37, hasil ini tidak lagi mungkin! Menambahkan bingkai ke prasyarat telah memangkas beberapa nondeterminisme dalam postkondisi.

Makalah "Tindakan lokal dan logika pemisahan abstrak" (Calcagno, O'Hearn, dan Yang) adalah semua tentang memahami aturan bingkai dari perspektif semantik yang lebih dalam. Definisi utama dari makalah ini adalah lokalitas untuk "tindakan", di mana suatu tindakan adalah (representasi semantik dari) sebuah program. Lokalitas mengatakan bahwa ketika Anda menambahkan beberapa frame heap, satu - satunya cara postcondition asli dapat diubah adalah dengan memangkas beberapa nondeterminisme seperti di atas. Dan, pada kenyataannya, pemangkasan hanya muncul karena alokasi.


Terima kasih untuk contoh dan untuk referensi! Teladan Anda masuk akal. Apakah adil untuk mengatakan, bahwa itu qhanya dapat berubah menjadi " q, dan juga ..."? Dan, lebih jauh lagi, jika alokasi adalah satu-satunya hal yang dapat memangkas nondeterminisme dalam postcondition (yang merupakan hasil yang keren dalam dirinya sendiri), maka, jika ada beberapa bagian dari postcondition yang independen terhadap lokasi, maka adalah bagian dari postcondition dijamin tetap sama? Bisakah kita mengatakan bahwa postcondition tetap sama hingga penggantian nama alpha dari lokasi? (Saya punya contoh, tetapi mungkin ini lebih baik dijelaskan melalui email.)
Lindsey Kuper

1
Ya, qhanya bisa berubah menjadi " q, dan juga ..." Dengan kata lain, postcondition hanya bisa menjadi lebih kuat : itu akan menyiratkan postcondition asli. Ini adalah bagian dari definisi lokalitas untuk tindakan. Namun, tidak benar bahwa perubahan pada kondisi akhir hanya terkait dengan penggantian nama. Dalam contoh saya berikan, fakta tambahan yang xdan yyang berbeda adalah benar terlepas dari alamat tertentu dipilih untuk y. Contoh ini menangkap kesegaran alokasi, yang tidak berubah di bawah penamaan ulang.
Aaron Turon

11

Pertama, ada kesalahpahaman kecil dalam pernyataan pertanyaan Anda, yang juga diterima Harun dalam jawabannya. Predikat dalam logika pemisahan adalah kumpulan tumpukan (atau ekuivalen, predikat pada tumpukan), dan konjungsi pemisah didefinisikan sebagai:PQ

PR{h1h2|h1Ph2Rdom(h1)dom(h2)=}

Jadi dalam aturan frame

{P}c{Q}{PR}c{QR}

(dan P dan Q ) tidak berbicara tentang tumpukan spesifik --- mereka adalahpropertitumpukan (karena himpunan bagian dan predikat adalah setara). Cara terbaik untuk memahami apa yang terjadi adalah dengan melihat definisi dari apa yang dipegang oleh Hoare triple:RPQ

{P}c{Q}h1P.hHeaps.t.h#h1.h2Q.h1h;ch2h;skip

Definisi ini pada dasarnya mengatakan bahwa (1) jika Anda menjalankan dengan h 1 di P , maka Anda akan menyelesaikan dalam beberapa keadaan akhir h 2 di Q , dan (2) jika Anda menambahkan memori tambahan h , memori itu akan tidak berubah di akhir proses. Tetapi perhatikan bahwa h 2 spesifik yang Anda dapatkan dapat berbeda, untuk berbagai pilihan h --- yang dijamin adalah bahwa properti P dan Q akan terus bertahan di bawah ekstensi, bukan bahwa Anda mendapatkan tumpukan hasil yang persis sama.ch1Ph2Qh h2h PQ

Ini tidak terlalu sulit, tetapi masih layak untuk dikerjakan, untuk melihat bagaimana definisi Hoare triple ini menyiratkan bahwa aturan frame berlaku. Seperti yang Anda perhatikan, ini adalah semacam properti "pelestarian-perubahan", dan ia memiliki ekspresi yang sangat jelas dalam pernyataan aturan komposisi paralel dalam logika pemisahan bersamaan:

{P1}c1{Q1}{P2}c2{Q2}{P1P2}c1||c2{Q1Q2}

Jika dan c 2 bertindak pada daerah memori terpisah, maka masing-masing tidak akan mengganggu properti eksekusi yang lain ketika dijalankan secara paralel.c1c2

Ada diskusi tentang hal ini dalam makalah oleh Hoare et al, On Locality dan Exchange Law for Concurrent Processes , di mana mereka menunjukkan bagaimana memberikan aljabar gabungan program dan pernyataan.


Definisi untuk Hoare tiga kali lipat terlihat salah: Seharusnya eksekusi tidak salah, seharusnya mengizinkan non-terminasi, mungkin tidak boleh menghalangi model yang tidak memiliki monotonisitas keselamatan. (Tapi, ya, saya setuju bahwa sangat masuk akal untuk berbicara tentang "pelestarian perubahan" untuk alasan yang Anda jelaskan.)
Radu GRIGore

3
(1) Saya memberikan semantik untuk tripel ketelitian total, dan dengan demikian menegaskan bahwa perintah selesai dengan aman - saya menemukan bahwa kebenaran total membuat menjelaskan forall / ada karakter pra dan kondisi pasca lebih mudah untuk dilihat. (2) Semantik tiga kali lipat ini sebenarnya diciptakan (IIRC oleh Birkedal dan Yang) untuk menangani bahasa yang tidak memiliki monotonisitas keselamatan dalam semantik bahasa, dengan membangunnya menjadi makna tiga kali lipat. Sebagai hasilnya, Anda dapat memiliki konstruksi non-monoton (misalnya, pertanyaan tentang seberapa besar tumpukan) dalam bahasa, sementara masih memiliki aturan bingkai untuk logika Hoare.
Neel Krishnaswami

c

1
Terima kasih, Neel! Anda benar, saya menggabungkan properti P dan Q dengan tumpukan tertentu. Jadi, untuk meringkas komentar Anda: Q dipertahankan, tetapi tumpukan tertentu yang Anda dapatkan pada akhirnya bisa menjadi tumpukan Q-memuaskan yang berbeda dari yang Anda dapatkan sebelumnya. Iya?
Lindsey Kuper

1
@ RaduGRIGore: ya, saya berasumsi bahwa bahasa itu deterministik, dan asumsi ini akan gagal ketika kita menambahkan konkurensi. Tangkapan bagus!
Neel Krishnaswami

2

Meskipun tidak 100% terkait, ini memiliki rasa idempoten kontrak.

Jika kita menganggap {p} sebagai prasyarat pada c dan {q} sebagai prasyarat pada c, gagasan aturan bingkai ini akan memastikan bahwa prekondisi dan pascakondisi berlaku dalam setiap konteks perhitungan, bukan kasus sederhana di mana tidak ada yang lain.

Yang mengatakan, saya tidak bisa mengatakan bahwa saya telah melihat aturan kerangka yang disajikan dalam salah satu dari puluhan makalah kontrak yang saya baca. Ini tentu saja merupakan ide yang hebat, dan membutuhkan perubahan seperti itu dapat melakukan banyak hal untuk mengembangkan pemahaman yang masuk akal dan nyata dari kontrak idempoten .


Terima kasih atas komentarnya. Hm, menarik - Saya ingin tahu apakah ada orang lain yang membaca ini tahu tentang kontrak kertas yang menyatakan bingkai properti.
Lindsey Kuper
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.