대수적 자료형(Algebraic data types)
합(A + B, 둘 중 하나)과 곱(A × B, 둘 다)으로 짓는 타입(type). 값의 개수가 |A + B| = |A| + |B|, |A × B| = |A||B|, |A → B| = |B|^|A|로 셈해지고, 리스트는 등비급수(geometric series) 1/(1 − x), 타입의 미분(differentiation)은 '구멍 하나 뚫린 맥락(one-hole context)'이 된다.
참·거짓 두 값을 갖는 타입 Bool이 있습니다. Bool 두 개의 쌍 (Bool, Bool)은 (참, 참), (참, 거짓), (거짓, 참), (거짓, 거짓)의 네 값을 갖습니다. 요일(7개)과 Bool의 쌍은 14개입니다. 쌍의 타입을 곱 타입(product type)
'셈이 된다'는 말은 정확히 이런 뜻입니다.
타입
함수 타입은 거듭제곱입니다.
그림에서 |A| = 0으로 두어 보세요. A → B의 값은 정확히 하나(빈 함수)이고, B → A는 |B| ≥ 1이면 하나도 없습니다.
되부르는 타입도 셈이 됩니다. A의 리스트는 비어 있거나, 원소 하나와 나머지 리스트의 쌍입니다. 식으로 쓰면
미분에도 자료 구조의 뜻이 있습니다. 세 원소의 묶음
합 타입은 프로그램을 안전하게 만듭니다. 합 타입의 값을 쓰려면 경우를 나눠야 하고, 컴파일러(compiler)는 빠진 경우가 없는지 검사할 수 있습니다. 값이 없을 수도 있다는 것을
흔한 혼동 둘을 짚어 둡니다. 첫째, 대수적 자료형(algebraic data type)과 추상 자료형(abstract data type)은 약자가 같지만 다른 개념입니다. 뒤의 것은 내부 표현을 감추고 연산만 드러내는 설계 방식입니다. 둘째, 개수가 같다고 같은 타입은 아닙니다. Bool과
이어지는 곳. 합과 곱을 개수 대신 논리로 읽는 법, 곧 '그리고'는 쌍이고 '또는'은 꼬리표 붙은 값이라는 것은 커리–하워드 대응의 표에 있습니다. 개수의 법칙은 무한 집합(set)에서도 통하는 집합의 크기(cardinality)의 셈과 같은 모양이며,
이 개념이 나오는 긴 글
이 개념 위에 세워진 것
이 개념을 언급하는 페이지
- 멱집합
… 참이나 거짓을 정하는 함수 A \to \{0, 1\} 이고, 함수 타입의 값을 |B|^{|A|} 로 세는대수적 자료형의 셈에서 |B| = 2 인 경우입니다. 선은 원소 하나를 더하는 관계입니다. 아래에서 위로 갈수록 원소가 …
- 등비급수
… 전개한 1 + A + A^2 + \cdots 는 길이가 0, 1, 2, …인 리스트를 차례로 뜻합니다(대수적 자료형). 이 전개가 뜻을 갖는 까닭은 리스트 타입이 L\cong 1 + A\times L 의 가장 작은 해, …
- 문맥 자유 문법
… 이 등식을 개수의 생성함수 T(x) = 1 + x\,T(x)^2 로 옮겨 풀면 카탈랑 수가 나옵니다(대수적 자료형). 일반적으로 모호하지 않은 문맥 자유 문법이라면, 길이별 문장 수의 생성함수가 규칙을 그대로 옮긴 연립 …
- 수학적 귀납법
… 되어 멈추면 남은 수가 곧 최대공약수입니다(알고리즘). 리스트나 나무처럼 제 안에 같은 모양을 품는대수적 자료형에서는 같은 원리를 자료의 짜임새를 따라 쓰는데(구조적 귀납법), 증명 보조기는 이런 귀납 증명의 모든 …
- 생성함수
… 어림할 때 생성함수가 기본 도구입니다. 프로그래밍에서 리스트나 나무 같은 타입의 값을 크기별로 세는대수적 자료형의 셈도 생성함수입니다. 예를 들어 이진 나무의 타입은 동형 T\cong 1 + T\times T 를 …
- 카탈랑 수
… 두 개를 단 것'이라는 타입의 정의로 읽을 수 있는데, 이렇게 타입을 합과 곱으로 짓고 값을 세는 것이대수적 자료형입니다. 이 타입은 방정식 T\cong 1 + T\times T 의 가장 작은 해, 곧 시작 대수이고, …
- 재귀
… 리스트는 '빈 리스트이거나, 원소 하나와 더 짧은 리스트의 쌍'이고, 이런 정의를 타입으로 적은 것이대수적 자료형입니다. 리스트 위의 함수를 '빈 리스트일 때의 값'과 '원소 하나와 나머지의 답을 합치는 방법' 두 …
- 타입 이론
… 논리⟧에서 다룹니다. 타입을 +, ×, 거듭제곱으로 셈하면 생성함수와 미분까지 이어지는데, 이것이대수적 자료형입니다. 람다 큐브의 세 축은 각각 다형성과 시스템 F, 타입 연산자, 의존 타입으로 이어집니다. …
- 커리–하워드 대응
… Coq(Rocq)와 Lean에서 증명을 검사하는 일은 타입 검사입니다. 합과 곱을 논리 대신 개수로 읽으면대수적 자료형의 셈이 나옵니다. 곱과 함수 타입이 이루는 구조를 대상과 화살표만으로 적으면 데카르트 닫힌 범주가 …
- 다형성과 시스템 F
… 지킨다는 성질이 List를 함자로 만듭니다. 리스트 같은 타입을 1 + X × L처럼 세는 방법은대수적 자료형에서 다룹니다. ∀가 타입뿐 아니라 값까지 받을 수 있게 하면 의존 타입이 되고, 거기서 ∀는 명제의 …
- 의존 타입
… 입니다. 섬유의 크기가 모두 |B|로 같으면 곱은 |B|^{|A|} , 합은 |A|\cdot|B| 이 되어대수적 자료형의 셈 |A\to B| = |B|^{|A|} , |A\times B| = |A|\,|B| 로 돌아갑니다. …
- 함자
… 자신으로 가는 함자 가운데 '두 겹을 한 겹으로 펴는' 구조를 가진 것이 모나드입니다. 목록 함자는대수적 자료형에서 재귀적으로 정의되는 타입의 대표적인 예이고, 모든 타입에 대해 똑같이 작동하는 map이 어떻게 …
- 보편 성질: 곱, 쌍대곱, 극한
… 값을 줄 때 합칠 수 없습니다. 프로그래밍의 '둘 중 하나' 타입(Either A B)이 바로 이것입니다(대수적 자료형). 벡터 공간에서는 직합이 곱이면서 쌍대곱이고, 군에서는 쌍대곱이 곱과 전혀 달라서 ℤ와 ℤ의 쌍대곱은 …
- 데카르트 닫힌 범주
… 대응⟧, 순서로 읽으면 배중률이 없는 직관주의 논리입니다. 지수법칙 c^{ab} = (c^b)^a 는대수적 자료형에서 함수 타입의 값을 세는 법이 되고, 로베어의 고정점 정리는 대각선 논법, 고정점, ⟦자기 …
- 하위 타입과 공변·반변
… 두 방향이 다 되는 쌍변입니다. 곱 A \times B 와 합 A + B 는 두 자리 모두에서 공변이니,대수적 자료형으로 지은 읽기 전용 자료는 대개 공변입니다. 언어들은 이것을 표시로 받아들였습니다. C#은 2010년 …
- F-대수와 fold: 재귀와 귀납의 범주론
… 같지 않기 때문입니다. 반대로 상수, +, ×로 지은 함자(다항식 함자)에는 늘 시작 대수가 있고, 그래서대수적 자료형으로 정의한 타입마다 fold가 하나씩 따라옵니다. 방향을 모두 뒤집은 짝도 있습니다. 무한히 이어지는 …