popl, vmcai 2013 rome, italy, jan 20 - jan 26rosaec.snu.ac.kr/trip/data/jhkang_ropas.snu.ac.kr...2...

13
POPL, VMCAI 2013 Rome, Italy, Jan 20 - Jan 26 2013 2 14 언어 Principles of Programming Languages (POPL) , Verification, Model Checking, and Abstract Interpretation (VMCAI), Off the Beaten Track (OBT) . 의일일이. 1 20-22 (VMCAI), 1 23-25 (POPL), 1 26 (OBT) . . , 이있, 이있, 이있, 이있, . 도도않아다니다는 . . , 장은 정주않았. 정적. . 이있, 의작해하. , 게걸. 을익. 1

Upload: others

Post on 31-Dec-2019

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: POPL, VMCAI 2013 Rome, Italy, Jan 20 - Jan 26rosaec.snu.ac.kr/trip/data/jhkang_ropas.snu.ac.kr...2 기억에남는 발표 2: 이론 이절에서는재밌는이론을전개한논문을소개한다

POPL, VMCAI 2013

Rome, Italy, Jan 20 - Jan 26

소프트웨어 무결점 연구센터 석사과정 강지훈

2013년 2월 14일

프로그래밍 언어 분야 최고의 학회인 Principles of Programming Languages (POPL)과, 함께

열린 Verification, Model Checking, and Abstract Interpretation (VMCAI), 그리고 Off the Beaten

Track (OBT)에 다녀왔다. 한국 연구재단의 선도연구센터 사업의 일환인 소프트웨어 무결점 연

구센터의 지원을 받아 가능한 일이었다. 이탈리아 로마에서 1월 20-22일 (VMCAI), 1월 23-25일

(POPL), 1월 26일 (OBT) 일정이었다.

로마는아름다운도시였다. 분수가있고,공원이있고,좋은식당이있고,판테온이있고,바티칸

이 있었고, 고대부터 현대까지 공존하는 특이한 도시였다. 무엇보다도 도시가 그렇게 크지 않아서

걸어 다니며 온 도시를 구경할 수 있다는 것이 좋았다.

학회는치열했다. 발표는모두자신감이넘쳤고, 발표자는긴장은조금했을지언정주눅이들진

않았다. 발표 외 시간에 토론하는 사람들은 새로운 것을 찾은 것처럼 열정적으로 토론했다.

반면 조금 소외감이 들었다. 내가 예전에 논문을 낸 적이 있다면 더 쉽게 다른 사람들과 토론을

이어나갈 수 있었을 텐데, 조금 더 남의 작업을 깊게 이해하고 있다면 질문도 하고 토론에 쉽게

참여할 수 있었을 텐데. 그러면서도 한편, 더 많은 상호작용을 하지 못하는 것은 단순히 내가 말을

적게 걸기 때문은 아닐까 하는 생각도 들었다. 학회에서 더 자주 사람들과 안면을 익히고 대화를

나누게 되었으면 좋겠다고 생각했다.

1

Page 2: POPL, VMCAI 2013 Rome, Italy, Jan 20 - Jan 26rosaec.snu.ac.kr/trip/data/jhkang_ropas.snu.ac.kr...2 기억에남는 발표 2: 이론 이절에서는재밌는이론을전개한논문을소개한다

차 례

차 례 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

1 기억에 남는 발표 1: 실제 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

1.1 E. Barr, T. Vo, V. Le, Z. Su. Automatic detection of floating-point exceptions . . 2

1.2 P. Cousot, R. Cousot, M. Fahndrich, M. Logozzo. The Design and Implementation

of a System for the Automatic Inference of Necessary Preconditions . . . . . . . . 3

1.3 C. Fournet, N. Swamy, J. Chen, P. Dagand, P. Strub, B. Livshits. Fully abstract

compilation to JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

2 기억에 남는 발표 2: 이론 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

2.1 A. Abel, B. Pientka, D. Thibodeau, A. Setzer. Copatterns: programming infinite

structures by observations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

2.2 R. Atkey, P. Johann, A. Kennedy. Abstraction and invariance for algebraically

indexed types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

2.3 J. Park, J. Seo, S. Park. A theorem prover for Boolean BI . . . . . . . . . . . . . 7

3 기억에 남는 발표 3: Coq . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

3.1 A. Chlipala. Coq tutorial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

3.2 G. Gonthier, Odd order theorem on Coq . . . . . . . . . . . . . . . . . . . . . . . 8

3.3 C. Hur, G. Neis, D. Dreyer, V. Vafeiadis. The power of parameterization in coin-

ductive proof . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

4 기억에 남는 발표 4: 요약 해석 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

4.1 Y. Seladji and O. Bouissou. Fixpoint Computation in the Polyhedra Abstract

Domain using Convex and Numerical Analysis Tools . . . . . . . . . . . . . . . . 9

4.2 V. D’Silva, L. Haller, D. Kroening. Abstract conflict driven learning . . . . . . . 10

5 연구 이야기 : Xavier Leroy와 David Pichardie . . . . . . . . . . . . . . . . . . . . . . . 10

6 로마 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

7 맺으며 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

8 감사의 말씀 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

