프로그래밍 언어에서 추상적 해석의 목표는 무엇입니까?


9

나는 이제 프로그래밍 언어에서 "추상적 인 해석"이 무엇인지 더 잘 이해하려고 노력하고 있습니다. 나는 최소한의 고정 요소로 도메인을 확장하는 아이디어, 연속 함수에 대한 고정 점을 생성하는 4 개의 공리 등을 설명하는 좋은 책 장을 발견했습니다. 나는이 기술적 인 세부 사항들을 이해한다 (그러나이 전체 체계에서 정확히 "추상적 인 해석"이 무엇인지 확실하지는 않지만).

내가 확실하지 않은 것은 추상적 해석의 동기를 부여하는 것입니까? 계산 가능한 함수의 고정 점을 식별하는 것입니까? 주요 동기는 대부분의 프로그래밍 언어에서 재귀를 통해 오는가?

또한 컴퓨터 과학 학위를 가진 사람에게는 기술적으로 깊이있는 고급 개요를 얻는 것이 기쁠 것입니다. Wikipedia 페이지가 다소 불안정합니다.


이 책을 인용하십시오. wikipedia 추상 해석
vzn

읽고있는 책의 장을 말씀해 주시겠습니까?
Vijay D

위키 백과가 더 많은 기술적 인 주제에 대한 자습서를위한 최상의 장소는 아닙니다.
Vijay D

@Vijay and vzn 이것이 내가 본 것 중 하나입니다 : cs.berkeley.edu/~necula/cs263/handouts/AbramskiAI.pdf
newToPL

답변:


16

추상적 해석은 매우 일반적인 개념이며, 요청한 사람에 따라 다양한 개념이 여러 관점을 허용하기 때문에 다른 설명을 받게됩니다. 이 답변의 견해는 내 것이므로 일반적인 것이라고 생각하지는 않습니다.

동기 부여로서 전산 경도

솔루션이 다음과 같은 구조를 갖는 의사 결정 문제부터 시작하겠습니다.

결정 문제

종종 절차에 NP-hard 하한이 있습니다. 프로그램의 시맨틱 속성을 확인하는 것은 결정 불가능합니다. 우리는 무엇을 할 수 있습니까?

두 가지 관찰을하겠습니다. 첫째, 일반적인 문제를 해결할 수없는 경우에도 특정 문제 인스턴스를 해결할 수 있습니다. 둘째, 컴파일러 최적화와 같은 애플리케이션은 일부 비 효율성 소스를 제거하는 컴파일러가 유용하다는 점에서 근사치를 허용합니다. 이 직관을 정확하게하려면 다음과 같이 대답해야합니다.

  1. 모든 문제가 아닌 일부 문제를 공식적으로 해결한다는 것은 무엇을 의미합니까?
  2. 의사 결정 문제에 대한 대략적인 해결책은 무엇입니까?

추상 해석 아이디어 1 : 문제 설명 변경

나에게 추상적 해석의 주요 통찰력은 문제 구성을 변경하여 예 / 아니오 답변 을 요청하는 대신 예 / 아니오 / 아마도 답변을 요청하는 것입니다.

예 아니요 어쩌면

결과적으로 모든 문제에는 사소하고 일정한 시간 솔루션 (출력 Maybe )이 있습니다. 우리는 이제 Maybe를 항상 생성하지는 않는 절차를 도출하기 위해주의를 옮길 수 있습니다 . 위의 질문으로 돌아 가기 위해 일부 문제 인스턴스에 적합한 솔루션은 해결할 수없는 문제에 대해 아마도 반환하는 솔루션입니다 . 또한 아마도 대답이 무엇인지 확실하지 않기 때문에 아마도 아니오 의 근사치 일 것입니다.

이 아이디어는 의사 결정 문제에만 국한되지 않습니다. 프로그램과 관련된 이러한 문제를 고려하십시오.

  1. 프로그램에서 어떤 코드 줄이 죽었습니까 (실행되지 않을 것입니까)?
  2. 프로그램에서 어떤 변수가 일정한 값을 가지고 있습니까?
  3. 프로그램의 어떤 주장이 위반됩니까?

