Isabelle / isar:实施等式推理

Isabelle / isar: Implementing equational reasoning

我仍在努力了解平等关系以及如何在 Isabelle 中定义平等关系。幸运的是,在 isar 参考手册 2.3.1 p38f 中有一章是关于这个的。

我试图重建给定的例子。为了避免与已建立的语法有任何重叠,我重命名了所有内容。我还添加了一些引号,因为示例中似乎缺少它们。

theory playground
imports Main
begin

typedecl i_play
typedecl u_play

下一步是判断我不是很明白,但是嘿会出什么问题:

judgment
Trueprop :: "u_play => prop" ("_play" 5)

error: Attempt to redeclare object-logic judgment

即使重命名 Trueprop 也不会产生另一个结果。

我不能在这里使用 bool 而不是定义我自己的对象命题吗? 或者我需要在别的地方介绍u_play吗?

但让我们更进一步。接下来是等式关系,同样复制并重命名。

axiomatization
equal :: "i_play => i_play => u_play" (infix "EQ" 50)
where
refl [intro]: "x EQ x" and
subst [elim]: "x EQ y ⟹ B x ⟹ B y"

这会产生 Type unification failed: Clash of types "u_play" and "bool" 错误。当我用 bool 替换 u_play 时,一切都很好,我什至可以在像 lemma t : "x EQ x" 这样微不足道的东西中使用 EQ,但是替换规则似乎不起作用,这让我想到了什么那里有两个B。我已经在 HOL.thy 中看到了相同的构造,但 P's 而不是在 isar rm 的下方,它们被省略了。只是说明 impD [dest]: (A --> B) ==> A ==> B

需要做些什么才能使替代起作用?

理论playground 引入了定义很多的Main。如果你想从空地开始,你应该使用 Pure 代替。另一个问题是 ("_play" 5) 应该读作 ("_" 5) (它定义了一个语法)。完成这两项更改后,您就可以继续了。