1 기억에 남는 발표 1: 실제

이 절에서 소개하는 발표들은 모두 실용적인 문제를 푼 작업들이다. 이론적으로는 이미 기존에

있던 것을 조합한 것에 불과하다고 할 수도 있겠지만, 중요한 문제를 잘 발견하고 문제에 알맞은

방법을 사용했다는 점에서 모두 좋은 연구라고 생각한다.

1.1 E. Barr, T. Vo, V. Le, Z. Su. Automatic detection of floating-point

exceptions

이 논문은 Symbolic execution으로 자동으로 floating-point exception을 찾아낸 작업이었다. 발표

에서는 1996년에 floating-point exception 때문에 발생한 European Space Agency의 Ariane 5 사

고가 USD 370 million의 손해를 끼쳤다고 설명하며, 이 문제가 산업에서 얼마나 중요한지 강조했

2

Page 3: POPL, VMCAI 2013 Rome, Italy, Jan 20 - Jan 26rosaec.snu.ac.kr/trip/data/jhkang_ropas.snu.ac.kr...2 기억에남는 발표 2: 이론 이절에서는재밌는이론을전개한논문을소개한다

다. 이 작업을 통해 GNU Scientific Library (GSL) 등 실제로 널리 사용되는 코드의 floating-point

exception을 100여 개 이상 찾아냈고 개발자들의 확인을 받았다고 한다.

올바로 작성된 프로그램이라면 floating-point exception을 내어서는 안 된다. Floating-point 표

현형으로 근사조차 할 수 없는 경우에 exception이 나기 때문이다. Floating-point exception에는

두 가지 종류가 있다. 하나는 overflow로, 절댓값이 너무 커져서 생기는 exception이다. 다른 하나

는 underflow로, 절댓값이 너무 작아져서 생기는 exception이다. 어느 경우라도 근사적으로라도

의도한 값을 표현할 수 없다.

이 작업에서 사용한 방법은 다음과 같다.

1. 먼저 floating-point arithmetic이 있을 때마다 앞뒤로 exception이 일어나는지 확인하는 코

드를 삽입한다.

2. 그리고 symbolic execution을 한다. 단, floating-point arithmetic은 symbolic execution이 어

려워서, 무한한 자릿수를 표현할 수 있는 real arithmetic을 사용한다. 이는 GSL 라이브러리

를 통해 제공된다.

3. 각 프로그램 부분마다 exception이 날 수 있는지 확인한다.

이 방법은 floating-point arithmetic이 아닌 real arithmetic을 사용했다. 따라서 false negative

와 false positive가 다 날 수도 있다. 이것이 정당화되는 이유는 다음과 같다.

1. 먼저, floating-point arithmetic과 real arithmetic은 exception이 나는 상황을 제외하고는 아

주 큰 차이가 있지는 않다. 따라서 symbolic execution은 실제 실행과 큰 차이가 없을 것이

다.

2. Floating-point exception이 나는 코드는 실제로는 엄청나게 많은 입력에 대해 exception이

날 것이다. 이중 하나에 대해서만 찾아내도 되는데, 이 입력 중에는 floating-point arithmetic

과 real arithmetic의 결과가 비슷한 것이 있을 것이다.

Symbolic execution을 통해 real number의 constraint가 나오는데, 이는 SMT solver를 이용해

풀었다.

이 작업의 핵심은 산업에서 정말 필요한 일을 했다는 것으로 생각한다. Sparrow를 포함한 많

은 연구에서 floating-point arithmetic은 없는 것이라고 가정하는데, 사실은 정말 필요한 일이라고

생각한다. GSL의 exception을 100개 단위로 잡아냈다는 것은 이 문제가 사람이 풀기에는 상당히

어려운 (혹은 귀찮은) 일이라는 것을 의미한다. 아이디어는 간단하지만 충분히 의미있는 작업이라

고 생각했다.

1.2 P. Cousot, R. Cousot, M. Fahndrich, M. Logozzo. The Design and

Implementation of a System for the Automatic Inference of Necessary

Preconditions

이 논문은 Necessary precondition이 sufficient precondition보다 실용적이라는 주장을 담은 논문

이다. Necessary precondition은 “프로그램이 올바르다면 어떤 선행조건을 가지고 있는가 ? ”라는

질문의 답이고, sufficient precondition은 “어떤 선행조건하에서 프로그램이 올바른가 ? ”라는 질문

의 답이다. 후자는 너무 큰 증명 부담을 caller에게 주기 때문에 부적절하다고 주장한다. 예를 들어

false는 항상 후자의 답일 수 있고, true는 항상 전자의 답일 수 있다. 이들은 이를 Microsoft의

Contract라는 framework 위에서 실험적으로 입증했다.

3

Page 4: POPL, VMCAI 2013 Rome, Italy, Jan 20 - Jan 26rosaec.snu.ac.kr/trip/data/jhkang_ropas.snu.ac.kr...2 기억에남는 발표 2: 이론 이절에서는재밌는이론을전개한논문을소개한다

방법은간단했다. All-Paths precondition analysis (APPA), conditional-path precondition anal-

ysis (CPPA), quantified precondition analysis (QPA) 라는 다양한 기법을 소개하는데, 모두 asser-

