단순 타입 람다 계산(Simply typed lambda calculus)
람다 계산(lambda calculus)의 변수마다 타입(type)을 붙이고, 세 규칙(Var, Abs, App)으로 항의 타입을 이끌어 내는 체계. 타입이 붙는 항은 어떤 순서로 줄여도 반드시 끝나며(강정규화, strong normalization), 그 대가로 끝나지 않을 수 있는 되부름을 쓸 수 없다.
람다 계산에서는 아무 항에나 아무 항을 적용할 수 있습니다. 그래서
규칙은 셋뿐입니다. 가로줄 위의 판단이 모두 성립하면 아래 판단도 성립한다고 읽습니다. Γ는 '어떤 변수가 어떤 타입이라고 가정하는지'를 적은 목록(문맥)입니다.
Var는 가정해 둔 것은 쓸 수 있다는 규칙입니다. Abs는 'x가 A라고 두었을 때 M이 B이면, λx:A. M은 A에서 B로 가는 함수'라는 규칙인데, 아래 줄에서는 가정 x : A가 사라집니다. x가 λ에 묶여 더는 바깥의 가정이 아니기 때문입니다. App은 함수가 받는 타입과 인자의 타입이 같아야 적용할 수 있다는 규칙입니다. 이 규칙들로 한 항의 타입을 이끌어 낸 기록을 유도라고 하며, 결론을 맨 아래에 두고 위로 가지를 뻗는 나무로 적습니다.
검사할 항:
합성 함수
자기 적용
이렇게 걸러 낸 대가로 얻는 것이 강정규화 정리입니다. 타입이 붙는 항은 어느 곳부터 어떤 순서로 줄이든 유한한 걸음 안에 더 줄일 곳이 없는 정규형(normal form)에 닿습니다. 당연해 보이지 않는 까닭은 β-축약(β-reduction)이 항을 길게 만들 수 있어서입니다.
어떤 순서로 줄여도 끝난다는 강한 형태는 미국 논리학자 윌리엄 테이트가 1967년에 도입한 방법으로 증명합니다. '끝난다'를 직접 귀납으로 증명하려 하면 App 규칙에서 막힙니다. M과 N이 각각 끝나도 M N이 끝난다는 보장은 없기 때문입니다. 테이트는 더 강한 성질 '타입 A에서 환원 가능하다'를 항이 아니라 타입의 모양에 대한 귀납으로 정의했습니다. 기본 타입에서는 '어떤 순서로 줄여도 끝난다'이고,
대가도 분명합니다. 모든 계산이 끝나는 언어는 튜링 기계(Turing machine)만큼 강할 수 없습니다. 이유는 정지 문제(halting problem)와 같은 대각선 논법입니다. 프로그램이 모두 끝나고, 프로그램을 수로 적어 입력으로 줄 수 있으며, 그 실행을 기계적으로 흉내 낼 수 있는 언어가 있다고 합시다. 그러면 '프로그램 p에 입력 p를 넣어 나온 값에 1을 더하라'는 함수는 늘 끝나는 계산 가능한 함수입니다. 이 함수가 그 언어의 프로그램 q로 적힌다면 q에 q를 넣은 값은 자기 자신보다 1이 커야 하니 모순입니다. 따라서 그 언어로 적을 수 없는, 늘 끝나는 계산 가능한 함수가 반드시 있습니다(칸토어의 대각선 논법(Cantor's diagonal argument)과 같은 모양입니다). 단순 타입 람다 계산의 한계는 훨씬 더 좁습니다. 처치 수(Church numeral)의 타입을
되부름을 되찾는 방법은 상수 하나를 더하는 것입니다.
흔한 오해 둘을 짚어 둡니다. 하나, 타입 검사가 쉬우니 '이 타입의 항이 있는가'도 쉬울 것 같지만 그렇지 않습니다. 닫힌 항(자유 변수가 없는 항)으로 채워지는 타입인지 묻는 거주 문제(type inhabitation)는 PSPACE 완전입니다(리처드 스탯먼, 1979). PSPACE는 다항식(polynomial) 크기의 기억 공간으로 풀리는 문제들의 부류로 NP를 포함하며, 그 안에서 가장 어려운 문제들과 같은 급이라는 뜻입니다(P 대 NP 문제(P versus NP problem) 참고). 이 문제는 직관주의(intuitionism) 명제 논리(propositional logic)에서 '이면'만 쓴 식이 증명되는지 묻는 문제와 같습니다. 둘, 이 체계는 장난감이 아닙니다. 곱 타입(product type)
이어지는 곳. 위의 규칙에서 항을 지우고 타입만 남기면 자연 연역(natural deduction)의 논리 규칙이 되고, App은 전건 긍정(modus ponens), Abs는 가정 내려놓기가 됩니다. 이 관찰이 커리–하워드 대응이며, 같은 유도를 증명으로 읽는 그림이 거기에 있습니다. 타입을 적지 않은 항에서 가장 일반적인 타입을 찾아내는 방법이 힌들리–밀너 타입 추론(type inference)입니다. 타입 변수와 '모든 타입에 대해'를 더하면 시스템 F(System F)가 되고, 강정규화는 유지되지만 증명은 훨씬 어려워집니다. 모든 계산이 끝난다는 보장과 튜링 완전성이 함께할 수 없는 이유는 정지 문제의 대각선 논법(diagonal argument)과 같습니다. 유도의 모양은 수학적 귀납법(mathematical induction)의 구조를 따라가므로, 이 체계에 관한 정리는 거의 모두 유도나 타입에 대한 귀납으로 증명됩니다. 되부름 상수 fix를 더해 생기는 끝나지 않는 항들이 무엇을 뜻하는지를 '아직 모름' ⊥에서 시작한 가장 작은 고정점으로 정하는 것이 영역 이론입니다.
이 개념이 나오는 긴 글
이 개념 위에 세워진 것
이 개념을 언급하는 페이지
- 함수
… 보여 줍니다. 여기에 모든 변수와 함수에 종류(타입, 예: "수를 받아 수를 내는 함수")를 붙인 것이단순 타입 람다 계산입니다. 여기서는 모든 계산이 반드시 끝나는 대신, 표현할 수 있는 계산이 줄어듭니다. 프로그래밍 언어의 …
- 정지 문제
… 것은 증명할 수 있는 경우가 많고, 입력을 한 번만 훑고 끝나는 유한 오토마톤은 언제나 멈춥니다.단순 타입 람다 계산의 프로그램도 언제나 멈추지만, 그 대가로 계산 가능한 함수를 모두 적을 수는 없습니다. 끝나지 않음을 …
- 람다 계산
… 풀었고, 여기서 영역 이론이 시작되었습니다. 변수마다 '수', '참·거짓' 같은 종류(타입)를 붙인단순 타입 람다 계산에서는 모든 계산이 반드시 끝나는 대신 Y 조합자 같은 끝없는 되부름을 적을 수 없고, 타입이 명제, …
- 재귀
… 전체를 닮은 작은 복사본이 나타납니다. 재귀 호출이 뻗어 나간 모양은 트리가 됩니다. 타입을 붙인단순 타입 람다 계산에서는 고정점 결합자에 타입을 붙일 수 없어서 이런 재귀가 사라지고, 그 대신 모든 계산이 반드시 …
- 고정점
… 계산⟧의 Y 조합자는 어떤 함수에든 고정점을 만들어 주어 재귀를 가능하게 합니다. 변수에 타입을 붙인단순 타입 람다 계산에서는 모든 계산이 반드시 끝납니다. 그 대가로 Y 조합자에는 타입을 붙일 수 없어서, 이런 식의 무제한 …
- 타입 이론
… 단순 유형 이론을 자신의 람다 계산 위에 다시 세웠습니다. 모든 변수에 타입을 붙인 이 체계가단순 타입 람다 계산입니다. 그 뒤 타입 체계는 여러 방향으로 넓어졌습니다. 단순 타입 람다 계산에서는 항이 항에만 …
- 커리–하워드 대응
… A를 B로 바꾸는 f와 B를 C로 바꾸는 g를 받아, A가 들어오면 f 다음 g를 거쳐 C를 내놓습니다.단순 타입 람다 계산의 규칙으로 따지면 타입은 (A \to B) \to (B \to C) \to (A \to C) 입니다. …
- 타입 추론: 힌들리–밀너
… 않으면 실행하기 전에 거부합니다. 이들이 쓰는 방법의 뼈대가 힌들리–밀너 타입 체계입니다. 찾아내는 타입은단순 타입 람다 계산의 타입에 '무엇이든 올 수 있는 자리'인 타입 변수를 더한 것입니다. 방법은 두 단계입니다. 첫째, …
- 다형성과 시스템 F
… 정수이든 글자이든 코드는 한 글자도 다르지 않습니다. 원소를 들여다보지 않고 자리만 옮기기 때문입니다.단순 타입 람다 계산에서는 이런 함수에 타입 하나를 줄 수 없어서, 정수용 reverse와 글자용 reverse를 따로 써야 …
- 데카르트 닫힌 범주
… 범주가 아니어서, 대수적 위상수학에서는 콤팩트 생성 공간처럼 좁힌 범주를 씁니다. 이 구조가 중요한 까닭은단순 타입 람다 계산이 정확히 이 구조이기 때문입니다. 순서쌍 타입과 단위 타입을 가진 단순 타입 람다 계산에서 타입을 …
- 영역 이론: 스콧과 재귀의 의미
… 람다 계산: 재귀로 정의한 함수와 Y 조합자가 무엇을 뜻하는지가 이 이론의 첫 질문이었습니다.단순 타입 람다 계산과 커리–하워드 대응: 타입이 있는 언어에 fix를 더하면 끝남과 논리의 무모순성을 함께 잃는다는 …