simps: fixes a1 :: "s"   and a2 :: "v list"   and a3 :: "e list"   and a4 :: "nat"   and a5 :: "s"   and a6 :: "v list"   and a7 :: "e list" shows "\<lparr>a1;a2;a3\<rparr> \<leadsto>_ a4 \<lparr>a5;a6;a7\<rparr> = ((\<exists>e e' s vs i. a1 = s \<and> a2 = vs \<and> a3 = e \<and> a4 = i \<and> a5 = s \<and> a6 = vs \<and> a7 = e' \<and> \<lparr>e\<rparr> \<leadsto> \<lparr>e'\<rparr>) \<or> (\<exists>s vs j i. a1 = s \<and> a2 = vs \<and> a3 = [$Call j] \<and> a4 = i \<and> a5 = s \<and> a6 = vs \<and> a7 = [Callcl (sfunc s i j)]) \<or> (\<exists>s i c cl j tf vs. a1 = s \<and> a2 = vs \<and> a3 = [$C ConstInt32 c, $Call_indirect j] \<and> a4 = i \<and> a5 = s \<and> a6 = vs \<and> a7 = [Callcl cl] \<and> stab s i (nat_of_int c) = Some cl \<and> stypes s i j = tf \<and> cl_type cl = tf) \<or> (\<exists>s i c cl j vs. a1 = s \<and> a2 = vs \<and> a3 = [$C ConstInt32 c, $Call_indirect j] \<and> a4 = i \<and> a5 = s \<and> a6 = vs \<and> a7 = [Trap] \<and> (stab s i (nat_of_int c) = Some cl \<and> stypes s i j \<noteq> cl_type cl \<or> stab s i (nat_of_int c) = None)) \<or> (\<exists>cl j t1s t2s ts es ves vcs n k m zs s vs i. a1 = s \<and> a2 = vs \<and> a3 = ves @ [Callcl cl] \<and> a4 = i \<and> a5 = s \<and> a6 = vs \<and> a7 = [Local m j (vcs @ zs) [$Block ([] _> t2s) es]] \<and> cl = Func_native j (t1s _> t2s) ts es \<and> ves = $$* vcs \<and> length vcs = n \<and> length ts = k \<and> length t1s = n \<and> length t2s = m \<and> n_zeros ts = zs) \<or> (\<exists>cl t1s t2s f ves vcs n m s hs s' vcs' vs i. a1 = s \<and> a2 = vs \<and> a3 = ves @ [Callcl cl] \<and> a4 = i \<and> a5 = s' \<and> a6 = vs \<and> a7 = $$* vcs' \<and> cl = Func_host (t1s _> t2s) f \<and> ves = $$* vcs \<and> length vcs = n \<and> length t1s = n \<and> length t2s = m \<and> host_apply s (t1s _> t2s) f vcs hs = Some (s', vcs')) \<or> (\<exists>cl t1s t2s f ves vcs n m s vs i. a1 = s \<and> a2 = vs \<and> a3 = ves @ [Callcl cl] \<and> a4 = i \<and> a5 = s \<and> a6 = vs \<and> a7 = [Trap] \<and> cl = Func_host (t1s _> t2s) f \<and> ves = $$* vcs \<and> length vcs = n \<and> length t1s = n \<and> length t2s = m) \<or> (\<exists>vi j s v vs i. a1 = s \<and> a2 = vi @ [v] @ vs \<and> a3 = [$Get_local j] \<and> a4 = i \<and> a5 = s \<and> a6 = vi @ [v] @ vs \<and> a7 = [$C v] \<and> length vi = j) \<or> (\<exists>vi j s v vs v' i. a1 = s \<and> a2 = vi @ [v] @ vs \<and> a3 = [$C v', $Set_local j] \<and> a4 = i \<and> a5 = s \<and> a6 = vi @ [v'] @ vs \<and> a7 = [] \<and> length vi = j) \<or> (\<exists>s vs j i. a1 = s \<and> a2 = vs \<and> a3 = [$Get_global j] \<and> a4 = i \<and> a5 = s \<and> a6 = vs \<and> a7 = [$C sglob_val s i j]) \<or> (\<exists>s i j v s' vs. a1 = s \<and> a2 = vs \<and> a3 = [$C v, $Set_global j] \<and> a4 = i \<and> a5 = s' \<and> a6 = vs \<and> a7 = [] \<and> supdate_glob s i j v = s') \<or> (\<exists>s i j m k off t bs vs a. a1 = s \<and> a2 = vs \<and> a3 = [$C ConstInt32 k, $Load t None a off] \<and> a4 = i \<and> a5 = s \<and> a6 = vs \<and> a7 = [$C wasm_deserialise bs t] \<and> smem_ind s i = Some j \<and> s.mem s ! j = m \<and> load m (nat_of_int k) off (t_length t) = Some bs) \<or> (\<exists>s i j m k off t vs a. a1 = s \<and> a2 = vs \<and> a3 = [$C ConstInt32 k, $Load t None a off] \<and> a4 = i \<and> a5 = s \<and> a6 = vs \<and> a7 = [Trap] \<and> smem_ind s i = Some j \<and> s.mem s ! j = m \<and> load m (nat_of_int k) off (t_length t) = None) \<or> (\<exists>s i j m sx k off tp t bs vs a. a1 = s \<and> a2 = vs \<and> a3 = [$C ConstInt32 k, $Load t (Some (tp, sx)) a off] \<and> a4 = i \<and> a5 = s \<and> a6 = vs \<and> a7 = [$C wasm_deserialise bs t] \<and> smem_ind s i = Some j \<and> s.mem s ! j = m \<and> load_packed sx m (nat_of_int k) off (tp_length tp) (t_length t) = Some bs) \<or> (\<exists>s i j m sx k off tp t vs a. a1 = s \<and> a2 = vs \<and> a3 = [$C ConstInt32 k, $Load t (Some (tp, sx)) a off] \<and> a4 = i \<and> a5 = s \<and> a6 = vs \<and> a7 = [Trap] \<and> smem_ind s i = Some j \<and> s.mem s ! j = m \<and> load_packed sx m (nat_of_int k) off (tp_length tp) (t_length t) = None) \<or> (\<exists>t v s i j m k off mem' vs a. a1 = s \<and> a2 = vs \<and> a3 = [$C ConstInt32 k, $C v, $Store t None a off] \<and> a4 = i \<and> a5 = s\<lparr>s.mem := (s.mem s)[j := mem']\<rparr> \<and> a6 = vs \<and> a7 = [] \<and> types_agree t v \<and> smem_ind s i = Some j \<and> s.mem s ! j = m \<and> store m (nat_of_int k) off (bits v) (t_length t) = Some mem') \<or> (\<exists>t v s i j m k off vs a. a1 = s \<and> a2 = vs \<and> a3 = [$C ConstInt32 k, $C v, $Store t None a off] \<and> a4 = i \<and> a5 = s \<and> a6 = vs \<and> a7 = [Trap] \<and> types_agree t v \<and> smem_ind s i = Some j \<and> s.mem s ! j = m \<and> store m (nat_of_int k) off (bits v) (t_length t) = None) \<or> (\<exists>t v s i j m k off tp mem' vs a. a1 = s \<and> a2 = vs \<and> a3 = [$C ConstInt32 k, $C v, $Store t (Some tp) a off] \<and> a4 = i \<and> a5 = s\<lparr>s.mem := (s.mem s)[j := mem']\<rparr> \<and> a6 = vs \<and> a7 = [] \<and> types_agree t v \<and> smem_ind s i = Some j \<and> s.mem s ! j = m \<and> store_packed m (nat_of_int k) off (bits v) (tp_length tp) = Some mem') \<or> (\<exists>t v s i j m k off tp vs a. a1 = s \<and> a2 = vs \<and> a3 = [$C ConstInt32 k, $C v, $Store t (Some tp) a off] \<and> a4 = i \<and> a5 = s \<and> a6 = vs \<and> a7 = [Trap] \<and> types_agree t v \<and> smem_ind s i = Some j \<and> s.mem s ! j = m \<and> store_packed m (nat_of_int k) off (bits v) (tp_length tp) = None) \<or> (\<exists>s i j m n vs. a1 = s \<and> a2 = vs \<and> a3 = [$Current_memory] \<and> a4 = i \<and> a5 = s \<and> a6 = vs \<and> a7 = [$C ConstInt32 (int_of_nat n)] \<and> smem_ind s i = Some j \<and> s.mem s ! j = m \<and> mem_size m = n) \<or> (\<exists>s i j m n c mem' vs. a1 = s \<and> a2 = vs \<and> a3 = [$C ConstInt32 c, $Grow_memory] \<and> a4 = i \<and> a5 = s\<lparr>s.mem := (s.mem s)[j := mem']\<rparr> \<and> a6 = vs \<and> a7 = [$C ConstInt32 (int_of_nat n)] \<and> smem_ind s i = Some j \<and> s.mem s ! j = m \<and> mem_size m = n \<and> mem_grow m (nat_of_int c) = mem') \<or> (\<exists>s i j m n vs c. a1 = s \<and> a2 = vs \<and> a3 = [$C ConstInt32 c, $Grow_memory] \<and> a4 = i \<and> a5 = s \<and> a6 = vs \<and> a7 = [$C ConstInt32 int32_minus_one] \<and> smem_ind s i = Some j \<and> s.mem s ! j = m \<and> mem_size m = n) \<or> (\<exists>s vs es i s' vs' es' k lholed les les'. a1 = s \<and> a2 = vs \<and> a3 = les \<and> a4 = i \<and> a5 = s' \<and> a6 = vs' \<and> a7 = les' \<and> \<lparr>s;vs;es\<rparr> \<leadsto>_ i \<lparr>s';vs';es'\<rparr> \<and> Lfilled k lholed es les \<and> Lfilled k lholed es' les') \<or> (\<exists>s vs es i s' vs' es' v0s n j. a1 = s \<and> a2 = v0s \<and> a3 = [Local n i vs es] \<and> a4 = j \<and> a5 = s' \<and> a6 = v0s \<and> a7 = [Local n i vs' es'] \<and> \<lparr>s;vs;es\<rparr> \<leadsto>_ i \<lparr>s';vs';es'\<rparr>))"