1
我試圖在一個類型的類實例的上下文中使用固定點式的功能,但它似乎並沒有工作。有什麼額外的工作要做嗎?暫時我用移動式類外的函數,並明確聲明它不動點的黑客攻擊。然而,這看起來很糟糕。不動點函數類型類實例
下面是簡單的例子:
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'可以幫助(但很少做),也許你需要在減少發生,其中一個更好的控制。如果這些都無濟於事,請給我一個鏈接到實際的代碼 - 我會試着去查看它。 –