2014-01-23 8 views
17

인증 된 프로그램을 설계하는 데 Coq를 사용하는 방법에 대해 이야기하는 여러 연구 그룹과 적어도 한 권의 책을 봅니다. 인증 프로그램의 정의에 대한 합의가 있습니까? 제가 말할 수있는 것에서는, 그것이 의미하는 바는 모두 프로그램이 합법적이고 정확한 타입임을 증명했습니다. 이제 프로그램의 유형은 비어 있고, 정렬되어 있고,> 5와 같은 요소가 포함되어 있다는 증거가있는 목록과 같이 정말 이국적인 것일 수 있습니다. 그러나 Coq가 보여준 인증 된 프로그램은 궁극적으로 총계 및 유형 안전성입니다. 모든 흥미로운 질문들이 마지막 유형에 포함 된 것으로 요약됩니다. wjedynak의 답변에 따라 1 인증 된 프로그램의 정의


편집, 나는 자비에 르로이의 종이 아래의 답변에 링크 된 "실제 컴파일러의 공식 확인"을 살펴했다. 나는 이것이 좋은 정보를 포함하고 있다고 생각하지만, Sandlin Blazy와 Xavier Leroy의 논문 Mechanized Semantics for the Clight Subset of the C Language에서이 일련의 연구에서보다 유익한 정보가 발견 될 수 있다고 생각합니다. 이것은 "형식 검증"보고서에 최적화가 추가 된 언어입니다. Blazy와 Leroy는 Clight 언어의 구문과 의미를 제시하고 5 장에서 이러한 의미의 유효성을 논의합니다. 5 장에서는 컴파일러 유효성 검사에 사용되는 다양한 전략 목록을 제공합니다. 공인 프로그램을 만들기위한 다양한 전략들. 이들은 다음과 같습니다 다른 의미 어떤 경우

