자동 정리 증명 학습


44

나는 자동 정리 증명 / SMT 솔버 / 교정 보조자 를 스스로 배우고 여기에서 시작하여 프로세스에 대한 일련의 질문을 게시합니다.

이 주제는 (수학적) 논리의 배경이 없으면 쉽게 소화되지 않습니다. 기본 용어에 문제가있는 경우 M. Huth 및 M. Ryan의 컴퓨터 과학 논리 (특히 1, 2, 4 장) 또는 P.의 수학 논리 및 유형 이론 소개 와 같은 용어를 읽어보십시오 . 앤드류스
고차 로직 (HOL)에 대한 간략한 소개는 여기를 참조 하십시오 .

나는 Coq를 보고 이사벨라 에 대한 귀납의 첫 번째 장을 읽었다 . 자동 정리 증명 자의 유형

나는 수십 년 동안 Prolog를 알고 있으며 현재 F #을 배우고 있으므로 ML, O'Caml 및 LISP는 보너스입니다. 하스켈은 다른 짐승입니다.

다음과 같은 책이 있습니다

Alan Robinson 및 Andrei Vornkov가 편집 한 "자동 추론 안내서"

John Harrison의 "실용적인 논리와 자동화 된 추론 핸드북"

Franz Baader와 Tobias Nipkow의 " 용서 재 작성 및 모든 것"

  1. Coq와 Isabelle의 차이점은 무엇입니까?

  2. Isabelle 또는 Coq 중 하나 또는 둘 다를 배워야합니까?

  3. Isabelle 또는 Coq를 먼저 배우면 이점이 있습니까?

시리즈의 다음 질문을 찾으 십시오 .


7
언급 한 도구는 자동화 된 프로 버가 아니라 보증 어시스턴트라는 점을 명심해야합니다.
Raphael

@DaveClarke 복제?
Raphael

@Raphael : 예 (지금은 내 대답에 새로운 데이터가 포함되어 있습니다).
Dave Clarke

@DaveClarke이 하나를 닫고 두 개를 병합해야한다고 생각하십니까?
Raphael

@Raphael : 그렇습니다. 방금 여기에 답변 텍스트를 다른 질문에 대한 내 답변에 복사했습니다.
Dave Clarke

답변:


25

나는 Coq를 선호하지만 다른 사람들은 Isabelle을 선호한다고 생각합니다. 내가 Isabelle에 대해 발견 한 이상한 점 중 하나는 2 단계 구문이 있다는 것입니다. 여기서 일부 정의는 큰 따옴표 안에 있어야합니다. Coq에는 그러한 넌센스가 없습니다.

궁극적으로 당신에게 가장 적합한 것은 증명하고자하는 것에 달려 있습니다. 두 언어 모두 많은 종류의 라이브러리 지원과 모든 종류의 개발 및 예제 이론을 수행하는 활발한 커뮤니티를 보유하고 있습니다. 한 언어가 당신이 개발하고자하는 종류의 이론에 대해 적절한 라이브러리 (또는 다른) 지원을 제공한다면, 나는 그 언어를 선택할 것입니다.

한 가지 전략은 두 가지 언어로 간단한 튜토리얼을 수행하고 가장 기분이 좋은 튜토리얼을 따르는 것입니다. 예를 들어

다음 은 Isabelle을 궁극적으로 선호하는 사람이 두 가지를 간단히 비교 한 블로그 게시물입니다.

명령 행에서 작업을 수행하는 대신 적절한 IDE (예 : ProofGeneral ) 를 사용하십시오 .

Coq에 들어가는 또 다른 방법은 Benjamin Pierce et al. 의 온라인 책 Software Foundations 를 사용해 보는 것 입니다. 제공되는 많은 세부 정보가 포함 된 훌륭한 자습서를 제공합니다. 주로 언어 의미 프로그래밍에 중점을두고 있지만, Coq 및 반자동 정리 증명의 많은 기본 (그리고 그 이상)은 그 과정에서 다루어집니다.


4
일단 당신이 그것을 길 들이면 ProofGeneral은 굉장합니다! Isabelle 구문 : iirc에 대해서는 큰 따옴표로 묶은 내용이 수식입니다. 그 밖의 모든 것은 증거 통제입니다. 나는 명확한 구별이 좋았지 만 큰 따옴표 (및 따옴표 안에 구문 강조 표시 부족)는 아마도 그것을 구현하는 가장 좋은 방법은 아닙니다.
Raphael

4
우리는 작년에 Isabelle / HOL 위키를 설정했습니다 . 그렇지 않으면 좋은 개요가 있습니다.
Raphael