이러한 모든 상황에서 불확실성이있는 솔루션을 고려하여 정확한 솔루션에서 대략적인 솔루션으로 이동할 수 있습니다.

  1. 무엇 세트 죽은 줄의 코드는?
  2. 프로그램에서 일정한 값을 갖는 변수 세트 는 무엇입니까 ?
  3. 프로그램에서 위반되지 않은 일련 의 어설 션 은 무엇입니까 ?

생산 된 세트가 가장 클 필요는 없습니다. 이 아이디어는 매우 일반적이며 프로그램 분석과 관련이없는 문제에 적용됩니다.

  1. 추가하는 대신 미디엄, 우리는 범위를 요청할 수 있습니다 [,] 그 합계가 놓여 있습니다.
  2. 곱하는 대신 미디엄 으로 우리는 요청할 수 있습니다 케이 결과의 비트 (구체적인 일반적인 예는 부호 또는 패리티 비트)입니다.
  3. 수식에 만족스러운 할당을 요청하는 대신 만족스러운 할당이 포함 된 집합을 요청할 수 있습니다.

원래 문제에 대한 해결책은 여전히 ​​수정 된 문제에 대한 해결책이므로 문제를 변경했을뿐만 아니라 엄격하게 일반화했습니다. 답을 얻지 못한 가장 큰 질문은 다음과 같습니다. 대략적인 솔루션을 어떻게 찾을 수 있습니까?

추상 해석 아이디어 2 : 원래 솔루션의 고정 소수점 특성

두 번째 큰 아이디어는 많은 문제에 대한 일련의 솔루션 이 후보 솔루션의 격자에서 고정 점으로 특성화되는 것을 관찰하는 것입니다. 예를 들어, 그래프가 있고 정점이 있는지 알고 싶다고 가정하십시오. 정점에서 도달 할 수 있습니다 에스. 우리는 이것을 세트를 찾는 것으로 세분화 할 수 있습니다.아르 자형이자형h(에스) 에서 도달 할 수있는 모든 정점 중 에스 그런 다음 확인 이 세트에 있습니다. 더 관찰 할 수 있습니다아르 자형이자형h(에스) 방정식에 대한 가장 작은 해결책입니다.

엑스={에스}{ | V ~에있다 엑스 과 (V,) 가장자리입니다}

고정 소수점 특성화의 가치는 정확한 솔루션을 일련의 근사치의 한계로 볼 수 있다는 것입니다. 이 예에서시리즈의-번째 요소는 도달 할 수있는 그래프 정점 세트입니다. 에서 단계 에스 근사치는 이러한 정점의 하위 집합입니다.

고정 소수점 특성화는 설계 결정입니다. 솔루션 세트에는 여러 가지 특성이 있습니다. 각각의 장점이 다를 수 있습니다. 프로그래밍 언어의 경우 그래프를 다루는 것보다 더 많은 구조를 가지고 있습니다. 우리가 염려하는 고정 소수점 방정식 은 입력 프로그램의 구조 에 대한 유도 로 정의 할 수 있습니다 . 이 아이디어는 프로그램에만 국한되지 않습니다. 문법, 논리 공식, 프로그램, 산술 표현 등과 같은 구조화 된 언어의 요소에 추상적 해석을 적용 할 때 일부 구문 객체의 구조를 유도하여 고정 소수점을 정의 할 수 있습니다.

이 고정 소수점 특성 분석을 통해 특정 방식의 컴퓨팅 솔루션을 약속합니다. 이 고정 소수점은 원래 문제를 해결하는 것만 큼 어렵 기 때문에 실제로 계산하지는 않습니다. 이로 인해 다음 단계로 넘어갑니다.

추상 해석 아이디어 3 : 고정 점 근사

함수의 고정 점을 계산하는 대신 에프 격자로 다른 함수의 고정 점을 계산할 수 있습니다 격자로 미디엄. 관련 조건이 충족 된 경우미디엄에서 계산 된 솔루션 미디엄 에서 솔루션의 근사값이 보장됩니다. . 이것은 추상 해석의 기본 결과 중 하나이며 일반적으로 고정 소수점 이동 정리 라고합니다 . 소리 상태는 Galois 연결 또는 추상화 또는 구체화 기능과 관련된 더 약한 설정 또는 소리 관계에 의해 제공됩니다.