tion을 function entry로 옮기는 (hoist) 방법을 설명한 것이다. Inter-procedural precondition in-

ference도 worklist를 이용한 자명한 구현이었다. 이론적으로 그다지 어렵거나 까다로운 부분은 없

다고 생각한다.

그러나 이 작업은 실용적이기 때문에 좋은 작업이라고 생각한다. Windows driver를 작성하

려면 사용해야 하는 Microsoft Code Contract라는 framework 위에서 구현했다. 실제로 사용되는

mscorlib, System, System.Core, System.Data, Facebook 등의 라이브러리에 대해 실험했고, 좋

은 실험 결과를 얻었다. Microsoft Visual Studio에 통합하여 static analysis의 결과를 마치 com-

piler의 warning message인 것처럼 표현한 것도 부러웠다. 좋은 실험 벤치마크를 사용할 수 있다

는 것만으로도 좋은 작업이 될 수 있다는 것을 알았다.

1.3 C. Fournet, N. Swamy, J. Chen, P. Dagand, P. Strub, B. Livshits. Fully

abstract compilation to JavaScript

이 논문은 기존의 to-Javascript-compilation이 ad hoc하며 안전하지 않은 문제가 있음을 지적하

고, contextual equivalence가 보장되는 새로운 compilation을 제안했다.

JavaScript는 복잡하다. Dynamic feature가 많고 static scoping뿐만이 아닌 dynamic scoping

도 있어서, 어떤 environment에서 실행되는지 알려면 복잡한 JavaScript semantics를 상세히 알아

야 한다. 이를 잘 알지 못하면 믿을 수 없는 외부 라이브러리와 같이 사용될 때 보안상의 문제가

생길 수도 있다.

따라서 다른 언어로부터 JavaScript로 컴파일하는 작업이 많이 생겼다. 논문이 결론에서 밝히

듯, JavaScript는 “assembly language of the Web”이다. 심지어 CPython 구현을 javascript로 옮

겨서 Web에서 python REPL (read, evaluate, and print loop)을 사용할 수 있을 정도이다. 다른

언어에서 Javascript로 번역하는 작업이 점점 많아지고 있다.

그러나 번역이 JavaScript의 복잡함을 모두 해결한 것은 아니다. JavaScript로 번역하는 작업

이 정말로 옳은지 의문이 있다. 이 연구는 contextually equivalence를 보장하는 번역을 제시했다.

두 expression이 contextually equivalent하다는 것은 두 expression이 어떤 외부 환경에 놓이게 되

더라도 똑같은 행동을 한다는 것을 의미한다 (the same in the behavior). 예를 들어 2과 1 + 1은

contextually equivalent하다. 어떤 environment 하에서도 둘은 같기 때문이다. 그러나 while(x ==

3) ; return 1과 return 1은 그렇지 않다. 변수 x의 값이 3이면 다른 behavior(1을 리턴, 무한

루프)를 보이기 때문이다.

논문이 제시한 번역 과정은 다음과 같다. f*라는 언어를 JavaScript로 번역한 뒤, wrapper로

감싼다. 이를 LambdaJS를 이용하여 다시 f*로 역번역한다. 그리고 원래 f* source와 재번역된

f* source 사이의 contextual equivalence를 증명한다.

실제로 어떻게 bisimulation을 이용하여 contextual equivalence를 증명했는지 그 상세한 내용

은 알지 못하겠지만, 이론과 실제를 겸비한 좋은 연구라고 생각했다. 특히 Javascript가 “assembly

language of the Web”이라는 관점은 옳다고 생각하고, Ocaml같이 static type이 있는 언어로부터

컴파일하는 것은 자연스러운 방향이라고 생각한다.

4

Page 5: POPL, VMCAI 2013 Rome, Italy, Jan 20 - Jan 26rosaec.snu.ac.kr/trip/data/jhkang_ropas.snu.ac.kr...2 기억에남는 발표 2: 이론 이절에서는재밌는이론을전개한논문을소개한다

2 기억에 남는 발표 2: 이론

이 절에서는 재밌는 이론을 전개한 논문을 소개한다. 구체적으로는 coinduction을 잘 표현하는 방

법을 소개한 논문, parametricity를 최대한으로 이용하기 위한 대수적인 타입 이론을 소개한 논문,

그리고 박성우 교수님 그룹에서 발표한 논문을 다루었다.

내 연구 주제와는 차이가 있지만, 우리 분야에서 벌어지고 있는 일 중에는 재밌는 일이 많다고

생각했다. 이론적으로 흥미있었으며, 지적으로 도전적이었다.

2.1 A. Abel, B. Pientka, D. Thibodeau, A. Setzer. Copatterns:

programming infinite structures by observations

Least fixpoint vs. greatest fixpoint; inductive proof/data types vs. coinductive proof/data types;

pattern matching vs. ? 이 연구는 ?가 무엇인지 밝히고 이 ?에 ‘copattern’이라는 명칭을 부여한

작업이다.

Coinductive proof/data type을잘 다루려는 노력은 예전에도 있었다. Coq도 coinductive proof

를 지원하지만, side condition으로 guardedness condition이라는 이상한 (비직관적인) 조건을 요구