18

흥미로운 점은 "정리 증명"이라는 용어는 현재의 분야에 따라 크게 다르다는 것입니다. Automated Reasoning 핸드북에서 자세한 내용을 참조하십시오)는 생각보다 Coq 또는 Isabelle과 관련이 적습니다.

내가 관련 문제를 증명하는 정리에 대해 처음 배웠을 때, 내가 읽은 첫 번째 책 (지금은 꽤 오래되었지만)은 Melvin Fitting의 우수한 1 차 논리와 자동화 된 정리 증명이었습니다. 이 책은 실제로 상당한 양의 자동화를 얻을 수있는 하위 논리와 관련된 주제를 다루는 훌륭한 책이었습니다. 당신이 배우는 논리의 종류는 당신이 추론하고자하는 것에 의해 결정되어야하며, 그것을 위해 많은 이론이 증명되지 않아야합니다. 예를 들어, 1 차 논리는 ​​당신에게 표현력과 추론 능력을 상당히 제공하지만, 대부분의 프로그래밍 언어 커뮤니티 (내가 끝 났던)는 이론의 증명과 모델 검사 ( 더 결정적이지만 표현력이 떨어지는 것들의 양동이).

그러나 이것을 1 차 추론 및 모델 확인과 같은 것이 실제로 유용 하지 않다는 것을 의미 하지는 마십시오 . 그들은되었습니다! ACL2를 산업 영역에서 놀라운 성공을 거둔 1 차 로직 위에 구축 된 검증 자의 예로 볼 수 있습니다. 이와 함께 SMT 해결에는 놀라운 개발이 이루어졌습니다. 현대의 SMT 솔버는 강력한 SAT 솔버 위에 구축되어 있으며 (대부분 DPLL 개선을 위해 지난 20 년 동안의 발견을 통해) 심볼릭 실행과 같은 분야에서 많이 사용되었습니다.

그러나 내가 말했듯이, 더 전통적인 "정리 증명"비트는 재미 있지만 배울 것이 더 많습니다 . 예를 들어 Learning Coq는 그것이 제공하는 자동화 도구를 배우는 것과는 거의 관련이 없으며, 기반이되는 유형 이론 (가시적 구조의 예측 미적분학)을 배우는 것과는 더 관련이 있습니다. 건설적인 논리, 카레 하워드 동형 또는 유형 이론에 익숙하지 않은 경우 이러한 도구를 배우는 데는 시간이 많이 걸리지 만 첫 번째 볼륨에서 보는 것과 너무 밀접하게 관련되어 있다고 생각할 수는 없습니다. 핸드북의.

따라서 원하는 것을 결정하십시오. 1 차 논리로 모델과 정리를 검증하거나 강력한 유형 이론을 사용하여 프로그램의 정확성 (또는 구성 논리의 정리)을 추론하십시오. 그것이 첫 번째라면, 더 자동화 된 추론 기반 기술에 대해 배우고, 두 번째 경우에는 Coq, HOL 등에 대해 더 많이 배우십시오 ... 그런데, Coq를 배우고 싶다면 위의 참고 문헌이 좋을 것이라고 생각합니다. Coq 학습을위한 두 가지 핵심 참고 자료가 있습니다.

Benjamin Pierce의 소프트웨어 기초 서적 (Dr. Pierce는 훌륭한 작가이며 아직 인기가없는 "브릭 북 (Brick Book)"도 추천합니다).

Dependent Types를 사용한 인증 된 프로그래밍 (Adam Chlipala는 저서도 Pierce의 간단한 소개보다 약간 더 성숙하고 지능적인 것으로 가정하지만 글을 잘 쓰고 있습니다.)


15

대화식 정리 증명 (ITP)을위한 다양한 시스템이 있습니다. Coq, Isabelle, HOLs, ACL2, PVS 등의 이름의 회의도 참조하십시오.

그들 모두는 배우기가 상대적으로 어렵고 각각 고유의 문화가 있습니다. 외국어를 배우는 것과 같습니다. 이미 영어를 알고 있다고 말한 다음 프랑스어, 독일어, 이탈리아어, 스페인어, 포르투갈어를 선택할 수 있습니다. 그들 모두는 어떻게 든 관련이 있습니다-이것은 중국인이 아닙니다-그러나 거의 모든 사람들이 동시에 모든 것을 관리합니다. 따라서 각 문화와 지역 사회를 맛보고 노력을 기울여야합니다.

작업에 실제로 필요한 "킬러 기능"이있을 수도 있습니다.

