Featured image of post 타입 이론과 커리-하워드 동형대응: 명제=타입, 증명=프로그램의 심오한 조화

타입 이론과 커리-하워드 동형대응: 명제=타입, 증명=프로그램의 심오한 조화

논리학의 증명과 컴퓨터 프로그램의 완벽한 일치. 직관주의 논리, 단순 타입 람다 대수에서 System F, 의존 타입, 그리고 호모토피 타입 이론(HoTT)이 여는 버그 없는 세계까지 완벽 해설.

타입 이론과 커리-하워드 동형대응: 명제=타입, 증명=프로그램의 심오한 조화

컴퓨터 과학과 수학의 역사에서 가장 아름답고도 심오한 발견 중 하나가 ‘커리-하워드 동형대응(Curry-Howard Isomorphism)‘입니다. 이 개념은 단순한 비유가 아닙니다. ‘컴퓨터 프로그램을 작성하는 것’과 ‘수학 정리를 증명하는 것’이 구문론적으로도, 의미론적으로도, 그리고 수학적 구조로도 완전히 동일한 행위임을 보여줍니다. 우리가 컴파일러에 통과시키는 프로그램은 그대로 논리학의 증명 체계에서의 형식적 증명으로 해석될 수 있습니다.

본 기사에서는 단순 타입 람다 대수(Simply Typed Lambda Calculus)부터 체계 F(System F), 의존 타입 이론(Dependent Type Theory), 그리고 현대 수학의 최전선인 호모토피 타입 이론(Homotopy Type Theory; HoTT)에 이르기까지, 타입 이론과 논리학의 교차점을 탐구합니다. 또한, 현대의 정리 증명 지원 시스템(Coq, Lean 4 등)이 어떻게 소프트웨어 검증의 궁극적인 형태를 실현하고 있는지를, 추론 규칙의 엄밀한 공식화나 구체적인 증명 코드를 섞어가며 철저히 해설합니다. 총 1만 자가 넘는 이 여정을 통해 프로그램과 수학의 진정한 조화를 체감해 보시기 바랍니다.


제1장: 논리학과 계산의 기적의 교차점: 역사와 BHK 해석

해스켈 커리와 윌리엄 앨빈 하워드의 발견

커리-하워드 동형대응은 미국의 수학자 해스켈 커리(Haskell Curry)와 논리학자 윌리엄 앨빈 하워드(William Alvin Howard)의 이름을 땄습니다. 1934년, 커리는 콤비네이터 논리(Combinatory Logic)에서의 타입 구조와 직관주의 논리의 함의 명제에 관한 공리계(힐베르트 스타일) 사이에 놀라운 수학적 유사성이 있다는 것을 깨달았습니다. 그 후, 1969년에 하워드가 게르하르트 겐첸(Gerhard Gentzen)이 공식화한 ‘자연 연역(Natural Deduction)‘과 알론조 처치(Alonzo Church)의 ‘람다 대수(Lambda Calculus)‘가 완전한 동형대응 관계에 있음을 논문으로 정리했고, 이 개념은 흔들림 없는 것으로 확립되었습니다.

직관주의 논리와 BHK 해석의 엄밀한 구성성

고전 논리에서 명제는 ‘참’ 또는 ‘거짓’ 중 하나의 진리값을 가집니다(배중률). 그러나 L. E. J. 브라우어(L. E. J. Brouwer)가 창시한 직관주의 논리(Intuitionistic Logic)에서는 진리값이라는 개념을 물리치고, ‘명제가 참이라는 것은 그 증명(증거)을 구성할 수 있다는 것이다’라고 정의합니다. 이 입장을 엄밀하게 공식화한 것이 BHK 해석(Brouwer-Heyting-Kolmogorov 해석)입니다.

