【发布时间】:2018-05-05 19:29:35
【问题描述】:
假设我有以下范围:
A : Set
xs = [x1, x2, ..., xn] : List A
f : A → Set
然后我可以使用Data.List.All 来创建一个包含y1 : f x1、y2 : f x2、...、yn : f xn 的类型:
ys = [y1, y2, ..., yn] : All f xs
我的问题是,假设我有另一个功能
g : {x : A} → f x → Set
标准库中有什么东西可以将其转换为AllAll g ys 类型,这样我就可以在某些zs = [z1, ..., zn] : AllAll g ys 中拥有z1 : g {x1} y1、z2 : g {x2} y2、...、zn : g {xn} yn?
为了澄清,这是我自己实现它的方法;我的问题是我是否必须这样做,或者我可以使用标准库中的某些内容(可能是Data.List.All 本身?):
data AllAll {A : Set} {f : A → Set} (g : {x : A} → f x → Set) : {xs : List A} → (ys : All f xs) → Set where
[] : AllAll g []
_∷_ : ∀ {x y xs ys} → g y → AllAll g ys → AllAll g {x ∷ xs} (y ∷ ys)
【问题讨论】:
标签: list standard-library agda