如何从明显的尺寸减小证明过渡到停止减小算法?

时间:2019-10-24 23:20:58

标签: agda

假设我有

  • 一种用于线性λ微积分项的Linear : Set类型。

  • 一个reduce-once : Term → Term函数,用于全局减少Redex。

  • 一个size : Linear → Nat关系,该关系计算构造函数的数量。

  • 证明reduce-once-halts : (t : Linear) → size (reduce-once t) < size t

也就是说,我有一个证明,应用reduce-once总是会减少字词的大小。因此,从逻辑上讲,应该能够实现终止功能reduce : (t : Linear) → Sigma t IsNormalized,该功能可以将术语简化为普通形式。由于我认为这是一种常见情况,因此我的问题是:在阿格达市通常情况如何?我如何说服减小其参数大小的函数可以递归应用并最终终止?

1 个答案:

答案 0 :(得分:2)

您可以使用<-rec模块中的Data.Nat.Induction_<_进行有根据的归纳。在这种情况下,一种解决方案是对谓词“可以严格缩小小于n的项”进行归纳:

open import Data.Nat
open import Data.Nat.Induction
open import Data.Nat.Properties
open import Relation.Binary.PropositionalEquality

postulate
  Term : Set
  reduce-once : Term → Term
  size : Term → ℕ
  reduce-once-halts : (t : Term) → size (reduce-once t) < size t

reduce-aux : (n : ℕ) (t : Term) → size t < n → Term
reduce-aux = <-rec
  (λ n → (t : Term) → size t < n → Term)
  λ n h t size-t<n → h (size t) size-t<n (reduce-once t) (reduce-once-halts t)

reduce : Term → Term
reduce t = reduce-aux (1 + size t) t ≤-refl