We need this to take advantage of the new indexing structure we are going to add to improve performance.
59 lines
1.6 KiB
Text
59 lines
1.6 KiB
Text
/-
|
||
Copyright (c) 2016 Microsoft Corporation. All rights reserved.
|
||
Released under Apache 2.0 license as described in the file LICENSE.
|
||
Authors: Leonardo de Moura
|
||
-/
|
||
prelude
|
||
import init.data.repr
|
||
|
||
universes u v
|
||
|
||
inductive ordering
|
||
| lt | eq | gt
|
||
|
||
instance : has_repr ordering :=
|
||
⟨(λ s, match s with | ordering.lt := "lt" | ordering.eq := "eq" | ordering.gt := "gt")⟩
|
||
|
||
namespace ordering
|
||
def swap : ordering → ordering
|
||
| lt := gt
|
||
| eq := eq
|
||
| gt := lt
|
||
|
||
@[inline] def or_else : ordering → ordering → ordering
|
||
| lt _ := lt
|
||
| eq o := o
|
||
| gt _ := gt
|
||
|
||
theorem swap_swap : ∀ (o : ordering), o.swap.swap = o
|
||
| lt := rfl
|
||
| eq := rfl
|
||
| gt := rfl
|
||
end ordering
|
||
|
||
def cmp_using {α : Type u} (lt : α → α → Prop) [decidable_rel lt] (a b : α) : ordering :=
|
||
if lt a b then ordering.lt
|
||
else if lt b a then ordering.gt
|
||
else ordering.eq
|
||
|
||
def cmp {α : Type u} [has_lt α] [decidable_rel ((<) : α → α → Prop)] (a b : α) : ordering :=
|
||
cmp_using (<) a b
|
||
|
||
instance : decidable_eq ordering :=
|
||
{dec_eq := λ a b,
|
||
match a with
|
||
| ordering.lt :=
|
||
(match b with
|
||
| ordering.lt := is_true rfl
|
||
| ordering.eq := is_false (λ h, ordering.no_confusion h)
|
||
| ordering.gt := is_false (λ h, ordering.no_confusion h))
|
||
| ordering.eq :=
|
||
(match b with
|
||
| ordering.lt := is_false (λ h, ordering.no_confusion h)
|
||
| ordering.eq := is_true rfl
|
||
| ordering.gt := is_false (λ h, ordering.no_confusion h))
|
||
| ordering.gt :=
|
||
match b with
|
||
| ordering.lt := is_false (λ h, ordering.no_confusion h)
|
||
| ordering.eq := is_false (λ h, ordering.no_confusion h)
|
||
| ordering.gt := is_true rfl}
|