ラムダ計算は純粋に構文ですか?


29

私はラムダ計算について数週間読んでいますが、既存の数学関数と実質的に異なるものはまだ見ていません。それは単なる表記の問題なのか、新しいものがあるのか​​を知りたいですすべての数学関数に適用されるわけではない、ラムダ計算の公理によって作成されたプロパティまたはルール。だから、例えば、私はそれを読んだ:

「匿名関数が存在する可能性があります」:Lambda関数は匿名ではなく、すべてラムダと呼ばれます。名前が重要でない場合、異なる関数に同じ変数を使用することは数学表記で許容されます。たとえば、ガロア接続の2つの関数は両方とも*と呼ばれることがよくあります。

「関数は関数を入力として受け入れることができます:これは新しくなく、通常の関数でこれを行うことができます。

「関数はブラックボックスです」:入力と出力だけが数学関数の有効な説明でもあります...

これは議論や意見の質問のように思えるかもしれませんが、この質問には「正しい」答えがあるはずです。ラムダ計算が単なる数学関数であるか、またはラムダと通常の関数の間に実質的または意味的な違いがあるかどうかを知るために、表記法、構文規則のいずれかを知りたいです。


2
完全な答えを出したいとは思いませんが、関数は関数を入力として受け入れることはできません。f(g(0))は書けますが、f(g、0)は書けません。後者は「機能」と呼ばれ、さまざまなルールが必要です。
コートアンモン-モニカの復職

@CortAmmon関数は関数です。関数は単なるペアのセットです(厳密に言えば、トリプル(D、R、G)です。ここで、Dはドメイン、Rは範囲、Gはグラフ(ペアのセット)、もう1つの小さな問題です。受け入れられた答えで、しかしそれはここにもそこにもありません)。したがって、Dが関数のセットであり、最初の要素がDの関数であるペアを取る場合、関数があります。ウィキペディアを確認してください:「機能はマッピングです[機能] ...」
Neil

すなわち、すべての機能は機能であり、すべての機能が機能ではありません。ただし、機能に適用されるすべてのルールは機能に適用されます
Neil

回答:


63

皮肉なことに、タイトルは重要な意味を持っていますが、「ラムダ計算は単なる表記法である」という意味ではなく、正確ではありません。

ラムダ項は関数はありません1。これらは構文の一部、つまりページ上のシンボルのコレクションです。これらのシンボルのコレクションを操作するためのルールがあり、最も重要なのはベータ削減です。あなたは複数持つことができます明確なラムダ用語に対応し、同じ機能を。2

あなたのポイントに直接対処します。

