증거 조수에서 '전술'은 어떻게 작동합니까?


44

질문 : 교정 보조원에서 '전술'은 어떻게 작동합니까? 그것들은 용어를 동등한 용어로 다시 쓰는 방법을 지정하는 방법 인 것 같습니다 ( '동등한'의 일부 정의의 경우). 아마도 이것에 대한 공식적인 규칙이 있는데, 그것이 무엇인지, 어떻게 작동하는지 배울 수 있습니까? 베타 감소를위한 주문 이상의 선택이 필요합니까?

관심 분야에 대한 배경 : 몇 달 전에 공식적인 수학을 배우고 싶다고 결정했습니다. 나는 예비 연구에서 그것이 올바른 길을하는 것 (tm)과 같고 매혹적인 프로그래밍과 수학을 통합하는 것처럼 보이기 때문에 유형 이론을 사용하기로 결정했습니다 . 필자의 궁극적 인 목표는 Coq와 같은 증거 보조자를 사용하고 이해하는 것입니다 (특히 매트릭스 유형을 나타내는 것과 같은 것들이 궁금 할 때 종속 유형을 사용할 수 있다고 생각합니다). 초보적인 기능적 프로그래밍조차도 거의 알지 못했지만 시작은 느리다. 나는 많은 종류의 프로그래밍 언어 (피어스)를 읽고 이해했으며 하스켈과 ML을 배웠습니다.


1
이것은 내 Coq 비디오 자습서 math.andrej.com/2011/02/22/…에 대한 수치
Andrej Bauer

답변:


36

기본 전술 은 추론 규칙을 앞뒤로 실행 합니다 (예 : 가설 BA B 로 변환하거나 목표 A B 를 두 가지 목표 AB 로 변환)ABABABAB같은 가설로), 정리 (~ 함수 응용)를 적용하고, 유도 형에 대한 정리를 각 생성자에 대한 사례로 나눕니다. 기본 전술은 적용되는 상황에 따라 성공 또는 실패 할 수 있습니다. 고급 전술은 기본 전술을 실행하고, 목표 및 / 또는 가정의 용어에 대해 패턴 일치를 수행하고, 전술의 성공 또는 실패를 기반으로 선택하는 등의 작은 기능적 프로그램과 같습니다. 고급 전술은 산술 및 기타 특정 종류의 이론을 다룹니다. Coq의 전술 언어에 대한 핵심 논문은 다음과 같습니다.

  • 델라 예 시스템 Coq를위한 전술 언어 . 프로그래밍 및 자동 추론 논리 (LPAR), 레위니옹 섬, 컴퓨터 과학 강의 노트 1955 권, 85–95 쪽. Springer-Verlag, 2000 년 11 월

기본 전술의 본질을 형성하는 공식적인 규칙은 여기 Coq 사용자 안내서 또는 pdf의 4 장에 정의되어 있습니다.

전술과 전술 (실제로 다른 전술을 논쟁으로 삼는 전술)을 구현하는 데 도움이되는 유익한 논문은 다음과 같습니다.

Coq의 전술 언어는이를 사용하여 작성된 증거가 직접 수행하는 증거와 거의 유사하지 않다는 한계가 있습니다. 보다 확실한 증거를 제공하기 위해 여러 가지 시도가있었습니다. 여기에는 Isar (Isabelle / HOL 용) 및 Mizar 의 증명 언어가 포함됩니다.

옆으로 : 프로그래밍 언어 ML 은 원래 LCF 정리 증명 을위한 전술을 구현하도록 설계 되었다는 것을 알고 있습니까? 타입 추론과 같은 ML을 위해 개발 된 많은 아이디어는 현대 프로그래밍 언어에 영향을 미쳤다.


3
좋은 대답입니다. 종속 유형을 사용한 Adam Chlipala의 공인 프로그래밍 ( adam.chlipala.net/cpdt )은 Coq.의 전술 사용에 관한 또 다른 좋은 자료입니다.
jbapple

16

