@@ -9,6 +9,9 @@ data Fin : Nat -> Type where
9 fZ : Fin (S k)
9 fZ : Fin (S k)
10 fS : Fin k -> Fin (S k)
10 fS : Fin k -> Fin (S k)
12+fSInjective : (m : Fin k) -> (n : Fin k) -> fS m = fS n -> m = n
13+fSInjective left _ refl = refl
12instance Eq (Fin n) where
15instance Eq (Fin n) where
13 (==) fZ fZ = True
16 (==) fZ fZ = True
14 (==) (fS k) (fS k') = k == k'
17 (==) (fS k) (fS k') = k == k'
@@ -24,6 +27,13 @@ finToNat : Fin n -> Nat
24finToNat fZ = Z
27finToNat fZ = Z
25finToNat (fS k) = S (finToNat k)
28finToNat (fS k) = S (finToNat k)
30+finToNatInjective : (fm : Fin k) -> (fn : Fin k) -> (finToNat fm) = (finToNat fn) -> fm = fn
31+finToNatInjective fZ fZ refl = refl
32+finToNatInjective (fS m) fZ refl impossible
33+finToNatInjective fZ (fS n) refl impossible
34+finToNatInjective (fS m) (fS n) prf =
35+ cong (finToNatInjective m n (succInjective (finToNat m) (finToNat n) prf))
27instance Cast (Fin n) Nat where
37instance Cast (Fin n) Nat where
28 cast x = finToNat x
38 cast x = finToNat x