변경 프리 서버로서의 프레임 규칙?


18

프레임 규칙은 , 아래의 하나처럼, 프로그램 주어진한다는 생각 캡처 c전제 조건으로 p이 실행되기 전에 보유 및 사후 q이후 보유, 일부 분리 된 조건이 r전후를 보유해야 c실행됩니다. ( *연결은 인수가 분리되어야합니다.) 종종 사전 및 사후 조건은 힙의 상태이며 c힙을 어떤 방식 으로든 수정하는 효과적인 프로그램입니다.

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

내가 본 프레임 규칙에 대한 논의는 항상 힙의 분리 된 부분이 어떻게 r보존 되는지에 초점을 맞추는 것처럼 보입니다 . 이것은 "로컬 추론"을 가능하게합니다. 그 영향에 대해 추론 할 때 c, 우리는 r힙 부분을 무시하고 실제로 변하는 부분에만 관심을 가질 수 있습니다. 그러나 그것을 보는 또 다른 방법 은 지금 거기에 앉아 있지만 에서 p로의 변화q 가 유지 된다는 r것입니다. 다시 말해, 우리는 다른 {q * r}것보다는 사후 조건으로 끝내는 것이 중요합니다 .{q' * r}q'

그래서, 내 질문은 나와 나 차종이 보존 --의 변화 단으로의 사용을 프레임 규칙의 어떤 치료가 있는지 여부입니다 pDi의 q일.


내 자신의 질문에 대한 한 가지 대답은이 백서에 있습니다 : software.imdea.org/~gotsman/papers/interproc-sas06.pdf , 문장 (강조 광산) "P가 C의 발자국을 할당하면 프레임에 따라 실행 추가 메모리가 있는 경우 C는 동일한 동작 을하며 C는 추가 메모리를 건드리지 않습니다. " "C는 여분의 메모리를 건드리지 않는다"는 것 외에 다른 사람이 지적한 것은 "같은 행동으로 귀결된다"는 것입니다. (링크를 위해 @kaosjester에게 감사합니다.)
— Lindsey Kuper

1
프레임 규칙 및 기타 분리 논리 규칙의 건전성 증명을 읽으면, 그들이 정확히 무엇을하고 있는지, 즉 에서 로의 변경이 어떻게 보존 되는지에 대해 이야기한다는 것을 알게 될 것 입니다. 여기에 언급 된 지역 및 프레임 속성에주의하십시오. qpq
— Uday Reddy

답변:


11

그러나이 q부동산 변경 없음 은 실제로 유지되지 않습니다!

고려하십시오 {emp} x := alloc(0) {x |-> 0}. 이제 프레임에 y |-> 3들어가면

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

그러나 결과에 따라 사후 조건을 다음과 같이 변경할 수 있습니다.

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

보다 구체적으로하기 위해 y숫자가 있다고 가정 합니다 37. 나는 완전히 비어 힙에 할당 명령을 실행하면, 내가 주소를 할당 끝날 가능성이 있습니다 37있도록 x = 37. 그러나 address에 단일 셀을 포함하는 힙으로 시작 y = 37하면이 결과는 더 이상 가능하지 않습니다! 사전 조건에 프레임을 추가하면 사후 조건에서 일부 비결 정성이 정리되었습니다.

"로컬 액션과 추상 분리 로직"(Calcagno, O'Hearn, Yang)이라는 논문은 프레임 규칙을보다 심층적이고 의미있는 관점에서 이해하는 것에 관한 것입니다. 이 논문의 주요 정의 는 행동이 프로그램의 의미 론적 표현 인 "행동"에 대한 지역성 이다. 지역은 일부 프레임 힙을 추가 할 때 원래 사후 조건을 변경할 수있는 유일한 방법은 위와 같이 비결 정성을 정리하는 것입니다. 실제로, 가지 치기는 할당 때문에 만 발생합니다.


예제와 참조 주셔서 감사합니다! 당신의 예는 말이됩니다. 그래도 q" q, 그리고 ..." 로만 바뀔 수 있다고 말하는 것이 공평 합니까? 또한 할당이 사후 조건에서 비결정론을 제거 할 수있는 유일한 방법이라면 (그 자체로 멋진 결과입니다), 위치 독립적 인 사후 조건의 일부가 있다면 사후 조건의 일부입니다 동일하게 유지? 사후 조건이 위치의 알파 이름 변경과 동일하게 유지된다고 말할 수 있습니까? (예를 염두에 두었지만 이메일을 통해 더 잘 설명 할 수 있습니다.)
— Lindsey Kuper

1
예, q""로만 변경할 수 있습니다 q. 그리고 다시 말해서 ... 사후 조건은 더 강해질 수 있습니다 . 원래의 사후 조건을 암시합니다. 이것은 활동에 대한 지역성 정의의 일부입니다. 그러나 사후 조건의 변경이 이름 변경에만 관련되는 것은 사실이 아닙니다. 예제에서 나는, 여분의 사실을 준 x하고 y뚜렷한 상관없이 위해 선택된 특정 주소의 사실이다 y. 이 예는 이름 변경시 변하지 않는 할당 의 신선도 를 캡처합니다 .
— Aaron Turon

11

먼저, 당신의 질문에 대한 약간의 오해가 있는데, 그것은 Aaron이 그의 답변에서 얻고있는 것입니다. 분리 논리의 술어 는 힙 세트 (또는 동일하게 힙의 술어)이며 분리 연결 는 다음과 같이 정의됩니다.P∗Q

P∗R≜{h1⋅h2|h1∈P∧h2∈R∧dom(h1)∩dom(h2)=∅}

프레임 규칙에서

{P}c{Q}{P∗R}c{Q∗R}

P QR (및 와 )은 특정 힙에 대해 이야기하지 않습니다 --- 힙의 속성 이므로 하위 집합과 술어가 동일하므로. 무슨 일이 일어나고 있는지 이해하는 가장 좋은 방법은 Hoare 트리플이 보유하는 것이 무엇을 의미하는지에 대한 정의를 보는 것입니다.PQ

{P}c{Q}≜∀h1∈P.∀h′∈Heaps.t.h′#h1.∃h2∈Q.⟨h1⋅h′;c⟩↦∗⟨h2⋅h′;skip⟩

이 정의는 기본적으로 당신이 실행하는 경우 (1)이 있다고 어떤으로 에서 , 당신은 몇 가지 최종 상태에서 끝내도록 에서 , 당신은 여분의 메모리에 추가하는 경우 (2) , 즉 메모리가 변경되지 않습니다 달리기 끝. 그러나 당신이 얻는 특정 는 의 다른 선택에 따라 다를 수 있습니다. --- 보장되는 것은 와 속성 이 계속해서 동일한 결과 힙을 얻는 것이 아니라 확장을 계속 유지한다는 것입니다.h 1 P h 2 Q h ′ h 2 h ′ P Qch1Ph2Qh′ h2h′ PQ

Hoare triple에 대한이 정의가 프레임 규칙이 어떻게 적용되는지를 이해하는 것은 너무 어렵지는 않지만 여전히 운동 할 가치가 있습니다. 아시다시피, 이것은 일종의 "변경 보존"속성이며, 동시 분리 로직의 병렬 구성 규칙에 대한 설명에서 특히 생생한 표현입니다.

{P1}c1{Q1}{P2}c2{Q2}{P1∗P2}c1||c2{Q1∗Q2}

과 가 분리 된 메모리 영역에 작용하는 경우 , 서로 병렬로 실행될 때 각각이 다른 쪽의 실행 속성을 방해하지 않습니다.c 2c1c2

Hoare et al., On Locality 및 Concurrent Processes에 대한 Exchange Law 의 논문에서 이것에 대한 토론이 있습니다.


Hoare triples에 대한 정의는 틀린 것처럼 보입니다. 실행이 잘못되지 않았다고 말해야합니다. 종료되지 않아야하며 안전 단 조성이없는 모델을 배제해서는 안됩니다. (그러나, 네가 설명하는 이유로 "변경 보존"에 대해 이야기하는 것이 합리적이라고 동의합니다.)
— Radu GRIGore

3
(1) 나는 총체 정확성의 세 배에 대한 의미를 부여했으며, 명령이 안전하게 완료되었다고 주장합니다. 총체적인 정확성으로 인해 사전 및 사후 조건의 전체 / 존재 특성을 쉽게 볼 수 있습니다. (2)이 삼중의 의미론은 언어 의미론에 안전 단 조성이없는 언어를 삼중의 의미로 구축함으로써 실제로 다루기 위해 (Birkedal과 Yang의 IIRC) 발명되었다. 결과적으로 Hoare 논리에 대한 프레임 규칙을 유지하면서 언어가 아닌 구문이 아닌 구문 (예 : 힙 크기에 대한 쿼리)을 가질 수 있습니다.
— Neel Krishnaswami

(1) 좋습니다. 그러나 그 트리플은 다르게 쓰여집니다. (2) 나는 몰랐다. 당신이 말한 것을 바꾸려면 : 단조 로움없이 평소와 같이 프레임 규칙을 잃고 Hoare 트리플을 계속 사용할 수 있습니다. 이는 첫 번째 주석에서 얻은 것입니다. 그러나 트리플의 정의를 강화하여 다시 얻을 수 있습니다. 프레임 규칙. (3) 왜 그것이 결함을 배제하는지 알 수 없습니다. 가 결정 론적 이라고 가정 합니까? c
— Radu GRIGore

1
고마워, 닐! 맞습니다. 특성 힙으로 P 및 Q 속성을 병합했습니다. 따라서 의견을 요약하면 Q는 유지되지만 마지막에 얻는 특정 힙은 이전 과 다른 Q 만족 힙이 될 수 있습니다 . 예?
— Lindsey Kuper

1
@RaduGRIGore : 예, 언어가 결정 론적이라고 가정하고 있으며 동시성을 추가하면이 가정이 실패합니다. 좋은 캐치!
— Neel Krishnaswami

2

100 % 관련성이 없지만 계약 불일치의 풍미가 있습니다.

{p}를 c의 전제 조건으로 생각하고 {q}를 c의 후 조건으로 생각하면 프레임 규칙에 대한이 아이디어는 전제 조건과 사후 조건이 모든 계산 컨텍스트에서 유지되도록 보장합니다. 아무것도 존재하지 않는 간단한 경우.

즉, 내가 읽은 수십 개의 계약서 중 하나에 제시된 프레임 규칙을 보지 못했다고 말할 수는 없습니다. 그러나 그것은 반드시 좋은 아이디어이며, 그러한 변화를 요구하면 dem 등원 계약에 대한 합리적이고 실질적인 이해를 개발하는 데 많은 도움이 될 수 있습니다 .


의견 주셔서 감사합니다. 흠, 흥미 롭습니다. 다른 사람이 프레임 속성을 나타내는 계약서를 알고 있는지 궁금합니다.
— Lindsey Kuper
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.