BHK 해석에 따르면, 각 논리 결합자의 ‘증명’은 다음과 같이 구성적으로 정의됩니다:

  • 명제 $A \land B$ 의 증명은 쌍 $(p, q)$ 이다. 여기서 $p$ 는 $A$ 의 증명이고, $q$ 는 $B$ 의 증명이다.
  • 명제 $A \lor B$ 의 증명은 쌍 $(0, p)$ 또는 $(1, q)$ 이다. 여기서 $p$ 는 $A$ 의 증명, $q$ 는 $B$ 의 증명이다. 태그(0 또는 1)를 통해 어느 쪽이 증명되었는지를 명시한다.
  • 명제 $A \to B$ 의 증명은 함수 $f$ 이다. 이 함수는 $A$ 의 임의의 증명 $x$ 를 입력으로 받아 $B$ 의 증명 $f(x)$ 를 출력한다.
  • 명제 $\bot$(모순)의 증명은 존재하지 않는다.
  • 명제 $\exists x \in D, P(x)$ 의 증명은 쌍 $(d, p)$ 이다. 여기서 $d \in D$ 는 구체적인 대상이며, $p$ 는 $P(d)$ 의 증명이다.
  • 명제 $\forall x \in D, P(x)$ 의 증명은 함수 $f$ 이다. 이 함수는 임의의 $d \in D$ 에 대해 $P(d)$ 의 증명 $f(d)$ 를 출력한다.

이 해석을 프로그래밍의 관점에서 보면 ‘명제’란 ‘타입(Type)‘이며, ‘증명’이란 ‘그 타입을 가지는 값(프로그램, 함수)‘에 다름 아닙니다. 직관주의 논리에서의 증명 구성은 데이터 구조와 알고리즘의 구축 그 자체인 것입니다.


제2장: 자연 연역과 타입 추론 규칙의 완벽한 대조표와 엄밀한 공식화

커리-하워드 대응의 핵심을 이루는 것은 겐첸의 자연 연역 추론 규칙과 단순 타입 람다 대수의 타입 지정 규칙이 완전히 일치한다는 점입니다. 아래에 논리 결합자별 도입 규칙(Introduction Rule)과 제거 규칙(Elimination Rule)의 엄밀한 대조표를 제시합니다.

문맥 $\Gamma$ 는 가정(변수와 그 타입의 쌍)의 집합을 나타냅니다. $\Gamma \vdash M : A$ 는 ‘문맥 $\Gamma$ 하에서 항 $M$ 은 타입 $A$ 를 가진다(즉, 명제 $A$ 의 증명이다)‘는 것을 의미합니다.

함의($\to$)와 함수 타입

$$ \frac{\Gamma, x:A \vdash M : B}{\Gamma \vdash (\lambda x:A. M) : A \to B} \quad (\to\text{-}I) $$

가정 $A$(변수 $x$)를 도입하여 $B$(항 $M$)를 증명할 수 있다면, $A$ 에서 $B$ 로의 함의(함수 $\lambda x:A. M$)가 증명됩니다. 이는 무명 함수의 정의 그 자체입니다.

$$ \frac{\Gamma \vdash M : A \to B \quad \Gamma \vdash N : A}{\Gamma \vdash (M\ N) : B} \quad (\to\text{-}E) $$

$A \to B$ 의 증명 $M$(함수)과 $A$ 의 증명 $N$(인수)이 있을 때, 이들을 적용(Apply)함으로써 $B$ 의 증명 $M\ N$ 을 얻습니다. 이는 삼단논법(Modus Ponens)입니다.

연언($\land$)과 직곱 타입(Product Type / Tuple)

$$ \frac{\Gamma \vdash M : A \quad \Gamma \vdash N : B}{\Gamma \vdash (M, N) : A \land B} \quad (\land\text{-}I) $$

$A$ 와 $B$ 의 증명이 각각 있다면, 이들을 쌍으로 만듦으로써 $A \land B$ 가 증명됩니다.

$$ \frac{\Gamma \vdash P : A \land B}{\Gamma \vdash \pi_1(P) : A} \quad (\land\text{-}E_1) \qquad \frac{\Gamma \vdash P : A \land B}{\Gamma \vdash \pi_2(P) : B} \quad (\land\text{-}E_2) $$

