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

オブジェクトのプロパティを指定する正式なシステム

2
入れ子になったコンポーネントを持つ帰納的なタイプの再帰的な定義
入れ子になっているが厳密に正の場所で再帰的に発生する誘導型を考えてください。たとえば、一般的なリストデータ構造を使用して子を格納するノードを使用した有限分岐を持つツリー。 Inductive LTree : Set := Node : list LTree -> LTree. これらのツリーとツリーのリストを再帰的に再帰的に定義する単純な方法は機能しません。以下sizeは、ノードの数を計算する関数の例です。 Fixpoint size (t : LTree) : nat := match t with Node l => 1 + (size_l l) end with size_l (l : list LTree) : nat := match l with | nil => 0 | cons …

2
それ自身の派生物に等しい非自明な型はありますか?
The Regular Derivative of a Regular Typeと呼ばれる記事は、Type of One-Hole Contextsは、タイプの「ジッパー」、つまりその1ホールコンテキストが、タイプ代数の微分規則に従うことを示しています。 我々は持っています: ∂xx∂x0∂x1∂x(S+T)∂x(S×T)↦1↦0↦0↦∂xS+∂xT↦∂xS×T+S×∂xT∂xx↦1∂x0↦0∂x1↦0∂x(S+T)↦∂xS+∂xT∂x(S×T)↦∂xS×T+S×∂xT\begin{align} \partial_x x &\mapsto 1 \\ \partial_x 0 &\mapsto 0 \\ \partial_x 1 &\mapsto 0 \\ \partial_x (S + T) &\mapsto \partial_x S + \partial_x T \\ \partial_x (S\times T) &\mapsto \partial_xS \times T + S \times \partial_x T …

