Lambda Cube의 다른 지점에서 건축 미적분학을 얻는 방법은 무엇입니까?


21

CoC는 Lambda Cube의 세 가지 차원의 정점이라고합니다. 이것은 나에게 전혀 분명하지 않습니다. 나는 개별 차원을 이해한다고 생각하며, 두 가지의 조합은 비교적 간단한 노동 조합을 초래하는 것으로 보입니다 (아마도 뭔가 빠졌습니까?). 그러나 CoC를 보면 세 가지를 모두 조합 한 것처럼 보이지 않고 완전히 다른 것처럼 보입니다. Type, Prop 및 Small / Large 유형의 치수는 무엇입니까? 종속 제품은 어디에서 사라 졌습니까? 유형과 프로그램 대신 제안과 증거에 초점을 둔 이유는 무엇입니까? 유형과 프로그램에 중점을 둔 동등한 것이 있습니까?

편집 : 명확하지 않은 경우 CoC가 Lambda Cube 치수의 직접적인 결합과 어떻게 같은지 설명하고 싶습니다. 그리고 내가 공부할 수있는 어딘가에 세 개 모두의 실제 연합이 있습니까? 이것은 현재 답변이 아닌 질문에 대한 의견에 대한 답변입니다.


1
최소한 이것은이어야합니다 soft-question. 실제 기술적 인 질문은 없습니다. 아마도 당신은 당신이 요구하는 것에 대해 좀 더 구체적 일 수 있습니까?
Andrej Bauer

3
@AndrejBauer 문제가 아닌가 : CoC의 Barendregt-cube / PTS 프리젠 테이션과 Coquand & Huet의 오리지널 프리젠 테이션 사이의 관계는 무엇입니까?
Martin Berger

1
@AndrejBauer : 질문은 CoC (차이 중 하나)의 표현의 차이와 실제로 특정 기능에 대한 강조를 묻는 것 같습니다. CoC의 PTS 지향 버전은 일부 기능을 중요하게 강조하지만 Coq는 다른 기능을 강조합니다. 소프트 질문 태그가 있어야한다는 데 동의합니다.
Jacques Carette 2016 년

1
누군가가 이것에 대답 할 수있게되어 기쁩니다.
Andrej Bauer

답변:


28

첫째, 코디의 요점 중 하나를 되풀이하기 위해, 유도 건축의 미적분학 (Coq의 커널이 기반으로하는)은 미적분의 건축 미적분과 매우 다릅니다. 마틴-로프 (Martin-Lo-ff) 형식 이론에서 유니버스로 시작한 다음 형식 계층의 맨 아래에 정렬 소품을 추가하는 것이 가장 좋습니다. 이것은 F-omega의 종속 버전으로 가장 잘 생각되는 원래 CoC와는 매우 다른 짐승입니다. 예를 들어, CiC에는 이론적 모델이 설정되어 있고 CoC는 설정되어 있지 않습니다.

즉, 람다 큐브 (이의 CoC가 멤버 임)는 일반적으로 타이핑 규칙의 수가 경제적 인 이유로 순수한 타입 시스템으로 제시된다. 정렬, 유형 및 용어를 동일한 구문 범주의 요소로 취급하면 더 적은 수의 규칙을 적을 수 있으며 증거도 약간 덜 중복됩니다.

그러나 이해를 위해 다른 범주를 명시 적으로 분리하는 것이 도움이 될 수 있습니다. 세 가지 구문 범주, 종류 (메타 변수에 의해 정렬 됨 k), 유형 (메타 변수에 의해 정렬 A됨) 및 용어 (메타 변수에 의해 정렬 됨 e)를 소개 할 수 있습니다. 그러면 8 가지 시스템 모두 세 가지 수준에서 허용되는 사항에 대한 변형으로 이해 될 수 있습니다.

λ → (단순 람다 미적분학)

 k ::= ∗
 A ::= p | A → B
 e ::= x | λx:A.e | e e

이것은 기본 유형 람다 미적분입니다. 유형의 종류 인 단일 종류가 있습니다. 타입 자체는 원자 타입 p과 함수 타입 A → B입니다. 용어는 변수, 추상화 또는 응용 프로그램입니다.

