Theory NotPhase
subsection ‹NotNode Phase›
theory NotPhase
imports
Common
begin
phase NotNode
terminating size
begin
lemma bin_not_cancel:
"bin[¬(¬(e))] = bin[e]"
by auto
lemma val_not_cancel:
assumes "val[~(new_int b v)] ≠ UndefVal"
shows "val[~(~(new_int b v))] = (new_int b v)"
by (simp add: take_bit_not_take_bit)
lemma exp_not_cancel:
"exp[~(~a)] ≥ exp[a]"
apply auto
subgoal premises p for m p x
proof -
obtain av where av: "[m,p] ⊢ a ↦ av"
using p(2) by auto
obtain bv avv where avv: "av = IntVal bv avv"
by (metis Value.exhaust av evalDet evaltree_not_undef intval_not.simps(3,4,5) p(2,3))
then have valEval: "val[~(~av)] = val[av]"
by (metis av avv evalDet eval_unused_bits_zero new_int.elims p(2,3) val_not_cancel)
then show ?thesis
by (metis av evalDet p(2))
qed
done
text ‹Optimisations›
optimization NotCancel: "exp[~(~a)] ⟼ a"
by (metis exp_not_cancel)
end
end