Сабтайпинг для индуктивных типов
Oct. 25th, 2016 05:48 amПредлагается трактовать обозначения [T :> Nat] и [T <: Nat] как [T : NNO] и [T : CoNNO] соответственно, где
@Structure NNO:
@on N : Type
zero : N
succ : N -> N
@Structure CoNNO:
@on N
rec[T : NNO](n : N) : T
rec[:T](zero) = T.zero
rec[:T](succ(:n)) = T.succ(rec[T](n))
Отметим, что если N1 N2 : NNO ∧ CoNNO, то между типами N1 и N2 имеется изоморфизм, причём каноническим представителем этого класса эквивалентности типов является
@Family Nat:
zero : Nat
succ : Nat -> Nat
Для любого индуктивного типа IndT можно автоматически генерировать структуры IND-T и CoIND-T, таким образом проясняя что подразумевается под [T :> IndT] и [T <: IndT]. Наличие таких обозначений позволяет в общем виде описать тип рекурсора для любых индуктивных типов:
IndT.rec[X <: IndT <: Y](x : X) : Y
( Read more... )
@Structure NNO:
@on N : Type
zero : N
succ : N -> N
@Structure CoNNO:
@on N
rec[T : NNO](n : N) : T
rec[:T](zero) = T.zero
rec[:T](succ(:n)) = T.succ(rec[T](n))
Отметим, что если N1 N2 : NNO ∧ CoNNO, то между типами N1 и N2 имеется изоморфизм, причём каноническим представителем этого класса эквивалентности типов является
@Family Nat:
zero : Nat
succ : Nat -> Nat
Для любого индуктивного типа IndT можно автоматически генерировать структуры IND-T и CoIND-T, таким образом проясняя что подразумевается под [T :> IndT] и [T <: IndT]. Наличие таких обозначений позволяет в общем виде описать тип рекурсора для любых индуктивных типов:
IndT.rec[X <: IndT <: Y](x : X) : Y
( Read more... )