证明Isabelle中的一个基本引理

证明Isabelle中的一个基本引理,isabelle,Isabelle,我在用伊莎贝尔做一个项目 出于某种原因,我必须模拟位/字节系统,如下所示: type_synonym bit = bool datatype byte = B bit bit bit bit bit bit bit bit fun byte_inc :: "byte => byte" where "byte_inc (B a7 a6 a5 a4 a3 a2 a1 False) = (B a7 a6 a5 a4 a3 a2 a1 True)" | "byte_inc (B a7 a6 a5

我在用伊莎贝尔做一个项目

出于某种原因,我必须模拟位/字节系统,如下所示:

type_synonym bit = bool
datatype byte = B bit bit bit bit bit bit bit bit

fun byte_inc :: "byte => byte" where
"byte_inc (B a7 a6 a5 a4 a3 a2 a1 False) = (B a7 a6 a5 a4 a3 a2 a1 True)" |
"byte_inc (B a7 a6 a5 a4 a3 a2 False True) = (B a7 a6 a5 a4 a3 a2 True False)" |
"byte_inc (B a7 a6 a5 a4 a3 False True True) = (B a7 a6 a5 a4 a3 True False False)" |
"byte_inc (B a7 a6 a5 a4 False True True True) = (B a7 a6 a5 a4 True False False False)" |
"byte_inc (B a7 a6 a5 False True True True True) = (B a7 a6 a5 True False False False False)" |
"byte_inc (B a7 a6 False True True True True True) = (B a7 a6 True False False False False False)" |
"byte_inc (B a7 False True True True True True True) = (B a7 True False False False False False False)" |
"byte_inc (B False True True True True True True True) = (B True False False False False False False False)" |
"byte_inc (B True True True True True True True True) = (B False False False False False False False False)"

lemma [simp]: "b ≠ byte_inc b"
sorry
我用(bt T T T T)表示(11111111),(bf F F F)表示(00000000)

但我无法证明这样一个显而易见的引理:b!=b+1


我真的需要一些帮助

您需要对参数
b
进行大小写区分,以便您可以应用byte_inc.的simp规则。只需执行“by(cases b rule:byte_inc.cases,simp_all)”

您还应该查看现有的机器字库中的位:
$ISABELLE_HOME/src/HOL/Word/Word.thy


虽然这是非常高级的东西,但对于真正的应用程序来说,花时间研究它是值得的。

与您的问题没有直接关系,但您可能想看看Isabelle附带的
Word
软件包。你的定理可以是
(b::8个单词)≠ b+1
,可以通过
应用simp
来解决。请注意,“by(cases,simp_all)”是伊莎贝尔/Isar中初学者的一个非常常见的错误。正确的形式是“按案例simp____________________________________________。它很容易使用。谢谢