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)
(它定义了一个语法)。完成这两项更改后,您就可以继续了。
我仍在努力了解平等关系以及如何在 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)
(它定义了一个语法)。完成这两项更改后,您就可以继续了。