Могут ли количественные типы гарантировать сложность? - PullRequest
0 голосов
/ 21 июня 2020

Могут ли количественные типы, , которые появляются в Idris 2 , использоваться, чтобы гарантировать сложность алгоритма? Например, подпись map определена для Vect как

map : (a -> b) -> Vect n a -> Vect n b

, но если мы изменим ее как

map : (n f: (a -> b)) -> Vect n a -> Vect n b

(если это правильный синтаксис), то мы узнаем f будет использоваться только n раз. Это дает нам дополнительную уверенность в том, что map линейно по отношению к n. Однако это не доказывает этого, поскольку мы могли бы выполнять другие операции, которые> O (n), не игнорируя типы. Это правильно? И можно ли его расширить, чтобы доказать, что map действительно O (n)? И возможно ли это, если нет некоторого аргумента, такого как f, для обозначения сложности, как в инверсии матрицы O (m ^ 3)

invert : Vect m (Vect m elem) -> Vect m (Vect m elem)
...