와 의미의 특성

  • 검증 번역
  • 테스트 실행 의미
  • 동등성을 입증

    1. 매뉴얼 리뷰
    2. , 아마이 있습니다 추가 할 수있는 포인트와 나는 더 많이 듣고 싶습니다.

      인증 된 프로그램의 정의에 대한 원래의 질문으로 돌아가서, 나에게는 아직 조금 불명확합니다. Wjedynak 일종의 대답을 제공하지만, 사실 Leroy의 작업은 Coq에서 컴파일러를 만든 다음 어떤면에서는 그것을 증명하는 것과 관련이 있습니다. 이론적으로, 이제는 C-> Coq-> proof로 갈 수 있기 때문에 C 프로그램에 대한 것들을 증명할 수있게되었습니다. 우리가

      1. 가 X 언어로 COQ의 1 단계 또는 다른 증거 보조 도구에서 프로그램의 모델의
      2. 양식을하는 프로그램을 작성 수있는이 작업 흐름이처럼 그런 의미에서, 그것은 보인다. 이것은 Coq에서 프로그래밍 언어의 모델을 생성하거나 프로그램의 모델을 직접 생성 (즉, Coq에서 프로그램 자체를 다시 작성)하는 것과 관련 될 수 있습니다.
      3. 모델에 대한 몇 가지 속성을 입증하십시오. 어쩌면 그 값에 대한 증거 일 수 있습니다. 어쩌면 그것은 문장의 동등성을 입증 할 수 있습니다. (3 = 1 + 2 또는 f (x, y) = f (y, x)와 같은 것들입니다.)
      4. 그런 다음 이러한 증명을 바탕으로 원래 프로그램 인증 .

      또한, 우리는 증거 보조 도구에서 프로그램의 사양을 만들 수 다음 사양에 대한 속성을 증명 있지만 프로그램 자체.

      아무튼 나는 대체 정의가있는 경우 대체 정의를 듣는 것에 관심이 있습니다.

  • +1

    아주 유효한 질문입니다. 함수의 결과가 항상 이상하다는 것을 증명했다면, 이미이 함수가 정확하다는 것을 의미합니까? 나는 그렇지 않다. 내가 아는 바로는 사양은 문제의 모든 측면을 마지막 비트까지 설명하지 않습니다. 이는 "일부 측면 만 정확하다"고 말하는 것이 더 정확하다는 것을 의미합니다. 누구도 반대 할 것입니까? –

    답변

    6

    본인의 생각이 모호한 것 같지만, 인증 된 프로그램은/정확함을 증명하는 프로그램입니다. 이제 풍부하고 표현적인 형식 시그니처를 사용하여 별도의 증명이 필요 없도록 만들 수 있지만, 이는 종종 편의상 문제가됩니다. 진정한 문제는 정확성이란 무엇을 의미합니까? 이것은 사양의 문제입니다. 예를 들어 다음을 살펴볼 수 있습니다. 사비에 르로이. Formal verification of a realistic compiler.

    4

    "인증"이라는 문구에는 약간의 프랑스어 편향이 있습니다. 다른 곳에서는 "검증 됨"또는 "검증 됨"이라는 표현이 자주 사용됩니다.

    어쨌든 실제로 그 의미를 묻는 것이 중요합니다. X. Leroy와 CompCert는 C 컴파일러 검증에 대한 커다란 프로젝트이며, Leroy는 항상 독자들에게 검증이 중요한 이유를 설명하려고 애를 쓰고 있습니다. 특히 "증명 기관"에서 사람들과 이야기 할 때, 일반적으로 테스트를 의미하며 증명하지는 않습니다.

    다른 큰 검증 프로젝트는 Isabelle/HOL을 사용하는 L4.verified입니다. exposition의이 부분은 실제로 명시되고 입증 된 내용과 그 결과에 대해 설명합니다. 불행히도 실제 증거는 일급 비밀이므로 공개적으로 확인할 수는 없습니다.

    +0

    일급 비밀? 링크 된 웹 사이트에서 "seL4, 그 증거, 사용자 공간 라이브러리 및 도구는 오픈 소스 소프트웨어이며 http://seL4.systems에서 액세스 할 수 있습니다" –

    0

    런타임 오류 (숫자 오버플로, 잘못된 참조 ...)가 없음을 의미 할 수 있습니다. 이것은 대부분 개발 된 소프트웨어에 비해 이미 좋지만 여전히 약합니다. 다른 의미는 도메인 형식화에 따라 올바른 것으로 입증됩니다. 즉, 형식적으로 런타임 오류가 없어야 할뿐만 아니라 예상되는 작업을 수행해야한다는 것을 입증해야합니다 (정확히 정의되어야 함).

    1

    이 의미에서 "인증"은 as Makarius pointed out으로, 프랑스어가 Francophones에서 선택한 단어로, 원어민이 "공식적으로 검증 됨"을 대신 사용할 수도 있습니다. Coq는 프랑스에서 개발되었으며, 많은 Francophone 개발자와 사용자가 있습니다.

    증명하는 행위 ... 일정과 관련하여 시스템을 기본 구성 알고리즘의 정확성이다 : 무엇을 "형식 검증"수단으로

    , 위키 백과 notes (라이센스 : CC BY-SA 3.0)가 있음 공식적인 수학적 방법을 사용하여

    은 (내가 하나를 찾을 경우. 나는 앞으로이 대답을 업데이트 할 희망이보다 훨씬 더 정확한 정의를 싶습니다 알고 있습니다.)

    위키 백과 특히 검증의 차이를 지적 검증 :

    • 확인 :는 "우리는 옳은 일을하려고합니까?", 즉, 프로입니다 덕트가 사용자의 실제 필요에 맞게 지정 되었습니까?
    • 인증 : "제품을 만들려고 했습니까?"즉 제품이 사양을 준수합니까?

    landmark 용지 seL4: Formal Verification of an OS Kernel (클라인, 등.2009)이 해석을 뒷받침 :

    냉소적이 구현 증거 만 구현이 사양 에 포함 똑같은 버그가 있음을 보여주고 있다고 말할 수 있습니다. 이는 사실입니다. 증명은 사용자가 예상하는 동작을 사양이 기술한다는 것을 보증하지 않습니다. 차이 [확인되지 않은 것과 비교 한 검증 된 접근 방식] 은 추상화의 정도와 버그의 전체 클래스가 없음을 나타냅니다.

    어떤 종류의 버그가 있습니까? AGDA 튜토리얼 gives some idea :

    • 없는 런타임 오류 (I/O 오류와 같은 피할 수없는 오류가 처리되며, 다른 사람이 설계 제외).
    • 비생산적인 무한 루프가 없습니다.
    2

    인증 된 프로그램은 프로그램이 사양, 즉 인증을 만족 증명 페어링되는 프로그램이다. 핵심은 증명을 생성 한 도구와 독립적으로 검사 할 수있는 증명 개체가 있다는 것입니다.

    검증 된 프로그램이 검증을 거쳤습니다.이 컨텍스트에서 일반적으로 Coq와 같은 시스템에서 사양이 공식화되고 정확함을 의미 할 수 있지만, 증명은 외부 도구에 의해 반드시 인증되지는 않습니다.

    이 구별은 과학 문헌에 잘 설명되어 있으며 Francophones에만 해당되는 것은 아닙니다. Xavier Leroy는 섹션 2.2 (A formally verified compiler back-end)에서 매우 명확하게 설명합니다.