한다. 이 이상한 조건때문에 Coq은 subject reduction을 만족하지 않는다. 이 논문의 이론적 기

여는 coinductive feature의 핵심을 짚어 copattern으로 이론화하고, 이를 도입한 functional pro-

gramming language를 설계하고 type soundness를 증명했다는 것에 있다. 이 시스템은 Coq이 달

성하지 못한 subject reduction을 만족할 것이라고 저자들은 추측하고 있다.

Inductive data type은 constructor로 정의된다. 예를 들어

l ::= cons int l

| nil

은 l이라는 undictive data type을 cons, nil이라는 constructor로 정의한 것이다. 그리고 pattern

matching을 통해 사용된다. 예를 들면

let f x =

match x with

| cons _ _ -> "cons"

| nil -> "nil"

end

와 같다.

반면 coinductive data type은 observation을 통해 정의된다. 먼저 할 수 있는 observation이

무엇인지 정의된다. 예를 들면

record stream = { head : int, tail : stream }

은 stream이라는 type에는 head, tail라는 observation이 가능하다.

다음 stream data type에 대한 function인 cycleNats를 다음과 같이 정의할 수 있다.

head (cycleNats x) = x

tail (cycleNats 0) = cycleNats N

tail (cycleNats (1 + x)) = cycleNats x

즉 cycleNats가 어떤 observation을 보여줄 수 있는지만 지정하면 잘 정의된다.

5

Page 6: POPL, VMCAI 2013 Rome, Italy, Jan 20 - Jan 26rosaec.snu.ac.kr/trip/data/jhkang_ropas.snu.ac.kr...2 기억에남는 발표 2: 이론 이절에서는재밌는이론을전개한논문을소개한다

Copattern을 사용한 정의는 보다 명확하다. 다음 copattern을 사용한 state monad의 정의를

보자.

return : A → State S A

_ >>= _ : State S A → (A → State S B) → State S B

runState (return a) s = (a, s)

runState (m >>= k) s = let (a, s) = runState m s in runState (k a) s

기존의 정의보다 매우 간단한 형태임을 알 수 있다. 심지어 State monad의 내부 구현을 지정해

주지 않아도 된다.

Coinduction, dependent type 등 고급 기능에 능통해지고 싶다는 생각을 예전부터 했었다. 이

런 작업을 더 많이 배우고 실생활에 적용할 수 있으면 좋겠다.

찾아보니 3저자인 D. Thibodeau는 학부생이었다. 어렸을 때부터 재밌고 좋은 연구를 하고 있

다고 생각했다.

2.2 R. Atkey, P. Johann, A. Kennedy. Abstraction and invariance for

algebraically indexed types

이 논문은 parametricity를 잘 활용할 수 있도록 대수적인 타입 시스템을 고안한 작업이다. 대수적

인 타입 시스템을 고안했을 뿐만 아니라 parametricity로부터 얻을 수 있는 free theorem이 무엇

인지 증명했다. 논문에서는 affine geometry를 예로 들어 효과적으로 이 작업의 장점을 설명하고

있다.

Parametricity라는 개념은 Philip Wadler의 1989년 논문 ‘Theorem for Free!’라는 논문의 첫

번째 문단이 잘 설명해주고 있다.

Write down the definition of a polymorphic function on a piece of paper. Tell me

its type, but be careful not to let me see the function’s definition. I will tell you a

theorem that the function satisfies.

더 많은 theorem을 알아내기 위해서는 타입 시스템이 더 많은 정보를 가지고 있어야만 한다.

이 논문은 타입이 대수적 구조를 index로 삼는 경우 어떤 theorem을 더 알아낼 수 있는지 탐험하

였다.

Affine geometry에서는 포인트와 포인트 사이의 차이인 벡터와, 포인트 그 자체를 잘 구별하지

못한다. 둘다 R2와 같은 타입으로 표현하고, 벡터와 포인트 개념의 차이는 프로그래머가 세심하

게 배려해야 할 것이 된다. 그러나 만약 R2 타입을 구분하여 원점을 index로 가지고 있다고 하면,

벡터와 포인트 개념을 타입에서 세심하게 구별할 수 있게 된다.

예를 들어 R2(a,b)는 (a, b)를 원점으로 하는 벡터의 타입이라 하자. 포인트는 (0, 0)을 원점으

로 하는 벡터, 즉 R2(0,0)으로 표현할 수 있다. 이 타입의 index는 R2의 원소인데, 이는 대수적으

로 (additive) group structure를 이룬다. 따라서 ‘algebraically indexed type’이다. 이 상황에서,

parametricity를 이용한 free theorem들은 affine geometry의 정리들이 될 것이다.

연구도 훌륭할 뿐만 아니라 좋은 예제를 사용한 좋은 글쓰기라고 생각했다. 단점이 있다면

affine geometry라는 예제가 아주 강렬해서, 실용적으로는 어떻게 쓰일 수 있을지 잘 드러나지 않

는다는 점이 있겠다. 발표에서는 cloud computing에서 non-interference등의 성질을 증명하는데

잘 사용될 수 있을 거라고 주장했다.

6

