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

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

3
依存型と改良型
誰かが依存型と絞り込み型の違いを説明できますか?私が理解しているように、絞り込み型には、述語を満たす型のすべての値が含まれます。それらを区別する依存型の機能はありますか? それが役立つ場合、Liquid Haskellプロジェクトを介して洗練された型、CoqおよびAgdaを介して依存型に出会いました。とはいえ、私は理論がどのように異なるかについての説明を探しています。

1
依存型の型推論を決定できないのはなぜですか?
依存型システムは推論可能ではないが、確認可能であることを述べました。なぜそうなのか、また、型が値によってインデックス付けできる「依存性」の限界があるかどうか、それより下では型推論が可能で、それより上ではできないという簡単な説明があるのだろうかと思いました。

3
Martin-Löf型理論の紹介
型理論に関するPerMartin-Löfsのアイデアの最良の紹介は何でしょうか?私はオレゴンPLサマースクールからのいくつかの講義を見てきましたが、私はまだ次の質問に戸惑っています: タイプとは何ですか? 通常のZF公理で定義でき、非常に直感的な具体的なモデルがあるため、セットが何であるかを知っています。物がいっぱい入ったバスケットを考えてみてください。しかし、型の合理的な定義はまだわかりません。このアイデアをダミーに変換するソースがあるかどうか疑問に思っていました。

2
イドリスはチューリングの完全性をあきらめることで何ができないのでしょうか?
Idrisには依存型があることは知っていますが、完全にはチューリングしていません。チューリングの完全性をあきらめることで何ができませんか?これは依存型を持つことに関連していますか? これは非常に具体的な質問だと思いますが、依存型と関連する型システムについてはあまり知りません。

4
セットとタイプのセマンティックの違いは何ですか?
編集:カテゴリとセットの違いについて同様の質問をしました。 型理論(確かに非公式ですが)について読むたびに、具体的には集合論とどう違うのかを本当に理解できません。 「xはセットXに属している」と「xはタイプXである」という概念的な違いがあることを理解しています。それにもかかわらず、セットもしばしばプロパティに従って定義されます。もしそうであれば、この区別がどのように重要であるかを理解するのに苦労しています。 だから、ほとんどの中で具体的な可能性のある方法、まさにそれがない暗示 についてxxx T S、それは型であることを言ってそれは集合の要素であると言っに比べて、?TTTSSS (比較を最も明確にする任意のタイプとセットを選択できます)。
33 type-theory  sets 

