タグ付けされた質問 「haskell」

2
System Fが計算できないのはどの関数ですか?
でチューリング完全性について、このWikipediaの記事には、と述べています: 型付けされていないラムダ計算はチューリング完全ですが、システムFを含む多くの型付けされたラムダ計算はそうで​​はありません。型付きシステムの価値は、より多くのエラーを検出しながら、最も典型的なコンピュータープログラムを表す能力に基づいています。 システムFで計算できない合計計算可能関数の例は何ですか? さらに、hindley-milnerは次のとおりです。 System Fの制限 以下の事実のため: System FのCurryスタイルのバリアント、つまり明示的なタイピングアノテーションのないタイプでは、タイプチェックは決定できません。 これは、ヒンドレー・ミルナー型システムの基礎となるラムダ計算が完全にチューリングされていないことを意味していますか? これが本当なら、haskellは明らかに完全なチューリングであり、その基礎はラムダ計算とhindley-milner型システムであることがわかっているので、λ計算に存在しない機能はhaskellチューリングを完了するために追加されますか?

5
純粋な関数型プログラミング言語用の注釈付きの正式な検証システムはありますか?
ACSL(Ansi C仕様言語)は、特別なコメントが付けられたCコードの仕様であり、Cコードを正式に検証できます。 私はまだ調べていませんが、ACSL検証で使用される正式な方法はHoare Logicに似ていると思います。ただし、Haskellなどの純粋な関数型言語の場合、フォーマル検証にどのようなフォーマリズムが使用されるか想像できません。 ACSLに似たものを作った人はいますか?そうでない場合、関数型言語の仕様注釈付きスタイルのフォーマル検証に関する研究はありますか? 私は、多くの言語(Agda、イドリスなど)がサポートする依存型付けがあることを知っていますが、Haskellでは、いくつかの(判読できない?)型の奇妙なことをせずに、依存型付けは困難です。それを念頭に置いて、HaskellはAgdaやIdrisよりもはるかに優れたライブラリをサポートしているので、機能的な形式検証のためのこのようなシステムが役立つと思いますが、これについて研究が行われたかどうかはわかりません。

1
関数型プログラミング言語にガベージコレクションが必要なのはなぜですか?
ghcがHaskellを組み合わせロジックなどの連結プログラミング言語に翻訳し、単純にすべてにスタック割り当てを使用するのを妨げているのは何ですか?ウィキペディアによると、ラムダ計算から組み合わせロジックへの翻訳は簡単であり、また、連結プログラミング言語はメモリ割り当てのためにスタックのみに依存することができます。この翻訳を実行して、Haskellやocamlなどの言語のガベージコレクションを削除することは可能ですか?これを行うには欠点がありますか? 編集:ここに移動/programming/39440412/why-do-functional-programming-languages-require-garbage-collection

4
関数のイータ等価性はHaskellのseq操作と互換性がありますか?
補題:我々はそれを持っているETA-同等と仮定すると(\x -> ⊥) = ⊥ :: A -> B。 証明:⊥ = (\x -> ⊥ x)イータ等価、および(\x -> ⊥ x) = (\x -> ⊥)ラムダの下での還元。 Haskell 2010レポートのセクション6.2では、seq2つの式で関数を指定しています。 seq :: a-> b-> b seq⊥b =⊥ seq ab = b、a≠ifの場合 その後、「seqを使用してそれらを区別できるため、notは\ x-> beと同じではありません」と主張します。 私の質問は、それは本当にの定義の結果seqですか? 暗黙の引数は、seq計算できない場合seq (\x -> ⊥) b = ⊥です。しかし、私はそのようseqなものが計算できないことを証明することができませんでした。私にはそのようなa seqは単調で連続的であるように思われ、それは計算可能という領域にそれを置きます。 seqなどを実装するアルゴリズムは、starting で始まるドメインを列挙することxで、どこを検索しようとすることで機能する場合f x …

