Up to index of Isabelle/HOL/Library
theory Char_ord(* Title: HOL/Library/Char_ord.thy ID: $Id: Char_ord.thy,v 1.10 2007/06/14 21:04:39 wenzelm Exp $ Author: Norbert Voelker, Florian Haftmann *) header {* Order on characters *} theory Char_ord imports Product_ord Char_nat begin instance nibble :: linorder nibble_less_eq_def: "n ≤ m ≡ nat_of_nibble n ≤ nat_of_nibble m" nibble_less_def: "n < m ≡ nat_of_nibble n < nat_of_nibble m" proof fix n :: nibble show "n ≤ n" unfolding nibble_less_eq_def nibble_less_def by auto next fix n m q :: nibble assume "n ≤ m" and "m ≤ q" then show "n ≤ q" unfolding nibble_less_eq_def nibble_less_def by auto next fix n m :: nibble assume "n ≤ m" and "m ≤ n" then show "n = m" unfolding nibble_less_eq_def nibble_less_def by (auto simp add: nat_of_nibble_eq) next fix n m :: nibble show "n < m <-> n ≤ m ∧ n ≠ m" unfolding nibble_less_eq_def nibble_less_def less_le by (auto simp add: nat_of_nibble_eq) next fix n m :: nibble show "n ≤ m ∨ m ≤ n" unfolding nibble_less_eq_def by auto qed instance nibble :: distrib_lattice "inf ≡ min" "sup ≡ max" by default (auto simp add: inf_nibble_def sup_nibble_def min_max.sup_inf_distrib1) instance char :: linorder char_less_eq_def: "c1 ≤ c2 ≡ case c1 of Char n1 m1 => case c2 of Char n2 m2 => n1 < n2 ∨ n1 = n2 ∧ m1 ≤ m2" char_less_def: "c1 < c2 ≡ case c1 of Char n1 m1 => case c2 of Char n2 m2 => n1 < n2 ∨ n1 = n2 ∧ m1 < m2" by default (auto simp: char_less_eq_def char_less_def split: char.splits) lemmas [code func del] = char_less_eq_def char_less_def instance char :: distrib_lattice "inf ≡ min" "sup ≡ max" by default (auto simp add: inf_char_def sup_char_def min_max.sup_inf_distrib1) lemma [simp, code func]: shows char_less_eq_simp: "Char n1 m1 ≤ Char n2 m2 <-> n1 < n2 ∨ n1 = n2 ∧ m1 ≤ m2" and char_less_simp: "Char n1 m1 < Char n2 m2 <-> n1 < n2 ∨ n1 = n2 ∧ m1 < m2" unfolding char_less_eq_def char_less_def by simp_all end
lemma
c1.0 ≤ c2.0 ==
case c1.0 of
Char n1 m1 => case c2.0 of Char n2 m2 => n1 < n2 ∨ n1 = n2 ∧ m1 ≤ m2
c1.0 < c2.0 ==
case c1.0 of
Char n1 m1 => case c2.0 of Char n2 m2 => n1 < n2 ∨ n1 = n2 ∧ m1 < m2
lemma char_less_eq_simp:
(Char n1.0 m1.0 ≤ Char n2.0 m2.0) = (n1.0 < n2.0 ∨ n1.0 = n2.0 ∧ m1.0 ≤ m2.0)
and char_less_simp:
(Char n1.0 m1.0 < Char n2.0 m2.0) = (n1.0 < n2.0 ∨ n1.0 = n2.0 ∧ m1.0 < m2.0)