본문으로 이동

람다 대수: 두 판 사이의 차이

위키백과, 우리 모두의 백과사전.
내용 삭제됨 내용 추가됨
잔글편집 요약 없음
편집 요약 없음
1번째 줄: 1번째 줄:
'''람다 대수'''(λ代數, {{llang|en|lambda calculus}}) 또는 '''λ-대수''' 또는 '''람다 계산'''(λ計算) 또는 '''람다 계산법'''(λ計算法)은 [[추상화 (컴퓨터 과학)|추상화]]와 함수 적용 등의 [[논리 연산]]을 다루는 [[형식 체계]]이다.<ref name="Mazzola">{{서적 인용|성1=Mazzola|이름1=Guerino|성2=Milmeister|이름2=Gérard|성3=Weissmann|이름3=Jody|제목=Comprehensive Mathematics for Computer Scientists|언어=en|권=2|총서=Universitext|출판사=Springer|위치=Berlin, Heidelberg|날짜=2005|isbn=978-3-540-20861-7|doi=10.1007/b138337|lccn=2004102307}}</ref> 람다 대수의 항은 변수와 추상화 및 적용 연산을 통해 구성되며 (비순수 람다 대수에서는 상수 역시 구성에 참여한다), 추상화의 기호로는 그리스 문자 [[람다]](λ)가 사용된다. 람다 대수의 항들에 대하여 알파 동치와 베타 축약 등의 연산을 수행할 수 있다. 알파 동치는 제한 변수를 변경하는 변환으로서 [[이름 충돌]]을 방지하기 위해 사용되며, [[드 브루인 첨수]]를 사용할 경우 이는 필요 없다. 베타 축약은 함수 적용을 적절한 치환 연산으로 대신하는 변환이며, 베타 축약에 대한 주어진 항의 표준형이 (존재할 경우) 알파 동치 아래 유일하다는 사실은 [[처치-로서 정리]]의 따름정리이다.
[[컴퓨터과학]] 및 [[수리논리학]]에서, '''람다 대수''' 또는 '''람다 계산'''({{lang|el|λ-}}calculus, lambda-calculus)이란 변수의 [[네임 바인딩]]과 [[치환 실례|치환]]의 방법을 이용하여 함수 정의, 함수 적용, 귀납적 함수 [[추상화 (컴퓨터 과학)|추상화]]를 수행하고 {{임시링크|계산|en|Computability}}을 표현하는 [[형식 체계]]이다.


1930년대 [[알론조 처치]]가 [[수학기초론]]을 연구하는 과정에서 람다 대수의 형식을 제안하였다. 최초의 람다 대수 체계는 논리적인 오류가 있음이 증명되었으나, 처치가 1936년에 그 속에서 계산과 관련된 부분만 따로 빼내어 후에 유형 없는 람다 대수(untyped lambda calculus)라고 불리게 된 체계를 발표하였다. 또한 1940년에는 더 약한 형태이지만 논리적 모순이 없는 [[단순 유형 람다 대수]]를 도입하였다.
람다 대수는 임의의 [[튜링기계]]를 시뮬레이션 할 수 있는 보편적인 {{임시링크|계산 모형|en|Model of computation}}이다. 1930년대 [[알론조 처치]]가 [[수학기초론]]을 연구하는 과정에서 람다 대수의 형식을 제안하였다.


