Я пытаюсь написать функцию mSmallest
, которая принимает два натуральных числа, n
и m
в качестве входных данных, и создает вектор. Выходной вектор содержит m
наименьших членов конечного набора с n
элементами.
Например, предполагается, что mSmallest 5 3
производит [FS (FS Z), FS Z, Z]
, который является Vect 3 (Fin 5)
.
Я хотел бы ограничить входной аргумент m
меньше n
. Я пробовал что-то вроде этого:
mSmallest : (n : Nat) -> (m : Nat) -> {auto p : n > m = True} -> Vect m (Fin n)
mSmallest Z Z = ?c_3
mSmallest Z (S k) = ?c_5
mSmallest (S k) m = ?c_2
Второй случай невозможен из-за ввода p
. Как сделать так, чтобы случай Z (S k)
исключался?
Кроме того, есть ли лучший способ определения функции mSmallest
?