LCF는 ML 프로그래밍 언어 (오늘 우리는 OCaml, SML, F #이라고도 함)를 포함하여 Coq, Isabelle, HOL의 모든 시스템의 할아버지입니다. 예, 저는 더 큰 LCF 가족의 일원으로 Coq를 포함시키고 있습니다. 미국 - 미국의 증거 단말기 (특히 ACL2), 또는 전혀 관련이없는 미자르에 비해 COQ 주로의 공유 된 생각 때문에, 아주 가까운 이사벨과 HOLs 문화적입니다 전술 .

어쨌든 전술을 다시 작성, 변환, 연결 도입 또는 제거에 대한 우발적 인 관찰에서 제거 된 전술은 무엇입니까?

여기서 주요 레이어링 원리는 Milner의 LCF에서 상속되었습니다.

  • thm원래 LCF 접근 방식의 추상 데이터 유형 또는 패밀리의 유형 이론 분기 (Coq, Matita)에서 별도의 증명 용어를 확인하여 핵심 추론 (앞으로 추론 ). 이를 통해 입증자가 이론으로 간주하는 결과에 대한 논리적 근거 를 얻을 수 있습니다. 따라서 ⊢ A와 ⊢ B를 취하고 ⊢ A ∧ B를 제공하는 기본 추론을 가질 수 있습니다. 또 다른 기본 추론은 ⊢ t = u를 줄 수 있습니다. 여기서 u는 베타 정규형 t입니다. 그러나 이러한 메커니즘 중 어느 것도 전술이 아니며 표준 논리와 같은 추론 규칙 입니다.

  • 목표 지향적 증거 (역 추론). 아이디어는 "목표 상태"에 대한 개념을 구체화하여 점점 더 많은 하위 목표로 나누고 하위 목표를 닫을 때까지 모든 목표가 해결 될 때까지 작동한다는 것입니다. 목표 상태를 끝내면 프로세스에서 특정 정리가 튀어 나옵니다. LCF는 목표에 대한 추가 논리 인프라를 도입했으며, 이는 여전히 HOL에 있습니다. 전술은 목표를 세분화하고 세분화에 대한 정당성을 제공하는 ML 기능입니다. 증명의 최후에, 정당화는 역순으로 재생되어 상기 스케치 된 원시 추론에 따라 정방향으로 증명을 생성한다.

Coq와 Matita는 여전히이 LCF 원칙에 매우 가깝습니다. Isabelle은 여기서 다릅니다. 1989 년 초 Larry Paulson은 목표와 전술에 대한 개념을 개혁하여이를 Isabelle의 "순수한"논리적 프레임 워크 인 논리에 더 가깝게 만들었습니다. Isabelle / Pure는 의미 ==> 및 수량화 기능을 갖춘 최소 고차 로직을 제공합니다 !! 자연 공제 규칙의 구조와 목표 상태를 모두 나타냅니다.

예를 들어, ⊢ A ==> B ==> A ∧ B는 논리 프레임 워크의 정리 인 (객체 논리의) 결합 도입 규칙입니다.

목표 상태는 초기 주장 C에 대해 ⊢ C ==> C로 시작하는 정리 일 뿐이며, 중간 상태에서 ⊢ X ==> Y ==> Z ==> C로 조정됩니다. 여기서 X, Y, Z 현재 하위 목표이며 프로세스는 ⊢ C (하위 목표 없음)로 끝납니다.

목표 상태에 대한 개념 (예 : 위의 Isabelle 하나)을 고려할 때 전술 은 목표 상태를 (0, 1 이상) 후속 조치에 매핑하는 함수입니다. 목표 상태. 또한, 전술전술적 기능, 예를 들어 순차적 구성, 선택, 반복 등을 표현하기 위한 전술적 기능의 조합기 이다. 실제로, 전술 및 전술의 언어는 파서 조합기의 "성공 목록"접근법과 관련된다.

전술을 통해 목표 세분화의 특정 전략을 체계적으로 설명 할 수 있습니다. 1970/80 년대 LCF에서 발명 한 이래로 성공을 거두었지만 악명 높은 읽을 수없는 증명 스크립트를 생성합니다.

전술 언어의 일부 측면에 대한 최근 개요는 A. Asperti et al., PLMMS 2009에 의해 논문에 제공됩니다. 워크샵 진행 페이지 22를 참조하십시오 .

미자르와 이사 벨레 / 이자르는 인간이 읽을 수있는 구조화 된 추론에 대한 대안적인 접근 방식으로 언급되어 왔으며 , 그러한 의미에서 전술을 기반으로하지는 않습니다. Mizar는 LCF 가족과 관련이 없으므로 전술 용어를 알지 못합니다. Isabelle / Isar는 전술적 전통을 어느 정도 통합하고 있지만 증명 방법에 대한 개념은 좀 더 구조화되어 있습니다 (명백한 Isar 증명 컨텍스트, 체인 된 사실의 명시 적 표시 및 추론 과정에서 내부 목표 해킹 방지).

전술 언어에 대한 더 많은 개혁과 재검토가 지난 수십 년 동안 일어났다. 예를 들어, 최근 Coq 커뮤니티의 지점은 전통적인 Ltac 대신 SSReflect (G. Gonthier)를 선호합니다.


12

증거 조수에서 '전술'은 어떻게 작동합니까?

나는이 답변이 약간의 충격이라고 생각합니다.

첫째, "교정 보조원에서 전술이 어떻게 작동하는지"에 대해 묻는 것만으로는 충분하지 않습니다. 오늘날 사용되는 보조 클래스에는 크게 두 가지가 있습니다. Isabelle, HOL 및 HOL 라이트와 같은 원래 LCF에서 파생 된 것과 Coq 및 Matita와 같은 유형 이론 기반 증거 보조자입니다. 이 두 가지 다른 종류의 증거 조수에서 전술은 다른 방식으로 작동합니다. 예를 들어 Isabelle에서 보닛 아래에서 일어나는 일이 Matita에서 보닛 아래에서 일어나는 일과는 상당히 다릅니다.

스스로에게 물어보십시오 : Matita에서 제안 P를 증명하려고 할 때 어떤 일이 일어나고 있습니까? 우리는 P 형을 갖는 메타 변수 가변 X를 소개합니다. 그리고 우리는 게임을해서 X를 구체화하고 불완전한 용어에 더 많은 구조를 추가하여 완전한 람다 용어를 얻습니다 (즉, 더 많은 메타 변수를 포함하지 않음). 우리가 완전한 람다 용어를 소유하고 있다면, 우리는 P와 관련하여 그것을 검사하여 필요한 유형에 거주하는지 확인합니다. 우리는 Coq와 Matita에서 전술이 불완전한 증거 용어에서 불완전한 증거 용어까지의 함수라는 것을 알았습니다.이 용어는 적용 후 용어에 약간의 구조를 추가하기를 희망합니다 (이 관찰은 Jojgov의 최근 작업에 상당한 동기를 부여했습니다) , Pientka 등).

