タグ付けされた質問 「lambda-calculus」

λ-calculusは、関数定義、関数適用、および再帰の正式なシステムであり、関数型プログラミングの数学的基礎を形成します。

1
フラットな式のための最も単純な完全なコンビネーター基底ペア
Chris Okasakiの論文「Flattening Combinators:Surviving withoutカッコなし」では、アプリケーション演算子や括弧を必要とせずに、チューリング完全式をエンコードするための基礎として2つのコンビネータで十分かつ必要であることを示しています。 アプリケーションオペレーターでプレフィックスコーディングのSおよびKコンビネーターを介した「バイナリラムダ計算と組み合わせロジック」のJohn Trumpの組み合わせロジックのエンコーディングと比較して、フラットな式に2つのコンビネーターを必要とするだけでコード密度が最適化されます。結果のGoedel番号付けは、すべての整数を有効な整形式の閉じた式にマップします。ほとんどの計算と最小の記述長に関連するesolangとは異なり、その正規表現は通常、構文的に無効なプログラムの記述を許可します。 ただし、岡崎のエンコーディングは、ラムダ計算の用語からビット文字列への一方向のマッピングで最も役立つことを意味していました。実際の置換命令として使用する場合、この削減で使用される2つのコンビネーターは比較的複雑であるため、必ずしも逆ではありません。 アプリケーションオペレーターを必要としない最も単純で完全なコンビネーターの基本ペアは何ですか?

1
組み合わせ論理用語は常に大きいですか?
そのため、ラムダ微積分項をSKコンビネーターを使用して組み合わせロジックに変換するアルゴリズムがあります。サイズが爆発するものを生成します。この爆発的な規模についてもっと知りたいのですが。しかし、私はより良いアルゴリズムを考えることができないようです。関数型言語が実際にコンビネーターにコンパイルされることを聞いたので、より良いアルゴリズムが存在する必要があるようです。私はそのトピックに関するデビッドターナーの論文を調べました、そして彼は基本的にいくつかの最適化を適用するように言って、それらが「かなりの改善」を引き起こすと言います。 「かなりの改善」とは、サイズが多項式の増加のみに低下することを意味しますか?ラムダ項を多項式(またはそれ以下)のみの増加で組み合わせ論理に変換する既知の方法はありますか?そのようなアルゴリズムが存在する場合、それは実用的ですか?

