流、计算证明和 Dafny

主要观点:

  • 展示计算性证明的优雅方式,通过建立等式链证明首尾陈述相等,如在 Dafny 中使用calc支持计算性证明。
  • 指出列表是归纳数据类型,在计算性证明中可使用归纳策略,而流是余归纳数据类型则情况不同。
  • 介绍一种基于受限流方程有唯一解的证明策略来证明两个流相等。

关键信息:

  • 在 Dafny 中通过calc证明Append(Repeat(m, elm), Repeat(n, elm)) == Repeat(m + n, elm)
  • Nats()为例说明流的相关证明,其等于Alternate(Mul(Repeat(2), Nats()), Add(Mul(Repeat(2), Nats()), Repeat(1)))但不易直接证明。
  • 证明s == Cons(0, Add(Repeat(1), s))有唯一解Nats(),并通过计算性证明展示Alternate(Mul(Repeat(2), Nats()), Add(Mul(Repeat(2), Nats()), Repeat(1)))满足该方程。

重要细节:

  • 证明过程中使用归纳假设Append(Repeat(m - 1, elm), Repeat(n, elm)) = Repeat(m - 1 + n, elm)
  • 在 Dafny 中通过greatest lemma等方式进行相关证明,且 Dafny 在背后进行大量工作来寻找证明,如证明UpwardsUniqueFixedPoint依赖(超限)归纳。
阅读 9
0 条评论