私は、Haskellでよく使われるCoqの非決定性(MonadPlusや一般的なリストよりもあまり知られていない)のあまり知られていないモナド符号化をモデル化しようとしました。例えば、リストのエンコーディングは、Coqの対応する定義が以下のようになるのに対して、リストのエンコーディングは、 Coqの非決定性コンポーネントを持つデータ構造
data List m a = Nil | Cons (m a) (m (List m a))
のようになります。
Inductive List (M: Type -> Type) (A: Type) :=
Nil: List M A
| Cons : M A -> M (List M A) -> List M A.
ただし、インダクティブデータタイプの「厳密にポジティブな」条件のため、この種の定義はCoqでは許可されていません。
私がCoq特有の答えや、Coqで正式化できるHaskellの代替実装を目指しているかどうかはわかりませんが、この問題を解決する方法については何かお勧めします。
あなたはおそらく([ 'Freer']を探しているhttp://okmij.org/ ftp/Haskell/extensible/more.pdf)のモナドとそこにある 'NDet'の効果です。すべてが厳密に肯定的であり、この表現は[確定した選択](http://okmij.org/ftp/papers/LogicT.pdf)であなたに非決定性を与えます。私はAgdaのそれ(https://github.com/effectfully/Eff/blob/master/Simple/Effect/NonDet.agda)を実装しましたが、コードは宇宙の多形性を扱うAgdaの方法のせいで恐ろしいです。 – user3237465
コミットされた選択(またはFLPコミュニティがコールするのが好きなのでコール時の選択)は、私がCoqで正式にしたいものです!私の現在のソースは、モナドで非決定論のFLP風のセマンティクスを明示的にモデリングしている[別の論文](http://homes.soic.indiana.edu/ccshan/rational/lazy-nondet.pdf)です。私はまだどのモデルがCoqで使用するのに最適かを理解しようとしているので、私は間違いなくOlegの「Freer」モナドによる表現を見ようとしています。紙(別の文脈のために)。だから、ありがとうございました! – ichistmeinname