예를 들어, Matita 전술 "intro"는 기존 용어에 대한 람다-추상을 소개하고, "cases"는 용어에서 일치하는 표현을 소개하고, "apply"는 한 용어를 다른 용어에 적용하는 것을 소개합니다. 이 기본 전술은 더 복잡한 기능을 만들기 위해 고차 함수를 사용하여 함께 묶을 수 있습니다. 기본 개념은 항상 동일합니다. 전술은 항상 불완전한 증거 용어에 약간의 구조를 추가하는 것을 목표로합니다.

구현 자들은 모든 전술 적용 후에 타입 체크를 다시 한 번 확인하는 것을 목표로한다. 엄밀히 말하면, 유형 이론 기반 증거 조수의 모든 문제는 사용자가 증거를 Qed 할 때 제안서에 거주하는 증거 용어를 소유하고 있다는 것입니다. 이 증명 용어에 도착하는 것은 크게 관련이 없습니다. 그러나 Coq와 Matita는 사용자에게 모든 전술 적용 후에 타이핑하는 (완전히 불완전한) 증거 용어를 다시 제공하는 것을 목표로합니다. 그러나 이러한 불변은 특히 CIC 기반 증거 보조자가 구현해야하는 두 가지 구문 검사와 관련하여 실패 할 수 있습니다 (그리고 종종 실패합니다).

특히 공개 목표가 없을 때까지 일련의 전술을 적용하면서 유효한 증거로 보이는 것을 수행 할 수 있습니다. 그런 다음 전술에 의해 생성 된 증거 ​​용어가 이러한 구문 검사 중 하나를 무효화했기 때문에 Matita의 종료 검사기 또는 엄격한 양성 검사기가 불평하는 것을 발견하기 위해 추측 된 증거를 Qed로 왔습니다. 재귀 호출은 원래 인수보다 구문 상 작지 않은 용어로 인스턴스화되었습니다. 이것은 CIC 유형 이론이 어떤 의미에서는 "충분히 강하지 않다"는 것을 반영하며, 유형 또는 유형 구문 론적 요구 사항을 유형에 반영하지 않는다 (Abel의 크기 유형에 동기를 부여한 관찰 및 양성 유형에 대한 최근 연구) ).

반면에 LCF 스타일 교정 보조원은 상당히 다릅니다. 여기서 커널은 추상 유형 "thm"을 포함하는 모듈 (일반적으로 ML의 변형으로 구현 됨)과 교정 보조 로직의 추론 규칙을 구현하는 함수, "thm"을 "thm"에 매핑하는 등으로 구성됩니다. 앞으로. "thm"유형의 값을 구성하는 유일한 방법은 이러한 추론 규칙 (기본 전술)을 통하는 것임을 보장하기 위해 ML의 입력 규칙에 의존합니다. 이사벨의 커널은 여기에 있습니다 .

그런 다음 증명은 이러한 기본 전술 (또는 더 복잡한 대규모 전술)의 일련의 응용 프로그램으로 구성됩니다. 여기에서 볼 수 있습니다 ). 유형 이론 기반 증거 조교와는 달리, LCF 스타일 조수가 명시 적 증거 용어 증인을 계속 배치 할 필요는 없습니다. 증거의 정확성은 구성에 의해 보장되며 ML의 타이핑 규칙에 대한 우리의 신뢰 (Isabelle과 같은 많은 조수는 증거에 대한 증거 용어를 생성합니다).

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