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

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

1
自己型は帰納的構造の計算を時代遅れにしますか?
自己型は、言語がスコットエンコーディングでエンコードされた代数的データ型を表現できるようにする、構造の計算[1]の拡張です。Scott Encodingは、でパターンマッチングする機能を提供しますO(1)。これは、CCに帰納的定義を含める主な動機の1つです。しかし、自己型ははるかに単純でエレガントな基本理論を実現し、一見すると強力なようです。 セルフタイプは、理論的な観点から、CICを時代遅れにしますか、それとも、CICがSelf Tyesに関して有利であるいくつかの側面がありますか? [1] http://staff.computing.dundee.ac.uk/pengfu/document/talks/mvd-2012.pdf

1
型理論における「ポジティブポジション」と「ネガティブポジション」の意味は?
型理論の文脈で「ポジティブな位置」と「ネガティブな位置に」とはどういう意味ですか? このトピックに関するボブハーパーのブログ投稿から私が理解した唯一のことは、型理論におけるこの意味での極性と論理における極性との間に関係があるということですが、その関係が何であるかわかりません。

2
Hindley-Milner型システムのみを使用してリストを定義する
Hindley-Milner型推論システムが機能し、再帰的レッツ(リンクされたコードではない)もサポートする小さなラムダ計算コンパイラーに取り組んでいます。これは、チューリングを完全にするのに十分であることを理解しています。 問題は、リストをサポートする方法がわからない、またはすでにリストをサポートしているかどうかわからないこと、そしてそれらをエンコードする方法を見つける必要があることだけです。型システムに新しいルールを追加する必要なく、それらを定義できるようにしたいと思います。 私はリストの考えることができる最も簡単な方法xのいずれかであるものとしてあるnull(または空のリスト)、またはANの両方が含まペアxとのリストをx。しかし、これを行うには、ペアとorを定義できる必要があります。 このようにペアを定義できるようです: pair = λabf.fab first = λp.p(λab.a) second = λp.p(λab.b) 以来pairタイプを持つことになりa -> (b -> ((a -> (b -> x)) -> x))、通過した後、と言うintとstring、それはタイプで何かを得たい(int -> (string -> x)) -> xのペアの表現であろう、intとstring。ここで私が気になるのは、それがペアを表す場合、なぜそれが論理的に等価ではなく、命題を意味しないのint and stringかということです。ただし、と同等(((int and string) -> x) -> x)です。まるで、関数のパラメーターとして製品タイプしか持てないかのようです。この答えこの問題に対処しているようですが、彼が使用する記号の意味がわかりません。また、これが製品タイプを実際にエンコードしない場合、上記のペアの定義では実行できなかった製品タイプで実行できることはありますか(同じ方法でnタプルも定義できると考えて)?そうでない場合、これは含意のみを使用して(AFAIK)結合を表現できないという事実と矛盾しませんか? また、合計タイプはどうですか?関数タイプのみを使用してなんとかしてエンコードできますか?もしそうなら、これはリストを定義するのに十分でしょうか?それとも、タイプシステムを拡張せずにリストを定義する他の方法はありますか?そうでない場合、できる限りシンプルにしたい場合、どのような変更を加える必要がありますか? 私はコンピュータープログラマーですが、コンピューターサイエンティストでも数学者でもないので、数学の表記を読むのはかなり苦手です。 編集: これまでに実装したものの技術的な名前はわかりませんが、基本的には、上でリンクしたコードのみです。これは、アプリケーション、抽象化、変数のルールを使用する制約生成アルゴリズムですHinley-Milnerアルゴリズムから、次に主要な型を取得する統合アルゴリズムから。例えば、式は\a.aタイプが得られるa -> a、と表現は、\a.(a a)チェックエラーが発生したスローされます。これに加えて、letルールはありませんが、次の疑似コードのような再帰的なグローバル関数を定義できる同じ効果を持つように見える関数があります。 GetTypeOfGlobalFunction(term, globalScope, nameOfFunction) { // …

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

5
型理論の日常的な応用
型理論を理解したいのですが、まずどのようにそれを適用できるかを知る必要があります。プログラミングにおける型システムのほかに、型理論の自明ではないアプリケーションがもっとあるだろうか?他のアプリケーションがあるかもしれません、性格プロファイリングなどで言ってみましょうか?

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式がまだ含まれているのはなぜですか?それらには他の利点がありますか(特別なケースを必要としない以外に)?

1
型システムは、外部関数の証明アシスタントとして機能できますか?
とすれば: 非常に表現力豊かな型システムを持つ言語(例:Idris)は、外部関数インターフェース/ unsafePerformIOのようなエスケープメカニズムを持つこともできます。 これらのプロパティを表現できる型システムがない言語で書かれたプログラムのいくつかのプロパティを証明するために使用できる証明アシスタントがあります。 Curry–Howardの対応は、特定の型の関数の型チェックが正常に実装されていることが、その型で表現されているものの証明であることを示しています。 母国語の型システムで外国語コードのいくつかのプロパティの自明でない証明を表現できますか? たとえば、すでに等しい要素の順序を維持しながら数値を非常に賢く効率的な方法でソートするstable_qsortと呼ばれるC関数と、FFIを介してstable_qsortを呼び出すIdrisプログラムがあるとしますが、これは比較的あいまいですC関数。別の証明アシスタントを使用する代わりに、関数がすべての入力に対して、イドリスコードで等しい要素を並べ替えないことを証明できますか?

1
スーパーユニバースとは?
私はこのよく知られている論文をType TheoryのUniversesで読んでいます。最初Setωはアグダと似たようなものを期待していましたが、もっと一般的なものであることがわかりました。それは、単純な帰納的再帰型からバインダーへの宇宙構築を一般化しているようです(やΣと同様)。私が聞きたい主な質問は、その背後にある意図は何ですか?ΠΠ\PiΣΣ\Sigma 以下は、通常のTarskiスタイルのユニバースを定義するいくつかのイドリスコードです。 mutual public export data U : (level : Nat) -> Type where GroundU : Ground -> U level BinderU : Binder -> (a : U level) -> (b : (x : T {level} a) -> U level) -> U level UnivU : U (S level) LiftU : …

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

2
型推論+オーバーロード
開発中の言語の型推論アルゴリズムを探していますが、通常は次のいずれかであるため、自分のニーズに合った型推論アルゴリズムを見つけることができませんでした。 アラモスHaskell、多態性はあるがアドホックなオーバーロードはない アラカルトC ++(自動)で、アドホックなオーバーロードはあるが、関数は単相 特に、私のタイプシステムは(簡素化)です(Haskellish構文を使用していますが、これは言語に依存しません)。 data Type = Int | Double | Matrix Type | Function Type Type そして、私はかなりのオーバーロードを持っている演算子*を持っています: Int -> Int -> Int (Function Int Int) -> Int -> Int Int -> (Function Int Int) -> (Function Int Int) (Function Int Int) -> (Function Int Int) -> (Function Int …

1
Typeを想定した場合の誤った命題の例:Type
型理論では、型がそれ自体のメンバーになることを許可すると、理論に矛盾が生じます。私はそれを集合論のラッセルのパラドックスに類似して理解しますが、型理論でそれが行われるのを見たいと思います。型理論における同等の短い例はありますか?

1
型の安全性と型の健全性に違いはありますか?
私は型の安全性と型の健全性の定義をばらばらにしようとしてきました、そして私はそれの時間の一体を持っています。私は最近教授に尋ねました、そして少し考えた後、彼は本当に何の違いもなかったと言いました。ただし、これを読んだ後 は次のようになります。 型の安全性は、データへの関数(および演算子)の適用は意味がある(つまり、1 / "Hello"はナンセンスであり、許可されない)とする言語の特性です。 型の健全性は、型チェックシステムのプロパティであり、静的型予測が実行時に正確であることを保証します。 これは明らかに一人のメモであり、PLコミュニティ内に何らかの基準があるのか​​と思います。いくつか検索を行ったが、満足のいく答えが見つからなかった。

2
Haskellリストタイプはどのフィックスポイントですか?
リストが次のように定義されているとしましょう List a = Nil | Cons a (List a) 次に、HaskellでList x最大または最小の固定点は何ですか?lfpは無限リストを除外する必要がありますが(ただし、Haskellで作成できます)、gfpは有限リストを除外する必要があるためです。

1
型レベルでの連結の表現
スタックに基づいて、連結パラダイムに従って、小さな単純な言語を作成することにより、連結プログラミングについて詳しく学びたいと思います。 残念ながら、私は連結言語とそれらの実装に関する多くのリソースを見つけていません。そのため、私の可能なことを前もって申し訳ありません。 したがって、私は言語を関数の連結の単純なシーケンスとして定義し、ASTでリストとして表しています。 data Operation = Concat [Operation] | Quotation Operation | Var String | Lit Literal | LitOp LiteralOperation data Literal = Int Int | Float Float data LiteralOperation = Add | Sub | Mul | Div 次のプログラム4 2 swap dup * +(に対応2 * 2 + 4)が解析されると、次のASTが得られます。 Concat [Lit …

2
カテゴリー理論の形式はタイプ理論のそれを置き換えることができますか?
タイプ理論とカテゴリー理論の間の対応の微妙さは私のケンの外にあります。ただし、2つの歴史的に収束した分野間の関係についての私のナイーブな理解により、後者は前者を完全に包含しています。もしそうなら、カテゴリー理論家が使用する言語と形式的/グラフィック記述はタイプ理論家のものを置き換えることができますか?そして、それらは(例えば、教育学および学術出版において)すべきか? 異なる形式は、斬新な視点を刺激し、他の方法ではあいまいである可能性のある裸の概念的なつながりを築くことができます。しかし、方言の多様性はおそらく受容的な聴衆のサイズも制限します、そして、多声アプローチが取られるならば、博覧会の長さと複雑さは複雑になります。 カテゴリ理論がタイプ理論を包含する場合、2つの分野の弁証法の違いを維持する必要がありますか?歴史的または文化的価値のために?教育的または理論的な重点の異なるが顕著な違いを保持するには?これらは何でしょうか?

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