タグ付けされた質問 「combinatory-logic」

アプリケーションを介して定義された論理システムおよびコンビネーターの項書き換えについての質問。これらのシステムは、多くの場合、ラムダ計算と密接な関係があります。

2
Yコンビネータは、「ラムダ計算の不整合」をどのように例示しますか?
Fixed Point Combinatorsの Wikipediaページには、かなり神秘的なテキストが書かれています Yコンビネータは、ラムダ計算が矛盾する原因の例です。したがって、それは疑いをもって考慮されるべきです。ただし、数学ロジックでのみ定義されている場合は、Yコンビネータを考慮するのが安全です。 ある種のスパイ小説を始めましたか?計算は「一貫性がなく」、「疑いを考慮して」すべきだという声明は、世界で何を意味するのでしょうか。λλ\lambda

4
固定小数点コンビネーター(Yコンビネーター)の明確で直感的な派生?
(型なし)ラムダ計算()の固定小数点コンビネータFIX(別名Yコンビネータ)は次のように定義されます:λλ\lambda FIX≜λf.(λx.f (λy.x x y)) (λx.f (λy.x x y))≜λf.(λx.f (λy.x x y)) (λx.f (λy.x x y))\triangleq \lambda f.(\lambda x. f~(\lambda y. x~x~y))~(\lambda x. f~(\lambda y. x~x~y)) 私はその目的を理解しており、アプリケーションの実行を完全にトレースできます。最初の原理からFIXを導き出す方法を理解したいです。 ここに私がそれを自分で導き出そうとしたときに得られる限りです: FIXは関数です:FIX ≜λ…≜λ…\triangleq \lambda_\ldots FIXは、別の関数fffを使用して再帰的にします。FIX ≜λf.…≜λf.…\triangleq \lambda f._\ldots 関数fの最初の引数は、関数fffの「名前」であり、再帰的アプリケーションが意図されている場合に使用されます。したがって、fの最初の引数の出現はすべてfff関数で置き換えられる必要があり、この関数はfの残りの引数を期待する必要がありますfff(fffが1つの引数を取ると仮定しましょう):FIX ≜λf.…f (λy.…y)≜λf.…f (λy.…y)\triangleq \lambda f._\ldots f~(\lambda y. _\ldots y) これは、推論の「一歩を踏み出す」方法がわからない場所です。小さな楕円は、FIXがどこに欠けているかを示します(ただし、それを「実際の」FIXと比較することによってしか知ることができません)。 私は既にタイプとプログラミング言語を読んでいますが、それは直接派生しようとせず、代わりに派生物についてリトルスキーマーを読者に紹介しています。私もそれを読みましたが、その「派生」はあまり役に立ちませんでした。さらに、直接的な派生ではなく、非常に具体的な例の使用と、\ lambdaに適切な再帰関数を記述するためのアドホックな試みλλ\lambdaです。

1
型付きのSKI計算はありますか?
私たちのほとんどは、組み合わせ論理とラムダ計算の間の対応を知っています。しかし、単純に型付けされたラムダ計算に対応する「型付きコンビネーター」に相当するものを見たことはありません(おそらく十分に深く見ていないかもしれません)。そのようなものは存在しますか?それに関する情報はどこにありますか?

2
コンビネータ計算の基底セット
SおよびKコンビネータは、他のすべてのコンビネータをそれらの観点から表現できるという意味で、コンビネータ計算の基底セットを形成することはよく知られています。同じ特性を持つカレーのB、C、K、Wベースもあります。そのようなベースは無数にあるに違いありませんが、他のベースは知りません。 Iotaコンビネーターや、Fokkerによって構築/レビューされた他のさまざまなコンビネーターなど、単一のコンビネーターベースが多数あることを認識しています。ただし、これらは「不適切な」コンビネータです。つまり、純粋な抽象化ではなく、他のコンビネータに関して表現されます。1 この質問の目的のために、私は適切なコンビネータで構成される基底セットにのみ興味があります。 他の可能な基底系の研究もありますか?理想は、さまざまな組み合わせが体系的に研究される、他のさまざまな計算モデルに関する Wolframの研究に沿ったものです。特に、次の事柄の簡単な例が知られているかどうかに興味があります。 Iコンビネーターを含む最小基底セット。(私は「最小」を使用して、メンバーを削除すると、それが基礎になるのをやめるので、SKIの基礎は考慮されません。) Yコンビネーターまたはコンビネーター(別名mockingbird)を含む最小基底セットωω\omega S、K、およびB、C、K、W以外の組み合わせロジックの他の可能なベースに関するその他の情報は、本当に役立ちます。 より広い点として、私は純粋に機械的なシステムとしての組み合わせ計算の研究に興味があります。つまり、特定のセマンティックな解釈を与える必要のないラベル付きノードを持つ二分木の変換ルールのセットとして。このアプローチを取るリソースへのポインタは大歓迎です。(Mockingbirdをモックするには、このアプローチを使用しますが、プレゼンテーションは不完全です。一方、BarendregtのLambda Calculusはセマンティクスと非常に結びついているため、興味のある純粋に機械的な側面を抽出することは困難です。) 図1は、正確には:適切なコンビネータフォームの式で計算ラムダに、のみを有する、などを自由変数として使用します。抽象化は含まれません。たとえば、は適切なコンビですが、はそうではありません。ラムダ項に適用されるが含まれているためです。(λ 。X1バツ2… P(x1、x2、… )))(λ。バツ1バツ2…P(バツ1、バツ2、…))(\lambda.x_1x_2\dots P(x_1,x_2,\dots))P(x1、x2、… )P(バツ1、バツ2、…)P(x_1,x_2,\dots)バツ1バツ1x_1バツ2バツ2x_2(λ X 、Yz。x (zz))(λバツyz。バツ(zz))(\lambda x y z. x(z z))(λ X 。X (λ Y。y))(λバツ。バツ(λy。y))(\lambda x. x(\lambda y.y) )バツバツx

