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

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


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

2
量子ラムダ計算
古典的に、計算について考える一般的な方法は3つあります。チューリングマシン、回路、およびラムダ計算(ほとんどの機能ビューのすべてをキャッチとして使用します)。3つすべては、さまざまなタイプの問題について考えるための実り多い方法であり、このため、さまざまな分野でさまざまな定式化が使用されています。 ただし、量子コンピューティングを扱うときは、回路モデルについてしか考えません。もともと、QCは量子チューリングマシンの観点から定義されていましたが、私が理解している限り、この定義は(両方とも慎重に定式化された場合の量子回路に相当しますが)あまり実りがありませんでした。第3の定式化(ラムダ計算または同様の機能設定に関して)私は完全に不慣れです。したがって、私の質問: 量子ラムダ計算(または他の機能的パラダイム)の有用な定義は何ですか? QIPのどのサブフィールドが、回路モデルの代わりにこの定式化を使用することでより深い洞察を得ますか? ノート 私は、セルオートマトン、RAMモデルなど、他の多くの一般的な形式を無視していることを認識しています。これらを除外するのは、これらのモデルに関して古典的に考える経験がなく、量子的だからです。 また、測定ベース、トポロジカル、断熱など、量子環境には一般的な選択肢があることも認識しています。私は古典的な対応物に精通していないので、それらについて議論しません。


2
ラムダ計算は純粋に構文ですか?
私はラムダ計算について数週間読んでいますが、既存の数学関数と実質的に異なるものはまだ見ていません。それは単なる表記の問題なのか、新しいものがあるのか​​を知りたいですすべての数学関数に適用されるわけではない、ラムダ計算の公理によって作成されたプロパティまたはルール。だから、例えば、私はそれを読んだ: 「匿名関数が存在する可能性があります」:Lambda関数は匿名ではなく、すべてラムダと呼ばれます。名前が重要でない場合、異なる関数に同じ変数を使用することは数学表記で許容されます。たとえば、ガロア接続の2つの関数は両方とも*と呼ばれることがよくあります。 「関数は関数を入力として受け入れることができます」:これは新しくなく、通常の関数でこれを行うことができます。 「関数はブラックボックスです」:入力と出力だけが数学関数の有効な説明でもあります... これは議論や意見の質問のように思えるかもしれませんが、この質問には「正しい」答えがあるはずです。ラムダ計算が単なる数学関数であるか、またはラムダと通常の関数の間に実質的または意味的な違いがあるかどうかを知るために、表記法、構文規則のいずれかを知りたいです。

