src/HOL/Data_Structures/Cmp.thy
author nipkow
Thu, 07 Jul 2016 18:08:10 +0200
changeset 63412 def97df48390
parent 63411 e051eea34990
child 63437 b81a6bfa9c23
permissions -rw-r--r--
merged

(* Author: Tobias Nipkow, Daniel Stüwe *)

section {* Three-Way Comparison *}

theory Cmp
imports Main
begin

datatype cmp_val = LT | EQ | GT

function cmp :: "'a:: linorder \<Rightarrow> 'a \<Rightarrow> cmp_val" where
"x < y \<Longrightarrow> cmp x y = LT" |
"x = y \<Longrightarrow> cmp x y = EQ" |
"x > y \<Longrightarrow> cmp x y = GT"
by (auto, force)
termination by lexicographic_order

lemma 
    LT[simp]: "cmp x y = LT \<longleftrightarrow> x < y"
and EQ[simp]: "cmp x y = EQ \<longleftrightarrow> x = y"
and GT[simp]: "cmp x y = GT \<longleftrightarrow> x > y"
by (cases x y rule: linorder_cases, auto)+

lemma case_cmp_if[simp]: "(case c of EQ \<Rightarrow> e | LT \<Rightarrow> l | GT \<Rightarrow> g) =
  (if c = LT then l else if c = GT then g else e)"
by(simp split: cmp_val.split)

end