부분적 정확성으로 종료를 줄이는 것이 얼마나 어려운가요?


14

프로그램 확인에 익숙하다면 배경 보다 먼저 질문을 읽는 것이 좋습니다. 프로그램 확인에 익숙하지 않은 경우에도 여전히이 질문에 대답 할 수 있지만 배경 지식을 먼저 읽는 것이 좋습니다.

배경

부분적 정확성을 확인할 수없는 경우가 종종 있습니다. 논의를 위해 Floyd-Hoare의 스타일 로이 진술을 정확하게하는 매우 특별한 방법을 선택합시다. 흐름 그래프는 고유와 소리를 나타내는 두 글자이다 초기 노드 모든 노드가 연결할 수있는. 프로그램은 그 노드 명령입니다 흐름 그래프이다. 세 가지 유형의 명령이 있습니다 (1) 가정 q , (2) 어설 션은 assert q 및 (3) 할당은 v : = e라고 가정합니다. 여기서 q 는 fol (1 차 논리) 공식이며 e 는 fol 항이며 v 는 변수입니다.

우리는 프로그램이라고 말할 부분적으로 올바른 각 노드에 주석을 할 수있는 방법이 존재하는 경우 , X 와 전제 A (X) 및 사후 조건 B (x)가 되도록 (1)를 초기 노드의 전제가 유효한지, (2) { A (X) } X는 { B (X)는 } 모든 명령에 대해 유지 (X) , (3) ( B (X)를 의미 A (Y)에 )의 모든 가장자리에 유효 XY . 여기서 Hoare 트리플은 다음과 같이 정의됩니다.

  • { p } assert q { r }는 ( p는 ( qr )이 유효 함을 의미 )
  • { p } q { r }이 (( pq )가 r을 의미 함)을 의미 한다고 가정 합니다.
  • { p } v : = e { r }는 (( pev로 대체하면 pr을 의미 )는 유효 함을 의미 합니다.

다음은 부분적 정확성을 검사 할 수없는 이유 에 대한 간단한 설명 입니다. 일부 a (x) 및 일부 b (x) 를 입력하면 일부 fol 수식이 유효한지 여부를 확인해야합니다.

부분적 정확성으로 종료를 인코딩하는 일반적인 방법은 본질적으로 "내가 마지막으로 실행 된 이후 종료 종료까지 진행되었다"고 말하는 특수한 주장을 추가하는 것입니다. 순서도의 모든 무한 보행 (초기 노드에서 시작)에 무한히 많은 진행 표시가 포함되도록 이러한 진행 표시 어설 션 을 배치해야합니다. 더 구체적으로 말하면, 진행 어설 션은 항상 assert u < v 형식을 가지며 , 여기서 uv 는 양의 정수이며, 할당은 u : = f 앞에 오고 v : = u 가 뒤에옵니다 . 여기에 f변형 함수 , u 는 현재 값이고 v 는 이전 값입니다. 이제 우리는 "양의 정수"에 대해 이야기하고 그것들을 비교하기 때문에 fol보다 약간 더 많은 것을 사용할 수 있는지 확인해야 합니다. Peano 산술 이 가능 하다고 가정 해 봅시다 . (이 선택에 대해 강하게 느끼지 않습니다. 편리하다면 무시하십시오.) 물론 f 는 프로그램에서 언급 된 다른 함수와 상수를 사용할 수 있습니다. (프로그램 시작시 가정을 추가하는 것은 비논리적 공리를 도입하는 것과 같습니다.)

진행 어설 션이있는 프로그램이 여전히 부분적으로 올바른 경우 원래 프로그램이 종료 된 것입니다.

질문

종료 프로그램이 주어지면 진보 주장에 대한 변형 기능을 생각해내는 것이 어렵다고 생각합니다. 하지만 얼마나 힘들어요? (위의 거대한 배경에도 불구하고, 나는이 질문을 어떻게보고 싶은지에 따라 여전히 개방형 또는 잘못 정의 된 것으로 남았습니다.)

달리 말하면 : 종료를 부분 정확성으로 줄이는 문제를 공식화 한 다음 복잡성에 대해 이야기하는 참조를 찾고 있습니다. 물론이 모든 것을하는 대답은 환영받을 것입니다.


이것을 이해하는지 확인하겠습니다. 당신이 요구하는 것은 무엇보다도 우리에게 총 재귀 함수를 계산하고 함수가 총체라는 진술의 증거 (변형 함수의 형태와 그것들이 적합한 증거의 형태)를 출력하는 알고리즘을 우리에게 줄 것입니다. )? 그것은 나에게 계산할 수 없을 정도로 들린다.
Andrej Bauer

