我试图证明列表中的大小(元素数量)是非负的,但 Leon 未能证明这一点——它只是超时了。Leon 真的无法证明这个属性,还是我用错了?我的出发点是我在“Leon 验证系统概述”一文中读到的一个函数。
import leon.lang._
import leon.annotation._
object ListSize {
sealed abstract class List
case class Cons(head: Int, tail: List) extends List
case object Nil extends List
def size(l: List) : Int = (l match {
case Nil => 0
case Cons(_, t) => 1 + size(t)
}) ensuring(_ >= 0)
}