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

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

5
私が学ぶことができる最も直感的な依存型理論は何ですか?
依存型付けについて本当にしっかりと把握することに興味があります。私はTaTaのほとんどを読み、ATTaPLの「依存型」を(完全に吸収されていなければ)読みました。また、依存型付けに関する多くの記事を読み、読みました。 型理論の議論の多くは、「型システムXの次の大規模な一般化とは何か」ではなく、以前の型システムにインクリメンタル機能を追加することに焦点を当てているようです。依存型はSystem Fの次の大規模な一般化のようですが、直感的で標準的な依存型付き言語はまだ見つかっていません。(帰納的)構造の微積分への多くの言及は、CoCがその言語であると思うようにさせますが、私が見た言語の説明は、私にはあまり明確でも直観的でもないようです。 私はそのような言語が次のような機能を持っていると期待/推測しています(そして、特に何かが混乱したり非現実的なものとして飛び出したりしたら教えてください) 一般化された抽象化(型階層内の任意のドメインから他のドメイン、種類->用語、用語->型 '' 'などへの機能を持つことができます) タイピングの無限の階層があります(用語:タイプ:タイプ ':タイプ' ':...) 基本要素の最小数。私は、言語が各レベルに対して単一の要素のみを主張することを想像しています。たとえば、(():Unit:Type:Type ':...)と断定できます。他の要素は、これらの要素から構築されます。 合計および製品タイプは導出可能です。 私はまた、理想的に議論するその言語の説明を探しています: その言語での抽象化と定量化の関係。統一されていない場合は、なぜ統一されていないのかを説明してください。 無限の型階層を明示的に 依存型理論を学びたいだけでなく、CSのバックグラウンドを少し仮定して、証明アシスタントと依存型言語の使用方法を理解する方法を教えるガイドをまとめたいので、この質問をしています。 (クロスがRedditに投稿)

3
CoqにPropがあるのはなぜですか?
Coqには、関係のない命題のProp型があり、抽出中に破棄されます。Coqを証明にのみ使用する場合、これがある理由は何ですか。Propは命令型であるため、Prop:Propですが、Coqは自動的にユニバースインデックスを推測し、代わりにType(i)をどこでも使用できます。Propはすべてを複雑にしているようです。 Luoの本にはSetとPropを分離する哲学的な理由があると読みましたが、本にはそれらが見つかりませんでした。彼らは何ですか?

4
契約と依存型付けとの関係
私は依存型とプログラミング契約に関するいくつかの記事を読んでいます。私が読んだことの大部分から、契約は動的にチェックされる制約であり、依存型は静的にチェックされるようです。 部分的に静的にチェックされる契約を持つことは可能だと私に思わせたいくつかの論文がありました: ハイブリッド型チェック(C.フラナガン-2006) ハイブリッドタイプと契約の統合(J.グロンスキー、C。フラナガン-2007) これにより、かなりの量の重複があるようで、契約と従属タイプの分類が消え始めます。 どちらの概念にも、私が見逃しているものがありますか?それとも、これらは、同じ基本概念を表すファジーカテゴリに過ぎませんか?


2
なぜ無限の型階層なのか?
Coq、Agda、およびIdrisには、無限のタイプ階層があります(タイプ1:タイプ2:タイプ3:...)。しかし、なぜその代わりλC、唯一の2種類、持っている構造の計算に最も近いですラムダキューブのシステムのようにそれをしない∗∗*と、及びこれらのルールを?◽◽◽ ∅⊢∗:◽∅⊢∗:◽\frac {} {∅ ⊢ * : ◽} Γ⊢T1:s1Γ,x:T1⊢t:T2Γ⊢(λx:T1,t):(Πx:T1,T2)Γ⊢T1:s1Γ,x:T1⊢t:T2Γ⊢(λx:T1,t):(Πx:T1,T2)\frac {Γ ⊢ T _ 1 : s _ 1 \qquad Γ, \: x : T _ 1 ⊢ t : T _ 2} {Γ ⊢ (λ \: x : T _ 1, \: t) : (Π \: x : T _ …


1
従属レコードのパラメトリック性と射影消去
π 1:A × B → Aがπ 2:A × B → BA×B≜∀α.(A→B→α)→αA×B≜∀α.(A→B→α)→α A \times B \triangleq \forall\alpha.\; (A \to B \to \alpha) \to \alpha π1:A×B→Aπ1:A×B→A\pi_1 : A \times B \to Aπ2:A×B→Bπ2:A×B→B\pi_2 : A \times B \to B これは、F型の自然な読み取りがletスタイルの消去\ mathsf {let} \;(x、y)= p \; \ mathsf {in} \;とペアであるにもかかわらず、それほど驚くべきことではありません。elet(x,y)=pinelet(x,y)=pine\mathsf{let}\;(x,y) = p \;\mathsf{in}\; eは、2種類のペアが直観主義的なロジックで相互導出可能であるためです。 …

1
依存型を持つシステム内の型が居住していないことを示す方法(つまり、式が証明できない)
Hindley-Milner型システムのような依存型のないシステムの場合、型は直観主義論理の式に対応します。そこでは、そのモデルがヘイティング代数であることがわかります。特に、式を反証するために、各式がオープンサブセットで表される1つのヘイティング代数に制限できます。RR\mathbb{R} たとえば、私たちはその表示したい場合生息していない、我々はマッピング構築φのオープンサブセットへの式からRを定義することによって: φ (α )∀ α 。α ∨ (α → ⊥は)∀α。α∨(α→⊥)\forall\alpha.\alpha\lor(\alpha\rightarrow\bot)ϕϕ\phiRR\mathbb{R} その後 ϕ (α → ⊥ )ϕ (α )= (− ∞ 、0 )ϕ(α)=(−∞、0)\begin{align} \phi(\alpha) &= (-\infty, 0) \end{align} これは、元の式が証明できないことを示しています。なぜなら、それは真実ではないモデルを持っているからです。ϕ (α → ⊥ )φ (α ∨ (α → ⊥は))= int([ 0 、∞ ))= (0 、∞ )= (− ∞ 、0 )∪ (0 …

2
Hottの本では、ほとんどのタイプフォーマーは冗長ですか?もしそうなら、なぜですか?
Hottブックの第1章と付録A では、基礎を形成するために、いくつかのプリミティブ型ファミリ(ユニバース型、従属関数型、従属ペア型、連産型、空型、単位型、自然数型、およびID型)が示されていますホモトピー型理論。 ただし、ユニバース型と依存関数型を指定すると、これらすべての他の「プリミティブ」型を構築できるようです。たとえば、Empty型は代わりに次のように定義できます ΠT:U.T 他のタイプも、純粋なCCの場合と同様に構築できると仮定します(つまり、定義の帰納的部分からタイプを導き出すだけです)。 これらのタイプの多くは、第5章および第6章で紹介されているInductive / Wタイプによって明示的に冗長化されています。しかし、Inductive / Wタイプは、HoTT少なくとも本が出たとき)。 したがって、これらの追加のタイプがプリミティブとして表示される理由について非常に混乱しています。私の直感では、基礎理論は可能な限り最小限に抑える必要があり、冗長な空の型をプリミティブとして理論に再定義することは非常にarbitrary意的です。 この選択はなされましたか 私が知らないいくつかのメタ理論的な理由で? 歴史的な理由で、型理論を過去の型理論のように見せるため(必ずしも基礎的であろうとはしていなかった)? コンピュータインターフェイスの「使いやすさ」のために? 私が知らない証明検索でいくつかの利点のために? 同様:Martin-Löf型理論の最小仕様、https://cs.stackexchange.com/questions/82810/reducing-products-in-hott-to-church-scott-encodings/82891#82891

3
公理でCICを拡張することの負の結果は何ですか?
公理をCICに追加すると、定義や定理の計算内容に悪影響を与える可能性があるのは本当ですか?私がもしあれば、閉じた用語はその標準的な正規形、例えばに削減する、理論の通常の動作では、それを理解、その後、真であるN形の用語に削減しなければならない(S U C C 。。。(S U c c (0 )))。しかし、公理を仮定するとき-関数の拡張性公理と言う-システムに新しい定数を追加するだけですn :Nn:Nn : \mathbb{N}nnn( S U C C 。。。(S U C C (0 )))(sあなたはcc。。。(sあなたはcc(0)))(succ ... (succ (0)))funext fu n e x t :Πx :Af(x )= g(x )→ f= gfあなたはneバツt:Πバツ:Af(バツ)=g(バツ)→f=g funext : \Pi_{x : A} f (x) = g (x) \to f …

2
依存型付きラムダ計算のチャーチロッサープロパティ?
Church-Rosserプロパティが、単純に型指定されたラムダ計算で -reductionを保持することはよく知られています。これは、 -terms を含むすべての方程式が導出可能ではないという意味で、計算が一貫していることを意味します。たとえば、K Iは、同じ正規形を共有しないためです。βηβη\beta \etaλλ\lambda≠≠\neq 製品タイプに対応するペアに結果を拡張できることも知られています。 しかし、(おそらく)多相型、たとえばCalculus of Constructionsを使用して、依存型付きラムダ計算の結果をさらに拡張できるのだろうか。 どんな参考文献も素晴らしいでしょう! ありがとう

4
依存型理論におけるモデリングオブジェクト(OOP)
私は、オブジェクト指向プログラミングから、依存型理論におけるオブジェクトのモデリングに興味があります。可能なアプリケーションとして、命令型プログラミング言語のさまざまな機能を説明できるモデルが必要です。 依存型理論におけるオブジェクトのモデリングに関する論文は1つしか見つかりませんでした 。A。Setzerによる依存型理論におけるオブジェクト指向プログラミング(2006) 私が見逃したトピックに関するさらなる参照はありますか、おそらく最近のものがありますか? CoqやAgdaのような定理証明者に利用可能な実装(すなわち証明)はおそらくありますか?

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

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

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