simps: fixes a1 :: "bool"   and a2 :: "char list list"   and a3 :: "v sem_env"   and a4 :: "'b state"   and a5 :: "dec"   and a6 :: "'b state \<times> (v sem_env, v) result" shows "evaluate_dec a1 a2 a3 a4 a5 a6 = ((\<exists>ck mn env p e v1 env' s1 s2 locs. a1 = ck \<and> a2 = mn \<and> a3 = env \<and> a4 = s1 \<and> a5 = Dlet locs p e \<and> a6 = (s2, Rval (make_sem_env (alist_to_ns env') nsEmpty)) \<and> evaluate ck env s1 e (s2, Rval v1) \<and> allDistinct (pat_bindings p []) \<and> pmatch (c env) (refs s2) p v1 [] = Match env') \<or> (\<exists>ck mn env p e v1 s1 s2 locs. a1 = ck \<and> a2 = mn \<and> a3 = env \<and> a4 = s1 \<and> a5 = Dlet locs p e \<and> a6 = (s2, Rerr (Rraise Bindv)) \<and> evaluate ck env s1 e (s2, Rval v1) \<and> allDistinct (pat_bindings p []) \<and> pmatch (c env) (refs s2) p v1 [] = No_match) \<or> (\<exists>ck mn env p e v1 s1 s2 locs. a1 = ck \<and> a2 = mn \<and> a3 = env \<and> a4 = s1 \<and> a5 = Dlet locs p e \<and> a6 = (s2, Rerr (Rabort Rtype_error)) \<and> evaluate ck env s1 e (s2, Rval v1) \<and> allDistinct (pat_bindings p []) \<and> pmatch (c env) (refs s2) p v1 [] = Match_type_error) \<or> (\<exists>ck mn env p e s locs. a1 = ck \<and> a2 = mn \<and> a3 = env \<and> a4 = s \<and> a5 = Dlet locs p e \<and> a6 = (s, Rerr (Rabort Rtype_error)) \<and> \<not> allDistinct (pat_bindings p [])) \<or> (\<exists>ck mn env p e err s s' locs. a1 = ck \<and> a2 = mn \<and> a3 = env \<and> a4 = s \<and> a5 = Dlet locs p e \<and> a6 = (s', Rerr err) \<and> evaluate ck env s e (s', Rerr err) \<and> allDistinct (pat_bindings p [])) \<or> (\<exists>ck mn env funs s locs. a1 = ck \<and> a2 = mn \<and> a3 = env \<and> a4 = s \<and> a5 = Dletrec locs funs \<and> a6 = (s, Rval (make_sem_env (build_rec_env funs env nsEmpty) nsEmpty)) \<and> allDistinct (map (\<lambda>x. case x of (x, y, z) \<Rightarrow> x) funs)) \<or> (\<exists>ck mn env funs s locs. a1 = ck \<and> a2 = mn \<and> a3 = env \<and> a4 = s \<and> a5 = Dletrec locs funs \<and> a6 = (s, Rerr (Rabort Rtype_error)) \<and> \<not> allDistinct (map (\<lambda>x. case x of (x, y, z) \<Rightarrow> x) funs)) \<or> (\<exists>ck mn env tds s new_tdecs locs. a1 = ck \<and> a2 = mn \<and> a3 = env \<and> a4 = s \<and> a5 = Dtype locs tds \<and> a6 = (update_defined_types (\<lambda>_. new_tdecs \<union> defined_types s) s, Rval (make_sem_env nsEmpty (build_tdefs mn tds))) \<and> check_dup_ctors tds \<and> new_tdecs = type_defs_to_new_tdecs mn tds \<and> disjnt new_tdecs (defined_types s) \<and> allDistinct (map (\<lambda>x. case x of (tvs, tn, ctors) \<Rightarrow> tn) tds)) \<or> (\<exists>ck mn env tds s locs. a1 = ck \<and> a2 = mn \<and> a3 = env \<and> a4 = s \<and> a5 = Dtype locs tds \<and> a6 = (s, Rerr (Rabort Rtype_error)) \<and> (\<not> check_dup_ctors tds \<or> \<not> disjnt (type_defs_to_new_tdecs mn tds) (defined_types s) \<or> \<not> allDistinct (map (\<lambda>x. case x of (tvs, tn, ctors) \<Rightarrow> tn) tds))) \<or> (\<exists>ck mn env tvs tn t0 s locs. a1 = ck \<and> a2 = mn \<and> a3 = env \<and> a4 = s \<and> a5 = Dtabbrev locs tvs tn t0 \<and> a6 = (s, Rval (make_sem_env nsEmpty nsEmpty))) \<or> (\<exists>ck mn env cn ts s locs. a1 = ck \<and> a2 = mn \<and> a3 = env \<and> a4 = s \<and> a5 = Dexn locs cn ts \<and> a6 = (update_defined_types (\<lambda>_. {TypeExn (mk_id mn cn)} \<union> defined_types s) s, Rval (make_sem_env nsEmpty (nsSing cn (length ts, TypeExn (mk_id mn cn))))) \<and> TypeExn (mk_id mn cn) \<notin> defined_types s) \<or> (\<exists>ck mn env cn ts s locs. a1 = ck \<and> a2 = mn \<and> a3 = env \<and> a4 = s \<and> a5 = Dexn locs cn ts \<and> a6 = (s, Rerr (Rabort Rtype_error)) \<and> TypeExn (mk_id mn cn) \<in> defined_types s))"