Coq 为什么基于构造语言的微积分如此频繁地使用setoid?

Coq 为什么基于构造语言的微积分如此频繁地使用setoid?,coq,agda,lean,Coq,Agda,Lean,人们发现SETOID广泛应用于Agda、Coq等语言中。。。事实上,像Lean这样的语言认为它们可以帮助避免“Setoid地狱”。首先使用setoid的原因是什么? 基于HoTT(如cubical Agda)的扩展类型理论是否减少了对setoid的需求?理想情况下,人们肯定希望能够将任意等价关系视为莱布尼兹等式(eq),从而能够在任意上下文中重写。这意味着通过等价关系定义类型的商 我不是这方面的专家,但我也一直在想同样的问题,我认为对setoid的依赖源于这样一个事实,即商在类型理论中仍然是一个

人们发现SETOID广泛应用于Agda、Coq等语言中。。。事实上,像Lean这样的语言认为它们可以帮助避免“Setoid地狱”。首先使用setoid的原因是什么?
基于HoTT(如cubical Agda)的扩展类型理论是否减少了对setoid的需求?

理想情况下,人们肯定希望能够将任意等价关系视为莱布尼兹等式(
eq
),从而能够在任意上下文中重写。这意味着通过等价关系定义类型的商

我不是这方面的专家,但我也一直在想同样的问题,我认为对setoid的依赖源于这样一个事实,即商在类型理论中仍然是一个不被理解的概念

  • 当我们没有/想要商数类型时,Setoid地狱就是我们被困的地方
  • 我们可以将商类型公理化,我相信(我可能错了)这就是Lean所做的
  • 我们可以发展一种类型理论,它可以自然地表达商,这就是HoTT/Cubical TT对更高归纳类型所做的

  • 此外,商类型(或我对它们的天真想象)迫使我们以一种可能不太理想的方式将程序和证明打包在一起:两种商类型之间的函数是一个普通函数,并证明它尊重潜在的等价关系。虽然从技术上讲可以做到这一点,但编程和证明的这种交错可以说是不可取的,因为它使程序无法读取:人们常常试图将程序和证明保持在两个完全不同的世界中(因此要求集合,将类型与其等价关系分开),或者更改一些表示,使程序和证明是一个相同的实体(因此我们可能甚至不需要首先明确说明等价性)。

    正如李耀霞的回答所描述的,setoid在我们没有或不想使用商时使用

    在霍特书和精益书中,商数(基本上)被公理化了。Lean和HoTT book的一个区别是后者有更多更高的归纳类型,Lean只有商和(常规)归纳类型。如果我们只是把注意力限制在商数上(在HoTT书中设置商数),它在精益和HoTT书中的作用是一样的。在这种情况下,您只需假设给定类型
    a
    a
    上的等价
    R
    ,您就有一个商
    Q
    ,和一个函数
    [-]:a→ Q
    带有属性
    ∀ xy:A,rxy→ [x] =[y]
    。它具有以下消除原理:构造函数
    g:Q→ X
    对于某些类型的
    X
    (或HoTT中的hSet
    X
    ),我们需要一个函数
    f:a→ X
    这样我们就可以证明
    ∀ xy:A,rxy→ fx=fy
    。这是计算规则的一部分,表示
    ∀ x:A,g[x]≡ f x
    (这是Lean和Book HoTT中的定义等式)

    这个商的主要缺点是它破坏了规范性。正则性表示,自然数中的每个闭项(即,没有自由变量的项)标准化为零或某个自然数的后续项。这个商破坏规范性的原因是我们可以将
    =
    的消去原理应用于商中的新等式,这样的项不会减少。在莱恩看来,这并不重要,因为在所有我们关心的情况下,我们仍然可以证明一个平等,即使它可能不是定义上的平等


    立体类型理论有一种奇特的方法,既能处理商,又能保持规范性。在CTT中,相等的工作方式不同,这意味着在保持规范性的同时可以引入更高的归纳类型。CTT的潜在缺点是类型理论要复杂得多,你必须接受HoTT(尤其是放弃证明无关性)。

    [李耀霞和弗洛里斯·范多恩的答案都很好,因此我将尝试用额外的信息来补充它们。]

    另一种观点认为,尽管商在古典数学中使用得很多,但毕竟可能并没有那么多。不取商而是坚持群胚正是非交换几何的起点!它告诉我们,有些商的行为异常恶劣,我们最不想做的事情(在这种情况下!)就是去做商。但是,如果你使用“正确”的工具来处理它,它本身并没有那么糟糕,甚至相当好

    可以说,它也深深地嵌入了所有范畴理论中,在范畴理论中,人们不需要对等价的对象进行商运算。范畴理论中的“骷髅”被认为是低级趣味。严格和其他许多事情也是如此,所有这些都归结为试图压制那些最好保持现状的事情,因为它们根本没有伤害。我们只是习惯于希望“独特性”反映在我们的表达中——这是我们应该克服的

    Setoid hell的出现并不是因为必须证明某些一致性(您需要证明它们,以表明您具有适当的等价性,并且每当您在原始表示而不是在商版本上定义函数时,都需要证明它们)。在定义不可能“出错”的函数时,当您被迫一次又一次地证明这些一致性时,就会出现这种情况。所以Setoid地狱实际上是由于未能提供适当的抽象机制造成的

    换句话说,如果你做了足够多的简单数学,商数表现良好,那么应该有一些自动化,让你顺利地处理这些问题。目前,在类型理论中,正在进行一项研究,以精确地计算出这可能是什么样子。弗洛里斯的回答很好地概括了一个陷阱:在某个时候,哟