내가 배울 수있는 가장 직관적 인 의존형 이론은 무엇입니까?


46

의존적 타이핑에 대한 확실한 이해에 관심이 있습니다. 나는 대부분의 TaPL을 읽었고 ATTaPL 에서 '종속 유형'을 읽었습니다 (완전히 흡수되지 않은 경우) . 또한 의존적 타이핑에 관한 많은 기사를 읽고 훑어 보았습니다.

많은 유형 이론 토론은 "유형 시스템 X에서 다음으로 큰 일반화는 무엇입니까?"가 아니라 이전 유형 시스템에 증분 기능을 추가하는 데 중점을 둔 것으로 보입니다. 종속 유형은 System F에서 다음으로 큰 일반화로 보이지만 직관적이고 정식으로 종속적으로 유형이 지정된 언어는 아직 찾지 못했습니다. (유도 적) 구성의 미적분학에 대한 많은 언급은 CoC가 그 언어라고 생각하지만, 내가 본 언어에 대한 설명은 나에게 분명하지 않거나 직관적이지 않습니다.

나는 그런 언어가 다음과 같은 특징을 가질 것이라고 기대 / 추측합니다 : (특히 혼란 스럽거나 비현실적인 것이 있다면 알려주세요)

  • 일반화 된 추상화 (유형 계층의 모든 도메인에서 다른 종류, 용어, 용어, 용어, 유형 등으로 기능을 가질 수 있음)
  • 타이핑의 무한한 계층 구조를 가지고 있습니다 (terms : types : types ': types' ': ...)
  • 최소한의 기본 요소. 나는 언어가 각 레벨마다 하나의 요소만을 주장한다고 상상하고있다. 예를 들어 (() : Unit : Type : Type ': ...)이라고 주장 할 수 있습니다. 다른 요소는이 요소로 구성됩니다.
  • 합계 및 제품 유형을 도출 할 수 있습니다.

또한 이상적으로 논의 할 언어에 대한 설명을 찾고 있습니다.

  • 해당 언어의 추상화와 수량화의 관계. 통일되지 않은 경우 통일되지 않은 이유를 설명하십시오.
  • 무한 유형 계층 구조

나는 의존형 이론을 배우고 싶기 때문에 약간의 CS 배경을 가정하여 증거 조수와 의존 형 언어를 사용하고 이해하는 방법을 가르치는 안내서를 함께 만들고 싶기 때문에이 질문을하고 있습니다.

(Cross Redit에 게시)

답변:


35

이에 접근하는 몇 가지 방법이 있습니다.

  1. 종속 유형 이론 . 이것은 의존형에 대해 배우는 가장 쉬운 방법은 아니지만, 예를 들어, Calculus of Constructions 논문과 그 변형, Pure Type Systems 및 Martin Hofmann의 Syntax and Semantics of Dependent Types의 기사를 볼 수 있습니다.

  2. 정리 증명 . 먼저 관련 질문에 대한 나의 답변을 살펴보십시오 . Coq 증거 조수의 기본 이론을 배우려면 어떻게해야합니까? .

  3. 종속 유형을 사용한 프로그래밍 . Epigram 또는 Agda 와 같은 종속 유형이 있거나 최근에 Dependent ML 과 같은 덜 최근 언어를보고 일부 프로그램을 작성하면 아이디어를 강화하는 데 도움이됩니다. 예를 들어 에피 그램은 디자인이 매우 깨끗합니다. 또 다른 각도는 종속 유형이 어떻게 구현되는지 확인 하는 것 입니다. 실용적인 의존형 이론 중 하나는 : 설탕이없는 의존형입니다. Dan Licata , Nils Anders Danielsson , Ulf Norrel , Susmit Sarkar다양한 유형의 박사 학위 논문이 종속 유형 이론을 사용하여 프로그래밍에 전념하고 있습니다.ΠΣ, 무엇보다도. 물론 Marc Hamann의 답변에 Adam Chlipala의 책이 있습니다.

정리 증명을 사용하기 전에 프로그래밍을 시작한 다음 더 이론적 인 문제를 탐구하기 시작했습니다.


Epigram에 대한 논문을 찾을 수 있지만 Epigram에 대한 실제 다운로드를 찾을 수없고 아직 완성되지 않은 Epigram 2 만 찾을 수 있습니다. 어떤 아이디어?
John Salvatier

1
찾은 내용 : e-pig.org/darcs/Pig09/web ? 그림 하단은 페이지 하단에 있습니다.
Dave Clarke

3
에피 그램 1은 꽤 오랫동안 AFAIK 이후 본질적으로 유지 관리되지 않았습니다. 필자는 요즘 아그 다를 사용합니다 (에피 그램 2에 대한 작업을하는 동안).
Blaisorblade

2019 년에는 Epigram 2가 일어날 것이라고 생각하지 않지만 Idris (및 Idris 2!)가 있습니다.
xrq

14

본질적 LF의 핵심입니다 - 어떤 수학은 훨씬 그냥 형식의 확장으로 구성되어 있기 때문에 당신이 배울 수있는 간단한 의존적 입력 시스템입니다 logic- 높은 순서로 가장 널리 재 구현 방법을 설정 의존적으로 유형화 된 정량 자와 함께 간단히 유형화 된 람다 미적분학 시스템. 따라서 LF를 마스터하는 데 필요한 주요 직관은 종속 유형이있는 이론으로 마스터해야하는 직관입니다.λπ

Twelf는 LF에 기반한 훌륭한 정리 증명 시스템입니다. Frank Pfenning이 제공하는 고급 과정 노트를 살펴 보는 것은 LF의 이론과 실제에 대한 좋은 소개입니다.

LF가 논리적 인 틀을 의미하고 이론을 공리 화하는 데 사용되는 시스템이며, 종종 다음과 같이 작동하지는 않습니다. 직접 목표 시스템. Martin-Loef의 유형 이론을 기반으로 한 시스템을 사용하는 것이 아마도 가장 좋은 소개 일 것입니다-다른 사람들 중에서도 특히 Agda를 언급하십시오. 뼈대.


10

CoC가 가장 좋은 방법입니다. Coq에 들어가서 Software Foundations (Tarce of TaPL 및 ATTaPL이 포함 된)와 같은 멋진 튜토리얼을 통해 작업하십시오 .

의존적 타이핑의 실제적인 측면에 대한 느낌을 얻은 후에는 이론적 소스로 돌아가십시오. 그러면 훨씬 더 의미가 있습니다.

기능 목록은 기본적으로 정확하지만 실제로 어떻게 작동하는지 보는 것은 수천 가지 기능 포인트에 해당합니다.

(또 다른 고급 튜토리얼은 Adam Chlipala의 종속 유형 인증 프로그램입니다 )


"직관적 인"은 아마도 여기서 중요한 점일 것입니다. CoC / CIC에는 단순한 타이핑보다 훨씬 더 직관이 많이 있습니다. 좋은 선택입니다. 제 생각에는 Coq와 Twelf 사이의 선택이지만 "종속적 인 타이핑에 대한 확실한 이해"를 향한 첫 번째 단계는 아닙니다.
Charles Stewart

@Charles : 당신의 요점은 취해진 다. 나는 여전히 실용적인 관점에서 좋은 내기라고 생각합니다. CoC / CIC에 대한 전체적인 이해가 더 복잡한 사업 일지라도 Coq (및 이에 대한 훌륭한 기본 레벨 자습서가 존재 함)는 프로그래밍 측면이나 기본 증거 보조 측면을 쉽게 학습하는 데 집중할 수 있습니다. 모든 복잡성을 파악하기 전에도 관심사가 결정됩니다. 나는 이것이 이론적 배경에서 오지 않는 사람에게는 "직관적"이라고 생각합니다.
Marc Hamann


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