Değişim koruyucu olarak çerçeve kuralı?


18

Aşağıdaki gibi bir çerçeve kuralı , çalıştırmadan önce cönkoşullu pve qsonrasında da geçerli olan sonkoşullu bir program verildiğinde , bazı ayrık koşulların rhem cçalıştırmadan önce hem de sonra tutulması gerektiği fikrini yakalar . ( *Bağ, bağımsız değişkenlerinin ayrık olmasını gerektirir.) Genellikle, ön ve son koşullar bir yığının durumlarıdır ve yığını cbir şekilde değiştiren etkili bir programdır.

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

Gördüğüm çerçeve kuralının tartışmaları her zaman öbeğin ayrık kısmının nasıl rkorunduğuna odaklanıyor gibi görünüyor . Bu, "yerel muhakeme" yi mümkün kılar: sahip olduğu etki hakkında muhakeme yaparken , yığının bir kısmını cgöz ardı edebilir rve kendimizi yalnızca gerçekte değişen kısım ile ilgilenebiliriz. Ancak ona bakmanın bir başka yolu , şu an orada oturmuş olsa bile, ' pdanq ' değerine geçişin korunmasıdır r. Başka bir deyişle, biz sonşartının ile bitirmek önemlidir {q * r}ziyade, {q' * r}diğer bazı için q'.

Benim sorum şu: çerçeve kuralının, pher qşeyden değişimin korunmasını tartışan veya kullanan herhangi bir tedavisi olup olmadığıdır .


: Kendi sorusuna verilecek yanıt bu yazıda olduğu software.imdea.org/~gotsman/papers/interproc-sas06.pdf P C'nin ayak izi ulaşacaktır ise yürütme, sonra Frame göre" cümle (vurgu mayın) 'de, C ek bellek R'nin varlığında aynı davranışla sonuçlanır ve C fazladan belleğe dokunmaz. " Ben sadece "C fazladan belleğe dokunmaz" yanı sıra, işaret etmek birini arıyorum "aynı davranış sonuçları" olduğunu. (Bağlantı için @kaosjester'a teşekkürler.)
Lindsey Kuper

1
Eğer çerçeve kural ve Ayırma Mantık diğer kurallar sağlamlığı provaları yoluyla okursanız onlar, yani sen sonra tam olarak ne yaptığını keşfedecek, nereden değişiklik hakkında konuşmak için q korunur. Burada belirtilen yerellik ve çerçeve özelliklerine dikkat edin. pq
Uday Reddy

Yanıtlar:


11

Ancak bu qözellikte değişiklik yapılmaması aslında geçerli değildir!

Düşünün {emp} x := alloc(0) {x |-> 0}. Şimdi, eğer çerçeveye girersem y |-> 3,

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

ancak sonuç kuralına göre, son koşulu şu şekilde değiştirebilirim:

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

Bunu daha somut hale getirmek yiçin, sayı olduğunu varsayalım 37. Tahsis komutunu tamamen boş bir yığın halinde çalıştırdığımda, adres tahsis edeceğim 37, böylece x = 37. Ancak, bunun yerine adreste tek bir hücre içeren bir yığınla başlarsam y = 37, bu sonuç artık mümkün değildir! Ön koşula bir çerçeve eklenmesi, son koşuldaki belirsizliğin bir kısmını budanmıştır.

