author | nipkow |
Thu, 07 Jul 2016 18:08:02 +0200 | |
changeset 63411 | e051eea34990 |
parent 61640 | 44c9198f210c |
child 63437 | b81a6bfa9c23 |
permissions | -rw-r--r-- |
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 | 2 |
|
3 |
section {* Three-Way Comparison *} |
|
4 |
||
5 |
theory Cmp |
|
6 |
imports Main |
|
7 |
begin |
|
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 | 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 | 23 |
|
24 |
lemma case_cmp_if[simp]: "(case c of EQ \<Rightarrow> e | LT \<Rightarrow> l | GT \<Rightarrow> g) = |
|
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 | 27 |
|
28 |
end |