엘리먼트(Elements)

박준규·2024년 2월 29일

이 글은 책 The Dao of Functional Programming의 1장 3절 Elements를 정리한 것이다.

구조는 그 오브젝트를 가리키는 애로우(arrow)로 규정된다.

애로우로 오브젝트를 조사(probe) 할 수 있다.

시작(initial) 오브젝트를 가리키는 애로우는 없으므로 시작 오브젝트는 구조가 없다.

따라서 Void는 구조가 없다.

종료(terminal) 오브젝트는 구조가 제일 단순하다.(애로우가 하나이니까)

어떤 오브젝트에서 종료 오브젝트로 가는 애로우는 유일하다.

종료 오브젝트가 너무 단순하기 때문에 다른 복잡한 구조의 오브젝트를 조사할 때 종료 오브젝트를 사용한다.

종료 오브젝트에서 어떤 오브젝트 aa로 가는 애로우가 하나 이상 있을 때 aa는 그 애로우 수만큼 구조를 갖는다.

종료 오브젝트에서 aa로 가는 애로우를 엘리먼트(element)라고 한다.

카테고리 이론에서 아래 수식의 xxaa글로벌(global) 엘리먼트라고 한다.

1xa1 \xrightarrow{x} a

글로벌을 빼고 그냥 엘리먼트라고 부르기도 한다.

타입 이론에서 x:Ax:Axx의 타입은 AA라는 뜻이다.

하스켈에서는 아래처럼 콜론을 두 개 적는다.

x :: A

하스켈에서 구체적인 타입 이름은 대문자로 시작하고 타입 변수 이름은 소문자로 시작한다.

프로그래밍 언어에서 x는 타입 A의 값(term)이라 하고 카테고리 이론에서 애로우 x:1Ax:1 \rightarrow AAA의 글로벌 엘리먼트라 한다.

하스켈 타입 시스템에서는 아래 두 표현을 구분하지만 카테고리 이론에서는 같은 것으로 본다.

x :: A
x :: () -> A

어떤 오브젝트에서도 Void로 가는 애로우는 없기 때문에 종료 오브젝트에서 Void로 가는 애로우도 없다. 따라서 Void는 엘리먼트가 없다.

종료 오브젝트는 엘리먼트가 한 개이므로 종료 오브젝트에서 종료 오브젝트로 가는 애로우도 한 개이다. 111 \rightarrow 1. 그래서 종료 오브젝트를 싱글톤(singleton)이라고 부르기도 한다.

카테고리 이론에서는 다른 오브젝트에서 시작 오브젝트로 가는 애로우를 제한하지는 않지만 이 책에서 다루는 카르테시안 닫힘 카테고리에서는 제한한다.

profile
코딩하는 물총새

0개의 댓글