쌍 $P$ 에서 첫 번째 요소를 꺼내는 연산 $\pi_1$ 은 $A$ 를, 두 번째 요소를 꺼내는 연산 $\pi_2$ 는 $B$ 를 도출합니다.

선언($\lor$)과 직합 타입(Sum Type / Either / Coproduct)

$$ \frac{\Gamma \vdash M : A}{\Gamma \vdash \text{inl}(M) : A \lor B} \quad (\lor\text{-}I_1) \qquad \frac{\Gamma \vdash N : B}{\Gamma \vdash \text{inr}(N) : A \lor B} \quad (\lor\text{-}I_2) $$

$A$ 또는 $B$ 둘 중 하나의 증명이 있다면, $A \lor B$ 를 구축할 수 있습니다. Haskell의 Left 나 Right 에 해당합니다.

$$ \frac{\Gamma \vdash P : A \lor B \quad \Gamma, x:A \vdash M_1 : C \quad \Gamma, y:B \vdash M_2 : C}{\Gamma \vdash \text{case } P \text{ of } \text{inl}(x) \Rightarrow M_1 \mid \text{inr}(y) \Rightarrow M_2 : C} \quad (\lor\text{-}E) $$

$A \lor B$ 가 성립하고, 또한 $A$ 에서 $C$、$B$ 에서 $C$ 를 도출할 수 있다면, $C$ 가 결론지어집니다. 이는 프로그래밍에서의 경우의 수 분할(패턴 매칭)입니다.

모순($\bot$)과 공 타입(Empty Type / Void)

$$ \frac{\Gamma \vdash M : \bot}{\Gamma \vdash \text{abort}_A(M) : A} \quad (\bot\text{-}E) $$

모순 $\bot$ 이 증명되었다면, 임의의 명제 $A$ 를 도출할 수 있습니다. 이는 요소가 없는 공 타입(Void)으로부터 임의의 값을 만들어내는 가상적인 함수 abort 에 대응합니다(실제로는 호출되지 않습니다).


제3장: 증명의 정규화(Cut Elimination)와 $\beta$-축약의 수학적 일치

자연 연역에서 중요한 정리로 ‘정규화 정리(Normalization Theorem)‘가 있습니다. 겐첸은 시퀀트 계산(Sequent Calculus)에서 ‘컷 규칙(Cut Rule)‘을 제거할 수 있음(컷 제거 정리, Gentzen’s Hauptsatz)을 보여주었습니다. 자연 연역에서 이는 ‘도입 규칙 직후에 제거 규칙을 적용하는 우회(Detour)는 직접적인 증명으로 변형할 수 있다’는 것을 의미합니다.

놀랍게도, 이 논리학에서의 ‘증명의 변형 및 단순화’ 과정은 람다 대수에서의 ‘프로그램의 실행(평가)’, 즉 $\beta$-축약(Beta Reduction) 과 완전히 동일합니다.

함의에서의 정규화와 $\beta$-축약

다음과 같은 우회를 포함하는 증명(프로그램)을 생각해 보겠습니다.

  1. $x:A$ 를 가정하여 $M:B$ 를 도출하고, $A \to B$ 를 도입($\to\text{-}I$)한다. 즉 $\lambda x:A. M$.
  2. 그 직후에, $A$ 의 증명 $N$ 을 사용하여 함의를 제거($\to\text{-}E$)한다. 즉 $(\lambda x:A. M)\ N$.

논리학적으로는, 가정 $x$ 를 도입하여 증명을 만들고 곧바로 그 가정에 구체적인 증명 $N$ 을 대입하고 있습니다. 이는 중복이며, 처음부터 $M$ 안의 가정 $x$ 의 모든 위치에 $N$ 을 채워 넣으면 직접 $B$ 의 증명을 얻을 수 있습니다. 컴퓨터 과학적으로는, 이는 바로 함수 적용이며 실행하면 인수 $N$ 이 매개변수 $x$ 에 대입됩니다.

