假设我有一个A型的Monoid A
接下来,我有一个按此类型索引的数据结构 它有很好的递归结构,但事实并非如此 你想要合作的东西。
data F : A → Set where
...
因此,我按照以下的工作构建了这个 麦金纳,左起来的观点。
data V : A → Set where
nil : V ε
cons : ∀ {μ} → (x : A) → F μ → V (x ⊕ μ)
我可以构建一个函数
view : ∀ {μ} : F μ → V μ
我想要的是在Fμ
上实现递归函数f : ∀ {μ} : F μ → C μ (C could also be indexed)
f fs with view fs
f fs | nil = some value
f fs | cons x xs = op x (f xs)
Where op is some arbitrary operation.
这显然未通过终止检查,这就是我发布此问题的原因
我已经看到以前的答案与definind有充分理由的归纳有关 自然数,以及将其推广到多个arity函数的想法。
但是,标准库不适用于索引关系。
尝试编写这样的运算符:
data _<_ {μ x σ} : F σ → F μ → Set
<-cons: ∀ (f : F μ) → (g : F σ) → (view f ≡ cons x g) → (g < f)
甚至不进行类型检查,因为f的类型为Fμ而不是F(x⊕σ)
假设我可以证明这种关系是有根据的。 (在这种情况下不是因为我可以得到一个无限链ε⊕ε⊕⊕⊕..其中ε是我的幺半群的中性元素, 但我正在寻找一个可以做这种证明的一般框架)
为了简单起见,我已经排除了monoid的实例参数。
我在论文中坚持这一点,真的很感激一些帮助
非常感谢你!
还有关于堆栈溢出的第一篇文章,如果需要澄清,请告诉我。