我對coq很新穎,迄今爲止我設法證明了我也可以通過手工證明的東西。所以當我遇到Selection monad並決定在haskell中實現它時,我認爲這將是一個很好的練習,但我被卡住了。有人能提供一個coq證明的例子,說明選擇monad是應用程序和monad嗎?這是一個函數的haskell實現。Coq證明選擇monad是應用程序和monad
newtype Sel r a = Sel { runSel :: (a -> r) -> a }
instance Functor (Sel r) where
fmap ab (Sel ara) = Sel (ab . ara . (. ab))
額外的感謝,如果你也能也證明了單子法律。
編輯:這是我的證明函子存在:
Definition sel (R A : Type) := (A -> R) -> A.
Theorem functor_exists : forall (R A B : Type),
(A -> B) -> sel R A -> sel R B.
intros R A B. unfold sel. intros AB ARA BR.
apply AB. apply ARA. intro. apply BR. apply AB. exact X.
Qed.
當我第一次開始使用勒柯克,我重新實現的定義和引理從這個[「教程」(https://pdp7.org/blog/2011/01/the-maybe-monad-in- coq /),然後切換到其他(更有趣)monad。 – ichistmeinname
我已經完成了這些,但我似乎無法做到超出這一點。我認爲這對一個經驗豐富的coq-ist來說很簡單,這就是我發佈的原因,但我可能是錯的。 – fakedrake
但是我猜你可以提供Coq代碼,這樣你就可以看到你陷入困境的具體情況了嗎? – ichistmeinname