Agda没有K那么强大吗?

Ste*_*haw 11 pattern-matching agda dependent-type

作为什么是Axiom K的后续行动,我想知道当你使用Agda --without-k选项时会发生什么.结果不那么强大吗?它是一种不同的语言还是所有以前的程序仍然打字检查?

And*_*ács 14

Martin-Löf型理论和Axiom K的情况在某种程度上类似于欧几里德几何和平行假设.用平行假设可以证明更多的定理,但那些只是关于欧几里德空间.没有平行假设可证明定理也适用于非欧几里德空间,并且可以自由地添加明确的非欧几里德公理.

Axiom K粗略地说,等式证明不带有非平凡的信息,也没有计算内容.它在逻辑上等同于以下两个语句:

-- uniqueness of identity proofs
UIP : {A : Set}(x y : A)(p p' : x ? y) ? p ? p'

-- reflexive equality elimination
EqRefl : {A : Set}(x : A)(p : x ? x) ? p ? refl
Run Code Online (Sandbox Code Playgroud)

当然,这两者都是无法证明的--without-K.我在这里给出了一些更具体的陈述,这些陈述在没有K的情况下是无法证明的,并且乍看之下它的不可信度似乎是违反直觉的:

{-# OPTIONS --without-K #-}

open import Relation.Binary.PropositionalEquality
open import Data.Bool
open import Data.Empty

-- this one is provable, we're just making use of it below
coerce : {A B : Set} ? A ? B ? A ? B
coerce refl a = a

coerceTrue : (p : Bool ? Bool) ? coerce p true ? true
coerceTrue = ? -- unprovable

data PointedSet : Set? where
  pointed : (A : Set) ? A ? PointedSet

BoolNEq : pointed Bool true ? pointed Bool false ? ?
BoolNEq = ? -- unprovable
Run Code Online (Sandbox Code Playgroud)

Axiom K看似直观,因为我们用单个refl构造函数定义了Agda的命题相等性.为什么甚至打扰神秘的非refl平等证明,如果没有K,我们不能反驳它们的存在?

如果我们没有公理K,我们可以自由地添加与K相矛盾的公理,使我们能够大致概括我们的类型概念.我们可以假设单价公理和高归纳类型,这本质上给出了同伦类型理论书所涉及的类型理论.

回到欧几里得的类比:平行假设假定空间是平的,所以我们可以证明依赖于空间平坦的东西,但不能说任何关于非平坦空间的东西.Axiom K假设所有类型都有平凡的等式证明,所以我们可以证明依赖于它的陈述,但是我们不能有具有更高维度结构的类型.非欧几里德空间和高维类型都有一些奇怪的因素,但它们最终是丰富而有用的思想来源.

如果我们转向"书"同伦类型理论,那么"具有平凡的平等"就成了我们可以在内部谈论的属性,并证明它适用于具有该属性的特定类型.

  • 使用相同的空间路径护目镜,Axiom K表示,只要它保持循环基点的常量路径,谓词就会保持*循环*.如果我们在空间中有例如洞,这只是假的,所以如果我们把Axiom K作为公理,那么在空间中就不可能有空洞(或任何值得注意的结构).所以我们不妨忘记空格并谈论类型,就好像它们是集合一样. (8认同)
  • 至于为什么Axiom J支持HoTT,我怀疑每个人都有一个直接的直观答案,所以这是我自己的.首先,我们应该试着忘记我们先前的类型概念,只是简单地将公理视为指定一些奇怪的看不见的对象.我们可以将J视为具有任意结构的空间中的路径的归纳原理,然后J表示如果路径的一个谓词对于路径是正确的,那么在一个端点处的常量路径(无关紧要)是路径. (6认同)
  • 这应该是直观的,因为在任何路径和端点处的常数路径之间存在2路径(连续变形),并且我们定义的理论仅证明事物达到相等/路径,因此如果`A = B `,那么"A"和"B"应该是完全相同的,特别是在这里,对于端点上的常量路径和考虑的路径应该是相同的. (4认同)
  • 至于如何产生额外的平等; 好吧,如果没有单价或更高的归纳类型,它们就没有.但是Axiom J谈到*任意*空间,所以它已经讨论了单价和更高的归纳性东西,我们只需要通过某种方式将它们添加到我们的理论中,如果我们想要留在MLTT中,可能只是"假设". .似乎摆脱假设需要从一种截然不同的类型理论开始(立方型理论是当前最佳候选者). (4认同)
  • 索引类型定义可以解释为非索引定义,并在构造索引的构造函数中使用额外的相等证明.在Agda中,最重要的是在依赖模式匹配中统一索引的方法,因此`_≡_`可以看作是模式匹配产生的任何相等概念的包装.但是模式匹配最终可以简化为Axiom K或Axiom J的应用程序.所以,即使在Agda的上下文中,你也应该只看一下相同的平等点来确定相等的等式. (3认同)
  • 我仍然在努力理解的事情是,如果将`_≡_`定义为具有单个`refl`构造函数的数据类型,就像在`Relation.Binary.PropositionalEquality`中那样,那么这些其他的等式应该来自何处?换句话说,什么是"x≡y"的例子,它不会减少为"refl"?这只是Agda提供的"假设"后门的神器吗?"假设"是否具有更多的理论基础而不仅仅是逃生舱? (2认同)