鉴于我对代码生成有一个非常简单的定义。它仅针对某些情况定义,否则会抛出运行时异常。
definition "blubb a = (if P a then True else undefined)"
现在我想显示blubb
正确。应该忽略抛出异常的情况(从我的观点来看,不是数学观点)。但是,我最终得到一个子目标,假设某个任意值X
为undefined
。以下引理或多或少等同于子目标。我想显示False
,因为我想忽略抛出异常的情况(即返回undefined
)。
lemma "X = undefined ⟹ False"
这是不可证明的。
try
Nitpick found a counterexample for card 'a = 1:
Free variable:
X = a1
显示可能抛出异常或处理undefined
的函数的正确性的最佳方法是什么?
这与this问题有关。
答案 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)
的值。