inducts: fixes x1 :: "bool"   and x2 :: "char list list"   and x3 :: "v sem_env"   and x4 :: "'b state"   and x5 :: "dec"   and x6 :: "'b state \<times> (v sem_env, v) result"   and P :: "bool \<Rightarrow> char list list \<Rightarrow> v sem_env \<Rightarrow> 'b state \<Rightarrow> dec \<Rightarrow> 'b state \<times> (v sem_env, v) result \<Rightarrow> bool" assumes "evaluate_dec x1 x2 x3 x4 x5 x6"   and "\<And>ck mn env p e v1 env' s1 s2 locs. evaluate ck env s1 e (s2, Rval v1) \<and> allDistinct (pat_bindings p []) \<and> pmatch (c env) (refs s2) p v1 [] = Match env' \<Longrightarrow> P ck mn env s1 (Dlet locs p e) (s2, Rval (make_sem_env (alist_to_ns env') nsEmpty))"   and "\<And>ck mn env p e v1 s1 s2 locs. evaluate ck env s1 e (s2, Rval v1) \<and> allDistinct (pat_bindings p []) \<and> pmatch (c env) (refs s2) p v1 [] = No_match \<Longrightarrow> P ck mn env s1 (Dlet locs p e) (s2, Rerr (Rraise Bindv))"   and "\<And>ck mn env p e v1 s1 s2 locs. evaluate ck env s1 e (s2, Rval v1) \<and> allDistinct (pat_bindings p []) \<and> pmatch (c env) (refs s2) p v1 [] = Match_type_error \<Longrightarrow> P ck mn env s1 (Dlet locs p e) (s2, Rerr (Rabort Rtype_error))"   and "\<And>ck mn env p e s locs. \<not> allDistinct (pat_bindings p []) \<Longrightarrow> P ck mn env s (Dlet locs p e) (s, Rerr (Rabort Rtype_error))"   and "\<And>ck mn env p e err s s' locs. evaluate ck env s e (s', Rerr err) \<and> allDistinct (pat_bindings p []) \<Longrightarrow> P ck mn env s (Dlet locs p e) (s', Rerr err)"   and "\<And>ck mn env funs s locs. allDistinct (map (\<lambda>x. case x of (x, y, z) \<Rightarrow> x) funs) \<Longrightarrow> P ck mn env s (Dletrec locs funs) (s, Rval (make_sem_env (build_rec_env funs env nsEmpty) nsEmpty))"   and "\<And>ck mn env funs s locs. \<not> allDistinct (map (\<lambda>x. case x of (x, y, z) \<Rightarrow> x) funs) \<Longrightarrow> P ck mn env s (Dletrec locs funs) (s, Rerr (Rabort Rtype_error))"   and "\<And>ck mn env tds s new_tdecs locs. 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) \<Longrightarrow> P ck mn env s (Dtype locs tds) (update_defined_types (\<lambda>_. new_tdecs \<union> defined_types s) s, Rval (make_sem_env nsEmpty (build_tdefs mn tds)))"   and "\<And>ck mn env tds s locs. \<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) \<Longrightarrow> P ck mn env s (Dtype locs tds) (s, Rerr (Rabort Rtype_error))"   and "\<And>ck mn env tvs tn t0 s locs. P ck mn env s (Dtabbrev locs tvs tn t0) (s, Rval (make_sem_env nsEmpty nsEmpty))"   and "\<And>ck mn env cn ts s locs. TypeExn (mk_id mn cn) \<notin> defined_types s \<Longrightarrow> P ck mn env s (Dexn locs cn ts) (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 "\<And>ck mn env cn ts s locs. TypeExn (mk_id mn cn) \<in> defined_types s \<Longrightarrow> P ck mn env s (Dexn locs cn ts) (s, Rerr (Rabort Rtype_error))" shows "P x1 x2 x3 x4 x5 x6"