进一步终止检查agda,现在具有索引关系

时间:2017-01-23 22:47:56

标签: functional-programming agda dependent-type formal-verification

假设我有一个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的实例参数。

我在论文中坚持这一点,真的很感激一些帮助 非常感谢你!
还有关于堆栈溢出的第一篇文章,如果需要澄清,请告诉我。

0 个答案:

没有答案