유형이 설정되지 않았습니다.
보시다시피 집합 이론에는 유형에 적용되지 않는 많은 기능이 있으며 그 반대도 마찬가지 입니다. 예를 들어, 객체에는 단일 표준 유형이 있습니다. 여러 유형의 인스턴스 일 수 있지만 해당 유형 중 하나만 인스턴스화하는 데 사용되었습니다. 세트 이론에는 "정식"세트라는 개념이 없습니다.
집합 이론을 사용하면 하위 집합에 속하는 항목을 설명하는 규칙이있는 경우 하위 집합을 즉석 에서 만들 수 있습니다 . 타입 이론은 일반적으로 이것을 허용하지 않습니다. 대부분의 언어가 가지고 있지만 Number
종류 나 비슷한, 그들은 하지 않습니다 이 EvenNumber
유형 않으며 하나를 만들 간단하다. 내 말은, 타입 자체를 정의하는 것은 쉽지만, 기존 Number
의 어떤 것도 마술처럼 EvenNumber
s 로 변환되지 않을 것 입니다.
실제로, 세트는 완전히 다른 종류의 동물이기 때문에 서브 세트를 "만들 수"있다고 말하는 것은 다소 불분명합니다. 이론적으로는 이러한 하위 집합 이 무한정 정의 할 수있는 모든 무한한 방식으로 이미 존재 합니다. 타입 이론에서 우리는 일반적으로 주어진 시간에 유한 한 (큰 경우) 유형을 처리 할 것으로 예상합니다. 존재한다고 알려진 유일한 유형은 우리가 정의 할 수있는 모든 유형이 아니라 실제로 정의한 유형입니다.
세트는 직접 또는 간접적으로 자신을 포함 할 수 없습니다 . Python과 같은 일부 언어는 덜 규칙적인 구조를 가진 유형을 제공합니다 (Python에서 type
표준 유형은 type
이며 object
의 인스턴스로 간주 됨 object
). 반면에 대부분의 언어는 사용자 정의 형식이 이러한 종류의 속임수를 사용하도록 허용하지 않습니다 .
세트는 일반적으로 서로 포함되지 않고 겹칠 수 있습니다. 유형 이론에서는 흔하지 않지만 일부 언어는 다중 상속 형태로 지원합니다. Java와 같은 다른 언어는 제한된 형식 만 허용하거나 완전히 허용하지 않습니다.
빈 유형이 존재하지만 ( 하단 유형 이라고 함 ) 대부분의 언어는이를 지원하지 않거나 일급 유형으로 간주하지 않습니다. "다른 모든 유형을 포함하는 유형"도 존재하며 ( 상위 유형 이라고 함 ) 이론과 달리 널리 지원됩니다.
NB : 스레드가 대화로 이동하기 전에 일부 주석 작성자가 지적했듯이 세트 이론 및 기타 표준 수학 구조를 사용하여 유형을 모델링 할 수 있습니다. 예를 들어, 유형을 세트로 모델링하는 대신 유형 멤버십을 관계형으로 모델링 할 수 있습니다. 그러나 실제로 이론 을 설정하는 대신 범주 이론 을 사용하면 훨씬 간단합니다 . 예를 들어, Haskell이 형식 이론을 모델링하는 방식입니다.
"subtyping"개념은 "subset"개념과는 상당히 다릅니다. X
의 하위 유형 인 경우 인스턴스 를 인스턴스로 대체Y
할 수 있으며 프로그램은 여전히 어떤 의미에서 "작동"합니다. 일부 언어 (예 : Go, Rust, 논란의 여지가있는 C)는 편의상 이유로 프로그래머 나 언어 구현에서 후자를 선택했지만 이것은 구조적 이라기보다는 행동 적입니다.Y
X
a
하고b
킬리언 로한 언급하면서 해당 종류의 회원이다 MyClass에입니다. 동형 필드 레코드a
및b
유형int
과double
- 당신은 그런 기록을 가지고으로 바꿀 수있다 의 인스턴스myclass
.