Наткнулся.

Jan 08, 2009 00:57

У обычных векторов типы элементов не зависят от позиции. Это просто вектора, вектора векторов (матрицы) и тп.

Но можно определить вектор, у которого тип элемента от позиции зависит:
data DVec {n : Nat} {e : Nat -> Set} : Set1 where ( Read more... )

зависимые типы, размышления

Leave a comment

Comments 10

nivanych January 8 2009, 09:00:58 UTC
В Agda Set имеет тип Set1,
а Set1 имеет тип Set2 ?

Reply

thesz January 8 2009, 09:40:15 UTC
По-моему, так.

Reply


nivanych January 8 2009, 09:57:53 UTC
А вот так получится --
data TVec {T : Set1} : Nat -> Set1 where
TNil : TVec zero
TCons : {n : Nat} -> {dtp : T} -> (x : dtp) -> TVec n -> TVec (suc n)
?

Reply

thesz January 8 2009, 10:45:46 UTC
А как ты это дело извлекать будешь?

Сравнение с образцом по (TCons x xs) какой тип присвоит x?

Это та же проблема унификации с внутренним forall.
data V =
N
| forall t . C t V

Reply

nivanych January 8 2009, 13:27:37 UTC
Может быть, получится сравнение с образцом по
TCons (x:t) xs
?

Если не получится, то придётся
явно тип прописывать.
Надо бы уже поставить Agda,
да просмотреть снова документацию.
А то чуйствую, что вопросы дурацкие.

Ничего, после 11-12 освобожусь.

Reply

thesz January 8 2009, 15:05:07 UTC
Это будет, вообще-то, преобразование типов.

Не пойдет. ;)

Reply


(The comment has been removed)

thesz January 8 2009, 16:59:28 UTC
"Функцию вызвать нужную" - а какую?

Функция может на вход принимать квадратные матрицы и считать, что элементы выше диагонали нулевые. Можно ли это показать в её типе? Можно. Как этот тип будет выглядеть? А вот примерно так, как показано выше.

Можно сэкономить память, опять же.

Reply

(The comment has been removed)

thesz January 8 2009, 18:05:21 UTC
Специальный тип лучше тем, что лучше обозначает контракт.

Ты просто не сможешь вызвать fooLowerT для плотной матрицы, в которой каждый элемент может быть не равен 0. Тебе придётся соорудить доказательство, что твоя матрица нижнетреугольная и только после этого ты сможешь вызвать fooLowerT.

Reply


nealar January 10 2009, 09:20:31 UTC
Вкуришь меня в Агду на MskHUG?
Ещё я ttfp заканчиваю читать, что взять следующей книжкой?

Reply

thesz January 10 2009, 13:45:43 UTC
Уж насколько я её сам осилил, не более. ;)

Reply


Leave a comment

Up