λω_ (STLC + 상위 유형 연산자)

 k ::= ∗ | k → k
 A ::= a | p | A → B | λa:k.A | A B
 e ::= x | λx:A.e | e e

STLC는 용어 수준에서만 추상화를 허용합니다. 유형 수준에서 추가하면 k → k유형 수준 함수의 유형 인 새로운 종류 λa:k.AA B유형 수준의 추상화 및 적용 도 추가됩니다. 이제 다형성은 없지만 유형 연산자가 있습니다.

메모리가 작동하면이 시스템은 STLC보다 더 많은 계산 성능을 갖지 않습니다. 그것은 단지 당신에게 타입을 줄여주는 기능을 제공합니다.

λ2 (시스템 F)

 k ::= ∗
 A ::= a | p | A → B  | ∀a:k. A 
 e ::= x | λx:A.e | e e | Λa:k. e | e [A]

타입 연산자를 추가하는 대신 다형성을 추가 할 수있었습니다. 타입 레벨에서는 ∀a:k. A다형성 타입 전자를 추가하고, 레벨에서는 타입 Λa:k. e과 타입 적용에 대한 추상화를 추가 합니다 e [A].

이 시스템은 STLC보다 훨씬 강력하며 2 차 산술만큼 강력합니다.

λω (시스템 F- 오메가)

 k ::= ∗ | k → k 
 A ::= a | p | A → B  | ∀a:k. A | λa:k.A | A B
 e ::= x | λx:A.e | e e | Λa:k. e | e [A]

유형 연산자와 다형성이 모두 있으면 F- 오메가를 얻습니다. 이 시스템은 ML과 Haskell과 같은 대부분의 최신 기능 언어의 커널 유형 이론입니다. 또한 시스템 F보다 훨씬 강력합니다. 이는 고차 산술과 강도가 같습니다.

λP (LF)

 k ::= ∗ | Πx:A. k 
 A ::= a | p | Πx:A. B | Λx:A.B | A [e]
 e ::= x | λx:A.e | e e

다형성 대신에, 우리는 단순 유형 람다 미적분학으로부터 의존의 방향으로 갈 수있었습니다. 함수 유형이 인수를 리턴 유형에 사용하도록 허용 한 경우 (즉, Πx:A. B(x)대신 쓰기 A → B) λP를 얻습니다. 이를 실제로 유용하게하려면 항을 인수로 사용하는 일종의 유형 연산자로 종류 집합을 확장해야 Πx:A. k하므로 유형 수준에서도 해당 추상화 Λx:A.B와 응용 프로그램 을 추가해야합니다 A [e].

이 시스템을 때때로 LF 또는 Edinburgh Logical Framework라고합니다.

단순 유형 람다 미적분과 동일한 계산 강도를 갖습니다.

λP2 (특별한 이름 없음)

 k ::= ∗ | Πx:A. k 
 A ::= a | p | Πx:A. B | ∀a:k.A | Λx:A.B | A [e]
 e ::= x | λx:A.e | e e | Λa:k. e | e [A]

λP2를 얻기 위해 λP에 다형성을 추가 할 수도 있습니다. 이 시스템은 자주 사용되지 않으므로 특정 이름이 없습니다. (내가 읽은 한 논문은 Herman Geuvers의 귀납법 이 2 차 종속 유형 이론에서는 도출 될 수 없음 )

이 시스템은 시스템 F와 동일한 강도를 갖습니다.

λPω_ (특별한 이름 없음)

 k ::= ∗ | Πx:A. k | Πa:k. k'
 A ::= a | p | Πx:A. B | Λx:A.B | A [e] | λa:k.A | A B 
 e ::= x | λx:A.e | e e 

λPω_를 얻기 위해 λP에 타입 연산자를 추가 할 수도 있습니다. 여기에는 Πa:k. k'형식 연산자에 대한 종류 를 추가 하고 해당 형식 수준 추상화 Λx:A.B및 응용 프로그램이 포함 A [e]됩니다.