2
ユニオン型を持つラムダ項の特性評価
多くの教科書は、ラムダ計算の交差タイプをカバーしています。交差の入力規則は、次のように定義できます(サブタイプ付きの単純に入力されたラムダ計算の上)。 Γ⊢M:T1Γ⊢M:T2Γ⊢M:T1∧T2(∧I)Γ⊢M:⊤(⊤I)Γ⊢M:T1Γ⊢M:T2Γ⊢M:T1∧T2(∧I)Γ⊢M:⊤(⊤I) \dfrac{\Gamma \vdash M : T_1 \quad \Gamma \vdash M : T_2} {\Gamma \vdash M : T_1 \wedge T_2} (\wedge I) \qquad\qquad \dfrac{} {\Gamma \vdash M : \top} (\top I) 交差タイプには、正規化に関して興味深い特性があります。 ラムダ項は、強く正規化する場合に限り、ルールを使用せずに入力できます。⊤I⊤I\top I ラムダ用語は含まないタイプ認めそれが正規形を有しているときに限ります。⊤⊤\top 交差点を追加する代わりに、ユニオンを追加するとどうなりますか? Γ⊢M:T1Γ⊢M:T1∨T2(∨I1)Γ⊢M:T2Γ⊢M:T1∨T2(∨I2)Γ⊢M:T1Γ⊢M:T1∨T2(∨I1)Γ⊢M:T2Γ⊢M:T1∨T2(∨I2) \dfrac{\Gamma \vdash M : T_1} {\Gamma \vdash M : T_1 \vee T_2} (\vee …

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

5
lambda-反射を伴う計算
私は、リフレクションに関する推論、つまり実行中のプログラムのイントロスペクションと操作をサポートする簡単な計算を探しています。 型なしの -calculus拡張機能があり、これを使用して -termsを構文的に操作し、後で評価できる形式に変換できますか?λλλ\lambdaλλ\lambda 微積分には2つの主な追加用語があると思います。 r e f l e c t v reflect v\mathtt{reflect}\ v:を取り、構文操作に修正可能な表現を生成します。vvvvvvv e v a l v eval v\mathtt{eval}\ v:用語の構文表現を取り、それを評価します。 リフレクションをサポートするには、用語の構文表現が必要です。次のようになります。 (L A M R (e ))R (e )eλx.eλx.e\lambda x.e用語として表現される、 の反射バージョンであり、、(LAM R(e))(LAM R(e))(\mathsf{LAM}\ R(e))R(e)R(e)R(e)eee (A P P R (e )R (e ′))e e′e e′e\ e'用語として表現される、および(APP R(e) …

5
関数型言語のチューリングが完全なのはなぜですか?
主題に関する私の限られた理解はおそらく間違っていますが、これは私がこれまでのところ理解していることです: 関数型プログラミングは、Alonzo Churchが策定したLambda Calculusに基づいています。 命令型プログラミングは、教会の学生であるアランチューリングによって作成されたチューリングマシンモデルに基づいています。 ラムダ計算は、チューリングマシンと同じくらい強力で 能力があります。つまり、計算能力は同等です。 関数型プログラミングがチューリングマシンではなくLambda Calculusに基づいている場合、なぜそれらの一部(またはすべて)がチューリング完全であると記述され、ラムダ完全などではないのですか?「チューリング完全性」という用語は、チューリングマシンにとって特別な意味がありますか、それとも単なる言葉ですか。 最後に、命令型言語がチューリングマシンに基づいており、コンピューターが基本的に無限メモリのないチューリングマシンである場合、現代のPCで機能するプログラミング言語よりもパフォーマンスが高いことを意味しますか? その場合、ラムダ計算機と同等のものは何でしょうか? これは3つの別個の質問のように見えますが、それらはすべて密接に関連しており、それぞれが最初の有効な質問である前の質問に依存しています。

5
関数型プログラミング以外のラムダ計算?
この質問は、コンピューターサイエンススタック交換で回答できるため、理論的なコンピューターサイエンススタック交換から移行されました。 7年前に移行され ました。 私は大学生です。現在、ラムダ計算を勉強しています。ただし、これがなぜ私にとって役立つのかを正確に理解するのはまだ困難です。関数型プログラミングをたくさん行うと便利かもしれませんが、関数型プログラミングを学ぶのにそれは本当に必要ではないと思います、どう思いますか? 第二に、コンピューターサイエンスの領域内ではあるが関数型プログラミング言語以外でのLambda Calculusの使用はありますか?

2
ベータ等価とは何ですか?
この質問は、コンピューターサイエンススタック交換で回答できるため、理論的なコンピューターサイエンススタック交換から移行されました。 7年前に移行され ました。 私が現在ラムダ計算で読んでいるスクリプトでは、ベータ等価は次のように定義されています。 -equivalence含まれている最小の等価である。≡ β → βββ\beta≡β≡β\equiv_\beta→β→β\rightarrow_\beta それが何を意味するのか分かりません。誰かがそれをより簡単な言葉で説明できますか?たぶん例を挙げて? チャーチ・ラッサーの定理から続く補題のためにそれが必要です M Nの場合、M LおよびN \ twoheadrightarrow_ \ beta LのLがあります。≡β≡β\equiv_\beta↠β↠β\twoheadrightarrow_\beta↠β↠β\twoheadrightarrow_\beta


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

4
ラムダ計算で関数が匿名であることが重要なのはなぜですか?
私は、「関数型プログラミングの冒険」というタイトルのジムウェイリッヒによる講義を見ていました。この講義では、高次関数の不動点を本質的に見つけるYコンビネータの概念を紹介します。 彼が述べているように、動機の1つは、ラムダ計算を使用して再帰関数を表現できるようにすることです。これにより、チャーチの理論(ラムダ計算を使用して効果的に計算できるもの)が維持されます。 問題は、ラムダ計算が名前付き関数を許可しないため、関数がそれ自体を単純に呼び出すことができないことです。 n (x 、y)= x + yn(x,y)=x+yn(x, y) = x + y 名前 ' 'を付けることはできません。匿名で定義する必要があります。nnn (x 、y)→ x + y(x,y)→x+y(x, y) \rightarrow x + y ラムダ計算に名前のない関数が重要なのはなぜですか?名前付き関数がある場合、どの原則に違反しますか?それとも、私はジムのビデオを誤解しただけですか?

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