证明有充分理由的递归的等价性

时间:2014-10-09 18:06:20

标签: termination agda

回答这个问题Assisting Agda's termination checker,证明递归是有充分根据的。

鉴于如此定义的功能(以及Vitus的所有其他内容,请在那里回答):

f : ℕ → ℕ
f n = go _ (<-wf n)
  where
  go : ∀ n → Acc n → ℕ
  go zero    _       = 0
  go (suc n) (acc a) = go ⌊ n /2⌋ (a _ (s≤s (/2-less _)))

我看不出如何证明f n == f ⌊ n /2⌋。 (我的实际问题有不同的功能,但问题似乎归结为同样的事情)

我的理解是go以不同的方式计算Acc n。我想,f n可以显示通过Acc ⌊ n /2⌋计算a _ (s≤s (/2-less _))f ⌊ n /2⌋通过Acc ⌊ n /2⌋计算<-wf ⌊ n /2⌋,所以他们不能看得一样。

在我看来证明 - 必须以某种方式使用无关性,说它只有Acc n的实例,无论怎么计算 - 但我尝试使用它的任何方式,它似乎污染了一切有限制(例如模式匹配不起作用,或无法应用不相关的功能等)。

0 个答案:

没有答案