ラムダ計算を入力した関数は計算できません


12

型付きラムダ計算ではなく型なしラムダ計算で計算できる関数の例をいくつか知りたいだけです。

私は初心者なので、背景情報を何度か繰り返していただければ幸いです。

ありがとう。

編集:型付きラムダ計算により、System Fと単純型付きラムダ計算について知るつもりでした。関数とは、チューリング計算可能な関数を意味します。


-calculiには多くのタイピング規律が存在し、要求に対する答えは、念頭に置いているタイピング規律の選択に一部依存します。また、機能の意味にも依存します。違いの1つの例は、System Fなどの型付け分野では正規化プログラムのみを入力でき、型付けされていないλ計算には非正規化用語が含まれていることです。λλ
— マーティンバーガー

System Fと単純型付きラムダ計算について考えていました。機能とは、チューリング計算可能な機能を意味します。
— ティモシーザッカリ

回答:


15

Godelizationの良い例があります:ラムダ計算では、関数でできることはそれを適用することだけです。結果として、型閉じた関数を記述する方法はありません。これは、関数の引数を取り、そのためのゲーデルコードを返します。(N→N)→N

これをヘイティング算術の公理として追加することは、通常「建設的な教会論文」と呼ばれ、非常に反古典的な公理です。つまり、それをHAに追加することは一貫していますが、ペアノ算術には追加しません!(基本的に、すべてのチューリングマシンが停止するかどうかは古典的な事実であり、この事実を目撃できる計算可能な機能はありません。)


私はこれが拡張理論とどのように一致しているか理解していません:fとgを拡張的に等しくしますが、異なる実装と異なるgodelコードを使用します。あなたの関数はfとgに対して同じ数を返しますか?
— コーディ

3
拡張性と一貫性がありません!ただし、HAではおよびは論理的な接続詞であり、関数/レコードではありません。したがって、それらは実現可能である必要がありますが、その実現者は拡張的である必要はありません。Andrej Bauerはこの分野の専門家です。そのため、質問をした場合には必ず良い答えが得られます。∀∃
— ニールクリシュナスワミ

11

最も単純な答えは、型付きラムダ計算が論理(単に型付きラムダ計算->述語論理;システムf->二次論理)に対応し、一貫した論理がそれ自体の一貫性を証明できないという事実によって与えられます。

したがって、型付きラムダ計算に自然数(または自然数の教会エンコード)があるとしましょう。System Fのすべての用語を一意の自然数に割り当てるゲーデル番号付けを行うことができます。次に、関数fがありますf(そのシステムFでよく型付けされた項に対応)は任意の自然数をとる(そのことはよく型付けシステムFタームの正規形に相当する)は、別の自然数にしてのために何かを行いますSystem Fの適切に型付けされた用語に対応しない自然数(たとえば、ゼロを返します)。関数は計算可能であるため、型付けされていないラムダ計算では計算できますが、型付けされたラムダ計算では計算できません(後者は2次論理の一貫性の証明になるため)f 2次論理は、2次論理が矛盾していることを意味します)。

警告1:2次論理に一貫性がない場合、System F ...にfを書き込むことができる可能性があります。f型なしラムダ計算に-あなたが何かを書くことができますが、そうではないかもしれません常に終了します。これは「計算可能」の基準です。f

警告2:「単純型付きラムダ計算」では、「固定小数点演算子または再帰関数を使用した単純型付きラムダ計算」を意味する場合があります。これは多かれ少なかれPCFで、型付けされていないラムダ計算のように、任意の計算可能な関数を計算できます。


10

型指定されていない -calculusは、Yコンビネータの形式で一般的な再帰を持ちます。単純に型付けされたλ - calculusはそうではありません。したがって、一般的な再帰を必要とする関数、たとえばアッカーマン関数は候補です。(各システムで自然数をどの程度正確に表現するかについての詳細は省略していますが、基本的には合理的なアプローチで十分です。)λYλ

もちろん、Yの力に合わせて、単純に型指定された - calculusをいつでも拡張できますが、ゲームのルールを変更することになります。λY


何らかの理由で私は...あなたは、System Fでアッカーマンを行うことができることを私の頭の中でそれを持っていただろう
— ロブ・シモンズ

@Rob、私が理解しているように、Andrejはそうではないとは言いません。
— カベ

