Может быть, получится сравнение с образцом по TCons (x:t) xs ?
Если не получится, то придётся явно тип прописывать. Надо бы уже поставить Agda, да просмотреть снова документацию. А то чуйствую, что вопросы дурацкие.
Функция может на вход принимать квадратные матрицы и считать, что элементы выше диагонали нулевые. Можно ли это показать в её типе? Можно. Как этот тип будет выглядеть? А вот примерно так, как показано выше.
Специальный тип лучше тем, что лучше обозначает контракт.
Ты просто не сможешь вызвать fooLowerT для плотной матрицы, в которой каждый элемент может быть не равен 0. Тебе придётся соорудить доказательство, что твоя матрица нижнетреугольная и только после этого ты сможешь вызвать fooLowerT.
Comments 10
а Set1 имеет тип Set2 ?
Reply
Reply
data TVec {T : Set1} : Nat -> Set1 where
TNil : TVec zero
TCons : {n : Nat} -> {dtp : T} -> (x : dtp) -> TVec n -> TVec (suc n)
?
Reply
Сравнение с образцом по (TCons x xs) какой тип присвоит x?
Это та же проблема унификации с внутренним forall.
data V =
N
| forall t . C t V
Reply
TCons (x:t) xs
?
Если не получится, то придётся
явно тип прописывать.
Надо бы уже поставить Agda,
да просмотреть снова документацию.
А то чуйствую, что вопросы дурацкие.
Ничего, после 11-12 освобожусь.
Reply
Не пойдет. ;)
Reply
(The comment has been removed)
Функция может на вход принимать квадратные матрицы и считать, что элементы выше диагонали нулевые. Можно ли это показать в её типе? Можно. Как этот тип будет выглядеть? А вот примерно так, как показано выше.
Можно сэкономить память, опять же.
Reply
(The comment has been removed)
Ты просто не сможешь вызвать fooLowerT для плотной матрицы, в которой каждый элемент может быть не равен 0. Тебе придётся соорудить доказательство, что твоя матрица нижнетреугольная и только после этого ты сможешь вызвать fooLowerT.
Reply
Ещё я ttfp заканчиваю читать, что взять следующей книжкой?
Reply
Reply
Leave a comment