38 lines
1,003 B
Text
38 lines
1,003 B
Text
/-
|
||
Copyright (c) 2016 Microsoft Corporation. All rights reserved.
|
||
Released under Apache 2.0 license as described in the file LICENSE.
|
||
Author: Leonardo de Moura
|
||
-/
|
||
prelude
|
||
import init.data.nat.basic
|
||
open nat
|
||
structure fin (n : nat) := (val : nat) (is_lt : val < n)
|
||
|
||
attribute [pp_using_anonymous_constructor] fin
|
||
|
||
namespace fin
|
||
|
||
def {u} elim0 {α : Sort u} : fin 0 → α
|
||
| ⟨_, h⟩ := absurd h (not_lt_zero _)
|
||
|
||
variable {n : nat}
|
||
|
||
lemma eq_of_veq : ∀ {i j : fin n}, (val i) = (val j) → i = j
|
||
| ⟨iv, ilt₁⟩ ⟨.(iv), ilt₂⟩ rfl := rfl
|
||
|
||
lemma veq_of_eq : ∀ {i j : fin n}, i = j → (val i) = (val j)
|
||
| ⟨iv, ilt⟩ .(_) rfl := rfl
|
||
|
||
lemma ne_of_vne {i j : fin n} (h : val i ≠ val j) : i ≠ j :=
|
||
λ h', absurd (veq_of_eq h') h
|
||
|
||
lemma vne_of_ne {i j : fin n} (h : i ≠ j) : val i ≠ val j :=
|
||
λ h', absurd (eq_of_veq h') h
|
||
|
||
end fin
|
||
|
||
open fin
|
||
|
||
instance (n : nat) : decidable_eq (fin n) :=
|
||
λ i j, decidable_of_decidable_of_iff
|
||
(nat.decidable_eq i.val j.val) ⟨eq_of_veq, veq_of_eq⟩
|