1
タイプポイントインスタンスのコンテキストで固定小数点スタイル関数を使用しようとしていますが、動作していないようです。この仕事をするために何か余計なことがありますか?当分の間、タイプクラスの外で関数を移動し、明示的にFixpointとして宣言するハックを使用しました。しかし、これはひどいようです。ここでタイプクラスインスタンスのFixpoint関数
は短い例です:
Inductive cexp : Type :=
| CAnd : cexp -> cexp -> cexp
| COr : cexp -> cexp -> cexp
| CProp : bool -> cexp.
Class Propable (A : Type) := { compile : A -> Prop }.
Instance: Propable cexp :=
{ compile c :=
match c with
| CAnd x y => (compile x) /\ (compile y)
| COr x y => (compile x) \/ (compile y)
| CProp _ => False
end
}.
これはで失敗します。
Error: Unable to satisfy the following constraints:
In environment:
c, x, y : cexp
?Propable : "Propable cexp"
何一つは、この作品を作るために関係があるのでしょうか?
しかし、私は "シンプルな"戦術を適用すると、識別子付きの簡単な数式ではなく、巨大な難解な修正点の定義を得ることに気づいています。関数全体をインラインで表示するのではなく、よりよく見える識別子を作成するようCoqに指示する方法はありますか? – jsinglet
これは頻繁に発生する問題です。これらの質問は、[1](https://stackoverflow.com/q/39355817/2747511)、[2](https://stackoverflow.com/q/28432187/2747511)、[3](https ://stackoverflow.com/q/41404337/2747511)。 'fold'が助けになることはありますが(まれにしかありません)、削減がどこで起こるかをよりよくコントロールする必要があるかもしれません。それらが助けにならないなら、私に実際のコードへのリンクを送ってください - 私はそれを調べようとします。 –