135 lemma set_mono_prefix: "prefix xs ys \<Longrightarrow> set xs \<subseteq> set ys" |
135 lemma set_mono_prefix: "prefix xs ys \<Longrightarrow> set xs \<subseteq> set ys" |
136 by (auto simp add: prefix_def) |
136 by (auto simp add: prefix_def) |
137 |
137 |
138 lemma take_is_prefix: "prefix (take n xs) xs" |
138 lemma take_is_prefix: "prefix (take n xs) xs" |
139 unfolding prefix_def by (metis append_take_drop_id) |
139 unfolding prefix_def by (metis append_take_drop_id) |
|
140 |
|
141 lemma takeWhile_is_prefix: "prefix (takeWhile P xs) xs" |
|
142 unfolding prefix_def by (metis takeWhile_dropWhile_id) |
140 |
143 |
141 lemma prefixeq_butlast: "prefix (butlast xs) xs" |
144 lemma prefixeq_butlast: "prefix (butlast xs) xs" |
142 by (simp add: butlast_conv_take take_is_prefix) |
145 by (simp add: butlast_conv_take take_is_prefix) |
143 |
146 |
144 lemma prefix_map_rightE: |
147 lemma prefix_map_rightE: |
593 |
596 |
594 lemma filter_mono_suffix: "suffix xs ys \<Longrightarrow> suffix (filter P xs) (filter P ys)" |
597 lemma filter_mono_suffix: "suffix xs ys \<Longrightarrow> suffix (filter P xs) (filter P ys)" |
595 by (auto simp: suffix_def) |
598 by (auto simp: suffix_def) |
596 |
599 |
597 lemma suffix_drop: "suffix (drop n as) as" |
600 lemma suffix_drop: "suffix (drop n as) as" |
598 unfolding suffix_def by (rule exI [where x = "take n as"]) simp |
601 unfolding suffix_def by (metis append_take_drop_id) |
|
602 |
|
603 lemma suffix_dropWhile: "suffix (dropWhile P xs) xs" |
|
604 unfolding suffix_def by (metis takeWhile_dropWhile_id) |
599 |
605 |
600 lemma suffix_take: "suffix xs ys \<Longrightarrow> ys = take (length ys - length xs) ys @ xs" |
606 lemma suffix_take: "suffix xs ys \<Longrightarrow> ys = take (length ys - length xs) ys @ xs" |
601 by (auto elim!: suffixE) |
607 by (auto elim!: suffixE) |
602 |
608 |
603 lemma strict_suffix_reflclp_conv: "strict_suffix\<^sup>=\<^sup>= = suffix" |
609 lemma strict_suffix_reflclp_conv: "strict_suffix\<^sup>=\<^sup>= = suffix" |
1291 |
1297 |
1292 lemma suffix_imp_sublist [simp, intro]: "suffix xs ys \<Longrightarrow> sublist xs ys" |
1298 lemma suffix_imp_sublist [simp, intro]: "suffix xs ys \<Longrightarrow> sublist xs ys" |
1293 by (auto simp: sublist_def suffix_def intro: exI[of _ "[]"]) |
1299 by (auto simp: sublist_def suffix_def intro: exI[of _ "[]"]) |
1294 |
1300 |
1295 lemma sublist_take [simp, intro]: "sublist (take n xs) xs" |
1301 lemma sublist_take [simp, intro]: "sublist (take n xs) xs" |
1296 by (rule prefix_imp_sublist) (simp_all add: take_is_prefix) |
1302 by (rule prefix_imp_sublist[OF take_is_prefix]) |
|
1303 |
|
1304 lemma sublist_takeWhile [simp, intro]: "sublist (takeWhile P xs) xs" |
|
1305 by (rule prefix_imp_sublist[OF takeWhile_is_prefix]) |
1297 |
1306 |
1298 lemma sublist_drop [simp, intro]: "sublist (drop n xs) xs" |
1307 lemma sublist_drop [simp, intro]: "sublist (drop n xs) xs" |
1299 by (rule suffix_imp_sublist) (simp_all add: suffix_drop) |
1308 by (rule suffix_imp_sublist[OF suffix_drop]) |
|
1309 |
|
1310 lemma sublist_dropWhile [simp, intro]: "sublist (dropWhile P xs) xs" |
|
1311 by (rule suffix_imp_sublist[OF suffix_dropWhile]) |
1300 |
1312 |
1301 lemma sublist_tl [simp, intro]: "sublist (tl xs) xs" |
1313 lemma sublist_tl [simp, intro]: "sublist (tl xs) xs" |
1302 by (rule suffix_imp_sublist) (simp_all add: suffix_drop) |
1314 by (rule suffix_imp_sublist) (simp_all add: suffix_drop) |
1303 |
1315 |
1304 lemma sublist_butlast [simp, intro]: "sublist (butlast xs) xs" |
1316 lemma sublist_butlast [simp, intro]: "sublist (butlast xs) xs" |