假设我有
一种用于线性λ微积分项的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
,该功能可以将术语简化为普通形式。由于我认为这是一种常见情况,因此我的问题是:在阿格达市通常情况如何?我如何说服减小其参数大小的函数可以递归应用并最终终止?
答案 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