the nattofin function standard library has following signature:
nattofin : nat -> (n : nat) -> maybe (fin n) nattofin 4 5 returns just (fs (fs (fs (fs fz)))) : maybe (fin 5), while nattofin 5 5 returns nothing.
i function following signature:
mynattofin : (m : nat) -> (n : nat) -> { auto p : n `gt` m } -> fin n it behaves same standard lib function doesn't need return maybe because possible generate fin n m given n greater m.
how implement mynattofin?
you can directly recursing on m, n, , evidence n `gt` m @ same time:
import data.fin mynattofin : (m : nat) -> (n : nat) -> {auto p : n `gt` m} -> fin n mynattofin z (s n) = fz mynattofin (s m) (s n) {p = ltesucc _} = fs $ mynattofin m n note need pattern match on p in second case (even though value not used on right-hand side) automatic argument recursive call can filled in.