$$ (\lambda x:A. M)\ N \quad \longrightarrow_\beta \quad M[x := N] $$

이것이 $\beta$-축약입니다. 논리학에서의 ‘증명의 컷 제거’는 프로그램이 실제로 ‘계산’을 진행하는 단계 그 자체인 것입니다.

강정규화 정리와 처치-로서의 정리

단순 타입 람다 대수에서, 임의의 타입 지정 가능한 항은 반드시 유한 번의 $\beta$-축약으로 더 이상 계산할 수 없는 상태(정규형, Normal Form)에 도달합니다. 이를 ‘강정규화 정리(Strong Normalization Theorem)‘라고 부릅니다. 이는 논리학에서 ‘어떤 증명이라도 반드시 우회 없는 직접 증명으로 다시 쓸 수 있다’는 사실과 일치합니다. 나아가 처치-로서의 정리(Church-Rosser Theorem)에 의해 계산 순서에 상관없이 최종적인 정규형은 유일하게 결정됩니다. 강정규화성을 가지는 체계에서 프로그램은 반드시 정지(튜링 불완전)합니다. 만약 무한 루프(예를 들어 Y 콤비네이터나 $\Omega = (\lambda x. x\ x)(\lambda x. x\ x)$)가 존재한다면, 그것은 논리학적으로 ‘자기 언급에 의한 역설’을 의미하며, 체계의 건전성(무모순성)이 붕괴되어 버립니다.


제4장: 의존 타입(Dependent Types)과 일차 술어 논리의 대응

지금까지의 대응은 명제 논리(Propositional Logic)의 범위였습니다. 커리-하워드 대응을 ‘일차 술어 논리(First-Order Logic)‘로 확장한 것이 페르 마르틴-뢰프(Per Martin-Löf) 등이 구축한 ‘의존 타입 이론(Dependent Type Theory)‘입니다.

의존 타입이란 ‘값(항)에 의존하여 변화하는 타입’을 말합니다. 예를 들어 ‘길이 $n$ 인 벡터’의 타입은 자연수 값 $n$ 에 의존합니다.

전칭 기호 $\forall$ 와 의존 직곱 타입($\Pi$ 타입)

‘모든 $x \in A$ 에 대해 $B(x)$ 가 성립한다’는 전칭 명제 $\forall x:A, B(x)$ 는, 인수 $x:A$ 를 받고 반환값으로 타입 $B(x)$ 의 값을 돌려주는 함수로 간주할 수 있습니다. 이 함수의 타입을 $\Pi$ 타입(Pi Type, Dependent Product Type) 이라고 부릅니다.

$$ \frac{\Gamma, x:A \vdash M : B(x)}{\Gamma \vdash (\lambda x:A. M) : \Pi x:A. B(x)} \quad (\Pi\text{-}I) $$

예를 들어 ‘모든 자연수 $n$ 에 대해 $n+n = 2n$ 이다’라는 정리의 증명은 자연수 $n$ 을 인수로 받아 ‘$n+n = 2n$ 의 증명(이라는 타입을 가진 값)‘을 반환하는 함수로 구현됩니다.

존재 기호 $\exists$ 와 의존 직합 타입($\Sigma$ 타입)

‘어떤 $x \in A$ 가 존재하여 $B(x)$ 가 성립한다’는 존재 명제 $\exists x:A, B(x)$ 는 ‘조건을 만족하는 구체적인 값 $x$‘와 ‘그 $x$ 가 조건을 만족한다는 증명’의 쌍으로 표현됩니다. 이를 $\Sigma$ 타입(Sigma Type, Dependent Sum Type) 이라고 부릅니다.

$$ \frac{\Gamma \vdash M : A \quad \Gamma \vdash N : B(M)}{\Gamma \vdash (M, N) : \Sigma x:A. B(x)} \quad (\Sigma\text{-}I) $$

