equal
deleted
inserted
replaced
2315 by(induct xs arbitrary:a) simp_all |
2315 by(induct xs arbitrary:a) simp_all |
2316 |
2316 |
2317 lemma foldl_apply: |
2317 lemma foldl_apply: |
2318 assumes "\<And>x. x \<in> set xs \<Longrightarrow> f x \<circ> h = h \<circ> g x" |
2318 assumes "\<And>x. x \<in> set xs \<Longrightarrow> f x \<circ> h = h \<circ> g x" |
2319 shows "foldl (\<lambda>s x. f x s) (h s) xs = h (foldl (\<lambda>s x. g x s) s xs)" |
2319 shows "foldl (\<lambda>s x. f x s) (h s) xs = h (foldl (\<lambda>s x. g x s) s xs)" |
2320 by (rule sym, insert assms, induct xs arbitrary: s) (simp_all add: ext_iff) |
2320 by (rule sym, insert assms, induct xs arbitrary: s) (simp_all add: fun_eq_iff) |
2321 |
2321 |
2322 lemma foldl_cong [fundef_cong, recdef_cong]: |
2322 lemma foldl_cong [fundef_cong, recdef_cong]: |
2323 "[| a = b; l = k; !!a x. x : set l ==> f a x = g a x |] |
2323 "[| a = b; l = k; !!a x. x : set l ==> f a x = g a x |] |
2324 ==> foldl f a l = foldl g b k" |
2324 ==> foldl f a l = foldl g b k" |
2325 by (induct k arbitrary: a b l) simp_all |
2325 by (induct k arbitrary: a b l) simp_all |
4562 @{prop "x \<in> set xs"} instead --- it is much easier to reason about. |
4562 @{prop "x \<in> set xs"} instead --- it is much easier to reason about. |
4563 *} |
4563 *} |
4564 |
4564 |
4565 lemma member_set: |
4565 lemma member_set: |
4566 "member = set" |
4566 "member = set" |
4567 by (simp add: ext_iff member_def mem_def) |
4567 by (simp add: fun_eq_iff member_def mem_def) |
4568 |
4568 |
4569 lemma member_rec [code]: |
4569 lemma member_rec [code]: |
4570 "member (x # xs) y \<longleftrightarrow> x = y \<or> member xs y" |
4570 "member (x # xs) y \<longleftrightarrow> x = y \<or> member xs y" |
4571 "member [] y \<longleftrightarrow> False" |
4571 "member [] y \<longleftrightarrow> False" |
4572 by (auto simp add: member_def) |
4572 by (auto simp add: member_def) |