프로그램 분석에서 최소 고정 소수점 (lfp)이 중요한 이유


11

프로그램 분석에서 최소 고정 소수점 (lfp)의 중요성에 대해 큰 그림을 얻으려고합니다. 예를 들어 추상 해석은 lfp의 존재를 사용하는 것 같습니다. 프로그램 분석에 관한 많은 연구 논문들도 고정 점을 찾는 데 중점을두고 있습니다.

보다 구체적으로, 위키피디아 의이 기사 : Knaster-Tarski Theorem 은 lfp가 프로그램 의미론을 정의하는 데 사용된다고 언급합니다.

왜 중요 함? 간단한 예가 도움이됩니다. (나는 큰 그림을 얻으려고 노력하고있다).

편집하다

내 말이 틀렸다고 생각합니다. 나는 lfp의 중요성에 도전하지 않습니다. 내 정확한 질문 (초보자)은 : lfp 계산이 프로그램 분석에 어떻게 도움이됩니까? 예를 들어, 왜 / 어떻게 추상적 해석이 lfp를 사용합니까? 추상 도메인에 lfp가 없으면 어떻게됩니까?

바라건대 내 질문은 이제 더 구체적입니다.


@DW 프로그램 분석의 초보자 질문입니다. 너무 모호해 보이는 경우 질문을 게시하기 전에 여러 번 토론했습니다. 내가 찾고있는 것은 : 프로그램 분석에서 lfp의 역할은 무엇입니까 (확실하지만 중요합니까?). 나는 많은 수학 세부 사항을 탐구하지 않는 답을 찾고 있습니다. 내 질문의 문구도 명확하지 않다고 생각합니다. 질문을 편집하겠습니다.
Ram

@DW 나는 이것이 잘 연구 된 질문이 아닐 수도 있음에 동의합니다. 그러나 논문을 계속 읽을 때마다 많은 수학 세부 사항이 있으며 큰 그림을 빨리 풉니 다. 예를 들어,보다 구체적으로,이 논문 [Widening for Control-Flow] ( berkeleychurchill.com/research/papers/vmcai14.pdf )은 저에게 매우 추상적으로 보입니다. 최소한의 수정 지점을 계산하는 데 직접 호소합니다. 프로그램 분석에 관한 대부분의 논문은 비슷한 질문으로이 질문에 관한 것으로 보인다. 나는 큰 그림을 잃었다. lfp 계산이 중요한 이유를 알게되어 기쁩니다.
Ram

답변:


13

프로그래밍에서 재귀 또는 반복의 모든 형태는 실제로 고정 된 지점입니다. 예를 들어, while루프는 방정식으로 특징 지어집니다

while b do c done  ≡  if b then (c ; while b do c done)

이는 말하자면 while b do c done용액 인 W식의

W  ≡  Φ(W)

어디서 Φ(x) ≡ if b then (c ; x)? 그러나 경우에 Φ많은 포인트를 고정? 어느 것이 while루프에 해당 합니까? 프로그래밍 의미론의 기본 통찰력 중 하나는 그것이 가장 고정 된 점 이라는 것입니다 .

이번에는 재귀라는 간단한 예를 들어 보겠습니다. 하스켈을 사용하겠습니다. 에 f의해 정의 된 재귀 함수

f :: a -> a
f x = f x

그것은 영원히 실행되기 때문에 어디에나 정의되지 않은 함수입니다. 우리는이 정의를보다 특이한 방식으로 다시 작성할 수 있습니다 (그러나 여전히 Haskell에서 작동합니다).

f :: a -> a
f = f

그래서 f신원 기능의 고정 된 지점입니다 :

f ≡ id f

그러나 모든 기능은 고정 된 지점입니다 id. 일반적인 도메인 이론 순서에서 "정의되지 않음"이 가장 적은 요소입니다. 실제로 우리의 함수 f는 어디에나 정의되지 않은 함수입니다.

