isabelle - 使用 SOME 的 Isabelle 术语之间的相等性

标签 isabelle

我有点惊讶

value "let x = SOME n. n ∈ {1::int,2} in x = x"

返回True。经过 β 扩展和 α 重命名后,该术语与:

value "(SOME na. na ∈ {1::int,2}) = (SOME nb. nb ∈ {1::int,2})"

我不明白为什么这种平等应该成立。为什么为 na 选择的值应与为 nb 选择的值相同?

最佳答案

左侧的项与右侧的项完全相同(模 alpha 转换)。因此,它们也具有相同的值(value)。在 HOL 中,相等(或者更确切地说 alpha 等价)项总是产生相等的值,因为它是确定性的。

你可以想到一些x。 P x 为您提供属性 P 所持有的任意但固定的值(如果存在这样的值,否则只是一些您对此一无所知的任意但固定的值)。特别是,具有相同参数的 SOME 的不同“调用”将始终给出相同的值。 THEundefined 等也是如此。

如果您想要真正的非确定性选择,则必须在 HOL 中使用不同的逻辑或建模非确定性。细化框架提供了一种非确定性单子(monad),其中每个操作都可以有零个、一个或多个可能的结果。

关于isabelle - 使用 SOME 的 Isabelle 术语之间的相等性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22749091/

相关文章:

isabelle - 伊莎贝尔的代数简化

isabelle - 如何在函数中使用复杂的模式?

functional-programming - 伊莎贝尔结构证明

logic - 伊莎贝尔中的 ⋀ 是什么意思?

isabelle - 如何在 Isabelle 证明中打印局部变量和 ?thesis(在 Isabelle 中调试)?

isabelle - 在 Isabelle 中将 &&& 形式的连词分解为子目标

Isabelle:在运行 Isabelle/jEdit 的普通电脑之外的另一台机器上运行 sledgehammer

isabelle - 从 Isabelle/HOL 到 HOL 的自动翻译

isabelle - 第一个伊莎贝尔例子

isabelle - 如何管理所有各种证明方法