我正在使用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 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
我使用(B T T T T T T T T)来表示(11111111),(B F F F F F F F F)来表示(00000000)。
但我不能证明这么明显的引理:b!= b + 1
我真的需要一些帮助。
答案 0 :(得分:4)
您需要对参数b
进行区分,以便可以对byte_inc应用simp规则。只需做“by(case b rule:byte_inc.cases,simp_all)”
答案 1 :(得分:3)
您还应该查看现有的库中的机器字比特:$ISABELLE_HOME/src/HOL/Word/Word.thy
这是非常先进的东西,但对于真正的应用程序,值得花时间去弄清楚它是如何工作的。