STLC에 비해 계산 강도가 다시 높아지지 않기 때문에이 시스템은 논리적 프레임 워크를위한 훌륭한 기반을 마련해야하지만 아무도 그렇게하지 않았습니다.

λPω (건축의 미적분학)

 k ::= ∗ | Πx:A. k | Πa:k. k'
 A ::= a | p | Πx:A. B | ∀a:k.A | Λx:A.B | A [e] | λa:k.A | A B 
 e ::= x | λx:A.e | e e | Λa:k. e | e [A]

마지막으로, 우리는 λPω_를 취하고 다형성 유형의 전자 ∀a:k.A및 용어 레벨 추상화 Λa:k. e및 응용 프로그램 e [A]을 추가하여 건축 미적분학 인 λPω에 도달 합니다.

이 시스템의 유형은 F- 오메가보다 훨씬 표현력이 뛰어나지 만 계산 강도는 같습니다.


3
물론, 기술적으로 (공리없이) CoC를이 CIC 많은 세트 이론적 모델로 적어도 그들은 단지, 자연 번호 (대한 공리와 CoC를이 말 우리가 원하는 상황을 모델링 매우 좋지 않다가 ). 01
코디

2
또한 STLC에 비해 의 보존성에 대한 참조에 감사드립니다 . 이것은 명백하지 않은 것 같습니다. λω_
코디

3
@cody : 나는 참조를 모른다. 케빈 왓킨스는 화이트 보드에 나를 위해 증거를 스케치했다! 아이디어는 λω_로 입력 한 용어를 사용하여 모든 유형을 베타 정규 eta-long 형식으로 넣은 다음 원래 프로그램에서 각 고유 한 정규 양식에 대해 새로운 원자 유형을 도입하여 STLC에 포함시키는 것입니다. 그런 다음 축소 시퀀스가 ​​일대일로 정렬되어야합니다.
Neel Krishnaswami 2016 년

1
@ user833970 도출 할 수 없다는 사실은 실제로 언급 한 다른 사실보다 훨씬 단순하며 n a t 인코딩과는 아무런 관련이 없습니다 . CC 와 관련이없는 증거 가 있다는 사실에서 비롯됩니다. 유형에는 최대 하나의 요소가 있습니다. 하나 이상의 요소가있는 유형 (예 : nat)이있는 논리를 원한다면 이것은 나쁜 속성입니다. 참조 : Miquel과 Werner 의 그렇게 단순한 증거와 무관 한 CC 모델 . 01nat
코디

1
Fw는 System F보다 "매우 강력하다"고합니다. 이에 대한 참조가 있습니까? 특히 Fw가 아닌 ​​Fw로 증명할 수있는 자연수에 대한 함수가 있습니까?
Thorsten Altenkirch

21

나는 종종 큐브 의 각 차원 과 그것들이 무엇을 나타내는지를 요약하고 싶었 으므로, 이것에 대해 설명하겠습니다.λ

그러나 먼저 다양한 문제를 풀려고 시도해야합니다. Coq 대화 형 정리 증명자는 기본 형식 이론을 기반으로하며, 때로는 우주를 이용한 귀납적 구성의 미적분학 이라고 합니다 . 이것은 단순히 "Calculus of Constructions"보다 입가가 많으며 실제로 CoC보다 더 많은 것들이 있습니다. 특히 CoC에 적합한 기능에 대해 혼란스러워하는 것 같습니다. 특히 Set / Prop 구별 및 유니버스는 CoC에 나타나지 않습니다.

여기서는 Pure Type Systems에 대한 전체 개요를 제공하지 않지만 CoC와 같은 기능적 PTS에 대한 중요한 규칙 은 다음과 같습니다.

ΓA:sΓ,x:AB:kΓΠx:A.B : k (s,k)R

여기서, 고정 된 세트의 요소 S종류 , 및 상기 한 쌍 ( S , K ) 고정 된 세트에있는 R 의 쌍 S 착신, 규칙 .s,kS(s,k)RS

중요한 통찰력은 R 을 신중하게 선택 하면 제품 유형 Π x : A에 큰 차이가 있다는 것 입니다. B는 실제로 나타냅니다!에스RΠx:A.B

