Я пытаюсь сделать функцию Идрис типа (j : Nat) -> {auto p : So (j < n)} -> Fin n
для преобразования Nat
в Fin n
. Чтобы получить Z
дело работать (и выход FZ
), Я пытаюсь доказать, что доказательства 0 < n
достаточны для того, чтобы сделать FZ : Fin n
.Но я не могу понять, как это сделать.Доказать So (0 < m) -> (п ** т = S п)
Я открыт для создания совершенно другой функции, до тех пор, пока он может преобразовать значения Nat
в значения Fin n
(где они существуют). Моя цель - иметь еще одну функцию, которая может конвертировать любой Nat
в значение Mod n
, поэтому на, например, 15 : Nat
отображается на 3 : Mod 4
. В моем Mod
тип имеет один конструктор, mkMod : Fin n -> Mod n
.
Возможно, это будет лучше обслуживаться в [CS] (http://cs.stackexchange.com/)? –
@ LasseV.Karlsen Я думаю, что это проблема программирования, а не что-то еще. Существуют похожие (ответные) доказательства на SO (например, [this] (http://stackoverflow.com/questions/23519043/i-cant-prove-n-0-n-with-idris?rq=1)), и я с большей вероятностью получаю ответ здесь. –