Page 7: POPL, VMCAI 2013 Rome, Italy, Jan 20 - Jan 26rosaec.snu.ac.kr/trip/data/jhkang_ropas.snu.ac.kr...2 기억에남는 발표 2: 이론 이절에서는재밌는이론을전개한논문을소개한다

2.3 J. Park, J. Seo, S. Park. A theorem prover for Boolean BI

이 연구는 ROSAEC 워크샵에서도 종종 발표된 작업으로, separation logic의 기반이 되는 boolean

BI logic의 자동 증명기를 만든 연구이다.

Separation logic이 프로그램 검증 분야에서 엄청난 유행을 끌고 있다. Separation logic을 사

용하면 메모리를 분석할 때, 실제로 관심있는 부분만 신경쓰면 된다. 기존의 Hoare logic에서는

이런 local한 분석이 불가능했다.

Seperation logic의 자동 증명기를 만들었으므로, 이제 1) 프로그램으로부터 verification condi-

tion을 뽑아내고, 2) 이 verification condition을 증명하는 방법으로 프로그램 분석을 할 수 있다.

여태까지는 2)를 하지 못했었는데, 이제 가능한 것이다.

Seperation logic은 boolean BI logic 위에 메모리 관련 연산을 얹은 로직이다. 따라서 Boolean

BI logic의 자동 증명기를 제작하는 것은 seperation logic의 자동 증명기를 만드는 것의 선행 연

구가 된다.

구체적으로 어떻게 한 것인지는 솔직히 잘 모르겠다. 그러나 분야의 중요성을 고려해 보았을

때, 적어도 연구의 배경과 함의에 대해서는 잘 알고 있어야 한다고 생각했다.

3 기억에 남는 발표 3: Coq

Coq을 사용한 연구는 크게 둘로 나눌 수 있다고 생각한다. 하나는 Coq 그 자체를 연구하고 Coq

의 관용구를 연구하는 것이다. 다른 하나는 Coq을 이용해서 원하는 정리를 증명하는 것이다. 이

절에서는 전자에 해당하는 연구중 기억에 남는 발표를 모았다.

Coq 자체를 공부하고 Coq의 관용구를 연구하는 것은 중요한 연구 주제중 하나라고 생각한다.

왜냐하면 engineering에 드는 노력의 차이가 매우 심해질 수 있기 때문이다. 마치 세상의 모든 언

어는 turing-complete이지만, 그럼에도 불구하고 프로그래밍하기 편한 언어 (예를 들어 함수형 언

어)를 연구하는 것과 같은 이치이다.

특히 나는 Coq을 이용하는 연구를 많이 하고 싶다. 따라서 Coq 자체에 대한 연구도 많이 알

아두어야 할 필요가 있다고 생각했다. 그래서 POPL에서도 이러한 발표들을 주의 깊게 경청했다.

3.1 A. Chlipala. Coq tutorial

Adam Chlipala의 명저 ‘Certified Programming with Dependent Types’의 일부를 설명한 튜토리

얼이었다. 이미 책을 보긴 했지만, 저자 직강의 튜토리얼을 듣고 싶어서 참석했다.

튜토리얼에서는 간단한 언어의 dynamic semantics를 제시하고, constant folding optimization

을 작성한 뒤, 이 optimization이 옳다는 것을 증명했다.

하지만 튜토리얼의 주제는 optimization이 아니라, 어떻게 증명을 구성해야 할지에 대한 내용

이었다. 간단한 언어에서부터 variable, product, (type) sum, multiplication 등을 추가해나가도 거

의 같은 증명 스크립트로 constant folding optimization을 증명할 수 있음을 보여주었다. 구체적

으로는 Coq의 match goal with tactic을 자유자재로 사용하는 모습을 직접 보니 매우 인상적이

었다.

Adam Chlipala이 2008년에 발표한 parametric higher-order abstract syntax를 사용하는 것을

직접 본 것도 좋은 경험이었다.

7

Page 8: POPL, VMCAI 2013 Rome, Italy, Jan 20 - Jan 26rosaec.snu.ac.kr/trip/data/jhkang_ropas.snu.ac.kr...2 기억에남는 발표 2: 이론 이절에서는재밌는이론을전개한논문을소개한다

3.2 G. Gonthier, Odd order theorem on Coq

Georges Gonthier가 POPL 초청강연으로 odd order theorem을 Coq 위에서 증명한 내용을 발표

했다. MSR-INRIA에서 수행된 작업이다. Odd order theorem은 Feit-Thompson theorem이라고도

불리우며, 모든 odd order group은 solvable하다는 정리이다. 170,000줄 분량의 Coq 개발이었다.

강연자는 odd order theorem가 classification of finite simple group이라는 거대한 목표의 첫

번째 milestone이라고 했다. 그러나 학부때 대수학을 배운 경험으로는, 첫번째 milestone인 odd

order theorem조차 전혀 쉽지 않았다. 적어도 학부나 대학원 1학년 수준에서는 문제에 어떻게 접

근하는지조차 배우지 않았다.

그러나 group theory를 전공하는 수학자들이라면 누구나 다 알고 있는 정리이며, 이를 굳이

mechanize할 필요가 있는지 생각해보았다. 향후 연구 방향으로

