记录一些规则.
待办:
资料来源
目前有参考价值的资料只有
基础
基础类型论是带有 Σ,Π,U 的类型论. 我们用 Γ,Δ 等指代上下文, 或称类型组, 也就是一组类型的列表, 其中每一个类型都是在它之前的上下文中的. 对应地, σ:Γ 则是一组表达式. 这称为替代或者表达式组. 空上下文写作 (), 空替代写作 [].
我们用 Γ⊢t:A 表示表达式的类型判断. Γ⊢A 表示类型的合法性判断. 在下面的规则中, 统一省略一个上下文前缀 Γ⊢. 如果某个判断前面有写出上下文, 则认为是在 Γ 的基础上添加.
对于上下文和替代, 有如下的规则:
x:A,ΔAx:A⊢Δ[t,σ]:(x:A,Δ)t:Aσ:Δ[x/t]
如果引入简写, 我们使用 ⇒ 表达消除简写的方式. 而 ≡ 表示判断相等.
相等类型
引入依赖相等类型:x=Δ.Aδyδ:IDΔx:A[δ1]y:A[δ2]其中 IDΔ 表示上下文的等式.ID()ID(Δ,x:A)⟹()⟹(δ:IDΔ,x1:A[δ1],x2:A[δ2],x⋆:x1=Δ.Aδx2)其中 δ1 表示将 δ 中的 3k+1 项取出来.
依赖相等类型的元素可以通过 apΔ.tδ 构造.1apΔ.tδ:t[δ1]=Δ.Aδt[δ2]δ:IDΔΔ⊢t:A
我们用 x=Ay 简写 x=().A[]y, reflx 简写 ap().x[].
相等类型的计算规则
相等类型有特殊的计算规则.
s=Δ.∑x:ABδtf=Δ.∏x:ABδg≡≡q:fsts=Δ.Aδfstt∑snds=(Δ,x:A).Bδ,fsts,fstt,qsndtu:A∏v:A∏q:u=Δ.Aδv∏f(u)=(Δ,x:A).Bδ,u,v,qg(v)
对应地, ap 也可以计算.
apΔ.(s,t)δapΔ.fstsδapΔ.sndsδapΔ.f(b)δapΔ.λ(y:A).tδ≡≡≡≡≡(apΔ.sδ,apΔ.tδ)fstapΔ.sδsndapΔ.sδapΔ.fδ(b[δ1])(b[δ2])(apΔ.bδ)λu.λv.λq.ap(Δ,y:A).tδ,q
其中 δ 的左右两侧分别是 σ1,σ2.
对于右下角是变量的情况, 我们也有规则:u=(Δ,y:A).xδ,a,b,qvap(Δ,y:A).xδ,a,b,qap(Δ,x:A).xδ,a,b,q≡≡≡u=Δ.xδvapΔ.xδq这样, 我们可以得到一些可容许的等式.
x=(Δ,x).Aδ,a,b,qyap(Δ,x).tδ,a,b,q≡≡x=Δ.AδyapΔ.tδ(x∈/free(t))
这些等式大致和替代满足的等式相同. 在之后我们也会一直保持这些等式.
单值公理
对于 A=Δ.UδB, 也就是 A=UB 来说, 我们需要得到单值公理. 因此我们引入等价性:A≅B⟹(≈):A→B→U∑(a:A∏isContr(∑b:Ba≈b))×(vice versa).其中 isContr(A) 代表 A×∏x,y:Ax=Ay. 我们不使用通常的定义 ∑a:A∏x:Aa=Ax, 因为这两个定义的等价性依赖于道路的拼接; 而我们类型论中暂且没有.
我们规定p↓:A≅Bp:A=UBe↑:A=UBe:A≅B并且 e↑↓≡e. 但是反之则不添加 p↓↑≡p. 在语义层面, 是因为 HOTT 的立方范畴语义不支持这个 η-定律; 在操作层面, 这条定律因为等式的其他规则而极难判定.2 因此, (=U) 和 apΔ.Aδ (其中 A:U) 不会进一步计算.
将 A≅B 类型展开, 可以得到九个分量. 它们分别是:
• | lift(a):a≈tr(a) 证明转化是沿着一一对应关系的. |
• | utr(a,b1,b2):a≈b1→a≈b2→b1=Bb2 证明转化结果是唯一的. 在不会混淆的情况下, 我省略前三个参数, 只写后面两个参数. |
• | ulift(a,b1,b2):∏r1:a≈b1∏r2:a≈b2r1=(x:B).a≈xutr(a,b1,b2)(r1)(r2)r2 证明这个一一对应是命题. |
对于 p 为 apΔ.Aδ 的情况, 我们引入这九个分量对应的原语:
• | (=Δ.Aδ) 已经引入了. 注意到第三节当右下角是变量时我特意漏了一条规则, 现在可以自然地补上: (=(Δ,x:U).xδ,a,b,q) 在计算上需要等于 fst(ap(Δ,x:U).xδ,a,b,q↓). 因此根据 ap 的计算法则可以导出它等于 fst(q↓). |
• | trΔ.Aδ 对应一般类型论的 coe 或 transp 函数. |
• | liftΔ.Aδ(a) 在 Cubical Agda 中称作 transport-filler . |
• | utrΔ.Aδ(a,b1,b2) 给出道路的复合. |
• | uliftΔ.Aδ(a,b1,b2) 给出高阶的等式. |
这九个原语的判断等式必须与 apΔ.Aδ 一起. 因此我们需要对 A 为 Σ,Π-类型的情形写出它们的等式. 很显然, 如果 A 是变量, 并且 A∈/Δ 时, tr 退化为常函数; lift 退化为 refl. 但是 utr 仍然是道路复合; 而 ulift 基本上证明了 J 定律.
规则如下.
apΔ.Aδ↓≡⎝⎛(=Δ.Aδ),⎝⎛λa1.⎝⎛λs.λt.(trΔ.Aδ(a1),liftΔ.Aδ(a1)),⎝⎛utrΔ.Aδ(a1,fsts,fstt)(snds)(sndt),uliftΔ.Aδ(a1,fsts,fstt)(snds)(sndt)⎠⎞⎠⎞⎠⎞,⎝⎛λa2.⎝⎛λs.λt.(trΔ.Aδ(a2),liftΔ.Aδ(a2)),⎝⎛utrΔ.Aδ(a2,fsts,fstt)(snds)(sndt),uliftΔ.Aδ(a2,fsts,fstt)(snds)(sndt)⎠⎞⎠⎞⎠⎞⎠⎞
trΔ.∑x:ABδ(s,t)trΔ.∏x:ABδ(f)liftΔ.∑x:ABδ(s,t)liftΔ.∏x:ABδ(f)≡≡≡≡(trΔ.Aδ(s),tr(Δ,x:A).Bδ,s,trΔ.Aδs,liftΔ.Aδs(t))λa.tr(Δ,x:A).Bδ,a,trΔ.Aδa,liftΔ.Aδa[f(trΔ.Aδ(a))]⎝⎛liftΔ.Aδ(s),lift(Δ,x:A).Bδ,s,trΔ.Aδs,liftΔ.Aδs(t)⎠⎞λu.λv.λq.utr(Δ,x:A).Bδ,a,trΔ.Aδa,liftΔ.Aδa⎝⎛lift(Δ,x:A).Bδ,a,trΔ.Aδa,liftΔ.Aδa[f(trΔ.Aδ(v))],ap(x:A).f(x)liftΔ.Aδ(v)⎠⎞
(...)
• | reflU, ?U |
• | =f(x), =fstx, etc. |
对称
我们尽量使用下标 1 指代左侧; 2 指代右侧; ⋆ 指代等式本身.
定义对称 symΔ.Aδ(a).
symΔ.Aδ(a⋆⋆):a1⋆=(γ,u,v).u=Δ.Aγ⋆vsymΔ(δ),a⋆1,a⋆2a2⋆δ:IDIDΔa⋆⋆:a⋆1=(γ,u,v).u=Δ.Aγ⋆vδ,a1⋆,a2⋆a⋆2
表达式组之间的对称操作 symΔ(δ) 是缩写, 这和依赖相等类型与表达式组的相等同理.sym()[]sym(Δ,x:A)⎣⎡δ,a11,a21,a⋆1,a12,a22,a⋆2,a1⋆,a2⋆,a⋆⋆⎦⎤⟹[]⟹⎣⎡symΔ(δ),a11,a12,a1⋆,a21,a22,a2⋆,a⋆1,a⋆2,symΔ.Aδ(a⋆⋆)⎦⎤
脚注