作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我有两种归纳定义的数据类型:
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 作为参数。
最佳答案
在单价的HoTT中,确实可以证明list1 A
等于 list2 A
所有 A
.给出证明 p : list1 A = list2 A
, transport (或 subst
)给你 P (list1 A) -> P (list2 A)
对于任何 P
.在立方类型理论中,这种传输也可以按预期计算。据我所知,立方类型理论( CCHM 或 cartesian )是目前唯一可行的设置。 cubicaltt
是最有用(但仍然不是很实用)的实现。
关于types - 是否有一种类型理论可以表示相同形状的归纳数据类型的等效性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48355427/
我一直在阅读Practical Foundations for Programming Languages并发现迭代和同时归纳定义很有趣。我能够很容易地对偶函数和奇函数的相互递归版本进行编码 onli
我是一名优秀的程序员,十分优秀!