• classification of finite simple group과 같이 전체 증명을 이해한 수학자가 적은 문제도 mech-

anize할 수 있는지 ?

• 수학적으로 의미있는 정리를 자동으로 찾을 수 있는지 ?

정도를 생각했다. Odd order theorem을 mechanize한 것을 이들을 위한 선행 연구로써 바라본다

면, 매우 의미있으며 중요한 결과라고 생각할 수 있을 것 같다.

170,000줄이라고 하길래 생각보다 그렇게 양이 많지 않다고 생각했다. 그러나 코드의 일부를

보는 순간, 내가 작성한 Coq 코드와는 전혀 다른 질의 코드라는 것을 알 수 있었다. 170,000줄의

한 줄 한 줄이 피땀어린 engineering의 산물이며, 보다 이해하기 쉬운 코드, 보다 짧은 코드를 작

성하기 위해 들인 노력이 얼마나 엄청난 것이었는지 알 수 있었다. 구체적으로 어떤 노력이 있었

는지 보면 다음과 같다.

• Coq type class인 structure와 canonical도 사용하여 코드의 양을 줄였다. 예를 들어 group

에서 ‘임의의 원소에 대해’라는 논의가 필요하다고 하자. Coq에 type class가 없다면 set의

element라는 의미와, group의 element라는 의미는 다른 기호로 쓸 수밖에 없다. 두 의미는

사실 동등한 의미이므로, 이 두 의미를 다른 기호로 쓴다면 큰 증명을 만들어 나가는데 문

제가 있다. Type class는 이 두 의미를 같은 기호로 표현할 수 있도록 해준다.

하지만 구체적으로 어떻게 하는지는 잘 모르겠다. 공부가 필요하다.

• ‘without loss of generality,’ ‘symmetrically,’와 같이 관용적으로 널리 쓰이는 표현도 증명

스크립트에서 쓸 수 있도록 많은 매크로를 정의했다. 역시 구체적인 방법은 잘 모르겠다.

이 두가지 모두 수학을 Coq 위에서 한다면 꼭 배워야 할 기법이라고 생각한다.

3.3 C. Hur, G. Neis, D. Dreyer, V. Vafeiadis. The power of

parameterization in coinductive proof

이 논문은

1. 기존의 Coq의 cofix tactic으로 coinductive proof를 작성하는 것의 어려움을 지적하고,

2. parametric coinductive proof를 이용하여 기존보다 쉬운 증명을 할 수 있음을 보이며,

3. 이를 Coq 위에서 paco라는 라이브러리로 작성한

8

Page 9: POPL, VMCAI 2013 Rome, Italy, Jan 20 - Jan 26rosaec.snu.ac.kr/trip/data/jhkang_ropas.snu.ac.kr...2 기억에남는 발표 2: 이론 이절에서는재밌는이론을전개한논문을소개한다

논문이다.

Coq에서 coinductive proof를구성하는것은매우어려운작업이다. Coinductive proof는 Guard-

edness condition이라는 이상한 (비직관적인) 조건을 필요로 한다. Adam Chlipala도 명저 ‘Certi-

fied programming with dependent types’에서 다음과 같이 평했다 (인용자가 강조).

However, mistakes in these checks[guardedness condition] could cause inconsistency,

and programmers would need to understand the new, more complex checks. Coq’s de-

sign strikes a balance between consistency and simplicity with its choice of guard con-

dition, though we can imagine other worthwhile balances being struck, too.

이 작업은 ‘balance’를 조정하여, 사용자가 사용하기 편리하면서도 더 많은 정리를 증명할 수 있는

tactic을 만들었다는데에 기여가 있다.

이론적으로는 다음과 같다. Coinductive proof로 증명하고 싶은 성질은 x ∈ νf와 같이 표현

되는 경우가 많다. 이런 성질을 증명하기 위해 보통 x ∈ a이며 a ⊑ νf인 a를 찾는 방법이 많이

사용된다. 이는 Tarski’s principle을 이용하기 위함이다.

Theorem 1 (Tarski’s principle). Let A be a domain and f : A → A νf be a monotone function.

Let νf be the greatest fixpoint of f . If a ⊑ f(a) then a ⊑ νf .

즉 x ∈ a이며 a ⊑ f(a)인 a를 찾기만 하면 된다.

그러나 a를 찾는 것은 어려운 과정이다. 이 과정의 어려움을 덜기 위한 다양한 방법이 제시

되었다. 예를 들면 guardedness condition이 있다. 그러나 이 방법은 모든 정리를 증명하지 못한

다. 이 논문이 사용한 방법은 a를 x로부터 constructive하게 찾아나갈 수 있도록 해주는 방법인

parameterized coinduction인데, 모든 정리를 증명할 수 있고, 일반적이며, Coq 라이브러리로 작

성 가능한 방법이다.

그러나 이 방법이 1980년대에 이미 Winskel이 제안한 방법과 무엇이 다르냐는 질문이 있었다.

발표자도 그 의견에 동의하면서, 다만 이 방법을 proof assistant 위에서 coinductive proof를 하는

데 사용한 것은 이 논문이 처음이라고 변론했다.

