| author | wenzelm | 
| Sat, 10 Oct 2015 22:23:25 +0200 | |
| changeset 61396 | ce1b2234cab6 | 
| parent 61337 | 4645502c3c64 | 
| child 63117 | acb6d72fc42e | 
| permissions | -rw-r--r-- | 
| 49322 | 1 | (* Title: HOL/Library/Prefix_Order.thy | 
| 49089 
cd73b439cbe5
added theory instantiating type class order for list prefixes
 Christian Sternagel parents: diff
changeset | 2 | Author: Tobias Nipkow and Markus Wenzel, TU Muenchen | 
| 
cd73b439cbe5
added theory instantiating type class order for list prefixes
 Christian Sternagel parents: diff
changeset | 3 | *) | 
| 
cd73b439cbe5
added theory instantiating type class order for list prefixes
 Christian Sternagel parents: diff
changeset | 4 | |
| 60500 | 5 | section \<open>Prefix order on lists as order class instance\<close> | 
| 49089 
cd73b439cbe5
added theory instantiating type class order for list prefixes
 Christian Sternagel parents: diff
changeset | 6 | |
| 
cd73b439cbe5
added theory instantiating type class order for list prefixes
 Christian Sternagel parents: diff
changeset | 7 | theory Prefix_Order | 
| 55579 
207538943038
reverted ba7392b52a7c: List_Prefix not needed anymore by codatatypes
 traytel parents: 
54538diff
changeset | 8 | imports Sublist | 
| 49089 
cd73b439cbe5
added theory instantiating type class order for list prefixes
 Christian Sternagel parents: diff
changeset | 9 | begin | 
| 
cd73b439cbe5
added theory instantiating type class order for list prefixes
 Christian Sternagel parents: diff
changeset | 10 | |
| 
cd73b439cbe5
added theory instantiating type class order for list prefixes
 Christian Sternagel parents: diff
changeset | 11 | instantiation list :: (type) order | 
| 
cd73b439cbe5
added theory instantiating type class order for list prefixes
 Christian Sternagel parents: diff
changeset | 12 | begin | 
| 
cd73b439cbe5
added theory instantiating type class order for list prefixes
 Christian Sternagel parents: diff
changeset | 13 | |
| 
cd73b439cbe5
added theory instantiating type class order for list prefixes
 Christian Sternagel parents: diff
changeset | 14 | definition "(xs::'a list) \<le> ys \<equiv> prefixeq xs ys" | 
| 
cd73b439cbe5
added theory instantiating type class order for list prefixes
 Christian Sternagel parents: diff
changeset | 15 | definition "(xs::'a list) < ys \<equiv> xs \<le> ys \<and> \<not> (ys \<le> xs)" | 
| 
cd73b439cbe5
added theory instantiating type class order for list prefixes
 Christian Sternagel parents: diff
changeset | 16 | |
| 60679 | 17 | instance | 
| 18 | by standard (auto simp: less_eq_list_def less_list_def) | |
| 49089 
cd73b439cbe5
added theory instantiating type class order for list prefixes
 Christian Sternagel parents: diff
changeset | 19 | |
| 
cd73b439cbe5
added theory instantiating type class order for list prefixes
 Christian Sternagel parents: diff
changeset | 20 | end | 
| 
cd73b439cbe5
added theory instantiating type class order for list prefixes
 Christian Sternagel parents: diff
changeset | 21 | |
| 
cd73b439cbe5
added theory instantiating type class order for list prefixes
 Christian Sternagel parents: diff
changeset | 22 | lemmas prefixI [intro?] = prefixeqI [folded less_eq_list_def] | 
| 
cd73b439cbe5
added theory instantiating type class order for list prefixes
 Christian Sternagel parents: diff
changeset | 23 | lemmas prefixE [elim?] = prefixeqE [folded less_eq_list_def] | 
| 
cd73b439cbe5
added theory instantiating type class order for list prefixes
 Christian Sternagel parents: diff
changeset | 24 | lemmas strict_prefixI' [intro?] = prefixI' [folded less_list_def] | 
| 
cd73b439cbe5
added theory instantiating type class order for list prefixes
 Christian Sternagel parents: diff
changeset | 25 | lemmas strict_prefixE' [elim?] = prefixE' [folded less_list_def] | 
| 
cd73b439cbe5
added theory instantiating type class order for list prefixes
 Christian Sternagel parents: diff
changeset | 26 | lemmas strict_prefixI [intro?] = prefixI [folded less_list_def] | 
| 
cd73b439cbe5
added theory instantiating type class order for list prefixes
 Christian Sternagel parents: diff
changeset | 27 | lemmas strict_prefixE [elim?] = prefixE [folded less_list_def] | 
| 61337 | 28 | lemmas Nil_prefix [iff] = Nil_prefixeq [folded less_eq_list_def] | 
| 29 | lemmas prefix_Nil [simp] = prefixeq_Nil [folded less_eq_list_def] | |
| 49089 
cd73b439cbe5
added theory instantiating type class order for list prefixes
 Christian Sternagel parents: diff
changeset | 30 | lemmas prefix_snoc [simp] = prefixeq_snoc [folded less_eq_list_def] | 
| 
cd73b439cbe5
added theory instantiating type class order for list prefixes
 Christian Sternagel parents: diff
changeset | 31 | lemmas Cons_prefix_Cons [simp] = Cons_prefixeq_Cons [folded less_eq_list_def] | 
| 
cd73b439cbe5
added theory instantiating type class order for list prefixes
 Christian Sternagel parents: diff
changeset | 32 | lemmas same_prefix_prefix [simp] = same_prefixeq_prefixeq [folded less_eq_list_def] | 
| 
cd73b439cbe5
added theory instantiating type class order for list prefixes
 Christian Sternagel parents: diff
changeset | 33 | lemmas same_prefix_nil [iff] = same_prefixeq_nil [folded less_eq_list_def] | 
| 
cd73b439cbe5
added theory instantiating type class order for list prefixes
 Christian Sternagel parents: diff
changeset | 34 | lemmas prefix_prefix [simp] = prefixeq_prefixeq [folded less_eq_list_def] | 
| 61337 | 35 | lemmas prefix_Cons = prefixeq_Cons [folded less_eq_list_def] | 
| 36 | lemmas prefix_length_le = prefixeq_length_le [folded less_eq_list_def] | |
| 49089 
cd73b439cbe5
added theory instantiating type class order for list prefixes
 Christian Sternagel parents: diff
changeset | 37 | lemmas strict_prefix_simps [simp, code] = prefix_simps [folded less_list_def] | 
| 
cd73b439cbe5
added theory instantiating type class order for list prefixes
 Christian Sternagel parents: diff
changeset | 38 | lemmas not_prefix_induct [consumes 1, case_names Nil Neq Eq] = | 
| 
cd73b439cbe5
added theory instantiating type class order for list prefixes
 Christian Sternagel parents: diff
changeset | 39 | not_prefixeq_induct [folded less_eq_list_def] | 
| 
cd73b439cbe5
added theory instantiating type class order for list prefixes
 Christian Sternagel parents: diff
changeset | 40 | |
| 
cd73b439cbe5
added theory instantiating type class order for list prefixes
 Christian Sternagel parents: diff
changeset | 41 | end |