1
通常順と適用順の評価の違い
私が学んでいる言語はSchemeであり、これを行う演習に取り組んでいます: (define (p) (p) ) (define (test x y) (if (= x 0) 0 y)) 次に、質問は式(test 0(p))を評価し、通常の下で観察されるであろう動作(順序および適用順序の評価)についてコメントを求めます。 これらは私の考えです: 通常の順序では、プログラムは次に進む前に部分式を評価します。 したがって、次のように( test 0 (p) )なります。 (test 0 p) ( if (= x 0) 0 p)) 出力を返す 0 適用順序の唯一の違いは、プログラムが次のように実行されることです。 ( test 0 (p) ) になる: (test 0 (p)) ( if (= x …

1
システムF(および他の純粋な型システム)での再帰型エンコーディング
私は純粋な型システム、特に構造の計算を研究しており、フィリップワドラーによれば、再帰型のエンコーディングを使用してそれを可能にしようとしています。例として、私はMorte Haskellライブラリを使用して、Cardelliによって指定されたスコット数値をエンコードしています。 エンコーディングの概要は次のとおりです:(正の)再帰型が与えられた場合... μ X。F バツμバツ。F バツ\mu X.F\ X ...システムFのタイプとしてエンコードする場合があります... L fi x X 。F バツ = Λ X 。(F バツ→ X)→ XLf私バツ バツ。F バツ = Λバツ。(F バツ→バツ)→バツLfix\ X.F\ X\ =\ \Lambda X.(F\ X\rightarrow X)\rightarrow X ...または、純粋な型システムの表記法(明示的な)...FFF L f私のx = Π F :∗ → ∗ 。Π X:∗ 。(F バツ→ X)→ …

3
SKIコンビネーター計算(またはラムダ計算)の目的は何ですか?その使用の実際の例は何ですか?
私はそれが何であるかを理解していますが、それがアルゴリズムまたは何かのためにどのように使用されるかはわかりません。多分私は何かが足りない。私はそれをよりよく理解できるように、それがどのように使用されるかの例を私に与えるために誰かを必要としています。

1
ラムダ計算:評価コンテキストが「機能する」方法
純粋なラムダ計算には、帰納的に定義された一連の用語(文法)があります: e::=x∣λx.e∣e1e2e::=x∣λx.e∣e1e2e::= x \mid \lambda x . e \mid e_1 e_2 値による呼び出し評価戦略では、ベータ削減の推論規則とアプリケーションの評価方法に関する規則(合同規則)があります。私は、実際に言語の構文を変更することなく、評価コンテキストが合同ルールをどのように置き換えることができるかを理解しようとしています。評価コンテキストがなければ、次のようになります。 e2→e ′ 2e1→e′1e1e2→e′1e2e1→e1′e1e2→e1′e2 \frac{e_1 \rightarrow e_1'}{e_1e_2 \rightarrow e_1'e_2} および e2→e′2ve2→ve′2.e2→e2′ve2→ve2′. \frac{e_2 \rightarrow e_2'}{ve_2 \rightarrow ve_2'}. 式がある場合、これはという形式で、したがってE 1 、E 2 → E ' 1、E 2(λ F 。λ X 。F X )((λ Y 。Y )λ Z 。Z )λt=(λf.λx.fx)((λy.y)λz.z)λw.wt=(λf.λx.fx)((λy.y)λz.z)λw.wt = (\lambda …

1
単純に型付けされた組み合わせロジック?
型付けされていないラムダ計算と単純に型付けされたラムダ計算(たとえば、ベンジャミンピアースの本のタイプとプログラミング言語で説明されている)があるので、単純に型付けされた組み合わせロジックはありますか? たとえば、コンビネータS、K、およびIの自然な型は、 S : (a -> b -> c) -> (a -> b) -> a -> c K : a -> b -> a I : a -> a ここで、a、b、およびcは、タイプTのいくつかのセットにわたるタイプ変数です。ここで、おそらく単一の基本タイプBoolから始めることができます。タイプTのセットは、3つのパターンを使用して形成できるタイプと一緒にBoolになります。 (a -> b -> c) -> (a -> b) -> a -> c a -> b -> a a -> …

3
特定の計算可能な関数を型付きの用語で表すことができない理由に関する簡単な説明?
「Lambda Calculusの紹介」という論文を読んで、34ページ(私の斜体)で、あまり理解していない段落に出くわしました。 2つのパラダイムのそれぞれの中に、型付きラムダ計算のいくつかのバージョンがあります。多くの重要なシステム、特に教会のシステムでは、タイプを持つ用語が常に正規形を持っている場合がそうです。停止の問題が解決できないことから、これはすべての計算可能な関数が型付きの用語で表現できるわけではないことを意味します。Barendregt(1990)、定理4.2.15を参照してください。表現できない計算可能な関数を見つけるためには、頭の上に立つ必要があるため、これは見かけほど悪くはありません。たとえば、2では、2次の型付きラムダ計算では、たまたま合計である部分的な再帰関数しか表現できませんが、数学的分析(2次の算術)ではそうではありません。 私はこれらの概念のほとんどに精通していますが、部分的な再帰関数の概念や、証明可能な完全な関数の概念には精通していません。しかし、これは私が学習に興味があるものではありません。 特定の計算可能な関数を型付きの用語で表すことができない理由、およびそのような関数が「頭の上に立って」しか見つからない理由についての簡単な説明を探しています。

1
ラムダ計算の評価
私はこれが簡単な質問であることを知っていますが、誰かが私にその方法を示すことができます (λ Y。λ X 。λ yの。y)(λ X 。λ Y。y)(λy。λバツ。λy。y)(λバツ。λy。y)(\lambda y. \lambda x. \lambda y.y) (\lambda x. \lambda y. y) に減少する λ X 。λ yの。yλバツ。λy。y\lambda x. \lambda y. y。

2
System Tでの高次プリミティブ再帰のためのアッカーマン階層
ゲーデルは、彼のSystem Tプリミティブ再帰でより高い型を定義しています。私はGirardからのメモを見つけました。彼は、単純に型指定されたラムダ計算に加えてSystem Tの実装を説明しています。50ページで、リカーサーでより多くの型を使用すると、システムでより表現力が高まると述べています。 これがどのように発生するのか正確にはわかりません。より高次のプリミティブ再帰を伴う一種のアッカーマン階層を考案することは可能ですか?つまり、各関数はSystem Tで表現可能ですが対角線は表現できない、より速く成長する関数の階層ですか?私はそう思うが、その構造は私には明らかではないようであり、どのようにそれを構築するか、または文献へのポインタを受け取るかについて興味がある。 私は何か具体的なものを求めています。Tにない関数の存在を証明する一般的な対角引数は知っていますが、実際に「型階層にステップアップ」する方法を確認したいと思います。

2
依存型付けのメタ変数を解決するための制約を生成しますか?
依存型では、ミラーパターンの統一を使用して、高次の統一の決定可能なフラグメントを解決します。これにより、依存型付けされた言語にメタ変数または暗黙の引数を含めることができます。 パターンフラグメントに統一問題がある場合、解決策が存在する場合にそれを見つける方法を説明する多くの論文があります。例としては、(Gundry-McBride)、(Abel-Pientka)、オリジナルのMillerペーパーなどがあります。 私が不思議に思っているのは、メタ変数(または暗黙の引数)を含む依存型プログラムが与えられた場合、統一ソルバーに渡される問題をどのように生成するのでしょうか。

2
チューリングマシンでタイピングは何に対応しますか?
私の質問が理にかなっているといいのですが、型付けされていない微積分は、チューリングマシンと同等の能力であるという前提から始めて、チューリングマシンで微積分に型を追加することは何に対応しますか?静的でも動的でも、タイピングに似たオートマトンのようなものはありますか?λλ\lambda λλ\lambda

2
ラムダ計算の単純化
以下は、削減するのが難しいと感じているラムダ式です。つまり、この問題の対処方法を理解できません。 (λ M 、N 。(λ S Z。m s (n s z)))(λ S Z。s z)(λ S Z。s z)(λメートルん。(λsz。メートルs(んsz)))(λsz。sz)(λsz。sz)(\lambda mn.(\lambda sz.ms(nsz)))(\lambda sz.sz)(\lambda sz.sz) 私はこれで迷っています。 誰かが私を正しい方向に導くことができればそれはとても感謝されます



弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.