람다 미적분학은 추상적이지 않은 것으로 보입니다. 그리고 나는 그것의 요점을 볼 수 없다


18

근본적인 질문 :

무엇 않습니다 람다 계산법은 우리가 일반적으로 중학교 대수에서 배운 기본 기능 특성과 표기법으로 할 수없는 것을 우리를 위해 할?

우선, 람다 미적분학의 맥락에서 초록은 무엇을 의미합니까? 초록이라는 단어에 대한 나의 이해는 개념의 개념적인 요약 인 기계와 분리 된 것입니다.

그러나 람다 함수는 함수 이름을 제거함으로써 특정 수준의 추상화를 방지합니다. 예를 들면 다음과 같습니다.

f(x) = x + 2
h(x, y) = x + 5 y

그러나 이러한 기능의 메커니즘을 정의하지 않아도 구성에 대해 쉽게 이야기 할 수 있습니다. 예를 들면 다음과 같습니다.

1. h(x, y) . f(x) . f(x) . h(x, y) or 
2. h . f . f . h

원한다면 논증을 포함 시키거나 무슨 일이 일어나고 있는지에 대해 개괄적으로 요약 할 수 있습니다. 또한 단일 기능으로 신속하게 줄일 수 있습니다. 작문 2를 보도록하겠습니다. 강조에 따라 쓸 수있는 세부적인 학생 계층을 가질 수 있습니다.

g = h . f . f . h
g(x, y) = h(x, y) . f(x) . f(x) . h(x, y)
g(x, y) = h . f . f . h = x + 10 y + 4

람다 미적분으로 위를 수행하거나 적어도 함수를 정의합시다. 이것이 옳은지는 모르겠지만 첫 번째와 두 번째 표현식은 2 씩 증가한다고 생각합니다.

(λuv.u(u(uv)))(λwyx.y(wyx))x

그리고 5y를 곱합니다.

(λz.y(5z))

추상적 이라기보다는, 이것은 더하기, 곱하기 등의 의미를 갖는 기계의 기계에 들어가는 것 같습니다. 내 생각에 추상화는 저수준이 아니라 고수준을 의미합니다.

또한, 나는 람다 미적분학이 왜 사물인지 알기 위해 고심하고 있습니다. 장점은 무엇입니까

(λuv.u(u(uv)))(λwyx.y(wyx))x

위에

h(x) = x + 5 y

또는 결합 표기법

Hxy.x+5y

심지어 하스켈의 표기법

h x y = x + 5 * y

다시 말하지만, 람다 미적분학은 우리가 f (x) 스타일 함수 속성으로는 할 수없고 많은 사람들이 익숙한 표기법으로 우리를 위해 무엇을합니까?


9
Haskell은 람다 미적분학을 기반으로하기 때문에 Haskell의 사례를 제시하는 것이 재밌습니다. 람다 미적분학은 특별한 표기법이 아닙니다. "모든 것이 함수"인 Turing 머신과 동등한 계산 모델입니다.
유발 Filmus

2
네, 람다 미적분학을 기반으로한다고 들었습니다. 내가 아직 이해하지 못하는 질문은 왜 저에게 이해가 되는가하는 것입니다. . . 초등학교에서 배운 기능의 기본 속성. 그것은이 전체 질문의 요점입니다.
JDG

6
"추상적 인 의미"가 "추상적 인"의 정의와 거의 같지 않습니까? :-)
David Richerby 2014

1
나는 그것이 멸시라고 말하지 않을 것입니다. 이 기능의 처리는 미적분학을 통해 가능합니다. 그러나 나는 중학교라는 표시가 어떻게 해석 될 수 있는지 알 수 있습니다. 조정하겠습니다.
JDG

6
실제로 "중학교 대수 함수 표기법"에 대한 공식적인 정의가 의심 스럽다. 그러한 함수에 대한 정의가 있다면 계산상의 의미가없는 이론적 인 집합 일 것입니다. 람다 미적분학의 요점 중 하나는 그 자체의 용어에 대한 그러한 표기법을 이해하고, 다항식 함수 또는 미적분학과 같은 특정 응용 프로그램에서 추상화 된 것을 감히 말합니다.
Derek Elkins는