2
Alternative、MonadPlus(LeftCatch)とMonadPlus(LeftDistributive)の関係は何ですか?
フォローアップモナドプラスではなく、代替であるモナドの例は何ですか?: がモナドであると仮定します。関係はbetweem何ですかmがあることオルタナティブ、MonadPlusCatchとMonadPlusDistr?mmmmmm6つの可能性のあるペアのそれぞれについて、一方が他方を暗示しているという証拠、またはそれが暗示していない反例のいずれかを持ちたいと思います。 (私は使用しています 左キャッチ規則を満たすMonadPlusを区別するMonadPlusCatch: mplus (return a) b = return a 左分配規則を満足させるMonadPlusを区別するMonadPlusDistr: mplus a b >>= k = mplus (a >>= k) (b >>= k) HaskellWikiのMonadPlusを参照してください。) 私の現在の知識と直感は次のとおりです。 MonadPlusDist オルタナティブ - おそらく真 - それは簡単なようで、私は私が証明のスケッチ持っていると信じて、私はそれをチェックしますし、それが正しいなら、私はそれを投稿します AndrewCはこの部分を答えました。→→\rightarrow →→\rightarrow Maybe →→\rightarrow MaybeT (Either e)MaybeT m' ((pure x) <|> g) <*> a = -- LeftCatch …

1
厳密な完全部分注文の2デカルトの閉じたカテゴリ(Hask)
プログラミング言語が合計、積、非終了を一緒に持つことができないことはよく知られているようです。 Q1。これは本当ですか?以下(または私が挙げた上記のリンク)は部分的な議論です。 ただし、どのカテゴリが関連するカテゴリであるかをある程度正確に説明した後でも、Hinzeの付属物を使用したジェネリックプログラミングでは、この問題は無視されます。特に、Haskellが厳密な連続部分注文のカテゴリによってモデル化され、合計と積を持っていることについて、彼は(おそらく予約なしで)話します。しかし、Haskellには合計がないことを知っています(右?)。(論文の一部は代わりにS e tを使用していますが、これは非終了を許可していません)。SCpoSCpo\mathbf{SCpo}SetSet\mathbf{Set} Q2 では、何が欠けていますか?4つのオプションが表示されます。 人々はしばしば、Haskellについて議論するとき、意図的に非終了を無視します。おそらく、この論文もそれをしている。しかし、なぜCPOに言及するのでしょうか。 私が議論する障壁は巧妙な方法で回避することができます。具体的には、紙モデルは、非厳密Haskellの関数の厳密な機能によってF :A ⊥ → B、他の理由。f:A→Bf:A→Bf : A \to Bf:A⊥→Bf:A⊥→Bf : A_{\bot} \to B この論文ではその制限について触れていますが、見逃しています。私はこの言及を探すためにいくらかの努力を費やしましたが、何も見つけることができませんでした。 これは実際の誤りであり、紙が主張Eitherするものはそうであるにもかかわらず、誰もがHaskellを確かに主張し続けているので、確かに(他の人々が同意するように)カテゴリカルな合計に欠けています。代わりに、帰納型と共帰型のすべての言語ですべてがうまく機能します。 バックグラウンド A≅A×1≅A×0≅0A≅A×1≅A×0≅0A \cong A \times 1 \cong A \times 0 \cong 0AAA これは、たとえば、オブジェクトがゼロの先のとがったセットのカテゴリは、2デカルト閉ではあり得ないことを意味します。 ⊥⊥\botωω\omega⊥⊥\botCPO⊥CPO⊥\mathbf{CPO}_{\bot}CPOCPO\mathbf{CPO} ⊥⊥\bot

2
カテゴリーごとのモナド変換子の説明
プログラミングにおけるカテゴリカルな概念に関するほとんどのリソースはモナドを説明していますが、モナド変換子のカテゴリカルな説明を見たことがありません。 モナド変換子をカテゴリー理論の観点からどのように説明できますか? 特に、次のことに関心があります。 モナド変換子とそれに対応する基本モナドの関係。 それらと新しいモナドに変換するモナドとの関係。 モナド変換スタック。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.