src/HOL/Data_Structures/Cmp.thy
author nipkow
Thu, 07 Jul 2016 18:08:02 +0200
changeset 63411 e051eea34990
parent 61640 44c9198f210c
child 63437 b81a6bfa9c23
permissions -rw-r--r--
got rid of class cmp; added height-size proofs by Daniel Stuewe
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
63411
e051eea34990 got rid of class cmp; added height-size proofs by Daniel Stuewe
nipkow
parents: 61640
diff changeset
     1
(* Author: Tobias Nipkow, Daniel Stüwe *)
61640
44c9198f210c no CRLF
nipkow
parents: 61581
diff changeset
     2
44c9198f210c no CRLF
nipkow
parents: 61581
diff changeset
     3
section {* Three-Way Comparison *}
44c9198f210c no CRLF
nipkow
parents: 61581
diff changeset
     4
44c9198f210c no CRLF
nipkow
parents: 61581
diff changeset
     5
theory Cmp
44c9198f210c no CRLF
nipkow
parents: 61581
diff changeset
     6
imports Main
44c9198f210c no CRLF
nipkow
parents: 61581
diff changeset
     7
begin
44c9198f210c no CRLF
nipkow
parents: 61581
diff changeset
     8
63411
e051eea34990 got rid of class cmp; added height-size proofs by Daniel Stuewe
nipkow
parents: 61640
diff changeset
     9
datatype cmp_val = LT | EQ | GT
61640
44c9198f210c no CRLF
nipkow
parents: 61581
diff changeset
    10
63411
e051eea34990 got rid of class cmp; added height-size proofs by Daniel Stuewe
nipkow
parents: 61640
diff changeset
    11
function cmp :: "'a:: linorder \<Rightarrow> 'a \<Rightarrow> cmp_val" where
e051eea34990 got rid of class cmp; added height-size proofs by Daniel Stuewe
nipkow
parents: 61640
diff changeset
    12
"x < y \<Longrightarrow> cmp x y = LT" |
e051eea34990 got rid of class cmp; added height-size proofs by Daniel Stuewe
nipkow
parents: 61640
diff changeset
    13
"x = y \<Longrightarrow> cmp x y = EQ" |
e051eea34990 got rid of class cmp; added height-size proofs by Daniel Stuewe
nipkow
parents: 61640
diff changeset
    14
"x > y \<Longrightarrow> cmp x y = GT"
e051eea34990 got rid of class cmp; added height-size proofs by Daniel Stuewe
nipkow
parents: 61640
diff changeset
    15
by (auto, force)
e051eea34990 got rid of class cmp; added height-size proofs by Daniel Stuewe
nipkow
parents: 61640
diff changeset
    16
termination by lexicographic_order
e051eea34990 got rid of class cmp; added height-size proofs by Daniel Stuewe
nipkow
parents: 61640
diff changeset
    17
e051eea34990 got rid of class cmp; added height-size proofs by Daniel Stuewe
nipkow
parents: 61640
diff changeset
    18
lemma 
e051eea34990 got rid of class cmp; added height-size proofs by Daniel Stuewe
nipkow
parents: 61640
diff changeset
    19
    LT[simp]: "cmp x y = LT \<longleftrightarrow> x < y"
e051eea34990 got rid of class cmp; added height-size proofs by Daniel Stuewe
nipkow
parents: 61640
diff changeset
    20
and EQ[simp]: "cmp x y = EQ \<longleftrightarrow> x = y"
e051eea34990 got rid of class cmp; added height-size proofs by Daniel Stuewe
nipkow
parents: 61640
diff changeset
    21
and GT[simp]: "cmp x y = GT \<longleftrightarrow> x > y"
e051eea34990 got rid of class cmp; added height-size proofs by Daniel Stuewe
nipkow
parents: 61640
diff changeset
    22
by (cases x y rule: linorder_cases, auto)+
61640
44c9198f210c no CRLF
nipkow
parents: 61581
diff changeset
    23
44c9198f210c no CRLF
nipkow
parents: 61581
diff changeset
    24
lemma case_cmp_if[simp]: "(case c of EQ \<Rightarrow> e | LT \<Rightarrow> l | GT \<Rightarrow> g) =
44c9198f210c no CRLF
nipkow
parents: 61581
diff changeset
    25
  (if c = LT then l else if c = GT then g else e)"
63411
e051eea34990 got rid of class cmp; added height-size proofs by Daniel Stuewe
nipkow
parents: 61640
diff changeset
    26
by(simp split: cmp_val.split)
61640
44c9198f210c no CRLF
nipkow
parents: 61581
diff changeset
    27
44c9198f210c no CRLF
nipkow
parents: 61581
diff changeset
    28
end