4 기억에 남는 발표 4: 요약 해석

이 절에서는 요약 해석과 관련된 논문을 소개한다. Polyhedra domain에 관한 논문과, 요약해석과

모델체킹의 관계에 대해 다룬 논문이 재미있었다.

4.1 Y. Seladji and O. Bouissou. Fixpoint Computation in the Polyhedra

Abstract Domain using Convex and Numerical Analysis Tools

Polyhedra domain을 사용하면 더 정교하므로 분석하는데 오랜 시간이 걸린다. 이 논문의 저자들

은 논문에서 제시한 방법대로 polyhedra domain을 사용하면 정교하면서도 빠른 분석을 할 수 있

다고 주장했다.

발표에서는 먼저 실수열의 수렴을 가속하는 방법을 설명했다. 이를 위해 같은 수렴값을 가진

다고 증명된, 조금 다른 실수열을 구한다. Polyhedra domain의 수렴도 이와 같은 아이디어를 사

용한다. 자세한 수학적인 내용은 잘 듣지 않았다.

발표를 듣는 중에는 Octagon domain도 비싸다고 잘 쓰지 않는 판에, polyhedra domain을 연

구하는게 어떤 의미가 있는지 모르겠다고 생각했다.

9

Page 10: POPL, VMCAI 2013 Rome, Italy, Jan 20 - Jan 26rosaec.snu.ac.kr/trip/data/jhkang_ropas.snu.ac.kr...2 기억에남는 발표 2: 이론 이절에서는재밌는이론을전개한논문을소개한다

그러나 실험 결과를 보고 생각이 바뀌었다. 논문은 digital filter와 관련된 예제를 사용해서, 기

존의 polyhedra domain을 이용하는 widening과 비교하여 얼마나 더 좋아지는지 나타냈다. 분석

시간과 정교함 두가지 면에서 많은 진일보가 있음을 알 수 있었다. Polyhedra domain이 실제로

필요한 곳이 있었으며, 지금까지는 과한 widening때문에 polyhedra domain으로도 잘 분석되지

않았던 문제를 이 논문은 해결했다. 좋은 논문이라고 생각했다.

모든 문제를 잘 푸는 static analysis는 없다. 문제를 잘 살펴보고, 문제에 딱 알맞는 방법이 무

엇인지 고민하는 것이 필요하다. 이러한 관점에서 polyhedra domain이 사용될만한 새로운 가능

성을 열었다는 점이 이 논문의 주된 기여라고 생각했다.

4.2 V. D’Silva, L. Haller, D. Kroening. Abstract conflict driven learning

사실, 이 논문은 거의 전혀 이해하지 못했다. 논문을 읽어봐도 그렇고, 발표를 들어도 그렇다. 그

럼에도 불구하고 중요한 메시지를 담고있다고 생각했다.

그 메시지란 요약 해석을 연구하는 연구자도 constraint solver에 친숙해져야 한다는 것이다.

SAT solver나 SMT solver와 같은 solver에는 conflict driven clause learning과 같은 많은 engi-

neering이 녹아있다. 그 경험을 요약 해석과 같은 영역에서 살리면 요약 해석에서도 좋은 결과를

얻을 수 있다는 것이 이 논문이 제시한 결과이다.

이 논문은 POPL에서 발표된 논문이지만, VMCAI의 의미에 대해 생각해보았다. Verification,

Model Checking, and Abstract Interpretation. 모두 프로그램이 올바르다는 것을 확인하기 위해

사용하는 기법들이다. 다양한 기법들이 발전해온 것은, 하나의 기법으로는 모든 문제를 해결하지

못했기 때문이다. 프로그램이 올바르다는 것을 확인한다는 궁극적인 목적을 위해, 연구자로서 다

양한 기법을 배워야겠다고 생각했다.

5 연구 이야기 : Xavier Leroy와 David Pichardie

지금 내가 하고 있는 분석기 검증과 관련한 일을 하는 사람들을 보았다. David Pichardie와 Xavier

Leroy는 함께 static analyzer의 검산기를 만들고 있는 것 같았다.

David Pichardie는 ID (Interference and Dependence)라는 학회에서 발표하는 것을 정말 우연

히 보게 되었다. VMCAI를 듣다가 화장실에 가는데, 누군가가 ‘Coq의 두가지 얼굴’이라는 슬라이

드를 발표하고 있었다. 증명 보조기와 프로그래밍 언어로서의 두가지였다. 평소에도 같은 생각을

하고 있었기 때문에 재밌다고 생각했다. 화장실에 갔다가 오는데 슬라이드에 ‘Verified validator

for static analyzer’라는 글씨를 보았다. 정신이 번쩍 들며 이 발표를 꼭 들어야겠다고 생각했다.

발표 자체는 toy 언어에 대해 종료 분석을 하는 내용이었다. 종료 분석 결과가 올바르다는 것은

Coq 위에서 증명했다. 종료 분석을 하기 위해 값 분석이 필요했는데, 이를 위해 Ocaml로 작성한

분석기의 결과를 validation하는 방법을 택했다. 우리 연구실에서 하려는 작업과 완전히 같은 방

향이었다.