또한 이러한 시스템 중 하나에 동료 전문가를 두는 데 도움이됩니다.

  • Coq와 Isabelle의 차이점은 무엇입니까?

둘 다 Stanford / Edinburgh / Cambridge의 LCF 시스템의 자손입니다. 1985 년에 G. Huet과 L. Paulson은 캠브리지 LCF의 마지막 버전을 공동 작업했습니다. 그런 다음 프랑스의 Coc / CIC / COQ (현재 Coq), 케임브리지와 뮌헨의 Isabelle로 분할되었습니다. HOL4, HOL-Light, HOL-XYZ는 LCF의 다른 관련 하위 항목입니다.

20 년 전에 Coq와 Isabelle의 구별은 논리적 기반에 따라 만들어 졌을 것입니다. 오늘날에는 애드온 툴 및 라이브러리를 포함하여 각 공식 시스템 위에 점점 더 많은 계층이 추가되었으므로 실제로는 실제로 그 영향에 거의 영향을 미치지 않습니다.

  • Isabelle 또는 Coq 중 하나 또는 둘 다를 배워야합니까?

당신은해야 보면 모두에서, 그리고 당신이 더 많은 와인과 치즈 또는 사우어 크라우트 및 소금에 절인 양배추를 좋아하는 경우에 느낌을 얻을하려고합니다. (이자벨의 뒤에있는 사람 중 한 사람이지만 현재 프랑스에서 나는 개인이 집에 있고 아무도 보지 않을 때 실제로 얼마나 많은 Sauerkraut를 좋아하는지 놀랐습니다 :-)

  • Isabelle 또는 Coq를 먼저 배우면 이점이 있습니까?

나는 그렇게 생각하지 않습니다. 당신이 먼저 시도하고 두 번째 시도하지 않는 위험에 처할 수 있습니다, 또는 당신은 첫 번째와 너무 일찍 실망하고 너무 일찍 해산 할 수 있습니다. 어쨌든 어느 시스템에서나 생산성을 유지하려면 시간과 지속성이 필요합니다.

Proof General이 "IDE"로 언급되었으므로 Proof General / Emacs는 오랫동안 Coq와 Isabelle의 표준 통합 인터페이스로 사용되었지만 결코 IDE라고 부르지 않았을 것입니다. 이름에 "IDE"가있는 CoqIDE도 있지만 Gtk 위젯 위에는 비교적 기본적인 편집기입니다. 현재 Isabelle에는 Isabelle / jEdit가 포함되어 있는데, 이름에 "IDE"가 없지만 Java 코드 대신 증명 텍스트를 위해 Netbeans 또는 IntelliJ IDEA에서 일상적으로 볼 수있는 것과 비슷합니다.


10

다음 은 Andrej Bauer의 멋진 비디오 Coq 자습서입니다. 완전하지는 않지만 좋은 소개라고 생각합니다.


1
큰! "Coq의 첫 번째 증거"의 중앙 문장을 참고하십시오. "종이에 어떻게 할 것인지 생각해보십시오." 최고의 조언.
라파엘

4

이자벨에 대한 소개는 매우 철저하다.

또한 볼 이 소개 이사벨로를

일반적으로 Isabelle은 사용 가능한 예가 많으므로 비교적 쉽게 시작할 수 있습니다. 예를 들어 공식 웹 사이트에서

추신-나는 Isabelle과 제휴하지 않으며 공식적인 방법론의 이론가이지만 Isabelle이 종종 기본 출발점으로 등장한다는 것을 알고 있습니다.


1
“Isabelle이 기본 시작 지점으로 자주 등장한다는 것을 알고 있습니다.”: 오히려 HOL이 기본 시작 지점으로 제공되고 교정 보조원으로 종종 기본으로 제공되는 Coq입니다. 그것을 생각하면, 그것은 재미 있고… 가장 유명한 논리 (CoC보다 더 유명한 HOL)와 가장 유명한 증명 보조 (Isabelle보다 더 유명한 Coq)는 일치하지 않습니다 (Coq는 CoC를 기반으로하고 HOL은 Isabelle을 기반으로 함).
Hibou57

2

최근에 conf2017 에서 이러한 Coq 자습서를 보았으므로 나중에이 질문을 방문하는 사람과 공유 할 가치가 있음을 알았습니다.λ

또한 DeepSpec Summer School의 Software Foundations에는 멋진 강의가 있습니다.

이미 언급 된 Software Foundations 시리즈를 기반으로하는 강의 중 일부입니다.

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