상징적 실행은 추상적 해석의 경우인가?


답변:


22

나는 상징적 실행과 추상적 해석의 비교에 관한 논문을 모른다. 나도 필요하다고 생각하지 않습니다. 이 두 기술의 원래 설명을 읽으면 충분합니다.

  • 왕, 1976 년 상징적 실행 및 프로그램 테스트
  • Cousot, Cousot, Abstract Interpretation : 1977 년 수정 점 근사에 의한 프로그램의 정적 분석을위한 통합 격자 모델 , 1977

(반대로, 예기치 않은 연결이 발생하면 설명 할 가치가 있습니다. 그러나 이것이 사실인지 의심합니다.)

심볼릭 실행의 주요 아이디어는 임의의 실행 시점에서 모든 변수의 값을 초기 값의 함수로 표현할 수 있다는 것입니다. 추상적 해석의 주요 아이디어는 일련의 지나친 근사로 프로그램의 모든 실행을 체계적으로 탐색 할 수 있다는 것입니다. (이전 근사치에서 여러 명의 AI 애호가가 신음하는 소리를들을 수 있습니다.)

따라서, 적어도 최초의 공식에서, 상징적 실행은 모든 가능한 실행을 탐색하는 것과 관련이 없었다. 제목에서도 볼 수 있습니다. 'testing'이라는 단어가 포함되어 있습니다. 그러나 섹션 8 : "무한 실행 트리가있는 프로그램의 경우 기호 테스트가 철저 할 수 없으며 정확성에 대한 절대적인 증거를 확립 할 수 없습니다."

대조적으로, 추상적 해석은 모든 실행을 탐색하는 것을 목표로합니다. 이를 위해 몇 가지 성분을 사용하며 그중 하나는 상징적 실행의 주요 아이디어와 매우 유사합니다. 이 성분들은 (1) 추상적 상태, (2) 합류 및 확대 (따라서 제목에서 '격자')입니다.

추상적 상태.특정 시점에서의 프로그램의 구체적인 상태는 기본적으로 메모리 내용 (프로그램 코드 자체 및 프로그램 카운터 포함)의 스냅 샷입니다. 세부 사항이 많으므로 추적하기가 어렵습니다. 특정 속성을 분석 할 때 콘크리트 상태의 큰 부분을 무시할 수 있습니다. 또는 특정 변수가 음수, 0 또는 양수인지만 상관하고 정확한 값은 신경 쓰지 않아도됩니다. 일반적으로 구체적인 상태의 추상 버전을 고려하려고합니다. 이를 위해서는 commutativity 특성이 있어야합니다. 구체적 상태를 취하고 명령문을 실행 한 다음 결과 상태를 추상화하면 초기 상태를 추상화 한 다음 동일한 결과를 가져와야합니다. 진술하지만 추상적 인 상태에. 이 정류 다이어그램은 두 논문에 모두 나타납니다. 이것이 일반적인 생각입니다. 다시 말하지만, 추상적 해석은 더 일반적입니다. 상태를 추상화하는 방법을 지시하지 않기 때문입니다. 단지 그것을 수행 할 방법이 있어야한다고 말합니다. 반대로, 기호 실행에서는 초기 값을 언급하는 (기호) 표현식을 사용한다고 말합니다.

합류 및 확대. 프로그램 실행이 두 가지 방식으로 특정 명령문에 도달하면 기호 실행은 두 분석을 병합하려고 시도하지 않습니다. 그렇기 때문에 위의 인용문은 처짐보다는 실행 트리에 대해 이야기합니다. 그러나 추상적 해석은 모든 실행을 다루고 싶다는 것을 기억하십시오. 따라서 동일한 프로그램 카운터가있는 지점에서 두 실행의 분석을 병합하는 방법을 요청합니다. (조인 기호 실행의 결과에 비례하도록 매우 바보 ({a} join {b} = {a, b}) 여야합니다. (특히 앞에서 언급 한 바보 조인은 작동하지 않습니다.) "n = input (); i in range (n) : dostuff ()"루프가있는 프로그램을 고려하십시오. 루프를 돌면서 몇 번이나 계속 참여해야합니까? 고정 된 답변이 없습니다. 따라서, 다른 것이 필요하고, 넓어지고 , 이는 휴리스틱으로 볼 수 있습니다. 루프를 3 번 ​​돌면서 "i = 0 또는 i = 1 또는 i = 2"라고 배웠다고 가정합니다. 그러면 hmmm, ... 넓히고 "i> = 0"이라고 말합니다.

(이 긴 답변에 대해 죄송합니다. 실제로 더 짧게 만들 시간이 없었습니다.)


5

나는 이것이 매우 얕은 의미라고 생각합니다. 추상적 해석의 첫 단계는 구체적 수집 의미론을 식별하는 것입니다. 시맨틱을 수집하는 것은 단일 상태의 진화를 설명하기보다는 상태 세트의 진화를 설명합니다. 상태 세트의 표현에 대한 상징적 실행 이유 때문에, 이는 프로그램의 구체적인 의미를 나타낸다고 주장 할 수 있습니다. 나는 더 정확한 서신이 해결되고 있는지 모른다.


감사합니다. 그러나 SE가 구체적인 의미론을 나타내는 경우 추상 의미론은 무엇입니까? 추상 의미가 없으면 AI의 경우라고 말할 수 없습니다. 좀 더 설명해 주시겠습니까? 그건 그렇고, 나는 당신의 논문을 읽었으며, SAT 솔버는 AI입니다. 정말 흥미 롭습니다.
qsp

3
첫째, 추상화는 재귀적인 개념으로, 모든 구조가 항등 함수를 통한 사소한 추상화라는 것을 의미합니다. 둘째, 상징적 실행은 일부 프로그램 경로 만 탐색하기 때문에 구체적인 의미론 전체를 계산하지 않으므로 이러한 의미에서 과소 평가되는 추상화가 있습니다.
Vijay D

2

Patrick Cousot를 참조하십시오. Méthodes itératives de construction 및 d' approximation de points는 d' opérateurs monotones sur treillis를 수정하고, sémantique des 프로그램을 분석합니다 (래티스에서 모노톤 연산자의 고정 점을 생성하고 근사하기위한 반복 방법, 프로그램 정적 분석). 이 ES 과학 Mathématiques, 대학 조셉 푸리에, 그르노블, 프랑스 3 월 21 일 1978 https://cs.nyu.edu/~pcousot/publications.www/CousotTheseEsSciences1978.pdf (불행하게도 프랑스어), 페이지 (3) -27에 (3) -29

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