lib: Word_Lemmas: sign_extended addition and ~~mask lemmas

This commit is contained in:
Rafal Kolanski 2018-01-22 23:25:31 +11:00 committed by Joel Beeren
parent 334949125c
commit d99efd0dd5
1 changed files with 32 additions and 0 deletions

View File

@ -5640,4 +5640,36 @@ lemma of_nat_eq_signed_scast:
= (of_nat x = (scast y :: 'a word))"
by (metis scast_of_nat scast_scast_id(2))
lemma sign_extended_add:
assumes p: "is_aligned p n"
assumes f: "f < 2 ^ n"
assumes e: "n \<le> e"
assumes "sign_extended e p"
shows "sign_extended e (p + f)"
proof (cases "e < size p")
case True
note and_or = is_aligned_add_or[OF p f]
have "\<not> f !! e"
using True e less_2p_is_upper_bits_unset[THEN iffD1, OF f]
by (fastforce simp: word_size)
hence i: "(p + f) !! e = p !! e"
by (simp add: and_or)
have fm: "f && mask e = f"
by (fastforce intro: subst[where P="\<lambda>f. f && mask e = f", OF less_mask_eq[OF f]]
simp: mask_twice e)
show ?thesis
using assms
apply (simp add: sign_extended_iff_sign_extend sign_extend_def i)
apply (simp add: and_or word_bw_comms[of p f])
apply (clarsimp simp: word_ao_dist fm word_bw_assocs split: if_splits)
done
next
case False thus ?thesis
by (simp add: sign_extended_def word_size)
qed
lemma sign_extended_neq_mask:
"\<lbrakk>sign_extended n ptr; m \<le> n\<rbrakk> \<Longrightarrow> sign_extended n (ptr && ~~ mask m)"
by (fastforce simp: sign_extended_def word_size neg_mask_bang)
end