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

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

1
依存型チェックが決定可能であることを示すための証明手法
私が取り組んでいる依存的に型付けされた計算の型検査が決定可能であることを示す必要がある状況にいます。これまでのところ、私はシステムが強く正規化していることを証明できたので、その定義上の同等性は決定可能です。 私が読んだ多くの参考文献では、タイプチェックの決定可能性は強力な正規化の結果としてリストされており、それらの場合にはそれを信じていますが、実際にこれをどのように表示するのかと思います。 特に、私は次のことに行き詰まっています。 適切に型付けされた項が強く正規化されているからといって、適切に型付けされていない入力でアルゴリズムが永久にループしないわけではありません 論理関係は通常、強力な正規化を示すために使用されるので、型チェックの用語を進めるにつれ、測定値を減少させる便利な方法はありません。したがって、私のタイプルールが構文指向である場合でも、ルールの適用が最終的に終了する保証はありません。 私は疑問に思っています、依存型付けされた言語のタイプチェックの決定可能性の証明への良い参照は誰にもありますか?小さなコアの計算であれば、それで十分です。決定可能性を示すための証明技法について説明するものはすべてすばらしいでしょう。

1
(0 = 1)が偽を意味するという事実の参照には、MLTTのユニバースが必要です
マーティンリーフ型理論で不等式(たとえば)から矛盾を導き出すには、宇宙が必要であることはかなりよく知られている事実です。(0=1)→⊥(0=1)→⊥(0=1) \to \bot 証明もかなり簡単です。ユニバースが存在しない場合は、依存型から依存関係を削除して、その形状として単純な型を取得できます。したがって、は、p → ⊥を証明できることを示します。もちろん、任意の原子pの場合、これは不可能です。(0=1)→⊥(0=1)→⊥(0=1) \to \botp→⊥p→⊥p \to \botppp しかし、これを誰が最初に証明したのかわかりません!誰か参照がありますか?

2
型理論における有限集合の理論を形式化する
ほとんどの証明アシスタントは、「有限集合」の概念を形式化しています。ただし、これらの形式は大きく異なります(ただし、すべてが本質的に同等であることを期待しています!)。この時点で私が理解していないのは、関連する設計スペースと、それぞれの形式化の長所と短所です。 特に、以下について理解したいと思います。 単純型理論で有限集合(つまり、有限数の住人が住む型)を公理化できますか?システムF?この方法で行うことの欠点は何ですか? 私はそれが依存型システムで「エレガントに」できることを知っています。しかし、古典的な観点から見ると、結果の定義は非常に異質であるように見えます。[彼らが間違っていると言っているのではありません!]。しかし、なぜ彼らが「正しい」のか理解できません。彼らは正しい概念を選んでいると理解していますが、「そのように言う」ことのより深い理由は私が完全に理解していないものです。 基本的に、型理論における「有限集合」の概念の形式化の設計空間への合理的な紹介をお願いします。

1
カテゴリ理論の単一性をスケルトンの概念に関連付ける
私がホモトピー型理論で働き、私の唯一の研究対象が従来のカテゴリーであるとしましょう。 ここでの同等性は、ファンクターおよび によって与えられ、カテゴリの同等性を提供します。自然な同型と存在するため、このファンクタと「逆」ファンクタユニットファンクターに変換されます。F:D⟶CF:D⟶CF:{\bf D}\longrightarrow{\bf C}G:C⟶DG:C⟶DG:{\bf C}\longrightarrow{\bf D} C≃DC≃D{\bf C} \simeq {\bf D}α:nat(FG,1C)α:nat(FG,1C)\alpha:\mathrm{nat}(FG,1_{\bf C})β:nat(GF,1D)β:nat(GF,1D)\beta:\mathrm{nat}(GF,1_{\bf D}) 現在、単一性は、同等性を、カテゴリについて話すために選択した意図的型理論の恒等型に関連付けています。私はカテゴリのみを扱い、それらが同型のスケルトンを持っている場合は同等ですので、カテゴリのスケルトンに渡すことに関して一価の公理を表現できるかどうか疑問に思います。C=DC=D{\bf C}={\bf D} または、それ以外の場合、アイデンティティタイプ、つまり構文式 を基本的に「スケルトン(または同型)があり、とはどちらも同等です。 "?C=D:=…C=D:=…{\bf C}={\bf D}:=\dotsCC{\bf C}DD{\bf D} (上記では、タイプ理論を定義しやすい概念の観点から解釈しようとしています。カテゴリー理論の概念です。道徳的には、公理がハードコーディングによって意図的なタイプ理論を「修正」しているように見えるので、これについて考えます等価性の原則。これは、カテゴリ理論ステートメントの定式化の自然な部分です。たとえば、普遍的なプロパティでのみオブジェクトを指定します。)


