不,在这种情况下,谓词性和单调性并不紧密相关。
Coq / Adga中的阳性检查可确保您大致取得单调事物的最小固定点。
以下是根据晶格和单调算符来思考归纳类型的方法。回想一下Knaster-Tarski定理,它说在一个完整的格,每个单调算子f :L → L都有一个最小固定点μ (f )。接下来,我们可以将类型理论中的类型视为在可证明性下形成晶格。也就是说,输入小号低于Ť如果真相小号引起该的Ť。现在,我们要做的是对类型采用单调运算符F,并使用Knaster-Tarski得出对该运算符的最小不动点的解释大号F从L → Lμ (˚F)小号Ť小号ŤF。 μ (˚F)
但是,类型理论中的类型不只是一个格子:它们构成一个类别。也就是说,给出两种和牛逼,也有可能很多办法小号会低于牛逼,以及每个证据的一种方式è :小号→ 牛逼。因此,类型运算符F也必须对这些证明做些明智的事情。单调性的适当概括是函数性。也就是说,我们希望F在类型上有一个运算符,并在证明上有一个作用,使得如果e :S → T,则F (小号Ť小号ŤË :小号→ TFFË :小号→ T。F(e):F(S)→F(T)
现在,函数的性质是由和和积(例如,如果和G是类型的内泛函子,则F + G和F × G(按点作用)也是类型的仿函数(假设我们在的代数中有和和积)但是,它并没有被函数空间保留,因为指数双功能符F → G在其左参数中是相反的,因此,当您编写归纳类型定义时,您将定义一个函子以使其最小固定点。为了确保它确实是一个函子,您需要排除函数空间左侧出现递归参数的可能性,因此要进行阳性检查。FGF+GF×GF→ G
通常避免过分折衷(在系统F的意义上),因为它是一种迫使您在经典逻辑和集合论模型之间进行选择的原则。如果具有F样式索引,则不能将类型解释为经典集合论中的集合。(请参阅雷诺兹着名的“多态不是集合论”。)
从类别上说,F风格的泛泛性表示类型和术语的类别构成一个小的完整类别(即,hom和object都是集合,并且所有小图的限制都存在)。传统上,这会迫使类别成为摆放姿势。许多建构主义者之所以具有建设性,是因为他们希望他们的定理不仅限于经典逻辑,而且可以容纳在更多的系统中,因此,他们不想证明任何经典的错误。因此,它们对强制性多态性持谨慎态度。
但是,多态可以让您说出类型理论内部传统上“大”的许多条件,而积极性就是其中之一!如果可以产生多态项,则类型运算符是函数。F
˚F 中号一个p:∀α,β。(α → β)→ (F(α )→ F(β))
看到这如何与功能有关?IMO,这在Coq中将是一个非常不错的选择,因为它将使您更加轻松地进行通用编程。积极性检查的句法性质是通用编程的一大障碍,我很乐意将经典公理的可能性换成更灵活的功能程序。
编辑:您要问的Prop和Set之间的区别的问题是由于以下事实引起的:Coq开发人员希望允许您以幼稚的集合论术语考虑Coq定理,而不必强迫您这样做。从技术上讲,他们将Prop和Set分开,然后根据Prop的计算内容禁止集合。
因此,您可以将Prop解释为ZFC中的真值,即布尔值true和false。在这个世界上,所有命题证明都是平等的,因此很显然,您不应该依赖于命题证明。因此,根据Prop证明的计算内容来禁止集合是完全明智的。此外,2元素布尔型格显然是一个完整的格,因此它应支持强制性索引,因为存在任意集值满足。对集合的可预测性限制是由于这样的事实(如上所述),即在经典的集合论模型中F样式索引是退化的。
Coq还有其他模型(它是建设性的逻辑!),但要点是,它永远不会证明古典数学家会困惑的任何事情。