src/HOL/Library/Sublist.thy
changeset 73380 99c1c4f89605
parent 73186 ce90865dbaeb
child 73381 3fdb94d87e0e
equal deleted inserted replaced
73379:b867b436f372 73380:99c1c4f89605
   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"