Proof Carrying Code에 Proof Checker가 필요한 이유


9

Necula의 고전 PLDI'98 논문에서 "인증 컴파일러의 설계 및 구현"에서 고급 검증기는 다음을 사용합니다.

  1. 검증 조건을 생성하는 VCGen (안전 조건 자)
  2. 조건을 증명할 수있는 1 차 논리 정리
  3. 단계 (2)에서 증거를 확인하는 LF 증거 검사기

나는 단계 (3)에 약간 혼란스러워합니다. 왜 필요합니까? (1)과 (2)만으로는 충분하지 않습니까? 왜 우리는 정리 증명에 의해 생성 된 증거를 신뢰하지 않습니까?

답변:


19

증명 검사기의 목적은 신뢰할 수있는 컴퓨팅 기반 을 최소화하는 것 입니다.

증명 검사기를 가짐으로써 컴파일러 나 정리 증명자가 모두 정확하지 않아도됩니다. 이 논문은 3 페이지에서이 점을 지적합니다.

Neither the compiler nor the prover need to be correct in order to be guaranteed to   
detect incorrect compiler output. This is a significant advantage since the VCGen and  
the  proof checker are significantly simpler than the compiler and the prover.

증명 검사기는 코드 몇 줄에 불과하며 정확성을 직접 검사 할 수 있습니다. 대조적으로, 잘 작동하는 자동화 된 프로 버는 매우 복잡하고 정확하지는 않지만 잘 테스트되고 널리 사용되는 프로 버의 경우 실수가 트리거하기 쉽지 않은 에지 케이스에있을 것입니다. 최첨단 SAT 솔버 인 Lingeling 을 구성하는 30k LOC C 코드를 살펴보면 자동 정리 프로 버가 얼마나 복잡한지를 알 수 있습니다. 증명 검사기가 없으면 정리가 증명되었다는 것을 증명해야합니다. 이는 2015 년에 경제적으로 할 수있는 일을 넘어선 것입니다.


ATP로 작성된 증명이 버그가 될 수 있다는 사실에 놀랐습니다. (ATP는 불완전하지만 소리가 나지 않을 수 있다고 생각했습니다.) 나는 여기에 대한 정보가 부족합니다. ATP에 의해 생성 된 증명에 고가의 실수로 알려진 사례가 있는지 기꺼이 알려 드리겠습니다.
Ram

3
@Ram 심각한 자동 정리 증명의 역사에는 수천 개의 작은 건전성 버그가 있습니다. 예를 들어 stackoverflow.com/questions/12281085/… 또는 github에서 이러한 도구의 개정 내역을 참조하십시오 .
코디

@Ram Cody의 훌륭한 조언 외에도 경험을 통해 배우는 것이 좋습니다. 기본 SAT 솔버와 같은 약간의 ATP를 작성하십시오. 몇 줄의 코드로 수행 할 수 있습니다. 그런 다음 구문 학습, 관찰 된 리터럴 또는 흥미로운 변수 선택 휴리스틱을 추가하여 성능을 향상 시키십시오. 그렇다면 경험에 대해 생각해보십시오.
Martin Berger
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.