簡體   English   中英

Agda的遞歸方案

[英]Recursion Schemes in Agda

毋庸置疑,Haskell的標准結構

newtype Fix f = Fix { getFix :: f (Fix f) }

cata :: (Functor f) => (f a -> a) -> Fix f -> a
cata f = f . fmap (cata f) . getFix 

太棒了,非常有用。

試圖在Agda中定義類似的東西(我只是為了完整起見)

data Fix (f : Set -> Set) : Set where
    mkFix : f (Fix f) -> Fix f

失敗,因為f不一定是嚴格正面的。 這是有道理的 - 通過適當選擇,我很容易從這種結構中得到一個矛盾。

我的問題是:在Agda編碼遞歸方案有什么希望嗎? 它完成了嗎? 需要什么?

你會在Ulf Norell的規范Agda教程中找到這樣一個開發(在一個有限的仿函數范圍內)!

遺憾的是,並非所有通常的遞歸方案都可以真正編碼,因為所有“破壞性”的遞歸方案都會消耗數據,而所有“建構”的方法都會產生密碼數據,因此將一個進給到另一個的概念必然是部分的。 你可以在偏好monad中完成所有這一切,但這並不令人滿意。 當他們說Haskell的“真正的類別”是CPO⊥時,這或多或少是分類者正在做的事情,因為它的最初代數和終端余代數是重合的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM