Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Prove a basic lemma in Isabelle

Tags:

isabelle

I'm working on a project using Isabelle.

For some reason I have to simulate a bit/byte system, like this:

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

I use (B T T T T T T T T) to represent (11111111), (B F F F F F F F F) to represent (00000000).

But I can not prove such an obvious lemma: b != b + 1

I really need some help.

like image 778
njuguoyi Avatar asked Oct 31 '25 11:10

njuguoyi


2 Answers

You should also take a look at the existing library for machine words over bits: $ISABELLE_HOME/src/HOL/Word/Word.thy

That is quite advanced stuff, though, but for real applications it is worth investing time to figure out how it works.

like image 174
Makarius Avatar answered Nov 04 '25 08:11

Makarius


You will need to make a case distinction over the parameter b so that you can apply the simp rules for byte_inc. Just do "by (cases b rule: byte_inc.cases, simp_all)"

like image 43
Manuel Eberl Avatar answered Nov 04 '25 09:11

Manuel Eberl



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!