후에 David Pichardie와 더 많은 이야기를 나누었다. SparrowBerry와 비교하면, SparrowBerry

는 C의 많은 기능을 다루는 장점이 있는 반면 (recursive call, inter-procedural analysis, memory

operations) David Pichardie 그룹에서는 다양한 numerical domain (octagon 등)을 다루고 검증된

컴파일러인 CompCert 위에서 작업을 수행한다는 장점이 있었다. David Pichardie와 만난 후 우리

작업을 어떻게 어필할지 고민이 필요하다고 생각했다.

후에 Xavier Leroy가 Microsoft Verification Milestone Award를 받고 수상 소감을 말하는 것을

들었다. Xavier Leroy는 CompCert 위에서 정적 분석하는 것에 요즘 관심있다고 말했다. 뉘앙스

10

Page 11: POPL, VMCAI 2013 Rome, Italy, Jan 20 - Jan 26rosaec.snu.ac.kr/trip/data/jhkang_ropas.snu.ac.kr...2 기억에남는 발표 2: 이론 이절에서는재밌는이론을전개한논문을소개한다

를 보아 같은 INRIA에 있는 David Pichardie와 같이 하고 있는 것 같았다. 강력한 그룹과 비슷한

작업을 하고 있다고 생각하니, 긴장되면서도 옳은 방향으로 나가고 있는 것 같아 좋았다.

6 로마

로마에 있으면 마치 시간여행을 하는 것 같다. 고대 로마 공화정의 중심적인 장소였던 로마

광장의 흔적들을 보노라면 고대의 기상을 느낄 수 있다가도, 성당으로 변해버린 판테온, 바티칸의

베드로 대성당, 도시 곳곳에 있는 300여개의 성당을 보면 중세 이탈리아의 어수선한 분위기가 보

인다. 그런가 하면 호텔 근처에는 페라리 대리점도 보인다. 걸어서 관광할 수 있는 크기인 만큼,

골목 골목을 볼 수 있었던 것도 좋았다.

파스타와 피자는 진짜 원없이 먹어치웠다. 처음에는 이탈리아에 왔으니 파스타 피자를 먹어야

지 싶었는데, 나중에는 지겨워져서 제발 다른걸 먹고싶다고 할 정도였다. 스테이크를 많이 먹었다.

젤라또는 전설이다. 나는 샴페인 젤라또가 제일 맛있는 것 같다.

11

Page 12: POPL, VMCAI 2013 Rome, Italy, Jan 20 - Jan 26rosaec.snu.ac.kr/trip/data/jhkang_ropas.snu.ac.kr...2 기억에남는 발표 2: 이론 이절에서는재밌는이론을전개한논문을소개한다

라틴어의 고향인 이탈리아. 한때 ‘세계’ 문화를 선도했다는 (팍스 로마나) 자부심이 넘치는 도

시 이탈리아. 교황권을 중심으로 유럽 최고의 국제정치무대이던 이탈리아. 언젠가는 미술사를 공

부하고 다시 와서 골목 골목 구석 구석 살펴볼 수 있으면 좋겠다고 생각했다.

12

Page 13: POPL, VMCAI 2013 Rome, Italy, Jan 20 - Jan 26rosaec.snu.ac.kr/trip/data/jhkang_ropas.snu.ac.kr...2 기억에남는 발표 2: 이론 이절에서는재밌는이론을전개한논문을소개한다

7 맺으며

부러웠다. 좋은 연구를 하고, 좋은 발표를 하는 사람들을 보면서 나도 그렇게 하고싶다고 생각했

다. 언젠가 더 성장해서 지금 하는 연구를 더욱 키워나가고 좋은 연구를 한 뒤, 2013년 1월을 회

상하며 웃음지을 수 있으면 좋겠다고 생각했다. 큰 자극이 되었다.

의사소통이 중요하다고 생각했다. 좋은 연구를 하고, 좋은 발표를 하는 것도 학회의 중요한 활

동이지만, 다른 연구자들과 안면을 익히고 대화를 하는 것도 중요한 활동이라고 생각했다.

점점 학회에 아는 얼굴이 많아져서 좋았다. 이제는 얼핏 대가들의 얼굴을 구분할 수 있게 된

것 같다. 얼굴도 익히고 분야에 대한 윤곽도 함께 잡을 수 있게 되면 좋겠다. 내가 연구하는, 연구

하고 싶은 분야의 연구자들과도 대화한 것은 좋은 기회였다고 생각한다. KAIST 한태숙 교수님,

연세대학교 최광훈 교수님, 허충길 박사님, MIT에서 포닥으로 계신 어덕기 박사님 그리고 박사과

정이신 덕환이형, INRIA에서 포닥으로 계신 임현승 박사님과 만난 것도 무척 즐거운 일이었다.

8 감사의 말씀

학회에 참석해서 좋은 사람, 좋은 연구, 좋은 기회들을 접할 수 있도록 지원해주신 이광근 교수님,

소프트웨어 무결점 연구센터, 한국연구재단에 진심으로 감사 드립니다. 항상 물심양면으로 도와주

시는 행정팀 여러분들께도 감사드립니다. 연구센터에 이바지할 수 있도록 더욱 노력하겠습니다.

13