| author | wenzelm | 
| Sat, 15 Jun 2024 23:49:06 +0200 | |
| changeset 80381 | 00600ebb8aa3 | 
| parent 78795 | f7e972d567f3 | 
| permissions | -rw-r--r-- | 
| 69252 | 1 | (* Title: HOL/ex/Sorting_Algorithms_Examples.thy | 
| 2 | Author: Florian Haftmann, TU Muenchen | |
| 3 | *) | |
| 4 | ||
| 5 | theory Sorting_Algorithms_Examples | |
| 6 | imports Main "HOL-Library.Sorting_Algorithms" | |
| 7 | begin | |
| 8 | ||
| 9 | subsection \<open>Evaluation examples\<close> | |
| 10 | ||
| 11 | definition int_abs_reversed :: "int comparator" | |
| 12 | where "int_abs_reversed = key abs (reversed default)" | |
| 13 | ||
| 14 | definition example_1 :: "int list" | |
| 15 | where "example_1 = [65, 1705, -2322, 734, 4, (-17::int)]" | |
| 16 | ||
| 17 | definition example_2 :: "int list" | |
| 18 | where "example_2 = [-3000..3000]" | |
| 19 | ||
| 20 | ML \<open> | |
| 21 | local | |
| 22 | ||
| 69597 | 23 | val term_of_int_list = HOLogic.mk_list \<^typ>\<open>int\<close> | 
| 24 |     o map (HOLogic.mk_number \<^typ>\<open>int\<close> o @{code integer_of_int});
 | |
| 69252 | 25 | |
| 74582 | 26 | fun raw_sort (ctxt, ct, ks) = | 
| 27 | \<^instantiate>\<open>x = ct and y = \<open>Thm.cterm_of ctxt (term_of_int_list ks)\<close> | |
| 74584 | 28 | in cterm \<open>x \<equiv> y\<close> for x y :: \<open>int list\<close>\<close>; | 
| 69252 | 29 | |
| 78795 
f7e972d567f3
clarified signature: more concise variations on implicit theory setup;
 wenzelm parents: 
74584diff
changeset | 30 | val (_, sort_oracle) = Theory.setup_result (Thm.add_oracle (\<^binding>\<open>sort\<close>, raw_sort)); | 
| 69252 | 31 | |
| 32 | in | |
| 33 | ||
| 34 |   val sort_int_abs_reversed_conv = @{computation_conv "int list" terms: int_abs_reversed
 | |
| 35 | "sort :: int comparator \<Rightarrow> _" | |
| 36 | "quicksort :: int comparator \<Rightarrow> _" | |
| 37 | "mergesort :: int comparator \<Rightarrow> _" | |
| 38 | example_1 example_2 | |
| 39 | } (fn ctxt => fn ct => fn ks => sort_oracle (ctxt, ks, ct)) | |
| 40 | ||
| 41 | end | |
| 42 | \<close> | |
| 43 | ||
| 44 | declare [[code_timing]] | |
| 45 | ||
| 69597 | 46 | ML_val \<open>sort_int_abs_reversed_conv \<^context> | 
| 47 | \<^cterm>\<open>sort int_abs_reversed example_1\<close>\<close> | |
| 69252 | 48 | |
| 69597 | 49 | ML_val \<open>sort_int_abs_reversed_conv \<^context> | 
| 50 | \<^cterm>\<open>quicksort int_abs_reversed example_1\<close>\<close> | |
| 69252 | 51 | |
| 69597 | 52 | ML_val \<open>sort_int_abs_reversed_conv \<^context> | 
| 53 | \<^cterm>\<open>mergesort int_abs_reversed example_1\<close>\<close> | |
| 69252 | 54 | |
| 69597 | 55 | ML_val \<open>sort_int_abs_reversed_conv \<^context> | 
| 56 | \<^cterm>\<open>sort int_abs_reversed example_2\<close>\<close> | |
| 69252 | 57 | |
| 69597 | 58 | ML_val \<open>sort_int_abs_reversed_conv \<^context> | 
| 59 | \<^cterm>\<open>quicksort int_abs_reversed example_2\<close>\<close> | |
| 69252 | 60 | |
| 69597 | 61 | ML_val \<open>sort_int_abs_reversed_conv \<^context> | 
| 62 | \<^cterm>\<open>mergesort int_abs_reversed example_2\<close>\<close> | |
| 69252 | 63 | |
| 64 | end |