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.