답변:


24

람다 미적분이 중요한 이유는 여러 가지가 있습니다.

매우 중요한 이유는 람다 미적분을 통해 계산 함수가 일류 시민이라는 계산 모델을 가질 수 있기 때문입니다.

중학교 대수 언어 로 고차 함수 를 표현할 수는 없습니다 .

람다 식을 예로 들어

λf.λg.λx.f(g(x))

이 간단한 표현은 람다 미적분학 내에서 함수 구성 자체가 함수라는 것을 보여줍니다. 중학교 대수에서는 쉽게 표현할 수 없습니다.

람다 미적분학에서는 함수가 결과로 함수를 반환한다는 것을 쉽게 표현할 수 있습니다.

다음은 작은 예입니다. 표현 (여기서 여기에는 덧셈과 정수 상수가 적용된 적용된 람다 미적분이라고 가정)

(λf.λg.λx.f((g(x)))(λx.x+2)

로 줄 것이다

λg.λx.g(x)+2

람다 미적분학 내에서 함수는 표현식 이며 형식의 정의는 아닙니다 . 이것은 함수의 이름을 지정하고 구문의 표현 범주와 구문의 정의 범주를 구별 할 필요가 없게합니다.f(x)=e

또한, 고차 함수를 표현하는 것이 불가능 해 지거나 (또는 ​​표기 적으로 성가 시게), 타입을 표현식에 할당하는 데 문제가있을 것입니다.

함수 구성에는 다형성 유형이 있습니다

α.β.γ.(βγ)((αβ)γ)

Hindley-Milner 타입 시스템에서.

람다 미적분에 대한 매우 강력한 판매 포인트는 입력 된 람다 미적분 의 개념입니다 . Haskell 및 ML 제품군과 같은 기능 프로그래밍 언어를위한 다양한 유형 시스템은 람다 계산을위한 유형 시스템을 기반으로하며 이러한 유형 시스템은 수학 이론의 형태로 강력한 보장을 제공합니다.

프로그램의 경우 잘 입력하고 전자가 잔류를 줄여 전자 ' 다음 전자 'eeee 도 정형화 될 것이다.

만약 잘 입력 한 다음, 전자는 특정 오류가 발생하지 않습니다.ee

교정 프로그램과 같은 대응은 특히 주목할 만하다. Curry-Howard isomorphism (예 : https://www.rocq.inria.fr/semdoc/Presentations/20150217_PierreMariePedrot.pdf 참조 )은 간단하게 입력 된 람다 미적분학과 직관적 제안 논리 사이에 매우 정확한 대응 관계가 있음을 보여줍니다. 논리 화학식 대응 φ T를 . 증명의 φ T의 종류와 람다 기간에 대응 T , 증명에 절단 제거 수행이 용어에 대응하는 베타 - 환원.TϕTϕTT

중학교 대수학이 람다 미적분학에 대한 좋은 대안이라고 생각하는 사람들은 Curry-Howard isomorphism의 적절한 개념과 함께 고차의 다형성 유형 중학교 대수를 설명하는 것이 좋습니다. 중학교 대수학을 기반으로하는 대화 형 교정 도우미를 개발하여 Coq 및 Isabelle과 같은 람다 미적분학 기반 교정 도우미를 사용하여 공식화 된 많은 정리를 증명할 수 있다면 훨씬 더 좋습니다. 그런 다음 중학교 대수학을 사용하기 시작했고, 다른 많은 사람들도 나와 함께 할 것입니다.


이것은 훌륭한 설명입니다. 람다 미적분학에서 고차원 함수 (구성과 같은)와 타이핑이 더 잘 표현된다는 말을 듣는 것이 도움이됩니다. 나는 당신이 언급 한 많은 것들의 파급 효과와 전통적인 표기법이 부적절한 이유를 보지 못합니다 (예 : 별도의 정의 구문 f (x) = e가 필요하지 않은 것에 대해). 그것은 람다 미적분에 의해 어떤 영역이 개선되는지에 대한 감각을 제공합니다.
JDG

물론 let 형식의 로컬 정의를 소개 할 수 있습니다 그러나 이것들은 이미 λ 미적분의 구문에서 ( λ x . e ) e ' 로 표현 될 수있다. 람다 미적분은 우리가 (중학교 대수학에서!)어떤 변수로 이름을 지정하지 않고숫자 4 를말할 수 있듯이 함수의 이름을 지정하지 않고도 함수를 표현할 수있게합니다. letx=eine(λx.e)e4
한스 tel 텔

5

함수가 젊은이에게 처음 설명 될 때, 함수는 본질적으로 그래프 (플로트) 또는 공식으로 식별됩니다. 이것이 수학에서 형식주의 경향이 출현하기 전에 함수가 역사적으로 이해 된 방식이다. 현재 기능은 첫 해의 수학에서 배운대로, 진짜 함수에서 함수이다 R .RR

람다 미적분학의 함수는 훨씬 일반적입니다. 정확한 정의는 람다 미적분이 입력되었는지 여부에 따라 다릅니다. 순수한 형식화되지 않은 람다 미적분학에서는 모든 것이 함수입니다. 이것은 미적분의 실제 기능보다 훨씬 일반적입니다.

절차 적 언어조차 람다 미적분학의 아이디어를 사용하기도합니다. C의 정렬 함수는 비교 함수를 매개 변수로 사용하여 요소를 비교하는 데 사용합니다. Lambda 미적분학은 훨씬 더 발전했습니다. 함수는 함수를 입력으로 받아 들일뿐만 아니라 출력 할 수도 있습니다.

람다 미적분은 튜링 머신과 동일한 성능의 계산 모델입니다. 그것은 그 자체로 완전한 시스템입니다. 순수 람다 미적분학에는 "5"또는 "+"가 기본 용어로 포함되어 있지 않습니다. "5"와 "+"가 집합 이론의 기본이 아닌 것처럼 미적분학 내부에서 정의 될 수 있습니다. (실제적인 프로그래밍 언어는 효율성을 위해 기본적으로 자연수를 구현합니다.)

람다 미적분학에 감동하지 않은 이유 중 하나는 그 아이디어가 프로그래밍 담론에 너무 많이 퍼져서 더 이상 혁신적으로 보이지 않기 때문이라고 생각합니다.


"나는 당신이 람다 미적분학에 감명받지 않은 이유 중 하나라고 생각한다"테린은 내가 묻는 질문에있다 : 람다 미적분은 우리를 위해 무엇을 하는가? 다시 말해, 람다 미적분학을 사용하지 않으면 어떻게됩니까? 람다 미적분학을 사용할 때 무엇을 얻습니까? 람다 미적분학이 사람들이 처음 생각한 경우 함수가 함수를 만들 수 있다면 어떨까요? 초기 파이썬 프로그램 중에는 나중에 다른 사람에게 의사 결정 작업을 위임하는 것과 같이 나중에 평가 한 기능이 포함 된 텍스트를 만들었습니다. 명백해 보인다?
JDG

이것은 내가 많은 것을 알기 전에였습니다. 방금 코드가 반복해서 입력하는 것이 귀찮고 프로그래밍 자체가 함수를 포함한 기능을 자동으로 생성하는 데 도움이 될 것이라고 생각했습니다.
JDG

2
파이썬은 함수형 프로그래밍을 지원합니다. 최초의 프로그래밍 언어는 그렇지 않았습니다. FORTRAN으로 프로그래밍 한 경우 나중에 평가 한 기능이 포함 된 텍스트가있는 프로그램을 작성하지 않았을 것입니다. 그것을 눈치 채지 못하고 람다 미적분학의 아이디어가 제공하는 기능을 사용했습니다.
유발 Filmus

2
평가LISP 에서 시작되었으며 람다 미적분에 의해 큰 영향을 받았다. FORTRAN, C, COBOL 및 기타 여러 프로그래밍 언어에서는 이와 같은 기능이 불가능합니다.
Yuval Filmus

python은 기능적인 프로그래밍을 지원하지만 eval () 능력이 λCalc에서 영감을 받았는지 확실하지 않습니다. 생각할 λCalc는 확실하지 않습니다. λCalc는 "미란다에게 부서 운영 방법에 대한 최선의 판단을 내리라고 말하겠다"는 말과 같다. 높은 수준의 작업 위임에 대해 생각하기 위해 λCalc가 필요하지 않습니다. λCalc에서 영감을 얻는 것에 대해 이야기하고 싶다면 람다 함수, 이해 등을 가리키는 것이 더
좋습니다

4

x2xx2

λx.x2x2

ff(x)=x2f

프로그래밍 언어에서 람다 식을 사용하면 비슷한 이점이 있습니다. 프로그램의 다른 곳에서 완전히 새로운 기능을 정의하지 않고 필요한 곳에서 기능을 수행 할 수 있습니다.

ddxx2ddxx2


θ:VV

θ(v)(f)=f(v)

많은 사람들이이 이중 평가 표기법이 혼란스럽고 불안정하거나 기능에 대한 점별 정의의 재귀 적 사용을 발견합니다. 람다 추상화 버전

θ=λv.λf.f(v)

그런 문제가 없습니다.


마지막으로, "간단히 입력 된 람다 미적분학"은 기본적으로 "직교도 닫힌 범주"와 같은 추상적 인 넌센스 이론이 있습니다. 따라서 직교 폐쇄 범주에서 계산하려는 경우에는 사용하는 것이 좋습니다. 간단히 람다 미적분을 입력하면됩니다.


나는이 질문으로 돌아가서이 답변이 훌륭하다는 것을 알았습니다. 감사합니다. 일반적으로 여기에 대한 답변은 정말 흥미 롭습니다.
JDG

4

나는이 주제에 대해 전문가가 아니라는 것을 미리 말할 것이지만, 나는 그것을 연구하는 데 약간의 시간을 보냈으며 어떤 주제에서나에게 가장 매혹적인 것들 중 하나는 그 뒤에있는 역사입니다. 람다 미적분학의 역사를 이해하면 그것이 유용한 설명하는 데 도움이됩니다 .

짧은 요약 집합 이론은 세트에 이륙하기 시작하고 수학을 재 구상을 기반으로 한 1900 년대 초반 이후, 일부 수학자는 집합 이론의 정의는 주장을 수 있지만 특정 구조가 존재한다는 것을 그들이 눈치이다 없는 당신에게 말할 방법 그것을 구성하고 계산합니다. 따라서 집합 이론적 정의는 비 구조적 입니다. 발전 할 수있는 방법이 있다면 수학자 궁금 시작 건설 뭔가 증명을 넘어 갈 것 정의 입니다 대신 증명 이 얼마나을 .

에서 위키 백과 :

수학에서 구성 증명은 객체를 생성하는 방법을 만들거나 제공하여 수학적 객체의 존재를 보여주는 증명 방법입니다. 이것은 예를 제공하지 않고 특정 종류의 물체의 존재를 증명하는 비 구조적 증거 (존재 증명 또는 순수한 존재 정리라고도 함)와 대조적입니다.

람다 미적분과 튜링 머신은 계산 가능한 기능을 나타낼 수 있으며 따라서 동등하다는 것을 알 수있었습니다.

이론적으로 모든 수학 함수 또는 개념은 람다 미적분학 형태로 인코딩되어 계산 될 수 있습니다. 이것은 람다 미적분학은 수학에 대해 완전히 별개의 기초가 될 수 있지만 분명히 지루한 일일 수 있음을 의미합니다.

Lambda 미적분학은 코드를 사용하여 코드를 작성하지 않을 것이라는 의미에서 "유용한"것은 아니지만 프로그램 및 동적 효과 를 설명 하는 데 사용되는 denatotional semantics 의 기초를 형성합니다 . 이것은 프로그램 정확성과 의미 적 의미에 대한 토론에서 사용됩니다. 또한 함수형 프로그래밍 언어의 개발에 큰 영향을 미쳤으며, 이는 람다 미적분에서 전체 실행 개념을 이끌어냅니다.

희망이 도움이됩니다.

추가 편집 : 나는 토폴로지, 람다 미적분학 및 물리학의 관계를 보여주는 이 논문 을 방금 지적했다 . 잠깐 동안이 환상적인 문장을 뛰어 넘었습니다.

튜링 머신은 이상적이고 단순화 된 컴퓨터 하드웨어 모델로 볼 수 있지만 람다 미적분학은 단순한 소프트웨어 모델과 비슷 합니다 . ... 시적으로 말하면, 람다 미적분학은 모든 것이 프로그램이고 모든 것이 데이터 인 우주를 설명합니다 : 프로그램은 데이터 입니다.

요점은 람다 미적분학은 이상적인 소프트웨어 계산 모델 이며 어떤 프로그래밍 언어 의 특정 구현 과도 관련이 없다는 것 입니다. 순수한 계산을 모델링 합니다.


역사에 대한 추가 정보 : Stanford Encyclopedia of Philosophy 의 λ-calculus 에 관한 간략한 역사 . 평생 처리 할 수있는 것보다 많은 항목이 있습니다.
데이비드 톤 호퍼

3

Yuval은 논평에서 지적했듯이 Haskell은 기반으로합니다.λ 미적분학을 . 람다 미적분이 매우 중요한 또 다른 이유 는 게으른 평가의 존재를 정당화하는 Church-Rosser Theorem 입니다. (하스켈의 많은 멋진 기능 중 하나입니다)


3

Lambda 미적분학은 프로그래밍 언어로 설계되지 않았습니다. 실제로, 그것은 우리가 프로그래밍 가능한 컴퓨터를 갖기 수십 년 전인 1930 년대에 만들어졌습니다. 오히려 계산 자체를 연구하기위한 공식 모델로 만들어졌습니다. 코드 또는 수학 함수를 얼마나 쉽게 표현하는지에 실망한 경우, 그게 목적이 아니기 때문입니다.


1
"프로그래밍 가능한 컴퓨터를 갖기 전에 수십 년"-틀렸다. 프로그래밍 가능한 컴퓨터는 이전에 존재했지만 (보편적이지 않은 경우) 1930 년대에 최초의 범용 컴퓨터가 만들어졌습니다.
Raphael

-2

람다 미적분학은 익명 (일명 람다) 함수를 만들 수 있도록 존재합니다. 함수 이름을 없애지 않으면 네임 스페이스가 복잡해지고 사용 가능한 함수 이름이 부족할 수 있습니다. 이것은 명백한 이유로 함수 (또는 함수 포인터)를 반환하는 소위 "고차 함수"를 처리 할 때 특히 중요합니다.

기본적으로 람다 함수는 로컬 범위 변수와 같습니다. 람다 함수가없는 함수형 프로그래밍은 로컬 변수가없는 절차 적 프로그래밍, 즉 끔찍한 아이디어와 유사합니다.

"람다 미적분학이 왜 한 가지 일까?"수학자들은 중복성을 좋아합니다. 람다 미적분학은 표기법이 그다지 유용하지 않다는 것을 발견했기 때문에 수학에서 거의 사용되지 않습니다.

"중학교 대수학을 기반으로하는 대화식 교정 보조를 수행 할 수 있다면 Coq 및 Isabelle과 같은 람다 미적분학 기반 교정 보조를 사용하여 공식화 된 많은 이론을 증명할 수 있습니다. 훨씬 더 좋을 것입니다. 중학교 대수를 사용하기 시작하면 다른 많은 사람들도 저와 함께 할 것입니다. " 메타 매스에 대해 들어 보셨습니까? 거기에 관련된 람다 미적분학은 없으며 많은 coq / isabelle 정리를 증명할 수 있습니다.


몇 가지 의견 외에도이 답변은 무엇을 제공합니까?
Raphael

@Raphael 잘못된 정보. 이 답변의 대부분은 이해가되지 않습니다. 이름이 부족하지 않습니다. "Lambda 함수"는 로컬 범위 변수와 동일하지 않습니다. 이건 말도 안 돼요 나는 이것이 참조를 의미한다고 가정 let하지만 let익명 함수로 인코딩 할 수는 있지만 다른 방법으로는 분명히 갈 수 없습니다. 함수형 프로그래밍 에는 "lambda 함수"(예 : Backus ' FP 또는 Sisal)가 필요 하지 않습니다 .
Derek Elkins가

대부분 나는 hans의 답변에 의견을 게시하고 싶었지만 업장이 충분하지 않았습니다. 그래서 나는 그 의견을 본격적인 답변으로 바꾸기로 결정했다
sn
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.