범용 / 기존 정량화?


11

나는 보편적이고 존재하는 유형의 정량화의 목적을 이해하려고 애 쓰고 있습니다. 나는 미적분학을 기반으로 장난감 언어를 쓰고 놀고 있습니다 . 더 나은 이해를 돕기 위해 MorteHenk 에 대해 읽었습니다 .

왜 CoC가 람다와 모든 추상화를 가지고 있는지 이해할 수 없습니다.

( X : . B )

(λx:A.B)
(x:A.B)

람다는 유형이 수동으로 전달되는 시스템에서 모든 것을 대신한다고 생각합니다. 즉, 다음과 같은

(x:.λa:x.a)

로 대체 될 수있었습니다

(λx:.λa:x.a)

사용중인 유형에 처음 적용된 경우.

내가 무엇을 놓치고 있습니까? 나에게 도움이 될만한 어떤 기사 나 블로그 나 기사가 있습니까?

감사.

답변:


12

(또는 때때로 보는 것처럼 Π )는 유형 이라는 것을 기억하는 데 도움이됩니다 . 일반화 중 입니다. 그래서 말을 완벽하게 의미가있는 동안 ( λ X : . M ) N을 , 그것은 의미 말을하지 않습니다 ( X : . M ) N 인해를 . . . 그냥 유형입니다. 당신은 ( A B ) N becaues per-se를 계산하기위한 것이 아니라고 말하지 않을 것입니다.Π(λx:A.M) N(x:A.M) N...(AB) 이와 같이 적용될 수있는 람다 항을 분류하십시오 .

이것은 저를 트립 시켰습니다. 그러나 이것은 건축의 미적분학 (및 다른 의존적 유형 시스템이 정의되는 방식)입니다.

작성한 두 프로그램은 의도가 매우 다르며 첫 번째 프로그램은 형식이 잘못되었습니다. 라고 말하는 것은 의미가 없습니다 . λ x . X 때문에 ∀이 유형 모두에 의해 인수를 필요로하는 수단이 경우 X : . B 는 잘 타이핑되어야하며 B : 가 있어야합니다 . 그러나 λ x 입니다. x 는 유형이 아니며 x : A 형식의 유형 만 할당 할 수 있습니다 . B , 절대로 x:A. λx. xx:A.BB:λx.xx:A.B. 반면에 두 번째 것은 거의 ( x 아닌 것을 반환하려고한다고 생각합니다 ) 함수이며 두 s를 사용하는 유형이 제공 됩니다.ax


예, 반환을 의미 . a
oconnor0

@ oconnor0 이해가 되네요 :)
Daniel Gratzer

정확히. 나는 아직도 조금 혼란 스럽다. 그것에 대해 더 생각해야 할 수도 있습니다. i d 를 구현하려고 시도한 후 두 예제 프로그램을 모두 x 대신 를 반환 하도록 변경했습니다 . :)axid
oconnor0

나는 어느 정도 수준에서 용어와 유형을 같은 것으로 만들고 싶었다고 생각합니다. 귀하의 답변과 cs.stackexchange.com/questions/49531/… 사이에 내가 어디로 갔는지 알 것 같습니다 . 강력하게 정규화 시스템 에서이 작업을 수행하고 싶습니다.
oconnor0

5

실재적이고 보편적 인 유형은 다소 다르다는 것을 명심하십시오. 고전적인 논리 가 아닌 건설적인 논리이며 건설적인 논리에서 는 고전적인 논리와 관련이 없습니다.

A 유형 객체를 수신하고 B ( x ) 유형의 객체를 반환하는프로그램 유형입니다. 여기서 중요한 것은 B ( x ) x에 의존하고모든 x에 대해 동일하지 않다는 것입니다. x 가무엇인지에 따라 달라질 수 있습니다. 하나의 입력 x에 대해 정수를 출력 할 수 있습니다. 다른 하나에 대해서는 실수를 출력 할 수 있습니다. 또 다른 하나는 실수를 통해 함수를 출력 할 수 있습니다. 만약 B ( x )x:A.B(x)AB(x)B(x) xxxxB(x) 따라 다르지 않고 A 에서 B 까지의 기능 유형 인 A B 를 대신 사용할 수 있습니다 .xABAB

는(구조적) 분리의종속버전입니다. 당신은 건설 분리 생각할 수B 두 가지 유형의와 B 의 분리 된 조합으로와 B . X : . B ( x ) x : A에 의해 색인화 된 B ( x ) 유형의 콜렉션의 분리 된 결합입니다. B (x:A.B(x)ABABABx:A.B(x)B(x)x:A 밴의 값에 따라 달라질 X : A는 그것에 종속 형 만든다. 어디 한 경우에 비교 B가 에 의존하지 않는 X : :X : . B . 우리는 같은의 사본 복용 B를 각각 X : . 이것은 A × B 와 동형입니다.B(x)x:ABx:Ax:A.BBx:AA×B

이제 왜 종속 제품 및 합계 유형이 필요한지 물어볼 수 있습니다. 그들은 우리에게 더욱 표현력을주기 때문입니다. 타입을 완전히 무시하고 타입이없는 타입 이론 / 기능 프로그래밍을 할 수 있습니다. 그러나 이렇게하면 처음에 유형을 갖는 이점이 제거됩니다. 예를 들어 모든 프로그램이 항상 종료되는지 (강력한 정규화) 알 수 없습니다. Lambda 큐브종속 유형을 참조하십시오 . 의존형을 잘 이해하는 좋은 방법은 Martin-Lof의 유형 이론 에서 종속 형을 도입하고 제거하는 규칙을 보는 것 입니다.

종속 유형의 주요 요점은 다음과 같습니다. 우리는 다양한 이유로 (예 : 버그 방지, 자동 종료 증명 등) 멋진 유형의 이론을 유지하려고합니다. 우리는 당신이 말한 것과 같은 표현을하고 더 강력한 물건을 만들 수있는 형식화되지 않은 람다 미적분학과 같은 것에 가고 싶지 않습니다. 우리는 의존형이 더 좋은 표현 이론 안에 남아있는 동안 더 많은 것을 표현할 수 있도록 발명되었다고 말할 수 있습니다.


1
"∃x : AB (x) ∃x : AB (x)는 (구조적) 분리의 종속 버전입니다." 평균?
oconnor0
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.