람다 미적분학은 계산의 직관적 개념을 정확히 어떻게 포착합니까?


12

-calculus 가 무엇인지, 왜, 어떻게 사용되는지에 대해 머리를 감싸려고 했지만 "왜 작동합니까?"를 이해하지 못했습니다.λ

"직관적으로"나는 Turing Machines (TM)의 계산 모델을 얻는다. 그러나이 -abstraction은 나를 혼란스럽게합니다.λ

TM이 존재하지 않는다고 가정합시다. 그러면 계산법이라는 개념을 포착하는 -calculus의 능력에 대해 어떻게 "직관적으로"확신 할 수 있을까요? 모든 기능과 그 기능에 대한 많은 기능을 갖는 것이 계산 성을 의미하는 것은 무엇입니까? 내가 여기서 무엇을 놓치고 있습니까? 나는 Alonzo Church의 논문을 읽었지만 여전히 혼란스럽고 더 똑같은 이해를 찾고 있습니다.λ


시스템과 문법을 다시 쓰는 것과 같은 문제가 있습니까? 람다 미적분학에서 기본 연산은 매우 간단합니다. 함수 추상화, 대체에 의한 함수 적용 및 계산은 베타 정규화입니다. 다시 말해서, 나는 당신의 문제가 합리적인 계산 모델이라는 것을 알지 못합니다.
Kaveh

2
나는 람다 미적분 정의 함수가 계산 가능하다는 것을 의심하지 않았습니다. 역사적으로 문제는 이것이 직관적으로 계산 가능한 유일한 기능인지 여부였습니다. 이것은 요청한 것과 완전히 다른 문제입니다.
Kaveh

1
내가 도움이 발견 한 것은 레이몬드 M Smullyan의 책 "으로 모의 앵무새"(좋은 읽기를하고있다) 마법의 숲에서 새들의 기능을 대체했다
dspyz

1
Smullyans 책은 조합 논리에 관한 것입니다
Trismegistos

답변:


21

당신은 좋은 회사에 있습니다. Kurt Gödel은 -calculus (및 자신의 일반적인 재귀 함수 이론)가 직관적이지 않거나, 무슨 일이 일어나고 있는지 충분히 설명 할 수 없다는 이유로 계산 가능성에 대한 만족스러운 개념이 아니라고 비판했다 . 반대로, 그는 Turing의 계산 능력에 대한 분석과 그에 따른 기계의 개념이 완전히 설득력이 있음을 발견했습니다. 따라서 걱정하지 마십시오.λ

반면, 계산 모델이 어떻게 작동하는지에 대한 아이디어를 얻으려면 일부 프로그램을 작성하는 것이 가장 좋습니다. 그러나 -calculus 에서 수행 할 필요는 없지만 재미는 있지만 (firewalking과 같은 방식으로). Haskell과 같은 -calculus 의 현대 자손을 사용할 수 있습니다 .λλλ


4
소방서가 당신이 말하는 것처럼 재미 있다면, 나는 그것을 시도 해야 합니다.
Radu GRIGore

안드레이, 이것들에 대한 언급이 있습니까? Godel은 Chruch의 모델을 모든 교환 가능한 함수 를 캡처 하는 것으로 받아들이지 않았지만, 그가 모델을 그보다 훨씬 더 비판 한 곳을 본 기억이 없습니다. 교회의 람다 미적분학 모델에 대한 그의 비판은 내가 아는 한 자신의 Godel-Herbrand 일반 재귀 함수에 대한 그의 비판과 동등했습니다.
Kaveh

3
나는 당신이 K. Godel을 원한다고 생각합니다 : "결정 불가능한 결과들에 관한 어떤 말", Solomon Feferman, John Dawson & Stephen Kleene (eds.), Kurt Gödel : Collected Works Vol. ii. 옥스포드 대학 출판부. 305--306 (1972). books.google.si/…
Andrej Bauer

6

당신은 그것에 프로그램! 교회 인코딩을 살펴보십시오 . 모든 산술을 얼마나 많이 수행 할 수 있는지 볼 수 있으며, 이것이 매우 강력하다는 것을 확신시켜 줄 것입니다. 그러나 목록에 대한 작업을보고 싶습니다. 가장 중요한 작업을 수행하는 함수와 관련하여 대부분의 데이터 구조를 정의 할 수 있습니다.

예를 들어, 목록의 인코딩은 그 위에 접히는 접기 기능입니다. 이것은 교회의 인코딩이 아니라 Percie의 유형과 프로그래밍 언어에서 얻은 것입니다. 교회의 쌍 인코딩은 우리에게 재귀를 제공하지 않습니다. 우리는 일종의 재귀 조합기로 다시 추가해야합니다.

따라서리스트에는 두 가지 인수, 즉 접기를 수행하는 함수와 어떤 시점에서 접기에 연결하는 초기 값이 필요합니다.

cons x xs = lam f. lam a. f x (xs f a)
nil       = lam f. lam a. a

이제 add 함수가 주어지면 합계를 정의 할 수 있습니다 (위의 교회 인코딩 참조)

sum xs = xs add 0

더 많은 일을하고지도 기능을 정의 할 수 있습니다

consApply f x xs = cons (f x) xs
map f xs = xs (consApply f) nil

여전히 계산이 진행되고 있다고 확신하지 못하고 계산을 수행 할 수 있는지 확인 하려면 고정 소수점 조합기를 확인하십시오 . 때로는 생각하기가 다소 어려워서 직관적이라고 부를 수는 없지만 일부 인수로 수동으로 평가하면 무슨 일이 일어나고 있는지 알 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.