고정 소수점 이동 정리는 근사 분석을 설계 할 때마다 건전한 근사값을 계산하고 있음을 증명할 필요가 없습니다. 당신은 격자가 (원본 솔루션 포함) 및 미디엄 (근사값 포함) 및 기능 에프특정 제약 조건을 충족시킵니다. 분석의 디자이너이고 건전성에 관심이 있다면 이것은 큰 승리입니다.

고정 소수점 이전의 직관은 통찰력이 있습니다. 고정 점은 (아마도 무한한) 요소 체인의 한계로 생각할 수 있습니다. 근사 솔루션 계산은이 한계를 근사하는 것으로 체인의 요소를 근사하여 수행 할 수 있습니다.

근사 개념은 응용 프로그램에 따라 다릅니다. 여행 계획을 세우기 위해 그래프 도달 가능성을 사용하는 경우 사이에 경로가 없다는 근사치를 수락 할 수 있습니다.에스 경로가 있더라도 알고리즘에서 경로가 있다고 말하면 행복하지 않습니다. 에스 경로가없는 곳.

추상 해석 아이디어 4 : 고정 점 근사 알고리즘

지금까지 본 모든 것은 수학적 존재 결과였습니다. 마지막 단계는 근사값을 계산하는 것입니다. 근사 격자가 유한 한 경우 (또는 오름차순 / 내림차순 체인 조건이 충족되는 경우) 간단한 반복 절차를 사용할 수 있습니다. 격자가 무한하다면, 고정 점을 계산하는 것이 여전히 결정 가능할지라도 반복적 인 절차로는 충분하지 않을 수 있습니다. 이 상황에서 솔루션을 더 근사화하거나 순진한 반복 알고리즘보다 정확한 솔루션으로 빠르게 이동하기 위해 많은 기술이 사용됩니다. 솔루션 계산의 맥락에서 확대 , 축소 , 전략 반복 , 가속 등과 같은 용어를들을 수 있습니다 .

요약

제 생각에, 추상 해석은 수학적 논리가 추론에 대한 수학적 기초를 제공하는 것과 같은 방식으로 추상화 개념에 대한 수학적 기초를 제공합니다. 우리가 염려하는 많은 문제에 대한 해결책은 고정 점으로 특성화되어 있습니다. 이 관찰은 프로그래밍 언어 문제 및 컴퓨터 과학에만 국한되지 않습니다. 대략적인 솔루션은 고정 소수점의 근사치로 특성화 할 수 있으며 특수 알고리즘으로 계산됩니다. 이러한 특성과 알고리즘은 문제 인스턴스의 구조를 이용합니다. 프로그램의 경우이 구조는 언어의 구문으로 제공됩니다.

자연 메트릭스가없는 문제에 대한 근사치를 계산하는 것은 실무자에 의해 지속적으로 개발되고 개선되는 기술입니다. 추상 해석은이 기술의 과학에 대한 하나의 수학적 이론입니다.