안드레이, 나도 계산할 수없는 것 같아 내가 요구하는 것은 계산할 수 없다는 증거입니다.
Radu GRIGore

답변:


7

이에 대한 한 가지 방법은 결정 가능한 것으로 알려진 부분 정확성 및 종료 쿼리 클래스에 대한 결정 문제의 계산 복잡성을 고려하는 것입니다. 다면체 도메인을 사용한 추상 해석은 필요한 주석이 선형 불평등의 조합 인 경우 언급 한 부분 정확성 주석을 유추 할 수 있습니다. 변수의 수에서 추상 사후 조건을 계산하는 것은 지수 적입니다. 그런 다음 고정 점을 찾는 오버 헤드가 있습니다. 이에 대한 자세한 내용은 Cousot의 초기 논문 및 Apron 라이브러리를 참조하십시오.

변형 함수를 찾는 것은 변형 함수가 선형 일 때 결정 가능합니다. 복잡성에 대한 완전한 특성을 찾을 수는 없지만 Tiwari의 "선형 프로그램의 종결"에는 복잡성에 대한 섹션이 있습니다. Podelski와 Rybalchenko의 "선형 순위 함수의 합성을위한 완벽한 방법"도 참조하십시오. 또한 바이런 쿡은 종료 해석을 구성하기 위해 추상 해석을 활용하는 작업을 수행했습니다. 예를 들어 "순위 추상화"및 "불일치 분석의 차이 분석"을 참조하십시오. 이것들은 부분적 정확성과 종료 사이의 관계에 대한 통찰력을 제공 할 수 있습니다.

연결:


1
내 답변 편집 및 링크 활성화에 신경 쓰지 않기를 바랍니다.
Andrej Bauer

4

필요한 비 종료 에서 부분적 정확성으로 의 명백한 감소가 있습니다 .

φ iff { φ }를 만족하는 초기 상태에서 시작할 때 P는 절대 종료되지 않습니다 않습니다. P {false}는 유효합니다.

나는 이것이 또 다른 비 대답이라는 것을 알고 있습니다. 장점은 위의 것보다 짧다는 것입니다.


3

사전 및 사후 조건, 즉 가장 약한 자유 사전 조건 의미론으로 그래프를 채우는 표준 기술 (물론 결정 불가능한 표준 기술) 이 있습니다. -종료. 이것은 본질적으로 그러한 언어에 대한 부분적인 정확성과 완전한 정확성에 대한 완전한 이론입니다.

어느 쪽이 결정을 내리기 어려운지에 따라 분필과 치즈가 어느 쪽의 종결과 부분적 정확성이 어려운지를 결정합니다. 그러나 부분적 정확성은 프로그램 및 사양 언어의 언어 설계 문제와 얽혀 있지만 종료의 어려움은 깨끗합니다. 종료를 증명하는 데 사용되는 이론에는 종료하는 알고리즘이 있지만 상대를 종료하는 것으로 입증되지는 않습니다. 그 이론에. 예를 들어, 순수한 다형성 람다 미적분학 에서 의 계산 은 종료되어야하지만 Peano 산술은이를 증명할 수 없습니다.

패트릭 쿠소 (Patrick Cousot)가 개척 한 추상적 해석 에 대한 연구 는이 분야에서 가장 역동적이지만 전문가 인 척하지는 않습니다.


변형 함수를 추론하는 복잡성에 대해 묻고 자했습니다. 명확하지 않아서 죄송합니다! 호기심으로 Rustan Leino는 지난 저녁에 술집에서 wlp가 작동하지 않는다고 강력하게 제안하는 예를 제시했습니다. 작업에 더 적합한 장소에 도착하면 다시 확인해야합니다. :)
Radu GRIGore

@Radu : 자동 종료 증명 작업이 완료되었으며 Prolog에 대한 작업도 훌륭했습니다. 시간을 찾으면 심판을 파낼 수 있습니다.
찰스 스튜어트
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.