equal
deleted
inserted
replaced
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 |