タグ付けされた質問 「type-systems」

3
型クラスとオブジェクトインターフェイス
型クラスを理解しているとは思わない。私はどこかで、型が実装する「インターフェース」(OOから)として型クラスを考えることは間違っており、誤解を招くものだと読みました。問題は、それらを異なるものとみなし、それがどのように間違っているかを見るのに問題があることです。 たとえば、(Haskell構文の)型クラスがある場合 class Functor f where fmap :: (a -> b) -> f a -> f b これはインターフェース[1](Java構文)とどのように違いますか interface Functor<A> { <B> Functor<B> fmap(Function<B, A> fn) } interface Function<Return, Argument> { Return apply(Argument arg); } 考えられる違いの1つは、特定の呼び出しで使用される型クラスの実装が指定されず、環境から決定されることです。たとえば、この型の実装で使用可能なモジュールを調べます。これは、OO言語で対処できる実装アーティファクトのようです。コンパイラー(またはランタイム)が、タイプに必要なインターフェースを公開するラッパー/エクステンダー/モンキーパッチャーをスキャンできるように。 私は何が欠けていますか? [1] オブジェクト指向言語であるため、f a引数が削除されていることに注意してくださいfmap。オブジェクトでこのメソッドを呼び出すことになります。このインターフェイスは、f a引数が修正されていることを前提としています。

2
Lambda Cubeの他のポイントからどのように構築の計算を取得しますか?
CoCは、ラムダキューブの3つの次元すべての集大成と言われています。これは私にはまったく明らかではありません。私は個々の次元を理解していると思いますし、任意の2つの組み合わせは比較的単純な結合をもたらすようです(おそらく何かが足りないのでしょうか?)。しかし、CoCを見ると、3つすべての組み合わせのように見えるのではなく、まったく異なるもののように見えます。タイプ、プロップ、スモール/ラージタイプはどの次元からのものですか?依存製品はどこに消えましたか?そして、なぜ型とプログラムではなく命題と証明に焦点が当てられているのですか?型とプログラムに焦点を合わせた同等のものはありますか? 編集:明確でない場合、CoCがどのようにLambda Cubeディメンションの単純な結合と同等であるかの説明を求めています。そして、私が研究できるどこかで3つすべての実際の結合がありますか(つまり、証明と命題ではなくプログラムとタイプの面で)?これは、質問に対するコメントに対するものであり、現在の回答に対するものではありません。

2
ホモトピー型理論のどの部分がAgdaやCoqで不可能なのですか?
私たちが見たときの本、ホモトピー型理論 -私たちは、次のトピックを参照してください。 Homotopy type theory 2.1 Types are higher groupoids 2.2 Functions are functors 2.3 Type families are fibrations 2.4 Homotopies and equivalences 2.5 The higher groupoid structure of type formers 2.6 Cartesian product types 2.7 S-types 2.8 The unit type 2.9 P-types and the function extensionality axiom 2.10 Universes …

4
単項パラメトリックと二項パラメトリック
最近、Bernardy and Moulinの2012 LICS論文(https://dl.acm.org/citation.cfm?id=2359499)を見て、パラメトリック性に非常に興味を持ちました。このホワイトペーパーでは、依存型を持つ純粋な型システムの単項パラメトリック性を内部化し、構築を任意のアリティに拡張する方法のヒントを示します。 以前に定義されたバイナリパラメトリック性を見てきました。私の質問は、2項パラメトリック性を使用して証明できるが、単項パラメトリック性では証明できない興味深い定理の例は何ですか?また、2次ではなく3次パラメトリックで証明可能な定理の例を見るのも興味深いでしょう(ただし、nパラメトリックがn> = 2に等しいという証拠を見てきましたが、http://www.sato.kuisを参照してください).kyoto-u.ac.jp /〜takeuti / art / par-tlca.ps.gz)


1
型クラスの数学(カテゴリ)記述
関数型言語は、そのオブジェクトが型であり、それらの間の射影関数であるカテゴリとして見ることができます。 型モデルはこのモデルにどのように適合しますか? ほとんどの型クラスが持っている制約を満たしているが、Haskellでは表現されていない実装のみを検討すべきだと思います。たとえば、Functorfor fmap id ≡ idおよびの実装のみを考慮する必要がありfmap f . fmap g ≡ fmap (f . g)ます。 または、型クラスに他の理論的な基礎はありますか(たとえば、型付きラムダ計算に基づいています)?

1
PTS / CoCの教会でエンコードされたタイプに依存するタイプ
私は、Barendregtのラムダキューブの純粋な型システム、特に最も強力なものである構築の計算を実験しています。このシステムにはソート*とがありBOXます。記録のために、以下では、古典的なラムダ計算に近いMorteツールhttps://github.com/Gabriel439/Haskell-Morte-Libraryの具体的な構文を使用しています。 ある種の教会のようなエンコーディング(別名、代数的データ型のBoehm-Berarducci同型)によって帰納型をエミュレートできると思います。簡単な例としてBool = ∀(t : *) -> t -> t -> t、コンストラクタTrue = λ(t : *) -> λ(x : t) -> λ(y : t) -> xとでtypeを使用しますFalse = λ(t : *) -> λ(x : t) -> λ(y : t) -> y。 用語レベル関数Bool -> Tの型は、実際には同一性である関数によってProduct T T、古典的なProduct = λ(A : *) -> …

2
依存型のコンパイラはインタープリターよりもはるかに難しいですか?
このチュートリアルのように、依存型の実装について何かを学びましたが、それらのほとんどはインタープリターの実装です。私の質問は、型チェックのために依存型の引数を実際に評価できるため、依存型のコンパイラを実装するのはコンパイラよりもはるかに難しいようです。 そう 私の素朴な印象は正しいですか? それが正しい場合、依存型をサポートする静的にチェックされた言語の実装に関する例/リソースはありますか?

3
単純集合論に基づく型システム
私が理解しているように、コンピューターサイエンスのデータ型は、ラッセルのパラドックスなどの理由で集合論に基づいていませんが、実際のプログラミング言語のように、「自分自身を含まない集合」のような複雑なデータ型を表現することはできません実際には、型はそのメンバーの無限のセットであり、インスタンスのメンバーシップは、この型/セットに固有の機能の数によって定義されると言います(特定のプロパティ、メソッドの存在)?いいえの場合、反例は何でしょうか?

2
厳密な陽性の背後にある直感?
帰納的なデータ型の厳密な陽性が強力な正規化を保証する理由の背後にある直感を誰かが私に与えることができるかどうか疑問に思っています。 明確にするために、私は否定的な出来事を持つことが発散にどのようにつながるか、すなわち次のように定義することによってわかります: data X where Intro : (X->X) -> X 発散関数を書くことができます。 しかし、私は疑問に思っています。厳密にポジティブな帰納型が発散を許容しないことをどのように証明できるでしょうか?つまり、(論理関係などを使用して)強い正規化の証明を構築できる帰納法はありますか?そして、そのような証拠は否定的な出来事のためにどこで壊れますか?帰納型の言語の強力な正規化を示す優れたリファレンスはありますか?

1
基本的なアフィンロジックで「並べ替え」を入力できますか?
次のλ項、ここでは通常の形式: sort = (λabc.(a(λdefg.(f(d(λhij.(j(λkl.(k(λmn.(mhi))l)) (h(λkl.l)i)))(λhi.(i(λjk.(bd(jhk)))(bd(h(λjk.(j (λlm.m)k))c)))))e))(λde.e)(λde.(d(λfg.g)e))c)) 教会でエンコードされたリストのソートアルゴリズムを実装します。つまり、次の結果です。 sort (λ c n . (c 3 (c 1 (c 2 n)))) β→ (λ c n . (c 1 (c 2 (c 3 n)))) 同様に、 sort_below = λabcd.a(λef.f(λghi.g(λj.h(λkl.kj(ikl)))(hi))e(λgh.h)) (λe.d)(λe.b(λf.e(f(λghi.hg)(λgh.cfh)))) また、上記と同じリストのソートを実装します。ただし、考慮される数の制限がある追加の引数を指定する必要があります。 sort_below 4 [5,1,3,2,4] → [1,2,3] これらの用語が基本的なアフィンロジックで入力可能かどうかを判断しようとしています。公開されているEAL型チェッカーを知らないので、これは予想よりも難しい作業であることがわかります。sort基本的なアフィンロジックのタイプはありますか?


1
ホモトピー型理論とゲーデルの不完全性定理
クルト・ゲーデルの不完全性定理 『算術演算を行うことのできる全ての固有の限界が、ほとんどの些細な公理的システム』を確立。 ホモトピー型理論は、数学の代替基盤、より高い帰納型と一価の公理に基づく一価の基盤を提供します。格好いいブックはなど、タイプの家族はFi回線brationsあり、機能はファンクタあり、種類が高いgroupoidsであることを説明して Jeremy AvigadとJohn HarrisonによるCACM の最近の記事「正式に検証された数学」では、正式に検証された数学と自動定理証明に関してHoTTについて説明しています。 ゲーデルの不完全性定理はHoTTに適用されますか? そして、もしそうなら、 ホモトピー型理論はゲーデルの不完全性定理によって(正式に検証された数学の文脈内で)損なわれていますか?


1
Haskellの型クラスの可能な実装とは何ですか?それらの(欠点)は何ですか?
私の知る限り、型クラスの制約を持つHas​​kell関数は、特定の各型クラスの必要な実装を持つ辞書を受け取る追加の引数を持つ関数に内部的にコンパイルされます。 型クラスをコンパイルする方法は他にありますか? もしそうなら、彼らの(不)利点は何ですか? そして、どのコンパイラがそれらを使用しますか?

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