3
ピュア/依存型システムの簡単だが完全な説明は何ですか?
何かが単純な場合は、いくつかの言葉で完全に説明できるはずです。これは、λ計算に対して行うことができます。 λ計算は、構文規則(基本的に構造)であり、リダクションルール(特定のパターンが出現するまで、そのようなパターンが存在しなくなるまで繰り返し検索/置換手順が適用されることを意味します)。 文法: Term = (Term Term) | (λ Var . Term) | Var 削減ルール: ((λ var body) term) -> SUBS(body,var,term) where `SUBS` replaces all occurrences of `var` by `term` in `body`, avoiding name capture. 例: (λ a . a) -> (λ a a) ((λ a . (λ b . …


2
プログラミング言語と数学の基礎はどのように関係していますか?
基本的に私は数学の3つの基礎を知っています 集合論 型理論 カテゴリー理論 それでは、プログラミング言語と数学の基礎はどのように関係していますか? 編集 元の質問は「数学の基礎に基づいたプログラミング言語」でした 追加されたパラガルフ そして理論の実装 1. Coqの型理論 2. SETLの集合論 3. Haskellのカテゴリー理論 提案に基づいて、これは「プログラミング言語と数学の基礎はどのように関係しているのか」に変更されました。 これは私が尋ねていることについて十分に知らなかったが何かを学びたいと思った質問の1つであるため、質問を変更して、学習や他の人にとってより価値のあるものにしますが、Andrej Bauerによる現在の答えは話題から外れているようです。 これまでのすべてのコメントと回答に感謝し、私はそれらから学んでいます。

2
ユニオン型を持つラムダ項の特性評価
多くの教科書は、ラムダ計算の交差タイプをカバーしています。交差の入力規則は、次のように定義できます(サブタイプ付きの単純に入力されたラムダ計算の上)。 Γ⊢M:T1Γ⊢M:T2Γ⊢M:T1∧T2(∧I)Γ⊢M:⊤(⊤I)Γ⊢M:T1Γ⊢M:T2Γ⊢M:T1∧T2(∧I)Γ⊢M:⊤(⊤I) \dfrac{\Gamma \vdash M : T_1 \quad \Gamma \vdash M : T_2} {\Gamma \vdash M : T_1 \wedge T_2} (\wedge I) \qquad\qquad \dfrac{} {\Gamma \vdash M : \top} (\top I) 交差タイプには、正規化に関して興味深い特性があります。 ラムダ項は、強く正規化する場合に限り、ルールを使用せずに入力できます。⊤I⊤I\top I ラムダ用語は含まないタイプ認めそれが正規形を有しているときに限ります。⊤⊤\top 交差点を追加する代わりに、ユニオンを追加するとどうなりますか? Γ⊢M:T1Γ⊢M:T1∨T2(∨I1)Γ⊢M:T2Γ⊢M:T1∨T2(∨I2)Γ⊢M:T1Γ⊢M:T1∨T2(∨I1)Γ⊢M:T2Γ⊢M:T1∨T2(∨I2) \dfrac{\Gamma \vdash M : T_1} {\Gamma \vdash M : T_1 \vee T_2} (\vee …

2
Cのvoid型がempty / bottom型と類似していないのはなぜですか?
ウィキペディアと私が見つけた他のソースはvoid、空のタイプではなくユニットタイプとしてリストCのタイプを見つけました。void空の/下の型の定義によりよく適合するように思えるので、この混乱を見つけます。 void私が知る限り、値は存在しません。 戻り値の型がvoidの関数は、関数が何も返さないため、何らかの副作用しか実行できないことを指定します。 タイプのポインターvoid*は、他のすべてのポインタータイプのサブタイプです。また、void*C との間の変換は暗黙的です。 最後の点voidに、空の型であることの引数としてのメリットがあるかどうかはわかりvoid*ませんvoid。 一方、voidそれ自体は他のすべてのタイプのサブタイプではありません。これは、タイプがボトムタイプであるための要件であると言えます。
28 type-theory  c  logic  modal-logic  coq  equality  coinduction  artificial-intelligence  computer-architecture  compilers  asymptotics  formal-languages  asymptotics  landau-notation  asymptotics  turing-machines  optimization  decision-problem  rice-theorem  algorithms  arithmetic  floating-point  automata  finite-automata  data-structures  search-trees  balanced-search-trees  complexity-theory  asymptotics  amortized-analysis  complexity-theory  graphs  np-complete  reductions  np-hard  algorithms  string-metrics  computability  artificial-intelligence  halting-problem  turing-machines  computation-models  graph-theory  terminology  complexity-theory  decision-problem  polynomial-time  algorithms  algorithm-analysis  optimization  runtime-analysis  loops  turing-machines  computation-models  recurrence-relation  master-theorem  complexity-theory  asymptotics  parallel-computing  landau-notation  terminology  optimization  decision-problem  complexity-theory  polynomial-time  counting  coding-theory  permutations  encoding-scheme  error-correcting-codes  machine-learning  natural-language-processing  algorithms  graphs  social-networks  network-analysis  relational-algebra  constraint-satisfaction  polymorphisms  algorithms  graphs  trees 

1
型付きのSKI計算はありますか?
私たちのほとんどは、組み合わせ論理とラムダ計算の間の対応を知っています。しかし、単純に型付けされたラムダ計算に対応する「型付きコンビネーター」に相当するものを見たことはありません(おそらく十分に深く見ていないかもしれません)。そのようなものは存在しますか?それに関する情報はどこにありますか?

4
型と種類の違いは何ですか?
私はプログラミング言語のHaskellを学んでおり、a typeとaの違いが何であるかについて頭を包み込もうとしてkindいます。 私が理解しているように、a kind is a type of type。例えば、a ford is a type of carそしてa car is a kind of vehicle。 これはこれについて考える良い方法ですか? 私の脳は、現在配線されている方法で、そのためford is a **type** of car、しかしまたcar is a **type** of vehicle一方で、同時にaのcar is a **kind** of vehicle。すなわち用語typeとkind交換可能です。 誰もこれに光を当てることができますか?

3
型システムの分類(強い/弱い、動的/静的)
要するに、型システムは学術的文脈でどのように分類されるのか。特に、異なる種類の型システム間の区別を明確にする信頼できるソースをどこで見つけることができますか? ある意味で、この質問の難しさは、答えを見つけることができないということではなく、むしろあまりにも多く見つけることができ、どれも正しいと際立っていないことです。背景は、Haskell wikiのタイピングに関する記事を改善しようとしていることです。現在、次の区別を主張しています: 型なし:言語には型の概念がない、または型付きの観点から:言語には型が1つだけあります。アセンブリ言語のタイプは「ビットパターン」のみ、RexxとTkのタイプは「テキスト」のみ、コアMatLabのタイプは「複素数値行列」のみです。 弱い型付け:識別型はほとんどなく、いくつかの型の同義語もあります。たとえば、Cはブール値、整数、文字、ビットセット、および列挙に整数を使用します。 強い型付け:Ada、Wirthian言語(Pascal、Modula-2)、Eiffelのようなきめ細かい型のセット これは、私の個人的な認識とはまったく反対です。 弱い型付け:オブジェクトには型がありますが、コンテキストが要求すると、暗黙的に他の型に変換されます。たとえば、Perl、PHP、およびJavaScriptはすべて、"1"、多かれ少なかれ可能なコンテキストで使用できる1です。 強い型付け:オブジェクトには型があり、暗黙的な変換はありません(ただし、シミュレートするためにオーバーロードが使用される場合があります)ので、間違ったコンテキストでオブジェクトを使用するとエラーになります。Pythonでは、文字列または浮動小数点で配列のインデックスを作成すると、TypeError例外がスローされます。Haskellでは、コンパイル時に失敗します。 私は、私よりもこの分野で経験のある他の人々にこのことについて意見を求めました。 弱いタイピング:データに対する無効な操作の実行は制御または拒否されませんが、無効/任意の結果を生成するだけです。 厳密な型指定:データの操作は、データが操作と互換性がある場合にのみ許可されます。 私が理解するように、最初と最後の特性化はCを弱く型付けし、2番目はCを強く型付けしたと呼びます。最初と2番目は弱い型のPerlとPHPを呼び出し、3番目は強い型のPerlとPHPを呼び出します。3つすべてがPythonを厳密に型指定されていると説明します。 ほとんどの人は「まあ、コンセンサスはなく、用語の受け入れられた意味はない」と言うだろうと思う。それらの人々が間違っている場合、私はそれについて聞いてうれしいですが、彼らが正しい場合、どのようにか CSの研究者が説明し、タイプのシステムを比較しますか?問題の少ない用語を使用できますか? 関連する質問として、私は動的/静的な区別が「コンパイル時間」と「実行時間」の観点からしばしば与えられると感じます。言語がコンパイルされるかどうかはその言語の特性ではないので不満足だと思いますその実装として。動的タイピングと静的タイピングの純粋に意味論的な記述があるべきだと思います。「静的言語とは、すべての部分式を入力できるもの」の行に沿ったものです。この概念を明確にする考え、特に参考文献をいただければ幸いです。

1
推論を決定できる最も強力な既知の型システムは何ですか?
Hindley-Milner型推論(多型を持つ単純に型付けされた -calculus)には決定可能な型推論があることはよく知られています:注釈なしでプログラムの基本型を再構築できます。λλ\lambda Haskellスタイルのタイプクラスを追加すると、この決定可能性が保持されるように見えますが、さらに追加すると、注釈のない推論が決定不能になります(タイプファミリー、GADT、依存タイプ、ランクNタイプ、システムなど)ωω\omega 私は疑問に思っています:完全に決定可能な推論を持つ最も強力な既知の型システムは何ですか?Hindley-Milner(完全に決定可能)と依存型(完全に決定不能)の間のどこかにあります。推論の決定可能性を保持する追加可能なDTの側面はありますか?これをどれだけプッシュできるかを調べるために、どのような研究が行われましたか? 単一の最強システムは存在せず、推論を維持しながらHMに追加できる無限の小さな増分的な変更が存在する可能性が高いことを認識しています。しかし、システムの実用的な候補がいくつか発見されている可能性があります。 編集:「最強の」システムがないことを考えると、決定可能な推論でHindley Milnerを拡張する注目すべきシステムの概要を示す回答を受け入れます。例としては、液体タイプ、ランク2などがあります。

2
ベータ等価とは何ですか?
この質問は、コンピューターサイエンススタック交換で回答できるため、理論的なコンピューターサイエンススタック交換から移行されました。 7年前に移行され ました。 私が現在ラムダ計算で読んでいるスクリプトでは、ベータ等価は次のように定義されています。 -equivalence含まれている最小の等価である。≡ β → βββ\beta≡β≡β\equiv_\beta→β→β\rightarrow_\beta それが何を意味するのか分かりません。誰かがそれをより簡単な言葉で説明できますか?たぶん例を挙げて? チャーチ・ラッサーの定理から続く補題のためにそれが必要です M Nの場合、M LおよびN \ twoheadrightarrow_ \ beta LのLがあります。≡β≡β\equiv_\beta↠β↠β\twoheadrightarrow_\beta↠β↠β\twoheadrightarrow_\beta

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