2
ユニバーサルタイプは、実存タイプのサブタイプ、または特別な場合ですか?
この質問は、Computer Science Stack Exchangeで回答できるため、Software Engineering Stack Exchangeから移行されました。 7年前に移行され ました。 Iは、普遍的に定量タイプかどうかを知りたい:T = ∀ X :{ ∈ X 、F :X → { T 、Fは} }、存在、定量化を、サブタイプ、又は特別なケースでありますタイプTのEを同じ署名で:TのE = ∃ X :{ ∈ X 、F :X → { T 、F } }TaTaT_aTa=∀X:{a∈X,f:X→{T,F}}Ta=∀X:{a∈X,f:X→{T,F}}T_a = \forall X: \left\{ a\in X,f:X→\{T, F\} \right\}TeTeT_eTe=∃X:{a∈X,f:X→{T,F}}Te=∃X:{a∈X,f:X→{T,F}}T_e = \exists X: \left\{ a\in …

4
多形型 `forall t:Type、t-> t`をもつ関数が恒等関数でなければならないのはなぜですか?
プログラミング言語理論は初めてです。私は、インストラクターがポリモーフィック型の関数がforall t: Type, t->tアイデンティティであると主張するオンライン講義をいくつか見ていましたが、その理由は説明しませんでした。誰かが私に理由を説明できますか?第一原理からの主張の証拠かもしれません。

2
「最小限の」直観主義型理論?
型理論に人々が新しい型を追加し続けていることに驚いていますが、最小理論について言及している人はいないようです(または、私はそれを見つけられません)。数学者は最小限のものが大好きだと思いませんか? 私が正しく理解すれば、命令型のPropλ-abstractionとΠ-typesの型理論で十分です。十分だと言うことで、直観主義的な論理として使用できるということです。他のタイプは次のように定義できます。 ⊥=defΠα:Prop.α¬A=defA→⊥A∧B=defΠC:Prop.(A→B→C)→CA∨B=defΠC:Prop.(A→C)→(B→C)→C∃x:S(P(x))=defΠα:Prop.(Πx:S.Px→α)→α⊥=defΠα:Prop.α¬A=defA→⊥A∧B=defΠC:Prop.(A→B→C)→CA∨B=defΠC:Prop.(A→C)→(B→C)→C∃x:S(P(x))=defΠα:Prop.(Πx:S.Px→α)→α \bot \stackrel{def}{=} \Pi \alpha: Prop. \alpha \\ \neg A \stackrel{def}{=} A \to \bot \\ A \land B \stackrel{def}{=} \Pi C: Prop. (A \to B \to C) \to C \\ A \lor B \stackrel{def}{=} \Pi C: Prop. (A \to C) \to (B \to C) \to C \\ \exists_{x: …

3
タイピングルールの読み方
私は言語研究論文をどんどん読み始めました。私はそれが非常に興味深く、プログラミング全般についてもっと学ぶ良い方法だと思います。しかし、コンピューターサイエンスの理論的背景に欠けているため、通常は常に苦労するセクションがあります(たとえば、このパート3を取り上げます):タイプルール。 この分野で始めるのに役立つ良い本やオンラインリソースはありますか?ウィキペディアは信じられないほど曖昧であり、初心者を本当に助けません。

4
仕様からコンピュータプログラムを書くシステムを実際に作成した人はいますか?
コンピュータプログラムを生成するシステム(ソフトウェアまたは簡単な例を含む紙の詳細な説明)を実際に書いた人はいますか?I入力、それがリスト素数10未満ことプログラム作成 のP rがiは、mは、E (Xの)単にように定義される 1 &lt; X ∧ ∄ APrime(x)∧x&lt;10Prime(x)∧x&lt;10Prime(x) \wedge x<10Prime(x)Prime(x)Prime(x) 教授は、彼らができると言う誰も実際の完全な例を与えません。1&lt;x∧∄As.t.1&lt;A∧A&lt;x∧x=A×B, with A,B∈N1&lt;x∧∄As.t.1&lt;A∧A&lt;x∧x=A×B, with A,B∈N1<x \wedge \not\exists A\; s.t. 1<A \wedge A<x \wedge x=A\times B,\mbox{ with } A,B\in \mathbb{N}

2
Yコンビネータは、カレー-ハワード通信と矛盾しますか?
Yコンビネータのタイプはです。Curry-Howard Correspondenceでは、型(a → a )→ aが存在するため、真の定理に対応しなければなりません。ただし、a → aは常にtrueであるため、Yコンビネータの型は定理aに対応するように見えますが、これは常にtrueとは限りません。どうすればいいの?(a→a)→a(a→a)→a(a \rightarrow a) \rightarrow a(a→a)→a(a→a)→a(a \rightarrow a) \rightarrow aa→aa→aa \rightarrow aaaa

1
製品タイプとタイプ推論
私は、連結言語用のコンパイラに取り組んでおり、型推論のサポートを追加したいと考えています。Hindley–Milnerは理解していますが、型理論を学んでいるので、それをどのように適応させるかわかりません。次のシステムは健全で、決定的に推測できますか? 用語は、リテラル、用語の構成、用語の引用、またはプリミティブです。 e::=x∣∣ee∣∣[e]∣∣…e::=x|ee|[e]|… e ::= x \:\big|\: e\:e \:\big|\: [e] \:\big|\: \dots すべての用語は関数を示します。2つの関数およびe 2の場合、e 1e1e1e_1e2e2e_2並置が逆組成を示しています。リテラルはニラディック関数を示します。e1e2=e2∘e1e1e2=e2∘e1e_1\:e_2 = e_2 \circ e_1 構成以外の用語には、基本的なタイプルールがあります。 x:ι[Lit]Γ⊢e:σΓ⊢[e]:∀α.α→σ×α[Quot],α not free in Γx:ι[Lit]Γ⊢e:σΓ⊢[e]:∀α.α→σ×α[Quot],α not free in Γ \dfrac{}{x : \iota}\text{[Lit]} \\ \dfrac{\Gamma\vdash e : \sigma}{\Gamma\vdash [e] : \forall\alpha.\:\alpha\to\sigma\times\alpha}\text{[Quot]}, \alpha \text{ not free in } \Gamma 連結言語にはアプリケーションルールがないため、アプリケーションのルールは特にありません。 型は、リテラル、型変数、またはスタックからスタックへの関数のいずれかです。ここで、スタックは右ネストされたタプルとして定義されます。すべての関数は、「残りのスタック」に関して暗黙的にポリモーフィックです。 τρσ::=ι∣∣α∣∣ρ→ρ::=()∣∣τ×ρ::=τ∣∣∀α.στ::=ι|α|ρ→ρρ::=()|τ×ρσ::=τ|∀α.σ …

3
Haskellよりも強力なタイプシステムを持つ研究言語はどれですか?
ここで私はそれを読みました: Haskellには間違いなく最先端の型システムはありません(研究言語を数えたとしても近いものではありません)が、実稼働で実際に使用されるすべての言語のうちHaskellがおそらくトップです。 だから私は2つのことを求めています: どの研究言語がHaskellより強力な型システムを持っているか。 彼らは何を改善しますか。 私は単なるプログラマーなので、型理論で使用される多くの数学的なオブジェクトを知りません。できれば穏やかな説明を提供してください。

1
Hindley-Milnerアルゴリズムがt1-> t2のような型を生成しないのはなぜですか?
私が読んだヒンドリー-ミルナータイピングアルゴリズムの実装を書いている間、あなたは常に引数は、最終的なタイプを決定する原子の種類やタイプのいずれかを取得します、限り、すべての変数がバインドされると、それを見る、などt1 -&gt; t1か(t1 -&gt; t2) -&gt; (t1 -&gt; t2)ここでt1およびt2は型変数です。 私はあなたのような何かを取得したい方法を考えることはできませんt1 -&gt; t2か、単にt1私が表現の実際の型を判別する方法がないので、アルゴリズムが壊れている意味するであろう理解し、。すべての変数がバインドされている限り、これらの「壊れた」タイプのような型を決して取得しないことをどのように確認しますか? 私はアルゴリズムが変数を持つ型を生成することを知っていますが、関数に引数を渡すと、これらは常に解決されますが、typeを持つ関数ではそうではありませんt1 -&gt; t2。これが、アルゴリズムがそのような型を決して生成しないことを確認する方法を知りたい理由です。 (MLでこれらの「壊れた」型を取得できるようですが、ラムダ計算について質問しています。)

1
グラフの導関数は隣接リストに関連していますか?
Conor McBrideの作品の一部であるDiff、Dissectは、データ型の導関数を「ワンホー​​ルコンテキストの型」に関連付けます。つまり、型の導関数を取得すると、任意の時点で内部からデータ型がどのように見えるかを示すデータ型が残ります。 したがって、たとえば、リストがある場合(Haskellに) data List a = [] | a : List a これは data List a = 1 + a * List a 少し数学的な魔法を通して、導関数は data ListDeriv a = List a * List a これは、リスト内の任意の時点で、左側にリストがあり、右側にリストがあることを意味すると解釈されます。派生データ構造を使用して、元のリストを圧縮できます。 今、私はグラフで似たようなことをすることに興味があります。グラフの一般的な表現は、頂点とエッジのセットです。これらは、次のようなデータ型で単純に実装できます。 data Gr a b i = Gr [(i,a)] [(i,i,b)] 私がそれを正しく理解していれば、グラフのインデックスに関するこのデータ型の導関数はi次のようになります。 data GrDeriv a b …

2
「従属連産品タイプ」を持つことはできますか?
私はHoTT本を読んでいますが、第1章の内容について(おそらく非常に素朴な)質問があります。 この章では、関数型 を紹介し、を依存させることで一般化します。 そして、それは従属関数型と呼ばれます。B x :A B :A → U、f:A → Bf:A→B f:A\to B BBBx :Ax:Ax:A B :A → U、g:∏x :AB (x )B:A→U,g:∏x:AB(x)B:A\to\mathcal{U},\qquad g:\prod_{x:A}B(x) 次に、この章では製品タイプ を紹介し、を依存させることで一般化します およびそれは依存ペアタイプと呼ばれます。B x :A B :A → U、f:A × Bf:A×B f:A\times BBBBx :Ax:Ax:A B :A → U、g:∑x :AB (x )B:A→U,g:∑x:AB(x)B:A\to\mathcal{U},\qquad g:\sum_{x:A}B(x) ここでパターンを間違いなく見ることができます。 次に、この章 では連産品タイプ および... …

2
参照要求:型システムに適用されるカテゴリ理論
プログラミング言語理論を真に理解するために、カテゴリー理論をどのように学ばなければならないかについて、私は聞き続けています。これまでのところ、カテゴリーの領域に足を踏み入れることなく、かなりのPLを学びました。しかし、私は自分が行方不明になっていたものを見るために飛躍する時だと思った。 残念ながら、私が見つけることのできるソースはどれも、型システムやプログラミングに接続しているようには見えません。彼らはそれがコンピューター科学者のためのカテゴリー理論への入門であると言うが、それから一般的な抽象的なナンセンス(私はこれを愛情を込めて言う)に変わります。 私の質問は実際には2つあると思います: カテゴリー理論はPLの「深い概念」を理解するために不可欠ですか? 型システムとプログラミングへの実用的なアプリケーションの観点からカテゴリー理論を説明するソースは何ですか? これまでのところ、私が得た最も遠いのは、ファンクターの漠然とした概念です(私が知る限り、これはMLのファンクターとは関係がないようです)。カテゴリ理論的な観点からモナドを理解するために頭の中に留めておかなければならない抽象化を恐れています。

2
「依存型」を持つことで何が得られますか?
依存型(DT)を適切に理解していると思いましたが、この質問への回答:https : //cstheory.stackexchange.com/questions/30651/why-was-there-a-need-for-martin-l%C3% B6f-to-create-intuitionistic-type-theoryは、そうでなければ考えさせられました。 DTを読み、それらが何であるかを理解しようとした後、このDTの概念によって何が得られるのだろうかと考えています。「方法/理由」を正確に理解することはできませんが、単純に型付けされたラムダ計算(STLC)よりも柔軟で強力なようです。 STLCではできないDTでできることは何ですか?DTを追加すると理論がより複雑になりますが、どのような利点がありますか? 上記の質問に対する答えから: 依存型は、BruijnとHowardによって提案され、Courry-Howardの対応を命題論理から1次論理に拡張したいと考えました。 これはあるレベルでは理にかなっているように見えますが、それでも「どうして/なぜ」という大局を理解することはできません。たぶん、FOロジックへのCHの対応のこの拡張を明示的に示す例は、DTで何が大事なのかを理解する上で重要なポイントを見つけるのに役立つでしょうか?これを理解すべきかどうかは定かではありません。

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