如何用“未定义”常量证明代码正确性引理

时间:2013-03-20 01:03:57

标签: code-generation isabelle

鉴于我对代码生成有一个非常简单的定义。它仅针对某些情况定义,否则会抛出运行时异常。

definition "blubb a = (if P a then True else undefined)"

现在我想显示blubb正确。应该忽略抛出异常的情况(从我的观点来看,不是数学观点)。但是,我最终得到一个子目标,假设某个任意值Xundefined。以下引理或多或少等同于子目标。我想显示False,因为我想忽略抛出异常的情况(即返回undefined)。

lemma "X = undefined ⟹ False"

这是不可证明的。

  try

Nitpick found a counterexample for card 'a = 1:
 Free variable:
  X = a1

显示可能抛出异常或处理undefined的函数的正确性的最佳方法是什么? 这与this问题有关。

1 个答案:

答案 0 :(得分:2)

undefined是伊莎贝尔的一个常数,你对此一无所知。特别是,您通常无法证明X ≠ undefined

如果要编写仅对某些输入有效的函数,可以考虑使用'a option类型,如下所示:

definition "blubb a ≡ (if P a then Some True else None)"

然后在您的证明中假设blubb a定义如下:

lemma "∃x. blubb a = Some x ⟹ Q (blubb a)"
  ...

或简单地说:

lemma "a ∈ dom blubb ⟹ Q (blubb a)"
  ...

然后可以使用blubb a提取the (blubb a)的值。