我想在事先不知道具体实现的情况下使用 Leon 来验证规范。例如,假设我有一个排序函数,以及排序列表的定义:
def sort (list: List[BigInt]): List[BigInt] = {
...
} ensuring {
res => res.content == list.content && isSorted(res)
}
def isSorted (list: List[BigInt]): Boolean = {
list match {
case Nil() => true
case Cons(_, Nil()) => true
case Cons(x1, Cons(x2, xs)) => x1 <= x2 && isSorted(list.tail)
}
}
理想情况下,我应该能够证明引理,例如sort(sort(list)) == sort(list)
基于sort
单独的后置条件。否则,我不能声称适用于插入排序的 Leon 证明也适用于快速排序(实际上很少这样做)。Leon 是否有可能在不研究实现的情况下根据前置条件和后置条件进行推理?
谢谢!