@@ -9,6 +9,9 @@ data Fin : Nat -> Type where
99 fZ : Fin (S k)
1010 fS : Fin k -> Fin (S k)
1111
12+fSInjective : (m : Fin k) -> (n : Fin k) -> fS m = fS n -> m = n
13+fSInjective left _ refl = refl
14+
1215instance Eq (Fin n) where
1316 (==) fZ fZ = True
1417 (==) (fS k) (fS k') = k == k'
@@ -24,6 +27,13 @@ finToNat : Fin n -> Nat
2427finToNat fZ = Z
2528finToNat (fS k) = S (finToNat k)
2629
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))
36+
2737instance Cast (Fin n) Nat where
2838 cast x = finToNat x
2939