問題タブ [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.

0 投票する
1 に答える
519 参照

idris - 暗黙の引数を明示的に指定するにはどうすればよいですか?

このシグネチャを持つ関数があるとします。

myNatToFin k (S k)別の関数の本体でこのように適用しようとすると、エラーが発生します。

したがって、明示的に証明を渡す必要があるとGT (S k) k思いますが、これを行う方法がわかりません。これがコンパイルされるように、暗黙の証明引数を明示的に渡すにはどうすればよいですか?

0 投票する
1 に答える
129 参照

dependent-type - Idris でのカテゴリーの定義

Idris 型の内部で検証済みのカテゴリを定義しようとしていますが、私のアプローチでは型チェックが行われません。

obはオブジェクトの型、は からまでmor a bの射の型です。適切な単位と結合法則はまだありますが、私の定義は既に機能していません。それは言います:abl

私はそれが紛らわしいと思います。unit atypemor a af持っている、 type を持っているmor a b、どうしてcomp (unit a) ftypemor a bも持たないの?

0 投票する
2 に答える
359 参照

dependent-type - Idris で、パラメーターにインデックスの関数を使用する「vect ジェネレーター」関数を作成する方法

Idris に、Vect のサイズを渡して Vect を作成する関数と、パラメータでインデックスを取得する関数を書き込もうとしています。これまでのところ、私はこれを持っています:

しかし、パラメーターで渡された関数が、Vect のサイズよりも小さいインデックスのみを取得していることを確認したいと思います。私はそれを試しました:

しかし、エラーでコンパイルされません

私の質問は次のとおりです。私がやりたいことは可能ですか?

0 投票する
1 に答える
86 参照

idris - イドリスの中間型について混乱

私は、いくつかの適切な形式の側面の制約を保証し、その中でミューバインディングを展開できるようにする、おもちゃの通常の型システムを実装しようとしています。これらの型を表すデータ型には、固定小数点のコンストラクター ( Mu)、最も近い Mu 境界項による置換 ( Var)、ゼロおよび 1 つの引数型演算子 (それぞれNullaryおよびUnary) が含まれます。

これらの型が適切な形式であることを確認するために、ヘッド コンストラクターとして a を持っているか、ヘッド コンストラクターとしてa を持っているか、またはその中のどこかに aBoolがあるかを、3 つのパラメーターとして追跡します。MuVarVar

Mu ヘッド型の展開を実装するには、置換を実行する必要があります。具体的には、「Mu x. F ====> F[(Mu x. F)/x]」を実装する必要があります。

3 番目の型パラメーターが機能することの証明を生成する必要があることを除けば、この関数substは簡単に見えます。

この戻り値の型を少しクリーンアップするラッパーを作成しようとしましたが、失敗しました。

このメタ変数を解こうとすると、期待どおりでaeq : x = c2 && Delay c2はないことがわかりましaeq : x = c2 && Delay c1た (( &&) が 2 番目の引数で遅延していることを思い出してください)。

私は何か間違ったことをしていますか?これは予想される動作ですか?FWIW、展開用の非常によく似たラッパーを正常に作成しました(表示されていません)。

0 投票する
1 に答える
335 参照

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

誰かがこの問題をデバッグするのを手伝ってくれますか?

0 投票する
1 に答える
503 参照

idris - Idris での簡単な構文上の等価性

データ型の等価 ( DecEq) インスタンスを記述する簡単な方法はありますか? たとえば、次のDecEq宣言には O(n) 行が必要です。ここで、?pは単純なものです。

0 投票する
1 に答える
25 参照

idris - 統合の失敗を解読するための :set showimplicits よりも有益なものはありますか?

統合エラーを追跡するための :set showimplicits よりも有益なものはありますか? 私は現在これを取得していますが、ここからどこへ行くべきかわかりません:紛らわしい統合エラーのスクリーンショット

0 投票する
1 に答える
150 参照

agda - 自由なグループを表す良い方法は何ですか?

自由マグマ (二分葉木)、自由半群 (非空リスト)、自由モノイド (リスト) を表現するのは簡単で、それらが実際に主張しているものであることを証明するのは難しくありません。しかし、無料のグループはもっとトリッキーに思えます。List (Either a)通常の表現を使用するには、少なくとも 2 つのアプローチがあるようです。

  1. その場合とその逆の要件を型にエンコードしLeft a :: Right b :: ...ますNot (a = b)。これらを構築するのは少し難しいようです。
  2. Left a :: Right a :: ...ペアの任意の挿入/削除 (およびその逆)を許可する等価関係に取り組みます。この関係を表現することは、恐ろしく複雑に思えます。

他の誰かがより良いアイデアを持っていますか?

編集

唯一の答えが使用するオプション(1)は、最も一般的な設定では機能しないことに気付きました。特に、決定可能な平等を課すことなく群演算を定義することは不可能になります!

編集 2

私はこれを最初にGoogleに考えるべきでした。Joachim Breitnerが数年前に Agda でそれを行ったようです。彼の紹介の説明から、彼はオプション 1 から始めたようですが、最終的にはオプション 2 を選択したようです。彼のコードを見てみましょう。