這是一個幾乎有效zipWith
定義莫提:如何在Morte中輸入zipWith?
zipWith
= λ (u : *)
-> λ (f : (u -> u -> u))
-> λ (a : (#List u))
-> λ (b : (#List u))
-> λ (List : *)
-> λ (cons : (u -> List -> List))
-> λ (nil : List)
-> ((λ (A:*) -> λ (B:*) ->
(a (B -> List)
(λ (h:u) -> λ (t : (B -> List) -> λ k : B -> (k h t)))
(λ (k:B) -> nil)
(b (u -> A -> List)
(λ (h:u) -> λ (t:(u -> A -> List)) -> λ (H:u) -> λ (k:A) -> (cons (f h H) (k t)))
(λ (H:u) -> λ (k:A) -> nil)))
) (fix A . ((u -> A -> List) -> List))
(fix B . (u -> (B -> List) -> List)))
它實際上並沒有分型由於使用的fix
,這莫提缺乏。去年有András posted this clever Agda solution without fix
。儘管如此,它對Morte的翻譯並不明顯,因爲它也缺乏歸納類型。如何解決這個問題?
編輯:好像我的zipWith與fix
不正確。但是,This one似乎檢查。