1
二色構造計算の役割は何ですか?
だから、私は詳細について、特に2色の構造の計算に基づくアルゴリズムについて少し読んでいますが、少し混乱しています。目的が正確に理解できません。関数の暗黙的引数と明示的引数に違いがあることを除いて、C Cと同じように見えます。特に、どのように書けるかわかりません(i dCCb iCCbiCC^{bi}CCCCCC(i dの代わりに(私はd0 )(id0)(id\; 0)。グローバル定義のシステムを想定すると、(idN0)(idN0)(id\; \mathbb{N}\; 0) id:(ΠA|Type.(Πx:A.A))id:(ΠA|Type.(Πx:A.A))id : (\Pi A\; |\; \mathsf{Type}\; . (\Pi x : A\; . A)) そして 。id=(λA|Type.(λx:A.x))id=(λA|Type.(λx:A.x))id = (\lambda A\; |\; \mathsf{Type}\; . (\lambda x : A . x)) ルールで本当に許可されているか?もちろん構文にはありますが、型付けの関係ではわかりません。何か不足していますか?C C b iの役割を正しく理解していますか?(id0)(id0)(id\; 0)CCbiCCbiCC^{bi} また、合流性は失われないのでは?私の問題は、これまでにについてあまり読んだことがなく、詳細について読んでいることだと思います。それとそれだけを紹介する良い紙は何ですか?CCbiCCbiCC^{bi} 編集:より具体的に言うと、私はは(i d(id0)(id0)(id\; 0)場合の両方明示的および暗黙のための規則 Πのアプリケーションは、同一のモジュロsytnaxあります。:と |の間に違いはありません。両方のルールは同じように見えます。(idN0)(idN0)(id\; \mathbb{N}\; 0)ΠΠ\Pi:::||| 編集:私はImplicit …

2
帰納型の宣言の順序は重要ですか?
帰納的な型の宣言の順序が問題になるかどうか疑問に思っていました。 たとえばCoqでは、次のNatいずれかを定義できます。 Inductive Nat := | O : Nat | S : Nat -> Nat. または Inductive Nat := | S : Nat -> Nat | O : Nat. これはおそらく、自動的に生成されたエリミネーターのパラメーターの順序を変更しますが、それは大した問題ではありません。 私が思っているのは、次のような宣言を書くことが可能かどうかです Inductive typewhereordermatters := | cons1 : type1 | cons2 : type2. type2依存型はどこにありcons1ますか?(そしてこの場合、まだ存在しないtype2ものを参照しているため、宣言を他の順序で記述しても意味cons1がありません)。

2
二分木の上の再帰関数のための共和的メモ化テーブルをどのように構築できますか?
Coq のStreamMemoライブラリはf : nat -> A、自然数に対して関数をメモ化する方法を示しています。特にの場合f (S n) = g (f n)、imemo_makeは再帰呼び出しの計算を共有します。 自然数の代わりに、二分木の再帰関数をメモしたいとします: Inductive binTree : Set := | Leaf : binTree | Branch : binTree -> binTree -> binTree. 我々は機能があるとf : binTree -> A機能があることを意味し、構造的に再帰的であるg : A -> A -> Aことなどf (Branch x y) = g (f x) (f y)。fCoqで同様のメモテーブルを作成して、再帰的な計算を共有する方法を教えてください。 …

1
PiSigma:なぜ「展開」して変数をバインドするのですか?
私は、言語のインタープリターとタイプチェッカーを実装することで、ペーパーΠΣ:Sugarを使用しない依存型を理解しようとしています。そうすることで、unfold t as x -> u再帰的な定義の構文(構文はセクション2.1で定義されています)が変数をバインドしているのを見てきましたが、それが必要な理由はわかりません。このペーパーの例では、実際には変数バインディングを使用していません。これらはすべて省略形unfold t(つまりunfold t as x -> x)を使用しています。 私はない(第5節から)そのためのルールをチェックするタイプは、バインディング変数を使用していることがわかり、私はこれの意味を理解していません。私の知る限りでunfold t as x -> uは、と完全に同等let x = unfold t in uです。 誰かが変数バインディングが役立つまたは必要な場合の例を提供できますか?の長い形式で型チェックし、短い形式では型チェックしunfoldないという用語はありletますか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.