2
Yコンビネータは、カレー-ハワード通信と矛盾しますか?
Yコンビネータのタイプはです。Curry-Howard Correspondenceでは、型(a → a )→ aが存在するため、真の定理に対応しなければなりません。ただし、a → aは常にtrueであるため、Yコンビネータの型は定理aに対応するように見えますが、これは常にtrueとは限りません。どうすればいいの?(a→a)→a(a→a)→a(a \rightarrow a) \rightarrow a(a→a)→a(a→a)→a(a \rightarrow a) \rightarrow aa→aa→aa \rightarrow aaaa

1
コンビネータ計算式で計算できる関数は何ですか?
コンビネーター式(SKベースで言う)は、コンビネーター計算式をコンビネーター計算式にマッピングする関数と考えることができます。つまり、式は関数として考えることができます。ここで、はSK基底の構文的に有効なすべての組み合わせ式のセットです。このマッピングは、入力を式に適用し、通常の形式に縮小して出力を取得することにより実行されます。X :L → L LバツXXバツ:L → LX:L→LX:L \to LLLL SK基底はチューリング完全であるため、からまでの計算可能な関数を実装するSK式が存在すると単純に考えるかもしれません。ただし、削減の結果は常に通常の形式になるため、これは明らかに当てはまりません。これは、通常の形式ではない出力を式が持つ方法がないことを意味します。L LバツXXLLLLLL その代わり、SK計算式はをマッピングするものと考えることができます。ここで、は通常の形式のSK式のセットです。計算可能なマップには、このマップを実装するSK式がありますか?または、この方法でコンビネータ計算式によって計算できる関数のセットにさらに制限がありますか?L ′ L ′ f :L ′ → L ′ XL′L′L'L′L′L'L′L′L'f:L′→ L′f:L′→L′f:L'\to L'バツバツX

2
SK2微積分は完全な基礎ですか?K2は反転Kコンビネーターですか?
具体的には、私は新しい定義されている場合K2K2K_2として K2= λ X 。(λ Y。y)K2=λx.(λy.y)K_2 = \lambda x. (\lambda y. y) の代わりに K= λ X 。(λ Y。x )K=λx.(λy.x)K = \lambda x. (\lambda y. x) だろう{ S、K2、私}{S,K2,I}\{S, K_2,I\} -calculus競合ベースであること? 私の推測は「いいえ」ですSSS、私II、およびK2K2K_2コンビネーターから通常のKコンビネーターを構築することができないように思えるだけですが、従うアルゴリズムがなく、優れているわけでもありません。これらのコンビネータから物事を作ることに関する直感。 あなたが定義できるように思える K2= K私K2=KIK_2 = K I 定期的に{ S、K、(私)}{S,K,(I)}\{S, K, (I)\} -calculus、私は実際の導出を取得することから逆方向に動作しませんでしたKKKの面でK2K2K_2、残りを。 機能的に完全ではなかったことを証明する私の試みは、使用するコンビネーターに関係なく、行き止まり(以前に見た機能)に到達したことを示すために、これらのコンビネーターから達成可能なすべての機能を徹底的に構築することを本質的に試みました。これは必ずしも機能的に不完全なコンビネーターのセットに当てはまるわけではないことを認識しています(たとえば、KKKコンビネーター自体が適用された場合、それ自体が行き止まりになることはありません)。私はいつでもSSSコンビネーターを使用して、私が最終的に行き止まりであると思ったものをこっそり抜け出すことができたので、このアプローチの実現可能性についてはもはや確信が持てません。 StackOverflowでこの質問をしましたが、ここに投稿するように勧められました。私はその投稿についていくつかのコメントを受け取りましたが、それらを正しく理解したかどうかはわかりません。 おまけ:完全な根拠ではない場合でも、結果の言語はチューリング完全ですか?

2
ラムダ計算の組み合わせ解釈
Peter Selingerによれば、ラムダ計算は代数的です(PDF)。この記事の早い段階で彼は言う: ラムダ計算の組み合わせ解釈は、ルールを満たさないため不完全であることが知られています。解釈では、は意味しません(Barendregt、1984)。ξξξλ X 。M = λ X 。NM=NM=NM = Nλx.M=λx.Nλx.M=λx.N\lambda x.M = \lambda x.N 質問: ここでどのような同等性を意味しますか? この同等性の定義を前提として、その意味の反例は何ですか?

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

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

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

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 -> …

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