요청에 추가 : 의견에 OP는 의미 while루프 의 부분 순서에 대해 물었습니다 (격자라고 가정했지만 반드시 그럴 필요는 없습니다). 보다 일반적인 질문은 변수를 조작 할 수 있고 기본 제어 구조 (조건 및 루프)를 갖는 절차 언어의 도메인 이론 해석이 무엇인지에 대한 것입니다. 이 캡처 할 정확하게에 따라,이 일을 여러 가지 방법이 있지만, 이제 우리는 고정 된 수 있다고 가정하자 것들을 간단하게 유지하기 위해 전역 변수를x 1 , , x n V V nV n{ } ( v 1 , , v n ) V nV n V nV n{ }nx1,,xn프로그램이 읽고 업데이트 할 수 있으며 다른 것은 없습니다 (I / O 또는 예외 또는 새 변수 할당 없음). 이 경우 프로그램은 변수의 초기 상태를 최종 상태로 변환하거나 프로그램이 순환하는 경우 정의되지 않은 값으로 변환 된 것으로 볼 수 있습니다. 따라서 각 변수에 세트 의 요소가 있으면 프로그램은 모든 초기 구성 대해 매핑에 해당합니다. 변수의 에서 프로그램은 분기하고 생성 하거나 의 요소 인 최종 상태를 종료하고 생성합니다 . 모든지도 는 도메인입니다.VVnVn{}(v1,,vn)VnVnVnVn{}

  • 우리의 평면 정렬을 사용 이있는 하단에와의 모든 요소 다음 위의 "플랫"을, 그리고 은 포인트 단위로 주문됩니다.V n V nV n{ }Vn{}VnVnVn{}
  • 가장 작은 요소는 항상 프로그램 (및 다른 많은 것)에 해당하는 매핑되는 함수입니다 .while true do skip done
  • 증가하는 모든 시퀀스에는 최고가 있습니다.

이것이 어떻게 작동하는지, 프로그램의 의미론에 대한 아이디어를 제공하기 위해

x_1 := e

입력으로서 취하는 함수 것 값을 산출 식의 상태 및 반환 .v e ( v 1 , , v n ) ( v e , v 2 , , v n )(v1,,vn)Vnvee(v1,,vn)(ve,v2,,vn)


1
while 예제의 경우 +1 그러나 나는 약간 혼란 스럽다. But what if Φ has many fixed points?이 점에서 고정 소수점 방정식을 이해하지만 W \ in L? 여기서 격자를 어떻게 정의합니까? 그것에 대해 더 자세히 설명해 주셔서 감사합니다.
Ram

위의 의견에서, 나는 "L"을 사용하여 격자 (또는 포즈)를 나타냅니다
Ram

나는 대답을 수정했다.
Andrej Bauer

업데이트 해 주셔서 감사합니다. 프로그램을 보는 다른 관점을 제공했기 때문에 특히 감사합니다. 저는 현재 Nielson의 "어플리케이션 시맨틱 스 : 공식적인 소개"에서 "고정 점 이론"을 읽었으며, IMP 언어에 대한 부분 함수에서 격자 구성에 대한 견해를 완성했습니다.
Ram

6

직관은 다음과 같습니다. 최소 고정 소수점은 루프를 분석하는 데 도움이됩니다.

프로그램 분석에는 프로그램 실행이 포함되지만 데이터의 일부 세부 정보는 추상화됩니다. 이 모든 것이 좋다. 추상화는 실제로 프로그램을 실행하는 것보다 분석이 더 빠르게 진행되도록 도와줍니다. 관심없는 부분은 무시할 수 있기 때문입니다. 예를 들어, 추상적 해석의 작동 방식은 기본적으로 프로그램 실행을 시뮬레이션하지만 프로그램 상태에 대한 부분 정보 만 추적합니다.

까다로운 비트는 루프에 도달 할 때입니다. 루프는 여러 번 실행될 수 있습니다. 일반적으로 프로그램 분석이 루프의 모든 반복을 실행하지 않아도됩니다. 프로그램 분석에 오랜 시간이 걸리거나 종료되지 않을 수도 있기 때문입니다. 따라서 고정 소수점을 사용하는 곳입니다. 최소 고정 소수점은 기본적으로 루프가 반복되는 횟수를 모르는 경우 루프가 끝난 후에 사실이라고 말할 수있는 것을 특징으로합니다.

그것이 가장 고정 된 점이 사용되는 것입니다. 루프는 프로그램 전체에 존재하므로 프로그램 분석 전체에서 최소 고정 소수점이 사용됩니다. 루프는 어디에나 있기 때문에 최소 고정 소수점이 중요하며 루프를 분석 할 수 있어야합니다.

또한 재귀와 상호 재귀는 루프의 또 다른 형태 일 뿐이므로 고정 소수점으로 처리되는 경향이 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.