Up to index of Isabelle/HOL/arrays
theory EffectMono = Effect:(* Title: HOL/MicroJava/BV/EffMono.thy ID: $Id: EffectMono.html,v 1.1 2002/11/28 16:11:18 kleing Exp $ Author: Gerwin Klein Copyright 2000 Technische Universitaet Muenchen *) header {* \isaheader{Monotonicity of eff and app} *} theory EffectMono = Effect: lemmas eff_defs [simp del] lemma in_address_types_finite: "x \<subseteq> address_types G mxs mxr mpc \<Longrightarrow> finite x" apply (drule finite_subset) apply (rule finite_address_types) apply assumption done lemma set_SOME_lists: "finite s \<Longrightarrow> set (SOME l. set l = s) = s" apply (erule finite_induct) apply simp apply (rule_tac a="x#(SOME l. set l = F)" in someI2) apply auto done lemma succs_mono: assumes s: "s \<subseteq> s'" assumes finite: "finite s'" shows "set (succs i pc s) \<subseteq> set (succs i pc s')" proof (cases i) case (Ret pc) from finite have "finite (theRA pc ` s')" by (rule finite_imageI) moreover from s finite have "finite s" by (rule finite_subset) hence "finite (theRA pc ` s)" by (rule finite_imageI) ultimately show ?thesis using s Ret by (auto simp add: set_SOME_lists) qed auto lemma succs_eff_mono: "\<lbrakk>s \<subseteq> s'; finite s'; \<forall>(pc', s')\<in>set (eff i G pc et s'). pc' < mpc \<rbrakk> \<Longrightarrow> \<forall>(pc', s')\<in>set (eff i G pc et s). pc' < mpc" apply (unfold eff_def xcpt_eff_def) apply auto apply (drule bspec) apply simp apply (rule disjI1) apply (rule imageI) apply (erule subsetD [OF succs_mono]) apply assumption apply assumption apply simp done lemma app_mono: "\<lbrakk>s \<subseteq> s'; finite s'; app i G C pc m mpc rT ini et s'\<rbrakk> \<Longrightarrow> app i G C pc m mpc rT ini et s" apply (unfold app_def) apply clarsimp apply (rule conjI) prefer 2 apply (rule succs_eff_mono, assumption+) apply auto apply (drule_tac x="((a,b),True)" in bspec) apply auto done end
lemmas
eff i G pc et at == map (%pc'. (pc', norm_eff i G pc pc' at)) (succs i pc at) @ xcpt_eff i G pc at et
norm_eff i G pc pc' at == eff_bool i G pc ` (if EX idx. i = Ret idx then {s. s : at & pc' = theRA (theIdx i) s} else at)
eff_bool i G pc == %((ST, LT), z). (eff' (i, G, pc, ST, LT), if EX C p D. i = Invoke_special C init p & ST ! length p = PartInit D then True else z)
xcpt_eff i G pc at et == map (%C. (the (match_exception_table G C pc et), (%s. (([Init (Class C)], snd (fst s)), snd s)) ` at)) (xcpt_names (i, G, pc, et))
lemma in_address_types_finite:
x <= address_types G mxs mxr mpc ==> finite x
lemma set_SOME_lists:
finite s ==> set (SOME l. set l = s) = s
lemma
[| s <= s'; finite s' |] ==> set (succs i pc s) <= set (succs i pc s')
lemma succs_eff_mono:
[| s <= s'; finite s'; ALL (pc', s'):set (eff i G pc et s'). pc' < mpc |] ==> ALL (pc', s'):set (eff i G pc et s). pc' < mpc
lemma app_mono:
[| s <= s'; finite s'; app i G C pc m mpc rT ini et s' |] ==> app i G C pc m mpc rT ini et s