1 (* Title: HOL/Library/Char_ord.thy
2 Author: Norbert Voelker, Florian Haftmann
5 header {* Order on characters *}
11 instantiation nibble :: linorder
15 "n \<le> m \<longleftrightarrow> nat_of_nibble n \<le> nat_of_nibble m"
18 "n < m \<longleftrightarrow> nat_of_nibble n < nat_of_nibble m"
21 qed (auto simp add: less_eq_nibble_def less_nibble_def not_le nat_of_nibble_eq_iff)
25 instantiation nibble :: distrib_lattice
29 "(inf \<Colon> nibble \<Rightarrow> _) = min"
32 "(sup \<Colon> nibble \<Rightarrow> _) = max"
35 qed (auto simp add: inf_nibble_def sup_nibble_def min_max.sup_inf_distrib1)
39 instantiation char :: linorder
43 "c1 \<le> c2 \<longleftrightarrow> nat_of_char c1 \<le> nat_of_char c2"
46 "c1 < c2 \<longleftrightarrow> nat_of_char c1 < nat_of_char c2"
49 qed (auto simp add: less_eq_char_def less_char_def nat_of_char_eq_iff)
53 lemma less_eq_char_Char:
54 "Char n1 m1 \<le> Char n2 m2 \<longleftrightarrow> n1 < n2 \<or> n1 = n2 \<and> m1 \<le> m2"
57 assume "nat_of_nibble n1 * 16 + nat_of_nibble m1
58 \<le> nat_of_nibble n2 * 16 + nat_of_nibble m2"
59 then have "nat_of_nibble n1 \<le> nat_of_nibble n2"
60 using nat_of_nibble_less_16 [of m1] nat_of_nibble_less_16 [of m2] by auto
64 using nat_of_nibble_less_16 [of m1] nat_of_nibble_less_16 [of m2]
65 by (auto simp add: less_eq_char_def nat_of_char_Char less_eq_nibble_def less_nibble_def not_less nat_of_nibble_eq_iff dest: *)
69 "Char n1 m1 < Char n2 m2 \<longleftrightarrow> n1 < n2 \<or> n1 = n2 \<and> m1 < m2"
72 assume "nat_of_nibble n1 * 16 + nat_of_nibble m1
73 < nat_of_nibble n2 * 16 + nat_of_nibble m2"
74 then have "nat_of_nibble n1 \<le> nat_of_nibble n2"
75 using nat_of_nibble_less_16 [of m1] nat_of_nibble_less_16 [of m2] by auto
79 using nat_of_nibble_less_16 [of m1] nat_of_nibble_less_16 [of m2]
80 by (auto simp add: less_char_def nat_of_char_Char less_eq_nibble_def less_nibble_def not_less nat_of_nibble_eq_iff dest: *)
83 instantiation char :: distrib_lattice
87 "(inf \<Colon> char \<Rightarrow> _) = min"
90 "(sup \<Colon> char \<Rightarrow> _) = max"
93 qed (auto simp add: inf_char_def sup_char_def min_max.sup_inf_distrib1)
97 text {* Legacy aliasses *}
99 lemmas nibble_less_eq_def = less_eq_nibble_def
100 lemmas nibble_less_def = less_nibble_def
101 lemmas char_less_eq_def = less_eq_char_def
102 lemmas char_less_def = less_char_def
103 lemmas char_less_eq_simp = less_eq_char_Char
104 lemmas char_less_simp = less_char_Char