Isabelle/HOL 中未定义

undefined in Isabelle/HOL

我试图在 Isabelle/HOL 中证明这个引理。

lemma "(0::nat) ≠ undefined"

但是挑剔的人找到了这个和它的否定的反例

lemma "(0::nat) = undefined"

这怎么可能?我查了一下 undefined 是如何定义的,它是一个公理:

axiomatization undefined :: 'a

但这仍然是经典逻辑,对吧?所以 "(0::nat) = undefined""(0::nat) ≠ undefined" 应该为真。


背景:

我有一个函数类型:

type_synonym myfun = "nat ⇒ nat"

并且我在语言环境中对其图像和域施加了限制。当我尝试采用特定函数并证明它满足语言环境中的所有条件时,我遇到了问题,因为某些条件仅适用于未定义的值。

提前谢谢你:)

通过公理化,每种类型都有一个指定值,即undefined。这不是某个超出该类型正常范围的单独值,即 undefined :: nat 是一个自然数,但您不知道它是 哪个 自然数,并且在事实上,您将无法证明关于 undefined 的任何重要 属性。在这种情况下,一个简单的 属性 是一个适用于 所有 类型值的值。

因此,陈述 undefined ≠ (0 :: nat) 在 Isabelle/HOL 中不可证明,它的否定也不可证明(除了错误和不一致)。

特别是对于undefined :: bool,我们知道undefined = True ∨ undefined = False,但是同样,您将无法证明undefined = Trueundefined = False

对于单位类型(仅由值() :: unit组成的单元素类型),但是,你可以证明undefined = (),因为这个是一个微不足道的 属性.

至于你原来的问题,听起来好像你必须改变你在你的应用程序中建模不确定性的方式。由于您没有提供有关您在做什么的任何详细信息,因此实际上不可能就该做什么提供任何具体建议。但是试图证明关于 undefined 的任何事情都是行不通的。