참고 자료 추상 해석에 대한 몇 가지 유용한 자습서가 있습니다.

  1. 추상 해석에 대한 간단한 소개 , Patrick Cousot (Radhia Cousot와 공동 작업), 시스템 생물학 및 형식 분석 워크샵 (SBFM'12)
  2. Marktoberdorf Summer School 2010, Patrick과 Radhia Cousot의 추상적 해석에 의한 컴퓨터 시스템의 공식적인 검증에 대한 간단한 소개 .
  3. 강의 13 : 추상화 파트 I , 패트릭 쿠 s, 추상 해석, MIT 코스.
  4. 추상 해석 소개 , Samson Abramsky 및 Chris Hankin, 선언적 언어의 추상 해석, 1987.
  5. 논리 프로그램에 대한 추상 해석 및 적용 , Patrick and Radhia Cousot, 1992. 처음 두 섹션에는 몇 가지 예가 포함 된 일반적인 전체 개요가 있습니다.

7

모든 세부 사항에서 요점을 추출하기가 어렵다는 데 동의합니다. (실제로 내가 본 추상 해석의 모든 처리에서 내 큰 문제는 동기를 부여하지 않고 많은 기계를 제시한다는 것입니다.)

내가 생각하는 방법은 다음과 같습니다.

추상 해석은 대략 한 번에 많은 입력 세트에서 프로그램을 실행하고 있습니다.

이것은 모든 것을 다루지는 않지만 일반적으로 잘 견뎌냅니다.

정식 예제는 산술 표현식을 평가하여 결과의 ​​부호를 판별하는 것입니다. 모든 양의 입력에 대한 식을 평가하고 결과 집합을 반환 할 수있는 가설적이고 무한히 빠른 기계를 상상할 수 있습니다. 그 중 하나가 있다면 원칙적으로 "이 프로그램은 양수가 주어지면 양수를 반환합니다."와 같은 것을 결정할 수 있습니다.

그러나 물론 당신은 실제로 그 기계를 가지고 있지 않습니다. 당신은 실생활에 갇혀 있기 때문에 상징적으로 같은 일을해야합니다. 따라서 때로는 정확한 답을 줄 수 있지만 때로는 실패하거나 대략 대답을 반환하지만 항상 정확하지 않을 수도 있습니다. 후자는 추상적 해석이하는 것입니다.

모든 양수 집합을 직접 나타낼 수도 없습니다. 대신, 그 세트 의 추상화 가 필요합니다 . 음수와 0을 추상화해야합니다. 당신은 유한 추상 세트 의 가족으로 끝납니다{이자형,이자형아르 자형영형,영형에스}콘크리트 세트 를 나타내는{{...,2,1},{0},{1,2,...}}.

이제 "양수 두 개를 추가하면 양수가됩니다"또는 :영형에스×영형에스영형에스. 각 언어 프리미티브에 대한 규칙을 제시하면 동시에 많은 입력 세트에서 산술 표현식을 평가하는 척을 할 수 있습니다.

물론, "양수와 음수를 더하는 것"규칙은 문제를 야기 할 것입니다. 그와 같은 추가는 무엇이든 반환 할 수 있기 때문입니다. 추상 해석 프레임 워크가 여기에 도움이됩니다 . 가능한 한 엄격한 사운드 근사값을 반환해야한다고 말합니다 . 규칙이 적절하고 더하기가 추상 집합으로 무언가를 반환한다고 말하는 경우 구체적인 평가는 해당 콘크리트 집합에서 숫자를 반환해야합니다. 예를 들어:영형에스×영형에스영형에스 규칙은 소리라면 (,) 모든 긍정적 인 긍정적 . 또한,영형에스×이자형(영형에스이자형아르 자형영형이자형) 소리입니다. 여기서 ""는 추상 집합의 합집합 연산입니다.

나는 가장 어린 PL 연구원조차도 오후에 이와 같은 추상적 해석을 코딩 할 수 있다고 생각합니다. 실제로 그렇게 어렵지는 않으므로 기본 사항에 대한 느낌을 얻으려면 훨씬 더 읽기 전에 시도해야합니다. 그렇게하는 동안 추상 집합에는 교차로 개념이 필요하다는 것을 알 수 있습니다 ( '") 및 하위 집합 (""). 구체적인 교차점 및 하위 집합과 일치해야합니다.

추상적 인 해석이 가능한 한 빡빡하다는 것을 증명하고 싶을 때, 이 통신을 공식화 하기 위해 Galois 연결 이 필요합니다. 하나만 있으면 특정 콘크리트 세트에 대해 가장 엄격한 추상 세트가 존재합니다.

루프 또는 재귀가있는 언어로 작업하려는 경우 프로그램이 종료되지 않을 수 있으므로 종료되지 않음을 나타내는 값. 구체적인 함수를 수학적으로 고정 점으로 "계산"하고 유사한 함수를 계산해야합니다. 고차 함수가있는 경우 일반적인 토폴로지 기계가 전혀 처리하지 않으며 (고차 응용 프로그램은 일반적으로 연속적이지 않음) Scott 도메인이 필요합니다.

IOW, 당신이 추상적 해석의 동기로 식별 한 것은 실제로 튜링과 동등한 언어에 대한 추상적 해석을 수행하는 데 필요한 기계에 대한 동기입니다. 실제 동기는 한 번에 많은 입력에서 프로그램을 실행하여 프로그램의 동작을 요약하는 데 유용합니다.

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