실재적이고 보편적 인 유형은 다소 다르다는 것을 명심하십시오. 고전적인 논리 가 아닌 건설적인 논리이며 건설적인 논리에서 및 ∃ 는 고전적인 논리와 관련이 없습니다.∀∃
는 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 를 대신 사용할 수 있습니다 .xA→BAB
는(구조적) 분리의종속버전입니다. 당신은 건설 분리 생각할 수 ∨ B 두 가지 유형의와 B 의 분리 된 조합으로와 B .
∃ X : . B ( x ) 는 x : A에
의해 색인화 된 B ( x ) 유형의 콜렉션의 분리 된 결합입니다. B 형 (∃x:A.B(x)A∨BABAB∃x:A.B(x)B(x)x:A 밴의 값에 따라 달라질 X : A는
그것에 종속 형 만든다. 어디 한 경우에 비교 B가 에 의존하지 않는 X : 을 : ∃ X : 를 . B . 우리는 같은의 사본 복용 B를 각각 X : 를 . 이것은 A × B 와 동형입니다.B(x)x:ABx:A∃x:A.BBx:AA×B
이제 왜 종속 제품 및 합계 유형이 필요한지 물어볼 수 있습니다. 그들은 우리에게 더욱 표현력을주기 때문입니다. 타입을 완전히 무시하고 타입이없는 타입 이론 / 기능 프로그래밍을 할 수 있습니다. 그러나 이렇게하면 처음에 유형을 갖는 이점이 제거됩니다. 예를 들어 모든 프로그램이 항상 종료되는지 (강력한 정규화) 알 수 없습니다. Lambda 큐브 및
종속 유형을 참조하십시오 . 의존형을 잘 이해하는 좋은 방법은 Martin-Lof의 유형 이론 에서 종속 형을 도입하고 제거하는 규칙을 보는 것 입니다.
종속 유형의 주요 요점은 다음과 같습니다. 우리는 다양한 이유로 (예 : 버그 방지, 자동 종료 증명 등) 멋진 유형의 이론을 유지하려고합니다. 우리는 당신이 말한 것과 같은 표현을하고 더 강력한 물건을 만들 수있는 형식화되지 않은 람다 미적분학과 같은 것에 가고 싶지 않습니다. 우리는 의존형이 더 좋은 표현 이론 안에 남아있는 동안 더 많은 것을 표현할 수 있도록 발명되었다고 말할 수 있습니다.