1
私は、アッカーマン関数は型付けされていない -calculusでプログラムできると言ったと思います(すべての計算可能な関数ができるからです)が、単純に型付けされたλ -calculusはありません。私は、システムF.については何も言わなかったλλ
— アンドレイ・バウアー

ああ、そうだ、私はただ愚かだった。(質問は、System Fの話とSTLCの話の間ではかなり曖昧だったので、私は強いシステムを取り上げ、単純な質問を忘れてしまった。)
— ロブ・シモンズ

計算のアッカーマン関数はλm です。M (λ F N 。N F (F 1 _))S U C。この学期に作成した型推論器によると、単純な型があります:(((((f → e )→ f → e )→ h )→ (((((f → e )→ f →λλm.m(λfn.nf(f1_)) suc→ h → g )→ g )→ (((b → c )→ a → b )→ (b → c )→ a → c )→ d )→ d、これは恐ろしいが、おそらく正しい。STSの問題はアッカーマンではなく、たとえば、チューリングマシンのシミュレーションです。Yコンビネータがなければ、それはできません。(((((f→e)→f→e)→h)→((((f→e)→f→e)→h) →h→g)→g)→(((b→c)→a→b)→(b→c)→a→c)→d)→dY
— フランシスコモタ

6

単純に型付けされたラムダ計算は、実際には驚くほど弱いです。たとえば、通常の言語認識できません。ただし、STLCが認識できる言語のセットの正確な特性を見つけたことはありません。a∗


5
計算可能なものは、あなたが見ているタイプに依存すると思います。型(pは基本型)で自然を表し、等式をベータ等式とすると、定義可能な関数は拡張多項式(多項式+ if-then-else)です。IIRCのSchwichtenbergはこれを証明しましたが、私は彼の元の論文(ドイツ語)を読んだことがありません。(翻訳された論文名は、「型付きラムダ計算における定義可能な関数」、1976年だと思います。)(p→p)→p→pp
— ニールクリシュナスワミ

2
λ

@Marting:ありがとう!私は今ドイツに住んでいるので、これは私のドイツ語を練習するための素晴らしい追加のインセンティブです。:)
— ニールクリシュナスワミ

4

私が好きな強く正規化された計算の限界の1つのビジョンは、計算可能角度です。コアの単純型付きラムダ計算、System F、または構造の計算など、強く正規化された型付き計算では、すべての項が最終的に終了するという証拠があります。

場合は、この証明は建設的である、あなたは保証計算時間に上限を持つすべての条件を評価するために、固定アルゴリズムを取得します。または、(必ずしも必要ではない)証明を調べて、その証明から上限を抽出することもできます。これらの計算は表現力があるため、巨大になる可能性があります。

この境界は、この固定ラムダ計算に入力できない関数の「自然な」例を提供します。この境界より漸近的に優れているすべての算術関数。

正しく覚えていれば、単純に型付けされたラムダ計算で型付けされた用語は、指数の塔で評価できますO(2^(2^(...(2^n)..)。このようなすべてのタワーよりも速く成長する関数は、この計算では表現できません。システムFは直観主義的な2次論理に対応しているため、計算能力は非常に大きいです。さらに強力な理論の計算可能性の強さをつかむために、通常、計算可能性理論の代わりに集合論とモデル理論(たとえば、どの序数を構築できるか)の観点から推論します。


0

あなたの質問を正しく理解していれば、簡単な例は △=λバツ。バツバツ, which takes a function and applies it to itself. You can define and reduce this function in the untyped lambda calculus (and in particular, you have ΔΔ→β ΔΔ, which is not normalizing), but you can't type Δ, because that would mean finding a type A such that A=A→A.


We should be careful about what we mean by typed λ-calculus. Having a type A s.t. A≡A→A is not strange.
— Kaveh

Yes, you're right, but I thought (maybe I'm wrong) that it was not possible to have such a type in the simply-typed lambda-calculus or System F, which are both strongly normalizing.
— Charles

I'm not sure if this argument holds: we not only need to show that ΔΔ is not typeable, but that there is no typed lambda-term which is equivalent to ΔΔ. The easiest way to do this is by pointing to the fact that typed lambda calculus is strongly normalizing.
— lambda.xy.x

@Kaveh Why is having a type A such that A \ident A \rightarrow A not strange? It sounds absurd to me, what am I overlooking?
— Martijn

You are probably thinking classically about sets and function spaces over them. Think e.g. about finite binary strings and computable functions over them.
— Kaveh
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.