이를 통해 ‘정렬된 배열을 반환하는 함수’는 단순한 배열을 반환하는 것이 아니라, ‘반환값인 배열 $y$‘와 ‘$y$ 가 정렬되어 있다는 것의 증명’의 $\Sigma$ 쌍을 반환하는 함수로 엄밀하게 타입 지정이 가능해집니다. 이것이 ‘Correct-by-Construction(구축에 의한 정당성 보장)‘의 기반입니다.


제5장: Lean 4 / Coq을 이용한 수학 정리의 증명과 해설(실전편)

의존 타입 이론에 기반한 현대의 정리 증명 지원 시스템(Lean 4나 Coq)을 사용하여 실제 수학 증명이 어떻게 프로그램으로 기술되는지 살펴보겠습니다.

드 모르간의 법칙(직관주의적 검증)

고전 논리에서는 $\neg(A \lor B) \iff \neg A \land \neg B$ 가 성립하지만, 직관주의 논리에서도 이 방향은 증명 가능합니다. Lean 4에서의 증명을 아래에 나타냅니다. 참고로 Lean에서 부정 $\neg A$ 는 $A \to \bot$(A를 가정하면 모순을 이끌어내는 함수)로 정의됩니다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
-- Lean 4: 드 모르간의 법칙의 일부 ¬(A ∨ B) → ¬A ∧ ¬B
theorem de_morgan_1 {A B : Prop} (h : ¬(A ∨ B)) : ¬A ∧ ¬B :=
  -- And.intro 는 연언(∧)의 도입 규칙(쌍의 구축)입니다.
  And.intro
    -- 첫 번째 요소: ¬A 의 증명 (즉 A → False)
    (fun (ha : A) =>
      -- A 에서 A ∨ B 를 구축하고(Or.inl), h 에 적용하여 모순(False)을 얻는다
      h (Or.inl ha))
    -- 두 번째 요소: ¬B 의 증명 (즉 B → False)
    (fun (hb : B) =>
      -- B 에서 A ∨ B 를 구축하고(Or.inr), h 에 적용하여 모순(False)을 얻는다
      h (Or.inr hb))

줄 단위 해설:

  1. h : ¬(A ∨ B) 는 타입 (A ∨ B) → False 인 함수입니다.
  2. And.intro 에 의해 ¬A 와 ¬B 의 증명 쌍을 구축합니다.
  3. fun (ha : A) => ... 은 람다 추상화(함수의 정의)입니다. 인수 ha 를 사용하여 Or.inl ha 로 A ∨ B 의 증명을 만들고, 이를 함수 h 에 전달함으로써 False 를 반환합니다.

이처럼 증명이란 완전히 타입 안전한 람다식을 구축하는 것에 다름 아닙니다.

리스트 연결의 결합 법칙의 귀납적 증명

프로그래밍에서 잘 알려진 리스트의 연결 연산 ++ 에 대해, 결합 법칙 (l1 ++ l2) ++ l3 = l1 ++ (l2 ++ l3) 을 수학적 귀납법으로 증명합니다. 귀납법은 타입 이론에서 ‘재귀 함수(Recursive Function)‘로서 구현됩니다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
-- Lean 4: 리스트 연결의 결합 법칙
theorem append_assoc {α : Type} (l1 l2 l3 : List α) : (l1 ++ l2) ++ l3 = l1 ++ (l2 ++ l3) :=
  match l1 with
  -- 기저 사례: l1 이 빈 리스트 [] 인 경우
  | [] =>
    -- [] ++ l2 는 l2 로 축약되므로, l2 ++ l3 = l2 ++ l3 가 되어 자명함 (Reflexivity)
    rfl
  -- 귀납 단계: l1 이 head :: tail 인 경우
  | head :: tail =>
    -- 귀납법의 가정(재귀 호출)으로서 tail 에 대한 결합 법칙을 이용
    have ih : (tail ++ l2) ++ l3 = tail ++ (l2 ++ l3) := append_assoc tail l2 l3
    -- (head :: tail ++ l2) ++ l3 은 head :: ((tail ++ l2) ++ l3) 로 축약된다
    -- 귀납법의 가정 `ih` 를 사용하여 식을 다시 쓴다 (rewrite)
    by rw [ih]

