タグ付けされた質問 「dependent-types」

型理論と型システムの重複する特徴。

2
依存して型付けされたエリミネーターを導出する方法は?
依存型プログラミングでは、データを分解して再帰を実行する主な方法が2つあります。 依存パターンマッチング:関数定義は複数の句として指定されます。統一により、すべての省略されたケースが不可能であることが保証され、外部ソルバーが再帰の根拠を確実にします。 エリミネーター:各帰納的データ型は、帰納原理として、および型値を分解する再帰関数として機能する、関連する定数があります。これらはより冗長ですが、合計であり(すべてのケースはカバーされ)、構造によって終了するという利点があります。DDDEDEDE_DDDDEDEDE_D エリミネーターが基本的に数学的帰納であるなどの一般的なデータ型のエリミネーターや、エリミネーターが基本的にフォールドであるを見てきました。NatNatNatListListList 私は依存パターンマッチングに関するいくつかの論文を読んでおり、その多くはデータ型を定義できる型理論に言及しており、エリミネーターは理論によって提供されます。たとえば、依存パターンマッチングの除去では、UTTがエリミネーターに基づいている方法と、公理存在下でパターンマッチングを除去に変換する方法について説明しています。私の理解では、データ型が定義されると、理論はエリミネーターを提供します。KKK 私が見つけていない(または、少なくとも見た場合に認識されていない)ことは、エリミネーター(タイプとセマンティクスの両方)をどのようにして導き出すことができるかについての良い説明です。 誰かが、データ型の定義からエリミネーターを取得する方法を説明する参照を私に指摘できますか?


1
Coqにlet表現がコア言語で含まれているのはなぜですか
Coqには、コア言語のlet式が含まれています。let式を次のようなアプリケーションに変換できます。タイプ チェック時にlet x : t = v in b ~> (\(x:t). b) v 値vを使用できないため、これが常に機能するとは限りませんb。ただし、これは、フォームのアプリケーションのタイプチェックを特別なケーシングで簡単に修正できます(\(x:t). b) v。これにより、タイプチェック中に特殊なケースを犠牲にしてlet式を削除できます。Coqインクルードにlet式がまだ含まれているのはなぜですか?それらには他の利点がありますか(特別なケースを必要としない以外に)?

2
型システムでのソート操作の証明
プログラミング言語の型システムがどれほど有益であるかを知りたい。たとえば、依存して型付けされたプログラミング言語でVectorは、ベクトルのサイズを型シグネチャに組み込んだクラスを作成できることを知っています。それは事実上の例のようなものです。appendこれらのシグネチャを使用して関数を記述し、コンパイラが結果のリストのサイズが入力リストの合計になることを証明することもできます。 たとえば、ソートアルゴリズムの型シグネチャをエンコードして、コンパイラが結果のリストが入力リストの順列であることを保証する方法はありますか?可能であれば、これをどのように行うことができますか?


1
Martin-Löf依存型理論のどの断片がJavaのジェネリック型を使用して表現できますか?
私は最近、数年前にJavaでさまざまな数学的理論を実装しようとしていた 多く の 問題が、Javaの型付けシステムがすべてのMartin-Löf依存型理論をモデル化するほど強力ではないという事実に帰着したことに気づきました。 Java 5およびジェネリックの前は、クラスおよびインターフェースを介して型理論を実行することしかできませんでした。これにより、製品や関数の型を使用して、地上の型int、doubleなどから任意の型を構築できますchar。List統一された方法ではありませんが、s などの再帰型を構築することもできます。 ジェネリックを使用すると、もう少し多くを行うことができます。これでList<T>、関数として 定義できるタイプ→ タイプタイプ→タイプ \DeclareMathOperator{\Type}{Type}\Type\to\Type ようになり、より高次の型が得られます。 話はこれで終わりではありません。ジェネリックトリックを使用して、いくつかの依存製品タイプをモデル化できます。たとえば 、次の構文を使用して、という形式のタイプを定義でき ΠT:タイプf(T)ΠT:タイプf(T) \prod_{T\colon\Type}f(T) ます。 public interface f<T extends f<T>> { // We can now refer to T as much as we like // inside the class. T has type f<T>. } 例として、タイプ (つまり、指定された単位要素とに対する2項演算を持つセットです。Javaジェネリックを使用して、このタイプをモデル化できます。TTΠT:タイプT× (T→ T→ T)ΠT:タイプT×(T→T→T) \prod_{T\colon\Type}T\times …

2
ドメイン理論と多態性
ドメイン理論は、単純型が存在する場合の計算能力の驚くべき理論を提供します。しかし、パラメトリックなポリモーフィズムが追加されると、ドメイン理論が単純な型に対する計算を説明するのと同じくらいうまくいくことを説明する素晴らしい理論はありません。確かに、System-Fのセット理論モデルが存在しないため、System-Fにそのようなものが存在するとは思いません。予測があり、ユニバース階層があるSystem-Fの制限はどうですか?これは研究されましたか?それに適用される素晴らしいドメイン理論はありますか?依存型についてはどうですか?領域理論をどうにかして弱いωω\omega -groupoids と混合して何かを達成することができますか?

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


1
coqは独自のメタセオリーを表現できますか?
私は言語のメタセオリーとタイプシステムについて学習しており、coqを使用して私の研究を形式化しています。私がやりたいことの1つは、依存型を含む型システムを調べることです。これは非常に複雑で、coqに依存できることは非常に貴重です。 この型システムの機能(およびその他のより単純な機能)は、調査したシステムの表現力をcoqのシステムに近づけるため、ブートストラップの問題に遭遇して、後で明らかになる可能性があることを心配しています。たぶんここに行く前に、ここの誰かが私の恐れに対処できます。 coqは独自のメタセオリーを表現できますか?そうでない場合でも、依存型タイピングの一般的な形式を含むより単純なシステムを表現できますか?

2
型パラメーターと型インデックスの使用の違いと結果は何ですか?
Coqのような型理論では、次のようにパラメーターで型を定義できます。 Inductive ListP (Element : Type) : Type := NilP : ListP Element | ConsP : Element -> ListP Element -> ListP Element. または、次のように、インデックスを使用してタイプを定義することもできます。 Inductive ListI : Type -> Type := NilI : forall t, ListI t | ConsI : forall t, t -> ListI t -> ListI t. 私の質問は: …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.