OTT中可证明的连贯性

时间:2015-11-28 20:04:55

标签: agda dependent-type type-theory observational-type-theory

我正在玩observational type theory

以下是π的相等 - 类型(π是小写Π,即π A B(x : A) -> B x的代码)与强制相互定义:

π A₁ B₁ ≃ π A₂ B₂ = σ (A₂ ≃ A₁) λ P -> π _ λ x -> B₁ (coerce P x) ≃ B₂ x

和相应定义的函数相等(σ是小写Σ):

_≅_ {A = π A₁ B₁} {π A₂ B₂} f₁ f₂ = σ (A₂ ≃ A₁) λ P -> π _ λ x -> f₁ (coerce P x) ≅ f₂ x

因此,而不是"相等的函数将相等的输入映射到相等的输出"我们有"相等的函数映射定义相等的输入到相等的输出"。

在此设置中coherence

coerce : ∀ {α β} {A : Univ α} {B : Univ β} -> ⟦ A ≃ B ⟧ᵀ -> ⟦ A ⟧ᵀ -> ⟦ B ⟧ᵀ
coherence : ∀ {α β} {A : Univ α} {B : Univ β}
          -> (P : ⟦ A ≃ B ⟧ᵀ) -> (x : ⟦ A ⟧ᵀ) -> ⟦ x ≅ coerce P x ⟧ᵀ

Univ 0PropUniv (suc α)Type α

是可证明的。我唯一需要假设的是

postulate ≃-refl : ∀ {α} -> (A : Univ α) -> ⟦ A ≃ A ⟧ᵀ

但我们可以调整平等来处理A ≃ A作为特例(我认为trustMe需要朋友_≟_ : ∀ {α} {A : Set α} (x y : A) -> Maybe (x ≡ y))。

我们仍需要假设某些内容来定义subst和其他内容。

我错过了什么吗?我们是否会失去任何不相干性?在函数相等的定义中提到类型相等似乎是可疑的。通过限制相等函数的输入在定义上相等,我们是否会损失很多?强烈规范化coherence还是有什么好处,或者它不重要,因为它在计算上无关紧要?

The code(我完全忽略了积极性,终止和累积性问题)。

1 个答案:

答案 0 :(得分:5)

首先,感谢您询问观察类型理论。其次,你在这里所做的确实似乎是在一起,即使它有不同的地方,Thorsten Altenkirch,Wouter Swierstra和我把它们放在我们的故事版本中。第三,对于连贯性是可推导的并且反身性是唯一的假设并不令人惊讶(至少对我而言)。这也是我们的OTT的真实情况,Wouter在我们撰写该论文时回答了Agda 1中的证据。证明不相关和生命的短暂意味着我没有将他的证据移植到Agda 2。

如果您错过了任何内容,那就是潜伏在您的评论中

  

我们仍需要假设某些内容来定义df = pandas.DataFrame(dict(a=[1, 2, 3, 4, 5, 6], b=[6, 7, 8, 9, 0, 0]), index=pandas.MultiIndex.from_product([[1, 2], [3, 4, 5]])) print(df.groupby(level=0, group_keys=False).apply(lambda x: x.sum(axis=1))) 1 3 7 4 9 5 11 2 3 13 4 5 5 6 dtype: int64 和其他内容。

如果您有一些subst,一些P : X -> Set和一些a, b : X,您希望在q : a = b中获得一项功能。 "相等的函数将相等的输入取为相等的输出"通过P a -> P b,我们可以推导出refl P : P = Pq。你的"相等的函数将给定的输入转换为相等的输出"公式不允许您P a = P b弥补从qa的差距。

存在brefl,"两个相等的输入"相当于"在两个地方使用的一个输入"。在我看来,您已将工作转移到了获得subst所需的任何其他内容。根据您对subst的定义是多么懒惰(以及 &#39>你如何获得证据无关性),您只需要一个假设。

使用您的特定配方,您甚至可以获得同类值相等。如果你用强制而不是方程来修复类型间隙,你可能会省去一些麻烦(并且可能在函数相等的情况下摆脱域类型上的那个等式)。当然,在这种情况下,你需要考虑如何取代连贯性陈述。

我们非常努力地将强制排除在平等的定义之外,保留某种对称性,并保持类型方程式超出价值方程式,主要是为了不必一次考虑。有趣的是,至少某些部分的建筑可能会变得更容易,因为它是一种东西,它的强制性和#34;取代"两个平等的事物"。