여기서는 리스트의 구조에 대한 패턴 매칭 match 가 수학적 귀납법의 구조를 제공하고, 재귀 호출 append_assoc tail l2 l3 가 귀납법의 가정(Induction Hypothesis)에 해당합니다. 재귀의 정지성이 보장되어 있기 때문에 이것은 건전한 증명이 됩니다.


제6장: 체계 F, 다형 람다 대수, 계수와 지라르의 역설

더욱 표현력을 높이기 위해 타입을 매개변수로 취하는 ‘다형성(Polymorphism)‘을 도입합니다. 이것이 장-이브 지라르(Jean-Yves Girard)와 존 레이놀즈(John Reynolds)가 독립적으로 발견한 ‘체계 F(System F)’ 또는 ‘이계 람다 대수’입니다.

체계 F와 전칭 양화

체계 F에서는 타입 변수에 대한 전칭 양화 $\forall \alpha. \tau$ 를 타입으로 허용합니다. 이로써 Haskell 등의 제네릭스(Parametric Polymorphism)의 기초가 세워졌습니다. 예를 들어 다형 항등 함수 id 의 타입은 $\forall \alpha. \alpha \to \alpha$ 가 됩니다. 논리학적으로 이것은 ‘이계 명제 논리(명제 변수에 대한 양화를 허용하는 논리)‘에 대응합니다.

계수(Universe Levels)와 지라르의 역설

체계 F나 의존 타입 이론을 설계할 때 ‘모든 타입의 집합’을 나타내는 타입 Type 은 그 자신을 타입으로 가질(Type : Type) 수 있을까요? 만약 이를 허용해버리면 타입 이론에서의 러셀의 역설(Russell’s Paradox)인 ‘지라르의 역설(Girard’s Paradox)’ 이 발생합니다. 체사레 부랄리-포르티(Burali-Forti)의 역설과 마찬가지로 서수 구조를 이용하여 ‘모든 서수의 집합’을 구축하고, 자기 언급에 의한 모순($\bot$ 의 증명)을 이끌어낼 수 있게 되는 것입니다.

$$ \text{Type}_0 : \text{Type}_1 : \text{Type}_2 : \dots $$

이를 통해 자기 언급을 방지하고 논리의 무모순성(일관성)을 유지하면서 풍부한 수학적 구조를 표현하는 것이 가능해집니다.


제7장: 호모토피 타입 이론(HoTT)에서의 동일성 타입과 경로의 위상기하학적 해석

21세기에 들어서며 커리-하워드 동형대응은 위상기하학(토폴로지) 및 범주론과 결합하여 새로운 패러다임 ‘호모토피 타입 이론(Homotopy Type Theory; HoTT)’ 을 탄생시켰습니다. 필즈상 수상자인 블라디미르 보에보츠키(Vladimir Voevodsky) 등이 주도한 이 이론은 수학의 기초를 근본부터 다시 쓰려 하고 있습니다.

동일성 타입(Identity Types)과 경로(Paths)

의존 타입 이론에서 ‘$x$ 와 $y$ 가 같다’는 주장은 동일성 타입(Identity Type) $Id_A(x, y)$ 라는 타입으로 표현됩니다. 보통 이것은 반사율($x = x$)에 의해서만 증명 가능한 것으로 여겨집니다(refl : Id_A(x, x)).

그러나 HoTT에서는 이 $Id_A(x, y)$ 의 증명 $p$ 에 위상기하학적인 의미를 부여합니다. 즉, ‘증명 $p : Id_A(x, y)$‘는 ‘공간 $A$ 위에서의 점 $x$ 에서 점 $y$ 로의 경로(길, Path)‘라고 해석하는 것입니다. 나아가 $p, q : Id_A(x, y)$ 라는 두 개의 서로 다른 증명(경로)이 존재할 때, 그것들이 같다는 증명 $\alpha : Id_{Id_A(x, y)}(p, q)$ 는 경로 $p$ 에서 경로 $q$ 로의 연속 변형인 ‘호모토피(Homotopy)’ 에 대응합니다. 이로써 타입 이론 안에 무한한 고차 준군(Higher Groupoid)의 구조가 자연스럽게 나타납니다.

