Я довольно новичок в Идрисе, и я пытаюсь поймать основные понятия и синтаксис.'half' function type signature в Idris
Даже если это может показаться бессмысленным, я пытаюсь определить функцию half
, которая уменьшает вдвое естественность.
Я хочу, чтобы придумать что-то вроде:
half : (n : Nat) -> (k : Nat) -> (n = k + k) -> (k : Nat)
но, конечно, это не работает. В частности, я получаю:
error: expected: dependent type signature
half : (n : Nat) -> (k : Nat) -> (n = k + k) -> (k : Nat)
Возможно ли это?
Спасибо.
Ну, спасибо, это typechecks. Во всяком случае, то, что я хочу выразить, это нечто наподобие 'half: (n: Nat) -> Even n -> Nat' с дополнительной информацией о том, что полученный' Nat' фактически является первым «Nat» с половиной. В вашем случае это общая функция (т. Е. Ввод входных данных только «Nat»)? Тот факт, что вы используете 'Eirther', заставляет меня думать, что это не так, в то время как в первой версии мы должны предоставить' half' с доказательством, что 'n' является четным, что не учитывает 1, 3 и все остальные нечетные числа , В очередной раз благодарим за помощь. –
Вторая версия может быть сделана общей, поскольку каждый 'n' является либо' 2 * k', либо '2 * k + 1'. Конечно, первого нельзя, так как нет 'k', например, например. '1 = 2 * k'. – Cactus