특히, 구조의 미적분학에서, 분류 세트 { , } 종종 Prop and Type (이 용어는 나중에 이야기 할 이유로 Coq 사용자에게는 약간 혼동되지만)이며 전체 규칙 집합 : R = { ( , ) , ( , ) , ( , ) , ( , ) }S

{,}
R={(,),(,),(,),(,)}

그래서 우리는 4 가지 다른 목적에 해당하는 4 가지 규칙을 가지고 있습니다 :

  • : 기능 유형(,)

  • : 유형 패밀리 또는 매개 변수가있는 유형(,)

  • : 다형성 종류(,)

  • : 종속 유형(,)

이들 각각에 대해 자세히 설명하겠습니다.


먼저 Π x : A 대신 쓰겠습니다 . B는 경우 X 에 나타나지 않습니다 B . 이 표기법은 훨씬 암시 적이지만 중요한 직관을 숨길 수 있습니다.ABΠx:A.BxB

기능 유형 : 유형의 요소 는 "일반"유형 및 명제입니다. 여기에는 n a t , b o o l 및 주어진 유형의 xy 에 대한 명제 x = y 와 같은 것들이 포함 됩니다. CoC에서. 이러한 "기본 유형"과 제안은 여전히 ​​Agda와 같은 시스템에 있으므로 함께 혼합되어 있습니다. Coq는 종종 Set과 Prop 또는 Type과 Prop라고하는 두 종류로 분리하는 경향이 있습니다. 이것은 추출을 용이하게하며 증거와 관련 이 없다고 가정 할 수있게합니다.natboolx=yxy우리가 원한다면 Prop의 것들을 위해 (우리는 분명히 Set의 것들을 원하지 않습니다). pi 타입을 분류 할 수있는 기능은 함수형 프로그래밍 언어에서 일반적으로 사용하는 일반적인 고차 함수, 즉 함수를 다른 함수에 전달하는 기능을 제공합니다.

listlist:listnat,listbool(,)

Πt:. tt
λ(t:)(x:t).xΠ:._(,)(,)

에이: =Π:. (에이)
에이: =Π:. (에이)()
:=Πt:. t
:=Πt:. tt
x:A. P(x):=Πt:. (Πy:A. P(y)t)t
(,)

(,)

(,)

Πc:.  c natc nat

0=1

= : natnat
= : Πt:. tt
natnat(,)

ii=1,2,3,i:i+1

(i,i)

ΓA:iΓA:j ij

이러한 추가 정렬 및 규칙을 사용하면 PTS 가 아닌 가까운 것을 얻을 수 있습니다. 이것은 (거의) 확장 건축 미적분학이며 , Coq. 여기서 가장 빠진 부분은 유도 형이며 여기서는 설명하지 않겠습니다.

편집 : 기능적 프로그래밍 언어의 중간 표현을위한 좋은 후보 인 PTS를 설명함으로써 PTS의 프레임 워크에서 프로그래밍 언어의 다양한 기능을 설명하는 다소 좋은 참조가 있습니다.

Henk : Typed Intermediate Language , SP Jones & E. Meijer.


2
유형 및 프로그래밍 언어의 고급 주제, S2.6S2.7 .
Kaveh

2
BTW "유형 군"은 종종 고급 유형이라고도합니다.
Martin Berger

1
PTS는 20 년 전에는 좋은 아이디어 였지만 그 이후로 계속 발전했습니다.
Thorsten Altenkirch

@ThorstenAltenkirch 배제 할 필요가 없습니다. Thorsten! PTS와 관련하여 고려해야 할 몇 가지 재미있는 것들이 있습니다. 예를 들어, 내부화 된 파라 메트릭에 대한 Bernardy의 연구가 떠 오릅니다.
코디

@cody 배제를 의도하지 않았지만 우리는 구문 유형 이론의 과거에 갇혀서는 안됩니다. Bernardi의 작업은 훌륭하고 우주를 사용하여 더 잘 수행 할 수 있습니다.
Thorsten Altenkirch
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.