proof - Prove So (0 < m) -> (n ** m = S n) -


i'm trying make idris function of type (j : nat) -> {auto p : (j < n)} -> fin n convert nat fin n. z case work (and output fz), i'm trying prove proof of 0 < n sufficient able make fz : fin n. can't work out how this.

i'm open making different function, long can convert nat values fin n values (where exist). goal have other function can convert nat mod n value, that, example, 15 : nat mapped 3 : mod 4. mod type has single constructor, mkmod : fin n -> mod n.

after learning lt : nat -> nat -> type, took different approach. started declaration:

nattofin : (j : nat) -> {auto p : j `lt` n} -> fin n nattofin {n} j {p} = ?nattofin_rhs_1 

. case-splitting on n, on p in n = z case resulted in:

nattofin : (j : nat) -> {auto p : j `lt` n} -> fin n nattofin {n = (s k)} j {p = p} = ?nattofin_rhs_2 

, proof asking for. there, case-split on j , filled 0 case, leaving:

nattofin : (j : nat) -> {auto p : j `lt` n} -> fin n nattofin {n = (s k)} z = fz nattofin {n = (s k)} (s j) {p = p} = ?nattofin_rhs_3 

. wanted fill ?nattofin_rhs_3 fs (nattofin j), type checker wasn't letting me. however, after case split on p, fine:

nattofin : (j : nat) -> {auto p : j `lt` n} -> fin n nattofin {n = (s k)} z = fz nattofin {n = (s k)} (s j) {p = (ltesucc x)} = fs (nattofin j) 

finally, added total, , checked out.


the problem idris can't seem find lt proofs automatically. happens:

λΠ> (fin 6) (nattofin 2) when elaborating argument p function mod2.nattofin:         can't solve goal                  lt (frominteger 2) (frominteger 6) 

is there way fix that?


Comments

Popular posts from this blog

c++ - QTextObjectInterface with Qml TextEdit (QQuickTextEdit) -

javascript - angular ng-required radio button not toggling required off in firefox 33, OK in chrome -

xcode - Swift Playground - Files are not readable -