@@ -1,6 +1,7 @@
11module Prelude.Fin
22
33import Prelude.Nat
4+import Prelude.Either
45
56data Fin : Nat -> Set where
67 fO : Fin (S k)
@@ -13,7 +14,13 @@ instance Eq (Fin n) where
1314 eq (fS k) (fS k') = eq k k'
1415 eq _ _ = False
1516
16−wkn : Fin n -> Fin (S n)
17−wkn fO = fO
18−wkn (fS k) = fS (wkn k)
17+weaken : Fin n -> Fin (S n)
18+weaken fO = fO
19+weaken (fS k) = fS (weaken k)
1920
21+strengthen : Fin (S n) -> Either (Fin (S n)) (Fin n)
22+strengthen {n = S k} fO = Right fO
23+strengthen {n = S k} (fS i) with (strengthen i)
24+ strengthen (fS k) | Left x = Left (fS x)
25+ strengthen (fS k) | Right x = Right (fS x)
26+strengthen f = Left f