1 | module Data.Fin.ToFin
3 | import public Data.Fin
8 | tryToFit : {to : _} -> Fin from -> Maybe $
Fin to
9 | tryToFit {to=0} _ = Nothing
10 | tryToFit {to=S _} FZ = Just FZ
11 | tryToFit {to=S _} (FS x) = FS <$> tryToFit x
15 | weakenOrShift : (left, mid : _) -> Fin (left + right) -> Fin (left + mid + right)
16 | weakenOrShift Z mid x = shift mid x
17 | weakenOrShift (S n) mid FZ = FZ
18 | weakenOrShift (S n) mid (FS x) = FS $
weakenOrShift n mid x
21 | weakenToSuper : {i : Fin n} -> Fin (finToNat i) -> Fin n
22 | weakenToSuper {i = FS _} FZ = FZ
23 | weakenToSuper {i = FS _} (FS x) = FS $
weakenToSuper x
26 | weakenToSuper_correct : {i : Fin n} -> (x : Fin $
finToNat i) -> finToNat (weakenToSuper {i} x) = finToNat x
27 | weakenToSuper_correct {i = FS _} FZ = Refl
28 | weakenToSuper_correct {i = FS _} (FS x) = cong S $
weakenToSuper_correct x
31 | weakenOrShiftWithNoShiftIsWeakenN : (left, mid : _) -> (x' : Fin $
left + 0) -> (x : Fin left) -> x' ~~~ x =>
32 | weakenOrShift left mid {right=0} x' ~~~ weakenN mid x
33 | weakenOrShiftWithNoShiftIsWeakenN _ _ FZ FZ = FZ
34 | weakenOrShiftWithNoShiftIsWeakenN (S left) mid (FS x') (FS x) @{FS _} = FS $
weakenOrShiftWithNoShiftIsWeakenN left mid x' x