まず、ラムダは再利用されている名前ではありません。それは非常に紛らわしいだけでなく、(または)も記述しません。これは、λが関数の名前だった場合に行うことで、f x 。で、F X 私たちは置き換えることができ、Fをなどのラムダ項産何かで(それはラムダ項で定義されている場合)λ Y Y X の意味λ Y Y λバツλ バツλfバツfバツfλyyバツλyy関数を宣言できる宣言ではなく、関数を表すことができる式です(名前はλまたはその他のです。いずれにせよ、用語/表記法をオーバーロードする場合、コンテキストを介して曖昧さをなくすことができる方法で(1つの希望)行われますが、これはラムダ用語には当てはまりません。

次のポイントは問題ありませんが、やや無関係です。これは、Team Lambdaの規約とチーム機能がある競争ではなく、勝者は1人だけです。ラムダ用語の主な用途は、特定の種類の関数の研究と理解です。多項式は関数ではありませんが、それらをしばしばだらだらと識別します。多項式を勉強することは、すべての関数が多項式であるべきだと考えることを意味するものではありません。また、勉強する価値があるために多項式が「新しい」何かを「しなければならない」場合もありません。

集合理論関数はブラックボックスではありませんが、完全に入出力関係によって定義されます。(文字通りそれらは入出力関係です。)ラムダ項もブラックボックスではなく、入出力関係によって定義されていません。前に述べたように、同じ入出力関係を生成する別個のラムダ項を持つことができます。これはまた、ラムダ項関数を引き起こすことはできますが、ラムダ項関数になることはできないという事実を強調しています。2

実際、多項式とラムダ項の類似性は非常に近いため、多項式とそれが表す関数の違いを理解できないかもしれないと思うので、少し詳しく説明します。3通常、多項式が導入された場合、通常は実数係数を使用して、特定のタイプの実数関数として扱われます。次に、線形フィードバックシフトレジスタ(LFSR)の理論を検討します。これは、主にF2上の(単変量)多項式の理論ですが、関数 F2F2として考えると、そのような関数は最大4です。ただし、超える無限数の多項式がありますF24これを確認する1つの方法は、これらの多項式をF2F2関数以外のものとして解釈できることです。実際、F2代数はすべて実行します。LFSRの場合、通常、多項式をビットストリームの演算として解釈します。これは、必要に応じて関数2N2Nとして表すことができますが、そのような関数の大部分はLFSRの解釈のイメージにはありません。

これはラムダ用語にも当てはまり、それらの両方を関数以外のものとして解釈できます。また、これらは両方とも、通常は数え切れないほどの関数のセットよりもはるかに扱いやすいオブジェクトです。どちらも任意の関数よりもはるかに計算的です。多項式(少なくとも計算可能に表現可能な係数を使用)とラムダ項を操作するプログラムを作成できます。実際、型付けされていないラムダ項は、計算可能な関数の元のモデルの1つです。このより象徴的/構文的、計算的/計算的観点は、特に型付けされていない人にとっては、通常より強調されますラムダ計算では、ラムダ計算のより意味的な解釈よりもます。タイプラムダ項ははるかに管理しやすいものであり、通常(常にではないが)集合理論関数として簡単に解釈できますが、通常、型付けされていないラムダ計算よりもさらに幅広いクラスのものに解釈することもできます。また、独自の豊富な構文理論と、論理の非常に深いつながりがあります。

1問題が別の方向に進む可能性があります。機能とは何かを誤解しているかもしれません。

DDDDDD、およびセットのカテゴリには、重要な再帰オブジェクトはありません。型付きラムダ用語の場合、話はかなり異なりますが、それでも重要なことです。

3この区別が明確な場合、類推は非常に有益です。

4この問題は、複素数、実数、有理数、整数などの特性0のフィールドでは発生しないため、区別は存在しますが、それほど明確ではありません。


8
これは私が言わなければならない驚くべき反応です。私にとって長い間誤解されていたことを本当にクリアしました。ありがとう!
the0ther

4
これに詳細に対応できればと思います!フォローアップしたいことがたくさんあります。全体として、これは私にとって非常に有用でしたが、明らかに他の少数の人々にとっても同様でした。
ニール

1
ここで問題となる点は1つだけです。それは、勉強する価値があるために多項式が「新しい」何かを「行う」必要がないというあなたの主張です。もちろんそうです!もちろん、フィールドによって「新しい」には異なる意味があります(例えば、純粋な数学者は列ベクトルと行ベクトルが同型であるため区別しませんが、統計学者は区別を計算目的に役立つと見なすことがあります)。新しい形式主義はそれ自体を正当化しなければなりません。
ニール

2
@Neil:特に脚注#2は、ラムダ計算が「新しいことをする」「通常の」機能が「できない」という非常に明確な証拠を提供しています。根拠のないラムダ式のより具体的な例については、固定小数点の組み合わせを参照してください。教会の数字はさらに魅力的な読書、特に前身機能のために作ります。
ケビン

1
関数は何も役に立たないので、ラムダを追加します。ラムダでできることは、ラムダを渡してラムダを返すことだけです。結果のラムダが何をするかをテストする方法はありません。別のラムダを渡すだけで、別のラムダを取得できます。関数として、「ラムダ関数」のセットは、恒等関数のみを含むシングルトンセットとまったく同じように動作します。ラムダを区別できるのは、ラムダの入力と出力を式として考慮することだけです。
フロリアンF

0

変数の概念について考えてください。ベーシックのような古い言語では、ダイナミックアロケーションがなく、各変数に1つの名前が必要でした。(配列があるため完全に正確ではありませんが、アイデアは...)多くの問題では、プログラムで定義する名前の数に制限されることなく、必要な数の変数を割り当てることができる必要があります。

Lambda関数を使用すると、関数名に関する同じ制限を取り除くことができ、プログラムで必要な数の関数を定義し、他の変数と同じ複雑なデータ構造に「保存」できます。これは、従来の名前付き関数でできることではありません。


従来の名前付き関数でこれを実行できないのはなぜですか?私が書くとf(x)=let g(y)=x+y in g、すべての数学者は意味がすぐにわかり、これが理にかなった数学的オブジェクトであることに同意します(おそらくの領域について明確にすることについてのちょっとした混乱までf)。また{f(n) | n ∈ ℕ}、無限に多くの関数が含まれ、特に使用する名前の数が有限であることに制限されないセットを書き留めれば、彼らは完全に満足します。
ダニエルワグナー

問題は、ラムダ計算です。関連している間、それはプログラミング言語のラムダ関数と同じものではありません
アンディデント
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.