假设我有两个归纳定义的数据类型:
Inductive list1 (A : Type) : Type :=
| nil1 : list1 A
| cons1 : A -> list1 A -> list1 A.
和
Inductive list2 (A : Type) : Type :=
| nil2 : list2 A
| cons2 : A -> list2 A -> list2 A.
对于任何P (list1 a)
我应该能够构建一个P (list2 a)
,通过应用我用于构建P (list1 a)
的完全相同的方法,除了用nil1
替换nil2
,用list1
替换list2
和用cons1
替换cons2
。同样,任何以list1 a
为参数的函数都可以扩展为采用list2 a
。
是否有类型系统允许我以这种方式说两个具有相同形状的数据类型(具有相同形状的构造函数),并证明P (list1 a) -> P (list2 a)
?例如,这是单值,HOTT或立方/观察类型系统允许的东西吗?它也可能允许定义像reverse: list_like a -> list_like a
这样接受list1
s和list2
s作为参数的函数。