람다 대수는 [[튜링 완전성]]을 만족시키며, [[보편 튜링 기계]]와 동치이다. 람다 대수는 [[프로그래밍 언어 이론]]에서 중요한 역할을 하며, [[리스프]]를 비롯한 [[함수형 프로그래밍 언어]]의 기반이 된다. 람다 대수는 그 밖에도 [[논리학]], [[철학]],<ref>Coquand, Thierry, [http://plato.stanford.edu/archives/sum2013/entries/type-theory/ "Type Theory"], ''The Stanford Encyclopedia of Philosophy'' (Summer 2013 Edition), Edward N. Zalta (ed.).</ref> [[언어학]],<ref>{{서적 인용|url=https://books.google.com/books?id=9CdFE9X_FCoC |title=Categorial Investigations: Logical and Linguistic Aspects of the Lambek Calculus |first=Michael |last=Moortgat |publisher=Foris Publications |year=1988 |isbn=9789067653879}}</ref><ref>{{인용|url=https://books.google.com/books?id=nyFa5ngYThMC |title=Computing Meaning |editor1-first=Harry |editor1-last=Bunt |editor2-first=Reinhard |editor2-last=Muskens |publisher=Springer |year=2008 |isbn=9781402059575}}</ref> [[컴퓨터 과학]]<ref>{{인용|title=Concepts in Programming Languages|first=John C.|last=Mitchell|publisher=Cambridge University Press|year=2003|isbn=9780521780988|page=57|url=https://books.google.com/books?id=7Uh8XGfJbEIC&pg=PA57}}</ref> 등의 여러 분야에서 응용된다.
람다 대수는 람다 항목들을(lambda terms) 구성하고 람다 항목들에 축약 연산을 수행한다. 가장 간단한 형태의 람다 대수로서, 람다 항목들을 구성할 때 단지 아래의 규칙만을 이용한다:
{| class="wikitable"
|-
! 문법 !! 명칭 !! 설명
|-
| x || 변수(Variable) || 수학/논리의 값이나 파라메터를 대표하는 문자혹은 문자열
|-
| (λx.M) || 추상화(Abstraction) || 함수 정의를 표현: M은 람다 항목. 변수 x는 [[자유 변수와 종속 변수|종속 변수]].
|-
| (M N) || 적용(Application) || 함수를 인자에 적용. M과 N은 람다 항목(lambda terms).
|}
위의 규칙을 이용하여 (λ''x''.λ''y''.(λ''z''.(λ''x''.''z x'') (λ''y.z y'')) (''x y''))와 같은 표현식을 만든다. 혼동의 여지가 없으면 괄호는 생략할 수 있다. 경우에 따라, 논리/수학 상수나 연산 항목이 포함된다.


== 역사 ==
축약 연산은 다음과 같다.
{| class="wikitable"
|-
! 연산 !! 명칭 !! 설명
|-
| (λx.M[x]) → (λy.M[y]) || 알파-변환 (α-conversion) || 표현식의 종속 변수의 이름을 바꾼다. {{임시링크|이름 충돌|en|name collision}}을 방지하기 위해 사용한다.
|-
| ((λx.M) E) → (M[x:=E]) || 베타-축약 (β-reduction) || 종속 변수를 추상화 된 표현식의 인자로 치환한다.
|}

{{임시링크|드 브루인 지표|en|De Bruijn index}}를 이용하면 α-변환은 소거된다. [[처치-로서 정리]]에 의하면, 간소화 방법을 반복 적용하여 얻는 최종 결과는 {{임시링크|베타 표준형|en|Beta normal form}}을 형성한다.

최초의 람다 대수 체계는 논리적인 오류가 있음이 증명되었으나, 처치가 1936년에 그 속에서 계산과 관련된 부분만 따로 빼내어 후에 ''유형 없는 람다 대수 (untyped lambda calculus)''라고 불리게 된 체계를 발표하였다. 또한 1940년에는 더 약한 형태이지만 논리적 모순이 없는 {{임시링크|단순 유형 람다 대수|en|Simply typed lambda calculus}}를 도입하였다.

람다 대수는 [[계산 이론]], [[언어학]] 등에 중요한 역할을 하며, 특히 프로그래밍 언어 이론의 발전에 크게 기여했다. [[리스프]]와 같은 [[함수형 프로그래밍 언어]]는 람다 대수로부터 직접적인 영향을 받아 탄생했으며, 단순 유형 람다 대수는 현대 프로그래밍 언어의 유형 이론의 기초가 되었다.

==설명과 적용==
'람다 대수'는 임의의 [[튜링 기계]]를 시뮬레이션 할 수 있는 보편적인 {{임시링크|계산 모형|en|Model of computation}}으로서 [[튜링 완전]]하다.<ref>{{저널 인용|first=A. M. |last=Turing |authorlink=앨런 튜링 |title=Computability and λ-Definability |jstor=2268280 |journal=The Journal of Symbolic Logic |volume=2 |issue=4 |date=December 1937 |pages=153–163 |doi=10.2307/2268280}}</ref> 이름에 관하여는, '''람다 표현식'''과 '''람다 항목''' 의 람다는 그리스 문자 람다 (λ)로서 어떤 함수 내에 어떤 변수를 [[자유 변수와 종속 변수|종속]] 시키는 것을 나타내기 위하여 이용된다.

람다 대수는 [[수학]], [[철학]],<ref>{{임시링크|Coquand, Thierry|en|Thierry Coquand}}, [http://plato.stanford.edu/archives/sum2013/entries/type-theory/ "Type Theory"], ''The Stanford Encyclopedia of Philosophy'' (Summer 2013 Edition), Edward N. Zalta (ed.).</ref> [[언어학]],<ref>{{서적 인용|url=https://books.google.com/books?id=9CdFE9X_FCoC |title=Categorial Investigations: Logical and Linguistic Aspects of the Lambek Calculus |first=Michael |last=Moortgat |publisher=Foris Publications |year=1988 |isbn=9789067653879}}</ref><ref>{{인용|url=https://books.google.com/books?id=nyFa5ngYThMC |title=Computing Meaning |editor1-first=Harry |editor1-last=Bunt |editor2-first=Reinhard |editor2-last=Muskens |publisher=Springer |year=2008 |isbn=9781402059575}}</ref>, [[컴퓨터 과학]].<ref>{{인용|title=Concepts in Programming Languages|first=John C.|last=Mitchell|publisher=Cambridge University Press|year=2003|isbn=9780521780988|page=57|url=https://books.google.com/books?id=7Uh8XGfJbEIC&pg=PA57}}.</ref> 등의 여러 분야에 적용될 수 있다. 람다 대수는 {{임시링크|프로그래밍 언어 이론|en|Programming language theory}}의 발달에 중요한 역할을 했다. 람다 대수는 [[함수형 프로그래밍]]을 사용하여 구현된다. 또한, 람다 대수는, 현재, [[범주론]]의 연구 토픽에 포함된다.<ref>{{서적 인용|title=Basic Category Theory for Computer Scientists|page=53|first=Benjamin C.|last=Pierce}}</ref>

== 수학사에서 람다 대수 ==
람다 대수는 수학자 [[알론조 처치]]에 의해 [[수학기초론]] 연구의 일환으로 1930년대 소개됐다.<ref>{{저널 인용|first=A. |last=Church |authorlink=알론조 처치 |title=A set of postulates for the foundation of logic |journal=Annals of Mathematics |series=Series 2 |volume=33 |issue=2 |pages=346–366 |year=1932 |doi=10.2307/1968337 |jstor=1968337}}</ref><ref>For a full history, see Cardone and Hindley's "History of Lambda-calculus and Combinatory Logic" (2006).</ref> 최초의 시스템은 [[스티븐 클레이니]]와 [[존 버클리 로서]]가 [[클리네-로저 역설]]을 제창하면서 1935년 [[무모순성|논리적 모순]]을 보이기 위해 도입됐다.<ref>{{저널 인용|last1=Kleene|first1=S. C.|authorlink1=스티븐 클레이니|last2=Rosser|first2=J. B.|authorlink2=존 버클리 로서|title=The Inconsistency of Certain Formal Logics|journal=The Annals of Mathematics|date=July 1935|volume=36|issue=3|pages=630|doi=10.2307/1968646}}</ref><ref>{{저널 인용|last=Church|first=Alonzo|authorlink=알론조 처치|title=Review of Haskell B. Curry, ''The Inconsistency of Certain Formal Logics''|journal=The Journal of Symbolic Logic|date=December 1942|volume=7|issue=4|pages=170–171|doi=10.2307/2268117|jstor=2268117}}</ref>
람다 대수는 수학자 [[알론조 처치]]에 의해 [[수학기초론]] 연구의 일환으로 1930년대 소개됐다.<ref>{{저널 인용|first=A. |last=Church |authorlink=알론조 처치 |title=A set of postulates for the foundation of logic |journal=Annals of Mathematics |series=Series 2 |volume=33 |issue=2 |pages=346–366 |year=1932 |doi=10.2307/1968337 |jstor=1968337}}</ref><ref>For a full history, see Cardone and Hindley's "History of Lambda-calculus and Combinatory Logic" (2006).</ref> 최초의 시스템은 [[스티븐 클레이니]]와 [[존 버클리 로서]]가 [[클리네-로저 역설]]을 제창하면서 1935년 [[무모순성|논리적 모순]]을 보이기 위해 도입됐다.<ref>{{저널 인용|last1=Kleene|first1=S. C.|authorlink1=스티븐 클레이니|last2=Rosser|first2=J. B.|authorlink2=존 버클리 로서|title=The Inconsistency of Certain Formal Logics|journal=The Annals of Mathematics|date=July 1935|volume=36|issue=3|pages=630|doi=10.2307/1968646}}</ref><ref>{{저널 인용|last=Church|first=Alonzo|authorlink=알론조 처치|title=Review of Haskell B. Curry, ''The Inconsistency of Certain Formal Logics''|journal=The Journal of Symbolic Logic|date=December 1942|volume=7|issue=4|pages=170–171|doi=10.2307/2268117|jstor=2268117}}</ref>


그 후인 1936년 처치는 독립적으로 현재에는 유형 없는 람다 대수라고 불리는 계산에 관련한 부분을 출판했다.<ref>{{저널 인용|first=A. |last=Church |authorlink=알론조 처치 |title=An unsolvable problem of elementary number theory |journal=American Journal of Mathematics |volume=58 |number=2 |year=1936 |pages=345–363 |doi=10.2307/2371045 |jstor=2371045 }}</ref> 1940년, 그는 또한 계산적으로는 떨어지지만 논리적으로 무결한 시스템을 공개했다. 이것이 {{임시링크|단순 유형 람다 대수|en|Simply typed lambda calculus}}이다.<ref>{{저널 인용| last1 = Church | authorlink=알론조 처치 | first1 = A. | year = 1940 | title = A Formulation of the Simple Theory of Types | journal = Journal of Symbolic Logic | volume = 5 | issue = 2 | pages = 56–68 | doi=10.2307/2266170 |jstor=2266170}}</ref>
그 후인 1936년 처치는 독립적으로 현재에는 유형 없는 람다 대수라고 불리는 계산에 관련한 부분을 출판했다.<ref>{{저널 인용|first=A. |last=Church |authorlink=알론조 처치 |title=An unsolvable problem of elementary number theory |journal=American Journal of Mathematics |volume=58 |number=2 |year=1936 |pages=345–363 |doi=10.2307/2371045 |jstor=2371045 }}</ref> 1940년, 그는 또한 계산적으로는 떨어지지만 논리적으로 무결한 시스템을 공개했다. 이것이 [[단순 유형 람다 대수]]이다.<ref>{{저널 인용| last1 = Church | authorlink=알론조 처치 | first1 = A. | year = 1940 | title = A Formulation of the Simple Theory of Types | journal = Journal of Symbolic Logic | volume = 5 | issue = 2 | pages = 56–68 | doi=10.2307/2266170 |jstor=2266170}}</ref>

1960년대에 람다 대수와 프로그래밍 언어의 관계가 명확히 밝혀지기 전까지는 λ-대수는 단지 형식주의 (formalism)일 뿐이었다. 감사하게도 {{임시링크||en|}}[[리처드 몬터규]]와 언어학자들이 λ-대수를 자연어 (natural language)의 의미론에 적용함으로써, λ-대수는 언어학과<ref name='mm-linguistics'>{{서적 인용|last1=Partee|first1=B. B. H.|last2=ter Meulen|first2=A.|last3=Wall|first3=R. E.|title=Mathematical Methods in Linguistics |url=https://books.google.com/books?id=qV7TUuaYcUIC&pg=PA317 |accessdate=29 Dec 2016|year=1990|publisher=Springer}}</ref>컴퓨터 과학<ref>Alama, Jesse [http://plato.stanford.edu/entries/lambda-calculus/ "The Lambda Calculus"], ''The Stanford Encyclopedia of Philosophy'' (Summer 2013 Edition), Edward N. Zalta (ed.).</ref> 양쪽 분야에서 인정받는 위치를 차지했다.


1960년대에 람다 대수와 프로그래밍 언어의 관계가 명확히 밝혀지기 전까지는 λ-대수는 단지 형식주의 (formalism)일 뿐이었다. 감사하게도 [[리처드 몬터규]]와 언어학자들이 λ-대수를 자연어 (natural language)의 의미론에 적용함으로써, λ-대수는 언어학과<ref name='mm-linguistics'>{{서적 인용|last1=Partee|first1=B. B. H.|last2=ter Meulen|first2=A.|last3=Wall|first3=R. E.|title=Mathematical Methods in Linguistics |url=https://books.google.com/books?id=qV7TUuaYcUIC&pg=PA317 |accessdate=29 Dec 2016|year=1990|publisher=Springer}}</ref>컴퓨터 과학<ref>Alama, Jesse [http://plato.stanford.edu/entries/lambda-calculus/ "The Lambda Calculus"], ''The Stanford Encyclopedia of Philosophy'' (Summer 2013 Edition), Edward N. Zalta (ed.).</ref> 양쪽 분야에서 인정받는 위치를 차지했다.
== 함수의 표현 ==


== 도입 ==
=== 함수의 표현 ===
[[함수]]는 [[컴퓨터 과학]]과 [[수학]]의 기초를 이루는 개념이다. 람다 대수는 함수를 단순하게 표현할 수 있도록 하여 '함수의 계산'이라는 개념을 더 깊이 이해할 수 있게 돕는다.
[[함수]]는 [[컴퓨터 과학]]과 [[수학]]의 기초를 이루는 개념이다. 람다 대수는 함수를 단순하게 표현할 수 있도록 하여 '함수의 계산'이라는 개념을 더 깊이 이해할 수 있게 돕는다.


54번째 줄: 22번째 줄:
<blockquote><math>( x \mapsto (y \mapsto x \times x + y \times y) ) (5) (2)</math><br /><math>= (y \mapsto 5 \times 5 + y \times y) (2)</math><br /><math>= 5 \times 5 + 2 \times 2</math></blockquote>
<blockquote><math>( x \mapsto (y \mapsto x \times x + y \times y) ) (5) (2)</math><br /><math>= (y \mapsto 5 \times 5 + y \times y) (2)</math><br /><math>= 5 \times 5 + 2 \times 2</math></blockquote>


== 핵심 개념==
=== 핵심 개념===
추상화: <math>\lambda x.t</math>는 단일 입력 <math>x</math>를 받아 <math>t</math>의 표현으로 치환하는 익명의 함수를 지칭한다. 예를 들어 <math>\lambda x.x^2+2</math>는 함수 <math>f(x)=x^2+2</math>의 람다 추상화이다. 람다 추상화를 통해 함수를 정의한다는 것은 함수를 정의하기만 하고 함수를 수행(호출)하지는 않는다는 것을 의미한다. 람다 추상화를 통해 변수 <math>x</math>는 표현 <math>t</math>에 [[자유변수와 속박변수|속박]]된다.
;추상화
<math>\lambda x.t</math>는 단일 입력 <math>x</math>를 받아 <math>t</math>의 표현으로 치환하는 익명의 함수를 지칭한다. 예를 들어 <math>\lambda x.x^2+2</math>는 함수 <math>f(x)=x^2+2</math>의 ''람다 추상화''이다. 람다 추상화를 통해 함수를 정의한다는 것은 함수를 정의하기만 하고 함수를 수행(호출)하지는 않는다는 것을 의미한다. 람다 추상화를 통해 변수 <math>x</math>는 표현 <math>t</math>에 [[자유변수와 속박변수|속박]]된다.


자유 변수: 자유 변수(free variable)는 람다 추상화를 통해 표현에 묶이지 않은 변수를 말한다. 자유 변수의 집합은 귀납적으로 정의된다.
;자유 변수
자유 변수(free variable)는 람다 추상화를 통해 표현에 묶이지 않은 변수를 말한다. 자유 변수의 집합은 귀납적으로 정의된다.
* <math>x</math>의 자유 변수는 <math>x</math>뿐이다.
* <math>x</math>의 자유 변수는 <math>x</math>뿐이다.
* <math>\lambda x.t</math>의 자유변수는 <math>x</math>를 제외하고 <math>t</math>에 등장하는 변수들이다.
* <math>\lambda x.t</math>의 자유변수는 <math>x</math>를 제외하고 <math>t</math>에 등장하는 변수들이다.
65번째 줄: 31번째 줄:
예를 들어, <math>\lambda x.x</math>에는 자유 변수가 없지만, <math>\lambda x.x+y</math>에는 자유변수가 <math>y</math> 하나이다.
예를 들어, <math>\lambda x.x</math>에는 자유 변수가 없지만, <math>\lambda x.x+y</math>에는 자유변수가 <math>y</math> 하나이다.


== 축약 ==
== 정의 ==
람다 대수의 언어는 변수, 상수, 람다 기호, 괄호, 온점으로 구성된다. 변수와 상수는 (후술할) 람다 항의 기초 구성원들이며, 람다 항에 등장하는 자유 변수는 (이후 정의할) 치환 연산을 통해 다른 람다 항으로 치환될 수 있다. 람다 기호는 (후술할) 추상화 연산을 나타내는 기호이다. 괄호와 온점은 이론적으로는 불필요하지만, 여러 가지 편의를 위해 사용된다. 구체적으로, 람다 대수의 언어는 다음과 같은 기호들로 구성된다.
* [[정렬 전순서 집합]] <math>I</math> 및 변수들 <math>\{\mathsf x_i\}_{i\in I}</math>
* 정렬 전순서 집합 <math>J</math> 및 상수들 <math>\{\mathsf a_j\}_{j\in J}</math>. 만약 <math>J=\varnothing</math>일 경우, 이 람다 대수를 '''순수 람다 대수'''(純粹λ代數, {{llang|en|pure lambda calculus}})라고 한다.
* 람다 기호 <math>\lambda</math>
* 괄호 <math>()</math> 및 온점 <math>.</math>
여기서 <math>I</math>가 정렬 전순서 집합이어야 하는 것은 치환의 정의에서 변수의 집합의 부분 집합의 [[최소 원소]]를 취할 수 있어야 하기 때문이다.


'''람다 항'''(λ項, {{llang|en|lambda term}})은 변수와 상수들로부터 시작하여 유한 차례 적용 및 추상화를 가하여 얻는, 람다 대수 기호들의 문자열이다. 즉, 이는 다음과 같은 문법을 따른다.
람다 대수식의 의미는 식이 어떻게 축약될 수 있는지에 따라 정의된다. 람다 대수식 축약에는 세 가지가 있다.
* 모든 변수와 상수는 람다 항이다.
* 두 람다 항 <math>M</math>, <math>N</math>에 대하여, 문자열 <math>(MN)</math>은 람다 항이다. 이를 <math>N</math>에 대한 <math>M</math>의 '''적용'''(適用, {{llang|en|application}})이라고 한다.
* 람다 항 <math>M</math> 및 변수 <math>x</math>에 대하여, 문자열 <math>(\lambda x.M)</math>은 람다 항이다. 이를 <math>x</math>에 대한 <math>M</math>의 '''추상화'''(抽象化, {{llang|en|abstraction}})라고 한다.


괄호 사용을 줄이기 위해 단순히 <math>M_1M_2\cdots M_n</math>은 <math>(\cdots((M_1M_2)M_3)\cdots M_n)</math>을 나타내고, <math>\lambda x.M_1\cdots M_n</math>은 <math>(\lambda x.(\cdots((M_1M_2)M_3)\cdots M_n))</math>을, <math>\lambda x_1\cdots x_n.M</math>는 <math>(\lambda x_1.\cdots(\lambda x_{n-1}.(\lambda x_n.M))\cdots)</math>을 나타내는 데 사용할 수 있다. 예를 들어, 변수 <math>x</math>, <math>y</math>, <math>z</math>에 대하여,
* 알파-변환(α-conversion): 속박 변수를 바꿈
:<math>\lambda x.x\lambda xy.xyz</math>
* 베타-축약(β-reduction): 식의 인수에 함수를 적용
* 에타-변환(η-conversion): [[외연성]]을 통해 축약 (겉으로 보이는 행동이 같은 함수는 동일 함수로 간주함)
:<math>(\lambda x.(x(\lambda x.(\lambda y.((xy)z)))))</math>
를 나타낸다.


== 연산 ==
베타-축약을 통해 같은 식으로 변환되면 베타-동치(β-equivalent)라 부른다. 다른 축약도 마찬가지로 각각 알파-동치(α-equivalent), 에타-동치(η-equivalent)로 정의된다. 축약할 수 있는 식(reducible expression)을 줄여서 redex라고 부른다.
=== 자유 변수와 제한 변수 ===
{{참고|자유 변수와 제한 변수}}
람다 항에 등장하는 변수들은 '''자유 변수'''(自由變數, {{llang|en|free variable}})와 '''제한 변수'''(制限變數, {{llang|en|bound variable}})로 분류된다. 람다 항 <math>M</math>과 변수 <math>x</math>에 대하여, 만약 <math>M</math>에 등장하는 모든 <math>x</math>가 <math>M</math> 속 <math>\lambda x.N</math>과 같은 꼴의 부분 람다 항에 등장한다면 <math>x</math>는 제한 변수이며, 만약 적어도 한 <math>x</math>가 <math>\lambda x.N</math>과 같은 꼴의 부분 람다 항에 등장하지 않는다면 <math>x</math>는 자유 변수이다. 즉, 람다 항 <math>M</math>의 자유 변수의 집합 <math>\operatorname{FV}(M)</math>는 <math>M</math>의 구조에 따라 다음과 같이 재귀적으로 정의된다.
* 변수 <math>x</math>에 대하여, <math>\operatorname{FV}(x)=\{x\}</math>
* 상수 <math>a</math>에 대하여, <math>\operatorname{FV}(a)=\varnothing</math>
* 두 람다 항 <math>M</math>, <math>N</math>에 대하여, <math>\operatorname{FV}(MN)=\operatorname{FV}(M)\cup\operatorname{FV}(N)</math>
* 람다 항 <math>M</math> 및 변수 <math>x</math>에 대하여, <math>\operatorname{FV}(\lambda x.M)=\operatorname{FV}(M)\setminus\{x\}</math>
람다 항 <math>M</math>에 등장하는 변수 가운데 자유 변수가 아닌 것들을 <math>M</math>의 제한 변수라고 한다. 자유 변수를 갖지 않는 람다 항을 '''닫힌 람다 항'''(닫힌λ項, {{llang|en|closed lambda term}})이라고 한다.


예를 들어, 변수 <math>x</math>, <math>y</math>, <math>z</math>에 대하여,
=== 알파-변환 ===
:<math>(\lambda xy.xyz)x</math>
의 자유 변수의 집합은 <math>\{x,z\}</math>이며, 제한 변수의 집합은 <math>\{y\}</math>이다.


=== 치환 ===
알파-리네이밍(alpha-renaming)이라고 불리기도 하는 알파-변환은 속박 변수의 이름이 바뀌는 것을 허용한다. 예를 들어, <math>\lambda x.x</math>가 <math>\lambda y.y</math>로 바뀌어도 알파-동치이다. 알파-변환은 일반적으로 동치임을 확인하기 위해 사용된다. 정확한 알파-변환의 규칙은 완전히 사소하지 않다. 첫 번째로 추상화로 알파-변환을 수행할 때, 한 변수는 같은 추상화에 속한 경우만 새롭게 이름 붙일 수 있다. 예를 들어, <math>\lambda x.\lambda x.x</math>의 알파-변환은 <math>\lambda y.\lambda x.x</math>가 될 수 있으나, <math>\lambda y.\lambda x.y</math>은 될 수 없다. 두 번째로 다른 추상화에 의해 변수가 캡쳐되어 있을 경우 알파-변환을 할 수 없다. 예를 들어, <math>\lambda x.\lambda y.x</math>은 <math>\lambda y.\lambda y.y</math>로 알파-변환될 수 없다.
{{참고|치환 실례}}
정적인 스코프를 가지는 프로그래밍 언어에서, 알파-변환은 이름 없는 변수의 이름을 해당 변수를 포함하는 스코프에서 결정하는 [[이름 분석]](name resolution)을 통해 변수의 이름을 결정할 수 있다.
주어진 람다 항에 등장하는 자유 변수를 또 다른 람다 항으로 '''치환'''(置換, {{llang|en|substitution}})하는 연산을 정의할 수 있다. 치환 연산의 정의는 자연스러우며, 다만 원래 람다 항의 의미가 변질되는 경우에는 정의되지 않는다. 구체적으로, 람다 항 <math>M</math>, <math>N</math> 및 변수 <math>x</math>에 대하여, <math>x</math>를 <math>N</math>으로 치환한 <math>M</math>의 '''치환 실례'''(置換實例, {{llang|en|substitution instance}}) <math>M[N/x]</math>는 <math>M</math>의 구조에 따라 다음과 같이 재귀적으로 정의된다.
* 변수 <math>y</math>에 대하여,{{mindent}}<math>y[N/x]=\begin{cases}
N&y=x\\
y&y\ne x
\end{cases}
</math>{{end mindent}}
* 상수 <math>a</math>에 대하여, <math>a[N/x]=a</math>
* 람다 항 <math>M</math>, <math>M'</math>에 대하여, <math>(MM')[N/x]=(M[N/x])(M'[N/x])</math>
* 람다 항 <math>M</math> 및 변수 <math>y</math>에 대하여,{{mindent}}<math>(\lambda y.M)[N/x]=\begin{cases}
\lambda y.M&y=x\\
\lambda y.(M[N/x])&(y\ne x)\land(y\not\in\operatorname{FV}(N)\lor x\not\in\operatorname{FV}(M))\\
\lambda z.(M[z/y][N/x])&(y\ne x)\land(y\in\operatorname{FV}(N)\land x\in\operatorname{FV}(M))\land z=\min(\{\mathsf x_i\}_{i\in I}\setminus\downarrow(\operatorname{FV}(M)\cup\operatorname{FV}(N)))
\end{cases}
</math>{{end mindent}}
여기서 <math>\downarrow</math>는 [[하집합]]이다. (즉, 마지막 조건의 세 번째 경우에서, <math>z</math>는 <math>M</math>과 <math>N</math>의 모든 자유 변수보다 큰 변수 가운데 가장 작은 하나이다.)


예를 들어,
==== 치환 ====
: <math>((\lambda xy.xyz)x)[yw/x]=(\lambda xy.xyz)(yw)</math>
: <math>((\lambda xy.xyz)x)[yw/z]=(\lambda xv.xvyw)x\qquad v=\min(\{\mathsf x_i\}_{i\in I}\setminus\downarrow\{x,y,z,w\})</math>
이다.


=== 알파 동치 ===
<math>E[V := R]</math> 형태로 쓰여지는 치환은 변수 <math>V</math>를 식 <math>R</math>과 함께 <math>E</math>에 대입하는 과정이다. 치환은 다음과 같은 성질을 가진다. x와 y는 변수, M과 N은 λ 형태의 식이다.
'''알파 동치'''(α同値, {{llang|en|alpha equivalence}})는 제한 변수 변경을 통해 주어진 람다 항을 새로운 람다 항으로 변환하는 방법이다. 람다 항 <math>M</math>이 부분 람다 항 <math>\lambda x.P</math>를 가질 경우, 이를 어떤 변수 <math>y</math>에 대하여 <math>\lambda y.P[y/x]</math>로 바꾸면 새로운 람다 항을 얻는다. 이와 같은 과정을 유한 번 거듭하여 람다 항 <math>N</math>를 얻을 경우, 두 람다 항 <math>M</math>, <math>N</math>이 서로 '''알파 동치'''라고 하며, <math>M\equiv_\alpha N</math>라고 표기한다.


예를 들어,
: <code>''x''[''x'' := N] &equiv; N</code>
:<math>\begin{align}(\lambda x.xy)(\lambda y.yx)
: <code>''y''[''x'' := N] &equiv; ''y'' (만약 ''x'' ≠ ''y'' 일 경우,)</code>
&\equiv_\alpha (\lambda z.zy)(\lambda y.yx)\\
: <code>(M<sub>1</sub> M<sub>2</sub>)[''x'' := N] &equiv; (M<sub>1</sub>[''x'' := N]) (M<sub>2</sub>[''x'' := N])</code>
&\equiv_\alpha (\lambda z.zy)(\lambda w.wx)\\
: <code>(λ''x''.M)[''x'' := N] &equiv; λ''x''.M</code>
\end{align}
: <code>(λ''y''.M)[''x'' := N] &equiv; λ''y''.(M[''x'' := N]) (만약 ''x'' ≠ ''y'' 이고, ''y'' ∉ FV(N) 일 경우,)</code>
</math>
이다.


=== 베타 축약 ===
람다 추상화에 치환하기 위해서는 알파-변환이 필요하다. 예를 들어, <math>\lambda x.y [y := x]</math>를 치환했을 경우 <math>\lambda x.x</math>는 정확하지 않다. <math>\lambda z.x</math>로 치환되어야 알파-동치를 이룰 수 있다.
'''베타 축약'''(β縮約, {{llang|en|beta reduction}})은 추상화된 함수의 적용을 변수의 치환으로 바꾸는 것을 통해 람다 항을 변환하는 방법이다. 람다 항 <math>M</math>가 부분 람다 항 <math>(\lambda x.P)Q</math>를 가질 경우, 이를 <math>P[Q/x]</math>로 대신하여 새로운 람다 항 <math>N</math>를 얻을 수 있다. 이 경우 <math>M\vartriangleright_{\beta,1}N</math>이라고 표기한다. 두 람다 항 <math>M</math>, <math>N</math>이 다음 조건을 만족시키면, <math>N</math>이 <math>M</math>의 '''베타 축약'''이라고 하며, <math>M\vartriangleright_\beta N</math>이라고 표기한다.
* 다음 조건을 만족시키는 람다 항의 열 <math>M=M_0,M_1,\dots,M_n=N</math>이 존재한다.
** 임의의 <math>k\in\{0,\dots,n-1\}</math>에 대하여, <math>M_k\equiv_\alpha M_{k+1}</math>이거나 <math>M_k\vartriangleright_{\beta,1}N_{k+1}</math>


두 람다 항 <math>M</math>, <math>N</math>에 대하여, 다음 두 조건이 서로 동치이며, 이를 만족시키는 <math>M</math>, <math>N</math>을 서로 '''베타 동치'''(β同値, {{llang|en|beta equivalence}})라고 하며, <math>M\equiv_\beta N</math>이라고 표기한다.
== 유형 없는 람다 대수 ==
* 다음 조건을 만족시키는 람다 항의 열 <math>M=M_0,M_1,\dots,M_n=N</math>이 존재한다.
** 임의의 <math>k\in\{0,\dots,n-1\}</math>에 대하여, <math>M_k\vartriangleright_\beta M_{k+1}</math>이거나 <math>M_k\vartriangleleft_\beta M_{k+1}</math>이다.
* ([[처치-로서 정리]]) <math>M\vartriangleright_\beta P</math>이며 <math>N\vartriangleright_\beta P</math>인 람다 항 <math>P</math>가 존재한다.


람다 항 <math>N</math>이 <math>(\lambda x.P)Q</math>와 같은 꼴의 부분 람다 항을 가지지 않는다면, <math>N</math>을 '''베타 표준형'''(β標準型, {{llang|en|beta normal form}})이라고 한다. 베타 표준형 <math>N</math>이 람다 항 <math>M</math>의 베타 축약이라면 (즉, <math>M\vartriangleright_\beta N</math>이라면), <math>N</math>을 <math>M</math>의 '''베타 표준형'''이라고 한다. 처치-로서 정리에 따라, 주어진 람다 항의 베타 표준형이 존재할 경우, 이는 (알파 동치를 무시하면) 유일하다.
유형 없는 람다 대수는 이와 같은 고찰을 바탕으로 함수를 다음과 같은 형식으로 다시 표현한다.


== 각주 ==
<math>\lambda</math> ''변수'' <math>.</math> ''수식''
{{각주}}

위에서 살펴본 항등함수 <math>I</math>는 람다 대수로 표현하면 <math>\lambda x.x</math> 가 된다. <!--되고, 제곱의 합을 구하는 함수 <math>s</math>는 <math>\lambda xy.x \times x + y \times y</math> 가 된다.-->

함수를 실제로 계산하는 것은 베타 축약이라는 과정을 통해 이루어진다. 베타 축약은 다음과 같은 규칙을 갖는다.

<math>(\lambda V.E)E'</math>: 수식 <math>E</math>에서 모든 변수 <math>V</math>를 수식 <math>E'</math>으로 치환한다.

예를 들어 입력값 <math>n</math>에 대해 수식 <math>E=n\times 2</math>를 리턴하는 함수 <math>(\lambda n.n \times 2)</math>가 있다고 하자. 이 함수에 입력 <math>E'=7</math>을 적용하는 과정은 <math>(\lambda n.n \times 2)7 \rightarrow 7 \times 2</math>와 같이 수식 내의 모든 <math>n</math>을 7로 치환한 것으로 표현할 수 있다. 이와 같이 치환 등을 통해 수식을 축약하는 것은 베타 축약의 한 예이다.

== 같이 보기 ==
* [[처치-로서 정리]]


== 참고 문헌 ==
== 참고 문헌 ==
* {{인용|first1=Alonzo|last1=Church|author1-link=알론조 처치|first2=J. Barkley|last2=Rosser|author2-link=존 버클리 로서|jstor=1989762|title=Some properties of conversion|journal=Transactions of the American Mathematical Society|volume=39|issue=3|date=May 1936|pages=472–482}}.
* {{인용|first1=Alonzo|last1=Church|author1-link=알론조 처치|first2=J. Barkley|last2=Rosser|author2-link=존 버클리 로서|jstor=1989762|title=Some properties of conversion|journal=Transactions of the American Mathematical Society|volume=39|issue=3|date=May 1936|pages=472–482}}


== 각주 ==
== 외부 링크 ==
* {{웹 인용|url=https://plato.stanford.edu/entries/lambda-calculus/|성1=Alama|이름1=Jesse|성2=Korbmacher|이름2=Johannes|제목=The Lambda Calculus|웹사이트=Stanford Encyclopedia of Philosophy|issn=1095-5054}}
{{각주}}


{{계산 이론}}
{{계산 이론}}

2019년 10월 17일 (목) 04:01 판

람다 대수(λ代數, 영어: lambda calculus) 또는 λ-대수 또는 람다 계산(λ計算) 또는 람다 계산법(λ計算法)은 추상화와 함수 적용 등의 논리 연산을 다루는 형식 체계이다.[1] 람다 대수의 항은 변수와 추상화 및 적용 연산을 통해 구성되며 (비순수 람다 대수에서는 상수 역시 구성에 참여한다), 추상화의 기호로는 그리스 문자 람다(λ)가 사용된다. 람다 대수의 항들에 대하여 알파 동치와 베타 축약 등의 연산을 수행할 수 있다. 알파 동치는 제한 변수를 변경하는 변환으로서 이름 충돌을 방지하기 위해 사용되며, 드 브루인 첨수를 사용할 경우 이는 필요 없다. 베타 축약은 함수 적용을 적절한 치환 연산으로 대신하는 변환이며, 베타 축약에 대한 주어진 항의 표준형이 (존재할 경우) 알파 동치 아래 유일하다는 사실은 처치-로서 정리의 따름정리이다.

1930년대 알론조 처치수학기초론을 연구하는 과정에서 람다 대수의 형식을 제안하였다. 최초의 람다 대수 체계는 논리적인 오류가 있음이 증명되었으나, 처치가 1936년에 그 속에서 계산과 관련된 부분만 따로 빼내어 후에 유형 없는 람다 대수(untyped lambda calculus)라고 불리게 된 체계를 발표하였다. 또한 1940년에는 더 약한 형태이지만 논리적 모순이 없는 단순 유형 람다 대수를 도입하였다.

람다 대수는 튜링 완전성을 만족시키며, 보편 튜링 기계와 동치이다. 람다 대수는 프로그래밍 언어 이론에서 중요한 역할을 하며, 리스프를 비롯한 함수형 프로그래밍 언어의 기반이 된다. 람다 대수는 그 밖에도 논리학, 철학,[2] 언어학,[3][4] 컴퓨터 과학[5] 등의 여러 분야에서 응용된다.

역사

람다 대수는 수학자 알론조 처치에 의해 수학기초론 연구의 일환으로 1930년대 소개됐다.[6][7] 최초의 시스템은 스티븐 클레이니존 버클리 로서클리네-로저 역설을 제창하면서 1935년 논리적 모순을 보이기 위해 도입됐다.[8][9]

그 후인 1936년 처치는 독립적으로 현재에는 유형 없는 람다 대수라고 불리는 계산에 관련한 부분을 출판했다.[10] 1940년, 그는 또한 계산적으로는 떨어지지만 논리적으로 무결한 시스템을 공개했다. 이것이 단순 유형 람다 대수이다.[11]

1960년대에 람다 대수와 프로그래밍 언어의 관계가 명확히 밝혀지기 전까지는 λ-대수는 단지 형식주의 (formalism)일 뿐이었다. 감사하게도 리처드 몬터규와 언어학자들이 λ-대수를 자연어 (natural language)의 의미론에 적용함으로써, λ-대수는 언어학과[12]컴퓨터 과학[13] 양쪽 분야에서 인정받는 위치를 차지했다.

도입

함수의 표현

함수컴퓨터 과학수학의 기초를 이루는 개념이다. 람다 대수는 함수를 단순하게 표현할 수 있도록 하여 '함수의 계산'이라는 개념을 더 깊이 이해할 수 있게 돕는다.

예를 들어 항등 함수 는 하나의 입력 를 받아 다시 를 결과로 내놓는다고 하자. 한편 함수 는 입력 를 받아 두 수의 제곱의 합을 내놓는다고 하자. 이 두 예제로부터 세 가지 유용한 사실을 알 수 있다.

  1. 함수가 반드시 이름을 가질 필요는 없다. 함수 는 이름을 제거하고 와 같은 형태로 쓸 수 있다. 또한 항등 함수 의 형태로 쓸 수 있다.
  2. 함수의 입력 변수의 이름 또한 필요 없다. 는 변수의 이름은 다르지만 같은 항등 함수를 의미한다. 또한 는 같은 함수를 나타낸다.
  3. 두 개 이상의 입력을 받는 함수는 하나의 입력을 받아 또다른 함수를 출력하는 함수로 다시 쓸 수 있다. 예를 들어, 와 같은 형태로 다시 쓸 수 있다. 함수를 이와 같이 변환하는 것을 커링 (currying)이라고 한다. 위의 함수 는 다음과 같이 단일 입력 함수를 두 번 적용하는 것으로 이해할 수 있다.



핵심 개념

추상화: 는 단일 입력 를 받아 의 표현으로 치환하는 익명의 함수를 지칭한다. 예를 들어 는 함수 의 람다 추상화이다. 람다 추상화를 통해 함수를 정의한다는 것은 함수를 정의하기만 하고 함수를 수행(호출)하지는 않는다는 것을 의미한다. 람다 추상화를 통해 변수 는 표현 속박된다.

자유 변수: 자유 변수(free variable)는 람다 추상화를 통해 표현에 묶이지 않은 변수를 말한다. 자유 변수의 집합은 귀납적으로 정의된다.

  • 의 자유 변수는 뿐이다.
  • 의 자유변수는 를 제외하고 에 등장하는 변수들이다.
  • 두 표현 의 결합 의 자유변수의 집합은 의 자유변수의 집합과 의 자유변수의 집합의 합집합이다.

예를 들어, 에는 자유 변수가 없지만, 에는 자유변수가 하나이다.

정의

람다 대수의 언어는 변수, 상수, 람다 기호, 괄호, 온점으로 구성된다. 변수와 상수는 (후술할) 람다 항의 기초 구성원들이며, 람다 항에 등장하는 자유 변수는 (이후 정의할) 치환 연산을 통해 다른 람다 항으로 치환될 수 있다. 람다 기호는 (후술할) 추상화 연산을 나타내는 기호이다. 괄호와 온점은 이론적으로는 불필요하지만, 여러 가지 편의를 위해 사용된다. 구체적으로, 람다 대수의 언어는 다음과 같은 기호들로 구성된다.

  • 정렬 전순서 집합 및 변수들
  • 정렬 전순서 집합 및 상수들 . 만약 일 경우, 이 람다 대수를 순수 람다 대수(純粹λ代數, 영어: pure lambda calculus)라고 한다.
  • 람다 기호
  • 괄호 및 온점

여기서 가 정렬 전순서 집합이어야 하는 것은 치환의 정의에서 변수의 집합의 부분 집합의 최소 원소를 취할 수 있어야 하기 때문이다.

람다 항(λ項, 영어: lambda term)은 변수와 상수들로부터 시작하여 유한 차례 적용 및 추상화를 가하여 얻는, 람다 대수 기호들의 문자열이다. 즉, 이는 다음과 같은 문법을 따른다.

  • 모든 변수와 상수는 람다 항이다.
  • 두 람다 항 , 에 대하여, 문자열 은 람다 항이다. 이를 에 대한 적용(適用, 영어: application)이라고 한다.
  • 람다 항 및 변수 에 대하여, 문자열 은 람다 항이다. 이를 에 대한 추상화(抽象化, 영어: abstraction)라고 한다.

괄호 사용을 줄이기 위해 단순히 을 나타내고, 을, 을 나타내는 데 사용할 수 있다. 예를 들어, 변수 , , 에 대하여,

를 나타낸다.

연산

자유 변수와 제한 변수

람다 항에 등장하는 변수들은 자유 변수(自由變數, 영어: free variable)와 제한 변수(制限變數, 영어: bound variable)로 분류된다. 람다 항 과 변수 에 대하여, 만약 에 등장하는 모든 과 같은 꼴의 부분 람다 항에 등장한다면 는 제한 변수이며, 만약 적어도 한 과 같은 꼴의 부분 람다 항에 등장하지 않는다면 는 자유 변수이다. 즉, 람다 항 의 자유 변수의 집합 의 구조에 따라 다음과 같이 재귀적으로 정의된다.

  • 변수 에 대하여,
  • 상수 에 대하여,
  • 두 람다 항 , 에 대하여,
  • 람다 항 및 변수 에 대하여,

람다 항 에 등장하는 변수 가운데 자유 변수가 아닌 것들을 의 제한 변수라고 한다. 자유 변수를 갖지 않는 람다 항을 닫힌 람다 항(닫힌λ項, 영어: closed lambda term)이라고 한다.

예를 들어, 변수 , , 에 대하여,

의 자유 변수의 집합은 이며, 제한 변수의 집합은 이다.

치환

주어진 람다 항에 등장하는 자유 변수를 또 다른 람다 항으로 치환(置換, 영어: substitution)하는 연산을 정의할 수 있다. 치환 연산의 정의는 자연스러우며, 다만 원래 람다 항의 의미가 변질되는 경우에는 정의되지 않는다. 구체적으로, 람다 항 , 및 변수 에 대하여, 으로 치환한 치환 실례(置換實例, 영어: substitution instance) 의 구조에 따라 다음과 같이 재귀적으로 정의된다.

  • 변수 에 대하여,
    틀:End mindent
  • 상수 에 대하여,
  • 람다 항 , 에 대하여,
  • 람다 항 및 변수 에 대하여,
    틀:End mindent

여기서 하집합이다. (즉, 마지막 조건의 세 번째 경우에서, 의 모든 자유 변수보다 큰 변수 가운데 가장 작은 하나이다.)

예를 들어,

이다.

알파 동치

알파 동치(α同値, 영어: alpha equivalence)는 제한 변수 변경을 통해 주어진 람다 항을 새로운 람다 항으로 변환하는 방법이다. 람다 항 이 부분 람다 항 를 가질 경우, 이를 어떤 변수 에 대하여 로 바꾸면 새로운 람다 항을 얻는다. 이와 같은 과정을 유한 번 거듭하여 람다 항 를 얻을 경우, 두 람다 항 , 이 서로 알파 동치라고 하며, 라고 표기한다.

예를 들어,

이다.

베타 축약

베타 축약(β縮約, 영어: beta reduction)은 추상화된 함수의 적용을 변수의 치환으로 바꾸는 것을 통해 람다 항을 변환하는 방법이다. 람다 항 가 부분 람다 항 를 가질 경우, 이를 로 대신하여 새로운 람다 항 를 얻을 수 있다. 이 경우 이라고 표기한다. 두 람다 항 , 이 다음 조건을 만족시키면, 베타 축약이라고 하며, 이라고 표기한다.

  • 다음 조건을 만족시키는 람다 항의 열 이 존재한다.
    • 임의의 에 대하여, 이거나

두 람다 항 , 에 대하여, 다음 두 조건이 서로 동치이며, 이를 만족시키는 , 을 서로 베타 동치(β同値, 영어: beta equivalence)라고 하며, 이라고 표기한다.

  • 다음 조건을 만족시키는 람다 항의 열 이 존재한다.
    • 임의의 에 대하여, 이거나 이다.
  • (처치-로서 정리) 이며 인 람다 항 가 존재한다.

람다 항 와 같은 꼴의 부분 람다 항을 가지지 않는다면, 베타 표준형(β標準型, 영어: beta normal form)이라고 한다. 베타 표준형 이 람다 항 의 베타 축약이라면 (즉, 이라면), 베타 표준형이라고 한다. 처치-로서 정리에 따라, 주어진 람다 항의 베타 표준형이 존재할 경우, 이는 (알파 동치를 무시하면) 유일하다.

각주

  1. Mazzola, Guerino; Milmeister, Gérard; Weissmann, Jody (2005). 《Comprehensive Mathematics for Computer Scientists》. Universitext (영어) 2. Berlin, Heidelberg: Springer. doi:10.1007/b138337. ISBN 978-3-540-20861-7. LCCN 2004102307. 
  2. Coquand, Thierry, "Type Theory", The Stanford Encyclopedia of Philosophy (Summer 2013 Edition), Edward N. Zalta (ed.).
  3. Moortgat, Michael (1988). 《Categorial Investigations: Logical and Linguistic Aspects of the Lambek Calculus》. Foris Publications. ISBN 9789067653879. 
  4. Bunt, Harry; Muskens, Reinhard, 편집. (2008), 《Computing Meaning》, Springer, ISBN 9781402059575 
  5. Mitchell, John C. (2003), 《Concepts in Programming Languages》, Cambridge University Press, 57쪽, ISBN 9780521780988 
  6. Church, A. (1932). “A set of postulates for the foundation of logic”. 《Annals of Mathematics》. Series 2 33 (2): 346–366. doi:10.2307/1968337. JSTOR 1968337. 
  7. For a full history, see Cardone and Hindley's "History of Lambda-calculus and Combinatory Logic" (2006).
  8. Kleene, S. C.; Rosser, J. B. (July 1935). “The Inconsistency of Certain Formal Logics”. 《The Annals of Mathematics》 36 (3): 630. doi:10.2307/1968646. 
  9. Church, Alonzo (December 1942). “Review of Haskell B. Curry, The Inconsistency of Certain Formal Logics”. 《The Journal of Symbolic Logic》 7 (4): 170–171. doi:10.2307/2268117. JSTOR 2268117. 
  10. Church, A. (1936). “An unsolvable problem of elementary number theory”. 《American Journal of Mathematics》 58 (2): 345–363. doi:10.2307/2371045. JSTOR 2371045. 
  11. Church, A. (1940). “A Formulation of the Simple Theory of Types”. 《Journal of Symbolic Logic》 5 (2): 56–68. doi:10.2307/2266170. JSTOR 2266170. 
  12. Partee, B. B. H.; ter Meulen, A.; Wall, R. E. (1990). 《Mathematical Methods in Linguistics》. Springer. 2016년 12월 29일에 확인함. 
  13. Alama, Jesse "The Lambda Calculus", The Stanford Encyclopedia of Philosophy (Summer 2013 Edition), Edward N. Zalta (ed.).

참고 문헌

외부 링크