"Yerel eylem ve soyut ayırma mantığı" (Calcagno, O'Hearn ve Yang), çerçeve kuralını daha derin, anlamsal bir perspektiften anlamakla ilgilidir. Makalenin temel tanımı, bir eylemin bir program (anlamsal temsili) olduğu "eylemler" için yerelliktir . Yerellik, bazı çerçeve yığınlarına eklediğinizde , orijinal son koşulun değiştirilebilmesinin tek yolunun, yukarıda belirtildiği gibi bazı belirsizliği budamaktır. Ve aslında, budama sadece tahsis nedeniyle ortaya çıkar.


Örnek ve referans için teşekkürler! Örneğiniz mantıklı. Yine de, bunun qsadece " qve ayrıca ..." olarak değişebileceğini söylemek adil mi? Ve ayrıca, eğer tahsis, postcondition'da belirsizliği bulan tek şey ise (ki bu kendi içinde harika bir sonuçtur), o zaman, postcondition'ın konumdan bağımsız olan bir kısmı varsa, o zaman postcondition'ın bu kısmı aynı kalmayı mı garanti ediyorsunuz? Son koşulun, konumların alfa yeniden adlandırılmasıyla aynı kaldığını söyleyebilir miyiz? (Aklımda bir örnek var, ama belki de bu e-posta yoluyla daha iyi açıklanır.)
Lindsey Kuper

1
Evet, qyalnızca " qve ayrıca ..." olarak değişebilir Başka bir deyişle, son koşul yalnızca daha güçlü olabilir : orijinal son koşul anlamına gelir. Bu, eylemler için yerellik tanımının bir parçasıdır. Ancak, son koşuldaki değişikliğin yalnızca yeniden adlandırmaya bağlı olduğu doğru değildir. Verdiğim örnekte, xve yfarklı olan ekstra gerçek, seçilen adrese bakılmaksızın doğrudur y. Örnek , yeniden adlandırma altında değişmez olan tahsisin tazeliğini yakalar .
Aaron Turon

11

İlk olarak, sorunuzun ifadesinde küçük bir yanlış anlama var, bu da Aaron'un cevabında da başlamıştı. Ayırma mantığındaki tahminler kümeler kümesidir (veya eşdeğer olarak kümeler üzerinde tahmin eder) ve ayırma bağlantısı şu şekilde tanımlanır:P*S

P*R,{h1h2|h1Ph2R,dÖm(h1)dÖm(h2)=}

Yani çerçeve kuralında

{P}c{S}{P*R,}c{S*R,}

(ve P ve Q ) belirli yığınlardan bahsetmemektedir --- yığınlarınözellikleridir(alt kümeler ve tahminler eşdeğerdir). Neler olduğunu anlamanın en iyi yolu, bir Hoare üçlüünün ne anlama geldiğinin tanımına bakmaktır:R,PS

{P}c{S}h1P.h''Hebirpsth'#h1.h2S.h1h';c*h2h';skbenp

Bu tanım temelde koşarsan ki (1) diyor herhangi biriyle h 1 de P , o zaman bazı son durum içinde bitiririz saat 2 de Q ve herhangi ekstra bellek üzerinde eklerseniz (2) h ' , yani bellek olacak koşu sonunda değişmeden. Ama bu notu belirli h 2 Alacağınız farklı seçimleri için, farklı olabilir h ' --- Ne garantili ediliyor olmasıdır özellikleri P ve Q tam olarak aynı sonuç yığın olsun ki uzantısı altında tutmaya devam edecektir.ch1Ph2Sh' h2h' PS

Hoare üçlü tanımının çerçeve kuralının sahip olduğunu ima ettiğini görmek çok zor değil, ama yine de çalışmaya değer. Belirttiğiniz gibi, bu bir tür "değişikliklerin korunması" özelliğidir ve eşzamanlı ayırma mantığındaki paralel kompozisyon kuralı ifadesinde özellikle canlı bir ifadeye sahiptir:

{P1}c1{S1}{P2}c2{S2}{P1*P2}c1||c2{S1*S2}

c1c2

Bu makalede Hoare ve ark., Yerellik Üzerine ve Eşzamanlı Süreçler için Değişim Kanunu tarafından birleştirilmiş bir program ve iddiaların bir cebirinin nasıl verileceğini gösterdikleri bir tartışma var .


Hoare üçlülerinin tanımı yanlış görünüyor: Yürütmenin başarısız olmadığını, sonlandırmaya izin vereceğini, muhtemelen güvenlik monotonikliği olmayan modelleri engellememesi gerektiğini söylemeliyiz. (Ancak, evet, açıkladığınız nedenlerle "değişikliklerin korunması" hakkında konuşmanın tamamen makul olduğunu kabul ediyorum.)
Radu GRIG

3
(1) Toplam doğruluk üçlüleri için semantik verdim ve bu yüzden komutun güvenli bir şekilde tamamlandığını iddia ediyor - toplam doğruluğun, ön ve son koşulların ahlaksız / varolan karakterini açıklamayı daha kolay hale getirdiğini görüyorum. (2) Bu üçlü anlambilimi, dil anlambiliminde güvenlik tekdüzeliği olmayan dilleri üçlü anlamına getirerek işlemek için (Birkedal ve Yang tarafından IIRC) icat edilmiştir. Sonuç olarak, yine de Hoare mantığı için çerçeve kuralına sahipken, dilde monotonik olmayan yapılara (örneğin, yığının ne kadar büyük olduğuna dair sorgular) sahip olabilirsiniz.
Neel Krishnaswami

c

1
Teşekkürler Neel! Haklısın, P ve Q özelliklerini belirli yığınlarla karıştırıyordum. Yani, yorumunuzu özetlemek gerekirse: Q korunur, ancak sonunda elde ettiğiniz özel yığın , daha önce aldığınızdan farklı bir Q tatmin edici yığın olabilir. Evet?
Lindsey Kuper

1
@RaduGRIGore: evet, dilin deterministik olduğunu varsayıyordum ve eşzamanlılık eklediğimizde bu varsayım başarısız olacak. İyi yakaladın!
Neel Krishnaswami

2

100% ile ilgili olmasa da, bu sözleşme idempotence lezzet vardır.

{P} 'yi c üzerinde bir ön koşul olarak ve {q}' yi c üzerinde bir son koşul olarak düşünürsek, bu bir çerçeve kuralı fikri, ön ve son koşulların hesaplamanın her bağlamında değil, başka hiçbir şeyin olmadığı basit durum.

Bununla birlikte, okuduğum düzinelerce sözleşme belgesinin herhangi birinde sunulan böyle bir çerçeve kuralı gördüğümü söyleyemem. Yine de, bu kesinlikle harika bir fikirdir ve böyle bir değişikliğe ihtiyaç duymak , idempotent sözleşmelerin makul ve somut bir anlayışını geliştirmek için çok şey yapabilir .


Yorum için teşekkürler. Hm, ilginç - Bunu okuyan herkes çerçeve özelliklerini belirten sözleşme kağıtlarını biliyor mu merak ediyorum.
Lindsey Kuper
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.