問題タブ [idris]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
idris - 暗黙の引数を明示的に指定するにはどうすればよいですか?
このシグネチャを持つ関数があるとします。
myNatToFin k (S k)
別の関数の本体でこのように適用しようとすると、エラーが発生します。
したがって、明示的に証明を渡す必要があるとGT (S k) k
思いますが、これを行う方法がわかりません。これがコンパイルされるように、暗黙の証明引数を明示的に渡すにはどうすればよいですか?
dependent-type - Idris でのカテゴリーの定義
Idris 型の内部で検証済みのカテゴリを定義しようとしていますが、私のアプローチでは型チェックが行われません。
ob
はオブジェクトの型、は からまでmor a b
の射の型です。適切な単位と結合法則はまだありますが、私の定義は既に機能していません。それは言います:a
b
l
私はそれが紛らわしいと思います。unit a
typemor a a
をf
持っている、 type を持っているmor a b
、どうしてcomp (unit a) f
typemor a b
も持たないの?
dependent-type - Idris で、パラメーターにインデックスの関数を使用する「vect ジェネレーター」関数を作成する方法
Idris に、Vect のサイズを渡して Vect を作成する関数と、パラメータでインデックスを取得する関数を書き込もうとしています。これまでのところ、私はこれを持っています:
しかし、パラメーターで渡された関数が、Vect のサイズよりも小さいインデックスのみを取得していることを確認したいと思います。私はそれを試しました:
しかし、エラーでコンパイルされません
私の質問は次のとおりです。私がやりたいことは可能ですか?
idris - イドリスの中間型について混乱
私は、いくつかの適切な形式の側面の制約を保証し、その中でミューバインディングを展開できるようにする、おもちゃの通常の型システムを実装しようとしています。これらの型を表すデータ型には、固定小数点のコンストラクター ( Mu
)、最も近い Mu 境界項による置換 ( Var
)、ゼロおよび 1 つの引数型演算子 (それぞれNullary
およびUnary
) が含まれます。
これらの型が適切な形式であることを確認するために、ヘッド コンストラクターとして a を持っているか、ヘッド コンストラクターとしてa を持っているか、またはその中のどこかに aBool
があるかを、3 つのパラメーターとして追跡します。Mu
Var
Var
Mu ヘッド型の展開を実装するには、置換を実行する必要があります。具体的には、「Mu x. F ====> F[(Mu x. F)/x]」を実装する必要があります。
3 番目の型パラメーターが機能することの証明を生成する必要があることを除けば、この関数subst
は簡単に見えます。
この戻り値の型を少しクリーンアップするラッパーを作成しようとしましたが、失敗しました。
このメタ変数を解こうとすると、期待どおりでaeq : x = c2 && Delay c2
はないことがわかりましaeq : x = c2 && Delay c1
た (( &&
) が 2 番目の引数で遅延していることを思い出してください)。
私は何か間違ったことをしていますか?これは予想される動作ですか?FWIW、展開用の非常によく似たラッパーを正常に作成しました(表示されていません)。
idris - イドリスの素数
idris 0.9.17.1 では、
https://wiki.haskell.org/Prime_numbersからインスピレーションを得て、素数を生成する次のコードを作成しました
REPL で、私が書くtake 10 primes
と、REPL は正しく表示されます[2, 3, 5, 11, 13, 17, 19, 29, 31, 37] : List Int
しかし、試し:exec
ても何も起こらず、取得したプログラムをコンパイルして実行しようとすると、Segmentation fault: 11
誰かがこの問題をデバッグするのを手伝ってくれますか?
idris - Idris での簡単な構文上の等価性
データ型の等価 ( DecEq
) インスタンスを記述する簡単な方法はありますか? たとえば、次のDecEq
宣言には O(n) 行が必要です。ここで、?p
は単純なものです。
idris - 統合の失敗を解読するための :set showimplicits よりも有益なものはありますか?
統合エラーを追跡するための :set showimplicits よりも有益なものはありますか? 私は現在これを取得していますが、ここからどこへ行くべきかわかりません:
agda - 自由なグループを表す良い方法は何ですか?
自由マグマ (二分葉木)、自由半群 (非空リスト)、自由モノイド (リスト) を表現するのは簡単で、それらが実際に主張しているものであることを証明するのは難しくありません。しかし、無料のグループはもっとトリッキーに思えます。List (Either a)
通常の表現を使用するには、少なくとも 2 つのアプローチがあるようです。
- その場合とその逆の要件を型にエンコードし
Left a :: Right b :: ...
ますNot (a = b)
。これらを構築するのは少し難しいようです。 Left a :: Right a :: ...
ペアの任意の挿入/削除 (およびその逆)を許可する等価関係に取り組みます。この関係を表現することは、恐ろしく複雑に思えます。
他の誰かがより良いアイデアを持っていますか?
編集
唯一の答えが使用するオプション(1)は、最も一般的な設定では機能しないことに気付きました。特に、決定可能な平等を課すことなく群演算を定義することは不可能になります!
編集 2
私はこれを最初にGoogleに考えるべきでした。Joachim Breitnerが数年前に Agda でそれを行ったようです。彼の紹介の説明から、彼はオプション 1 から始めたようですが、最終的にはオプション 2 を選択したようです。彼のコードを見てみましょう。