src/HOL/Library/Quicksort.thy
changeset 27580 e16f4baa3db6
parent 27368 9f90ac19e32b
child 27682 25aceefd4786
equal deleted inserted replaced
27579:97ce525f664c 27580:e16f4baa3db6
    15 function quicksort :: "'a list \<Rightarrow> 'a list" where
    15 function quicksort :: "'a list \<Rightarrow> 'a list" where
    16 "quicksort []     = []" |
    16 "quicksort []     = []" |
    17 "quicksort (x#xs) = quicksort([y\<leftarrow>xs. ~ x\<le>y]) @ [x] @ quicksort([y\<leftarrow>xs. x\<le>y])"
    17 "quicksort (x#xs) = quicksort([y\<leftarrow>xs. ~ x\<le>y]) @ [x] @ quicksort([y\<leftarrow>xs. x\<le>y])"
    18 by pat_completeness auto
    18 by pat_completeness auto
    19 
    19 
    20 termination
    20 termination by (relation "measure size")
    21 by (relation "measure size")
    21   (auto simp: length_filter_le [THEN order_class.le_less_trans])
    22    (auto simp: length_filter_le[THEN order_class.le_less_trans])
       
    23 
       
    24 end
       
    25 context linorder
       
    26 begin
       
    27 
    22 
    28 lemma quicksort_permutes [simp]:
    23 lemma quicksort_permutes [simp]:
    29   "multiset_of (quicksort xs) = multiset_of xs"
    24   "multiset_of (quicksort xs) = multiset_of xs"
    30 by (induct xs rule: quicksort.induct) (auto simp: union_ac)
    25 by (induct xs rule: quicksort.induct) (auto simp: union_ac)
    31 
    26