J-제거자와 경로 귀납법

동일성 타입의 제거 규칙인 J-제거자(J-eliminator / Path Induction) 는 HoTT에서 극히 중요한 역할을 합니다. 이는 ‘등식 $x = y$ 에 의존하는 명제 $P(x, y, p)$ 를 증명하려면, $x = x$ 이고 $p = \text{refl}$ 인 경우(기저 사례)만 증명하면 충분하다’는 규칙입니다. 위상기하학적으로는 ‘점 $x$ 에 머무르는 상수 경로는 임의의 경로로 연속 변형 가능하다(수축 가능성)‘는 사실에 대응합니다.

일의성 공리(Univalence Axiom)

보에보츠키가 도입한 가장 큰 돌파구가 ‘일의성 공리(Univalence Axiom)’ 입니다. 수학에서 동형(Isomorphic)인 구조(예를 들어 요소 수가 같은 두 유한 집합이나 구조가 같은 두 군)는 ‘실질적으로 같은 것’으로 취급됩니다. 그러나 기존의 집합론(ZFC)에서는 동형이더라도 엄밀하게는 ‘같다’고 말할 수 없었습니다.

$$ (A \simeq B) \simeq Id_{\text{Type}}(A, B) $$

슬로건으로 말하자면 ‘동형은 등가이다(Equality is Equivalence)’ 입니다. 이 공리에 의해 어떤 표현에서 증명한 정리를 전혀 다른 동형인 표현으로 ‘경로를 따른 수송(Transport)‘을 이용해 자동적이고 안전하게 끌어올리는 것이 가능해집니다. 프로그램의 관점에서 말하자면, 데이터 구조(예: 이진수 표현과 단항 표현의 자연수) 간의 동형성을 한 번 증명하면 한쪽 데이터 구조를 위해 작성된 모든 함수나 정리를 자동으로 다른 쪽에 적용할 수 있는 궁극의 제네릭스를 실현하는 것입니다.


맺음말: 프로그래밍과 보편적 진리의 탐구

커리-하워드 동형대응이 가르쳐 주는 가장 중요한 진리는 ‘수학’과 ‘컴퓨터 과학’은 본질적으로 같은 언어를 말하고 있다 는 사실입니다. 우리가 일상의 프로그래밍에서 타입 에러와 격투를 벌이고 있을 때, 그것은 컴파일러라는 자동 증명 검증기를 통해 논리학적인 모순을 바로잡고 있는 것과 다름없습니다.

  • 명제(Proposition)는 타입(Type)이다
  • 증명(Proof)은 프로그램(Program)이다
  • 증명의 정규화(Cut Elimination)는 프로그램의 실행($\beta$-Reduction)이다

함수형 프로그래밍 언어(Haskell, OCaml, Rust 등)가 가지는 강력한 타입 시스템은 이 동형대응의 혜택을 강하게 받고 있습니다. 그리고 Coq이나 Lean 4 등의 정리 증명 지원 시스템은 프로그래밍과 수학의 경계를 완전히 지워버렸습니다. 우리가 작성하는 코드는 실행 가능한 알고리즘인 동시에 버그가 존재하지 않음을 영원히 보장하는 보편적인 수학적 진리의 증명서(Certificate)가 되는 것입니다.

타입 이론과 논리학의 교차점에서 태어난 이 심오한 조화는 소프트웨어 공학을 단순한 ‘경험 법칙에 기반한 코딩’에서 ‘엄밀한 수학적 기초에 기반한 진리의 구축’으로 계속해서 이끌어가고 있습니다.

comments powered by Disqus