作为一个粗略且未经指导的背景,在HoTT中,人们从归纳定义的类型中推断出到底是什么
Inductive paths {X : Type } : X -> X -> Type :=
| idpath : forall x: X, paths x x.
这允许非常一般的构造
Lemma transport {X : Type } (P : X -> Type ){ x y : X} (γ : paths x y):
P x -> P y.
Proof.
induction γ.
exact (fun a => a).
Defined.
这Lemma transport
将是HoTT“替换”或“重写”策略的核心;据我所知,诀窍是,假设一个你或我可以抽象地识别为的目标
...
H : paths x y
[ Q : (G x) ]
_____________
(G y)
弄清楚什么是必要的依赖类型 G,这样我们就可以apply (transport G H)
. 到目前为止,我所知道的只是
Ltac transport_along γ :=
match (type of γ) with
| ?a ~~> ?b =>
match goal with
|- ?F b => apply (transport F γ)
| _ => idtac "apparently couldn't abstract" b "from the goal." end
| _ => idtac "Are you sure" γ "is a path?" end.
不够笼统。也就是说,第一个idtac
经常被使用。
问题是
[有没有| 什么是]正确的事?