Bruno Barras 的 Coq 分支有一个旧分支,它允许大致类似的语法。例如,参见示例文件 hit-hoh.v:
Inductive circle : U :=
base
// loop : base=base.
唉,这个版本的 Coq 从 2015 年底就没有更新过,而且当前版本的 Coq 也没有这样的原生支持。
HoTT 库编码高级归纳类型的方式是扩展私有归纳。例如,在旧版本的圆文件中(后来被通过 coequaliziers 的定义替换),我们可以看到:
Module Export Circle.
Private Inductive S1 : Type1 :=
| base : S1.
Axiom loop : base = base.
Definition S1_ind (P : S1 -> Type) (b : P base) (l : loop # b = b)
: forall (x:S1), P x
:= fun x => match x with base => fun _ => b end l.
Axiom S1_ind_beta_loop
: forall (P : S1 -> Type) (b : P base) (l : loop # b = b),
apD (S1_ind P b l) loop = l.
End Circle.
关键字告诉 Coq在Private Inductive
当前模块之外禁用模式匹配;这允许我们强制用户仅使用给定模块中定义的消除/归纳原则。然后我们公理化路径构造函数,公理化它们的计算规则,并定义消除器。请注意,消除器必须l : loop # b = b
在其主体中使用路径参数 ( ),否则 Coq 将假定您作为该参数传递的内容无关紧要。
~~~~~
我在哪里可以找到教程开始?
目前我不知道有任何此类教程,但我可能会建议查看contrib/HoTTBook.v
其中contrib/HoTTBookExercises.v
包含 HoTT 书籍/练习和 HoTT/HoTT 库之间的许多链接。看看这些定理和练习是如何陈述和证明的可能是有用的(并随时为尚未与任何东西相关联的问题/定理贡献您自己的解决方案/证明!)。