src/HOL/Data_Structures/Sorting.thy
changeset 68967 cd32e6b34b5c
parent 68966 2881f6cccc67
child 68968 6c4421b006fb
equal deleted inserted replaced
68966:2881f6cccc67 68967:cd32e6b34b5c
   271 
   271 
   272 lemma mset_merge_adj:
   272 lemma mset_merge_adj:
   273   "\<Union># image_mset mset (mset (merge_adj xss)) = \<Union># image_mset mset (mset xss)"
   273   "\<Union># image_mset mset (mset (merge_adj xss)) = \<Union># image_mset mset (mset xss)"
   274 by(induction xss rule: merge_adj.induct) (auto simp: mset_merge)
   274 by(induction xss rule: merge_adj.induct) (auto simp: mset_merge)
   275 
   275 
   276 lemma msec_merge_all:
   276 lemma mset_merge_all:
   277   "xss \<noteq> [] \<Longrightarrow> mset (merge_all xss) = (\<Union># (mset (map mset xss)))"
   277   "xss \<noteq> [] \<Longrightarrow> mset (merge_all xss) = (\<Union># (mset (map mset xss)))"
   278 by(induction xss rule: merge_all.induct) (auto simp: mset_merge mset_merge_adj)
   278 by(induction xss rule: merge_all.induct) (auto simp: mset_merge mset_merge_adj)
   279 
   279 
   280 lemma sorted_merge_adj:
   280 lemma sorted_merge_adj:
   281   "\<forall>xs \<in> set xss. sorted xs \<Longrightarrow> \<forall>xs \<in> set (merge_adj xss). sorted xs"
   281   "\<forall>xs \<in> set xss. sorted xs \<Longrightarrow> \<forall>xs \<in> set (merge_adj xss). sorted xs"
   288 
   288 
   289 lemma sorted_msort_bu: "sorted (msort_bu xs)"
   289 lemma sorted_msort_bu: "sorted (msort_bu xs)"
   290 by(simp add: msort_bu_def sorted_merge_all)
   290 by(simp add: msort_bu_def sorted_merge_all)
   291 
   291 
   292 lemma mset_msort_bu: "mset (msort_bu xs) = mset xs"
   292 lemma mset_msort_bu: "mset (msort_bu xs) = mset xs"
   293 by(simp add: msort_bu_def msec_merge_all comp_def)
   293 by(simp add: msort_bu_def mset_merge_all comp_def)
   294 
   294 
   295 
   295 
   296 subsubsection "Time Complexity"
   296 subsubsection "Time Complexity"
   297 
   297 
   298 fun c_merge_adj :: "('a::linorder) list list \<Rightarrow> nat" where
   298 fun c_merge_adj :: "('a::linorder) list list \<Rightarrow> nat" where