跳到主要内容

注:这些页面广泛使用了最新的XHTML和CSS标准。在任何符合标准的现代浏览器中,它们都应该看起来很棒。不幸的是,它们在较旧的浏览器(如Netscape 4.x和IE 4.x)中可能看起来很糟糕。此外,许多帖子使用MathML,目前只有Mozilla支持。我最好的建议(你会的感谢当我在网上浏览越来越多使用新标准的网站时,我是要升级到最新版本的浏览器。如果这不可能,考虑转向标准兼容和开源Mozilla公司浏览器。

2016年8月8日

什么是形式证明?

Mike Shulman发布

最近,同伦类型理论界就“类型选择是否总是可判定的?”等问题展开了一些讨论。虽然这个问题的具体措辞是类型理论特有的(也有一定的技术性),但它实际上是一个更深入、更普遍的问题的体现:什么是形式证明?

在某种程度上,这个问题的答案是一个定义问题:任何特定的数学基础系统定义它认为是“正式证据”。然而,目前的讨论是由设计基础系统,所以这不是相关的答案。相反,问题是,“形式证明”的概念应该满足哪些属性,才能名副其实?

首先,让我强调一下,每当我说“证明”时,我的意思是对的证明。除了定义(正确的)形式证明的概念外,基本系统还常常定义一些可能正确或不正确的“论点”;但现在,让我们考虑一下正确的证明。

我倾向于声称必要条件“形式证明”的概念是稳健性定理这意味着如果我们能证明C类C类(在某些形式系统中)在假设下A类A类B类B类比如,我们知道(在正式系统之外)A类A类B类B类是真的,我们应该能够(再次从外部)得出这样的结论C类C类也是正确的。因为如果一个证据不能保证其结论的真实性,那么证明什么又有什么好处呢?

当然,范畴逻辑学家想要的不仅仅是一个简单的关于“真理”的稳健性定理:我们希望能够在任意的结构充分的范畴中解释证明。更准确地说,证明应该提供一种方法来构造某种类型的初始(或自由)范畴,我们可以将其唯一地映射到任何其他此类范畴𝒞\数学{C}用宾语和语素解释证明𝒞\数学{C}一个普通的稳健性定理就是这种情况的特例,当𝒞\数学{C}是一个我们认为是“现实世界”的范畴,例如集合的范畴。我们可能还想有一个对偶“完备性定理”,在某种意义上说,一切真实都是可以证明的。然而,尽管这些都很好,但没有至少一个简单的稳健性定理,我认为很难证明什么是“证明”。

现在,我们如何证明一个稳健性定理?原则上,我愿意对此持开放态度,但我见过的唯一方法是通过感应也就是说,形式证明是(或产生某种东西)由一些规则集合归纳构造的,我们通过证明这些规则中的每一个都“保留真理”来证明其合理性,因此当我们将它们组合成一个证明时,真理始终保持不变。

例如,一条通用规则(称为“或消除”)规定,如果我们能够证明“A类A类B类B类“,并假设A类A类我们可以证明C类C类,并且还假设B类B类我们可以证明C类C类,然后我们可以推断C类C类没有额外的假设。根据“or”的一般含义,这条规则是合理的,在以下意义上:假设归纳出三个前提是合理的。我们得出结论:(1)A类A类B类B类“是真的,如果(1)A类A类是真的那么也是C类C类,如果(3)B类B类是真的那么也是C类C类根据(1),必须是A类A类为true或B类B类为真;在第一种情况下,我们推断C类C类根据(2)为真;而在第二种情况下,我们推断C类C类从(3)来看为true。因此,在所有情况下C类C类必须为真。这是“结构归纳法”证明中的“归纳步骤”之一,即所有证明都保持真理,因此形式系统是健全的。

(在包括这个例子之前,我犹豫了一下,因为它看起来如此重复,以至于人们觉得什么都没有发生。关键是它正在将证明从对象理论转移到元理论:对象理论中的证明规则是合理的,因为它代表了元理论中正确的推理模式对于更复杂的系统,如依赖类型理论,以及当我们想将证明解释为任意类别时,它会变得不那么简单。)

总之,在我看来(目前),任何名副其实的“形式证明”概念都必须是(或包含,或产生)某种归纳定义的结构,我们可以用它来证明一个健全性定理。在类型理论中,这些归纳定义的结构称为派生树.

现在,正如我前面提到的,许多正式系统还包括一些“论点”的概念,这些概念可能是证据,也可能不是证据。事实上,我很想说不可能的避免在某个时候处理这个问题。当然,写在纸上的普通数学在任何形式系统中都不是形式证明;但即使我们试图(完全不可行)总是在纸上写出完整的形式证明,也总有可能(因为“纸是非打印的”)我们在某些地方应用了错误的规则。有人可能会说,形式证明是一种数学抽象,在现实中根本不存在。

“类型检查”的问题是关于我们如何从论点到证明。当然,这取决于我们谈论的是哪种争论!例如,大多数类型理论都包含一个“术语”的概念,它起着一种论证的作用。术语大致是派生树(或其部分)的一维句法表示;但不是直接归纳定义为派生树,而是从更大的一类“非类型化术语”中挑选出“类型良好的术语”(表示派生树的术语)。因此,后者是一种“论证”,可能会也可能不会产生证据。

例如,上面用“or-elimination”表示的证明可以用如下术语表示案例(M(M),u个.P(P),v(v).)案例(M、u.P、v.Q),其中M(M)M(M)是“A类A类B类B类”,P(P)P(P)是证明C类C类那就需要使用一个假设u个u个属于A类A类、和是的证明C类C类这需要使用一个假设B类B类这是一种可以输入计算机校对助手的表达式;它在形式上类似于以下算术表达式x个+(*z(z))x+(y*z)可以用Java或Python程序编写。但除了潜在的拼写错误问题外,我们还可以把“看起来像术语”但实际上并不代表证明的符号串放在一起;例如,也许我们写案例(M(M),u个.P(P),v(v).)案例(M、u.P、v.Q)哪里M(M)M(M)并不是“A类A类B类B类“对于任何A类A类B类B类(也许这是“如果A类A类然后B类B类“),或其中P(P)P(P)不是同一结论的证明C类C类在静态类型的编程语言中,这种情况会产生编译器错误;这与校对助理的类型检查基本上是一样的。

具体的问题“类型检查是否可以判定”是关于是否应该有一个算法,您可以为其提供一个非类型化的术语,并确保在有限的时间内得到“是的,这表示派生树”或“否,它不”的答案。换句话说,编译器永远不会挂起;它必须成功或返回错误消息。但从我在这里提倡的角度来看,“可判定检查”不是正式系统的基本属性,或者更准确地说,不是证据在该系统中。相反,它是某类“参数”的属性可能会也可能不会代表证明。

特别是,尽管许多类型理论对术语都有可判定的类型选择,但基本上所有的实际的类型理论还包括其他没有“可判定检查”的各种“论点”。例如,依赖类型理论的实际实现(如Coq、Agda和Lean)从不强迫用户写出完整的术语(更不用说派生树了);相反,它们有强大的“阐述器”,可以使用统一和类型类推理等技术填充隐式参数。这些阐述者通常是保证一般终止;例如,很可能在类型类推理中设置一个循环,导致Coq挂起,而“高阶统一”在形式上是一个无法判定的问题。

这甚至是在我们讨论笔画数学中的非正式论点之前。将它们转换为任何形式的正式证明,这肯定是任何算法都无法判定的!

因此,我们当然不能没有“可判定的类型检查”的“论点概念”。但是,我想问新形式系统的设计者,在系统的规范中,是否有一个(可能是归纳的)证明概念,人们可以证明一个健全性定理(希望还有一个范畴初等定理,也许还有一个完备性定理)。如果不是,你如何证明将你所谈论的事情称为“证据”?

请注意,对于这类证明,“类型检查”通常是“可判定的”;就其本质而言,它们是正确的证据。我们的“论点”离归纳形式证明越远,问题的“类型检查”就越困难,直到我们达到极限“我找到了这个结果的一个真正了不起的证明,这个证明的范围太窄了,无法容纳”。在某种程度上,在可判定和不可判定的类型检查之间存在着边界。在其他地方,存在可行和不可行的类型检查之间的边界。在实践中,我们当然会利用每一行两边的“论点概念”。

然而,在我看来,如果一个正式制度的核心是一些归纳的证明概念,那么对于一个证明助理来说,诚实地称自己为实施在这个正式的系统中,它应该在其内部的某个地方包含一些数据结构,这些数据结构合理地忠实地表示了这些证明。考虑到对于实际的形式证明来说,“类型检查”是多么微不足道,在我看来,任何自称为这些证明的“合理可信的表示”的东西,至少应该具有可判定的类型检查。这些表示可能不是系统用户所称的“术语”;但他们应该在那里。非正式地,校对助理的目的是协助用户制作证据; 实际上,它可能不会完全产生一个完整的归纳形式证明,但它至少应该产生一些足够接近的东西,以便可以在算法上跨越剩余的距离。

然而,我仍然愿意被说服。

编辑:在评论中进行了长期且可能难以遵循的讨论后,我被说服了(尽管我仍然愿意被说服回来)。我仍然认为,校对助理应该以某种方式在内部“忠实地代表正式的证据”。但现在我有了一个实际的数学/实践理由(不仅仅是哲学上的理由),这意味着“忠实地表示”意味着什么有一个具体的标准:我希望能够用所创建的形式证明进行计算,例如通过对其应用健全性/初始性定理的构造性证明。根据这个标准,结果证明可判定性是一种转移注意力的方法。我想要的是更多在某种意义上比可判定性更重要的是,我们需要实际的证据,不仅需要它们的可判定的可检查表示,而且还需要较少的从另一个意义上说,因为我们不需要将整个证明实际表示为数据结构,所以只需要“使用该数据结构进行计算”,就像我们已经拥有了它一样。请参见下面的评论及其回应,以供进一步讨论。

发布于2016年8月8日晚上9:06 UTC

此条目的TrackBack URL:https://golem.ph.utexas.edu/cgi-bin/MT-3.0/dxy-tb.fcgi/2893

114条评论和0条回溯

回复:什么是形式证明?

因此,我们当然不能没有“可判定的类型检查”的“论点概念”。

我不知道你这句话是什么意思。我以为你会得出相反的结论,或者我可能无法正确解析三重否定。

发布人:大卫·罗伯茨2016年8月9日上午9:07|永久链接|对此的答复

回复:什么是形式证明?

对不起,三重否定。(-:“不能没有”意味着“我们必须拥有”,这就是我在前面几段中所说的:我们总是要处理无法判定的论证概念。

发布者:迈克·舒尔曼2016年8月9日下午4:26|永久链接|对此的答复

回复:什么是形式证明?

我认为迈克喜欢直觉主义。

发布人:约翰·贝兹2016年8月10日上午7:46|永久链接|对此的答复

回复:什么是形式证明?

当然,只有半可判定的类型检查是必要的吗?

发布人:张根,2016年8月9日上午11:41|永久链接|对此的答复

回复:什么是形式证明?

为什么?

请注意,我并不是在争论可决定性(比方说,可行性)有什么内在的东西是重要的。我的意思是,应该有一个完整归纳形式证明的忠实表示,可判定性是这种“接近性”的某种(必要但不充分)精确指示。

发布人:迈克·舒尔曼2016年8月9日下午4:28|永久链接|对此的答复

回复:什么是形式证明?

尽管Andrej在下面提出了隐式证明与显式证明的观点,即使有显式证明,我也会很高兴有一个检查器,如果它终止,则会验证证明是正确的,否则就无法终止。实际上,我只希望有一个可以在一定的有限时间(比如一周)内进行类型检查的证明!

发布人:张根,2016年8月10日上午8:18|永久链接|对此的答复

回复:什么是形式证明?

我开始给你的帖子写回复,结果变成我的博客帖子。很抱歉重复使用标题…

我的主要观点是,我不同意您的要求,即完整的证明项或其近似值应存储在内存中。这样的要求毫无益处。假设您想要证明的可验证性和可复制性,但这两者都不需要显式存储实际的证明。相反,我们需要有效的方法来重新创建证明条款,给出适当的操作说明。

发布人:安德烈·鲍尔2016年8月9日下午1:30|永久链接|对此的答复

回复:什么是形式证明?

这样做的一个结果是,证明项的可判定性是无关的,因为我们从未真正检查过完整的证明项。我们只使用可信的工具隐式创建它们。

发布人:安德烈·鲍尔2016年8月9日下午1:33|永久链接|对此的答复

回复:什么是形式证明?

谢谢你的详细回复!我实际上同意你关于实际的校对助理的行为,尤其是.vo文件的幻觉。我的问题是一个纯粹的哲学-数学问题:如果一个证明助理正在帮助我创建一个证明,那么它真的不应该吗创建证据? 我不在乎那个证明是作为“证书”存储,还是在制作完成后立即删除。

你说“我们需要有效的方法来重新创建证明条款”,这似乎也意味着我们创建首先是他们。只要我们这样做——“术语”的含义尽可能接近实际证据——我就很高兴。正如我对Gen所说的,我并不是把决定权放在它本身所拥有的任何美德的支柱上;这只是一个粗略的指标,在我看来,用它来近似表示“尽可能接近”的含义是合理的。还有其他标准可以补充;例如,如果可判定性检查在计算上完全不可行,人们可能会争辩说,这也意味着这些术语实际上与证明不够接近。

发布人:迈克·舒尔曼2016年8月9日下午6:19|永久链接|对此的答复

回复:什么是形式证明?

当然,我们会与校对助理一起创建详细的校对。它们(隐含在)校验程序的执行轨迹中。我们可以有一个元理论,它表示可以从执行跟踪重建证明树,这就是我们所需要的全部。

为什么将证明树存储在内存中而不是隐含在执行跟踪中会让您感到更安全?它太大了,你无法查看,所以你必须相信另一个工具来验证它。你可以说验证器比构建证明树的程序更简单,但在HOL和Andromeda中却不是这样,它们的可信核心比Coq的可信核心小得多。我甚至不会讨论阿格达。因此,我们这里有另一个关于小型验证器的理想,它在实践中没有实现。

发布人:安德烈·鲍尔2016年8月9日9:21 PM|永久链接|对此的答复

回复:什么是形式证明?

根据我在布尔可满足性和组合学(简单得多)领域的工作经验,在经过至少两个不同的验证器之前,我不会放心相信计算机证明,由两个不同的编程团队完全独立地实现,他们没有看过对方的算法或代码……在这方面,能够将证明存储在磁盘上的某个地方并将其分发出去将非常方便。

发布人:Ciaran McCreesh公司2016年8月9日10:20 PM|永久链接|对此的答复

回复:什么是形式证明?

我想知道这是否是一个复杂性实际上使事情变得更容易的例子?我非常愿意相信在一个证明助手中已经正式化的证明。当然,证明助手确实包含错误,但自相矛盾的是,由于系统的复杂性以及其中的数学形式化,我认为系统中的错误很少会与证明中的错误“恰到好处”地匹配,从而使其溜走。

我能想到的唯一一种情况是,当我们将Coq的实验宇宙多态性与使用私有归纳法“实现”更高归纳类型的老套方法相结合时,一开始没有注意到某些宇宙没有得到正确跟踪;这似乎是一个非常不寻常的情况。我怀疑一个稍微常见的错误是,形式化并没有真正形式化它声称要形式化的东西,但只有人类读者才能理解。

事实上,在目前的技术下,任何校对助理都不可能输出可由其他校对助理检查的内容。如果有一种“标准化语言”用于(比如)基于类型的校对助手,这样他们就可以互相检查对方的校对术语,那就太好了;但这将很难管理,因为它们没有两个实现完全相同的基础类型理论。

发布人:迈克·舒尔曼2016年8月10日上午7:13|永久链接|对此的答复

回复:什么是形式证明?

开放理论HOL家族。如果能有这样一个类型理论的标准,那就太好了。过去,Matita可以读取.vo文件。

发布人:低音喷溅2016年8月10日上午10:05|永久链接|对此的答复

回复:什么是形式证明?

我很困惑。如果Andromeda实际上没有存储要由另一个工具验证的证明,那么如果它根本没有验证程序,它的验证程序怎么能小于Coq的验证程序呢?

发布人:迈克·舒尔曼2016年8月10日上午7:01|永久链接|对此的答复

回复:什么是形式证明?

我很困惑。如果Andromeda实际上没有存储要由另一个工具验证的证明,那么如果它根本没有验证程序,它的验证程序怎么能小于Coq的验证程序呢?

对于Andrej来说,这是一个关于他使用“验证器”一词的问题,但我认为他的意思是这样的,还有一些相关背景:

LCF型系统中的“验证器”在执行证明步骤时检查其有效性。以仙女座为例,这也涉及到建立一个术语。人们可能会把它称为“证明术语”,但这是一种误导,因为它没有被检查,甚至不可能被检查。它的结构很好。证明步骤由Andromeda MetaLanguage(AML)执行。

不使用命题as-type的形式化系统使LCF方法不那么微妙:术语经过了类型检查,不需要构建证明,但已知存在,因为这些步骤是成功的。

对于仙女座来说,最好将证据视为过程确定派生的存在性判断是得到证实的判断(因为它们是综合性的,不是分析性的),而不是类型。类型具有“证据”(其居民),但如果没有证据证明其具有预期类型,则无法切实识别证据。

在具有分析判断的系统中,您有证明术语,因此LCF方法的另一种选择是对证明术语进行类型检查。这就是考克和阿格达所做的。不要以为考克是LCF风格的,因为它有战术!这是关于可信内核的设计。Coq的内核是一个受信任的类型检查器。仙女座的“核心”是原始战术的可信实现。(引用自AML。)

现在,为什么LCF内核可能比类型检查内核更简单?可能是因为LCF-ish内核是部分一个排字员!类型检查器将遍历一个校验项,并在执行过程中执行检查。这些检查是确切地通过可靠的策略进行的检查。LCF风格的妙处在于认识到只需要检查步骤。它们是如何“输入”计算机的,这无关紧要。在技术上不需要证明术语,它只是以最没有想象力的方式编写证明步骤。

我过于简单化了:将Coq转换为LCF风格内核实际上可能不会这么简单的原因是终止检查。这是一个非合成检查,所以你不能一次性检查术语,就像你必须检查证明术语是否真的是退化的证明脚本一样。我认为这是一个追逐另一个坏主意。如果可以的话,您不需要在内核中进行终止检查证明终止合同而不增加条款。ITT惨败了。或者,如果你对粘稠的术语感到满意,你可以要求一个用于普通ITT的LCF风格的系统(无终止检查)。

因此,为了回答您的问题,Coq的内核比HOL Light或Andromeda的内核大的真正原因是Gallina是一种比HOL或扩展Type:Type.;要复杂得多的语言。)

发布人:Matt Oliveri于2016年8月10日下午7:46|永久链接|对此的答复

回复:什么是形式证明?

我一直无法理解人们所说的“分析性”或“综合性”判断是什么意思。对我来说,思考类型理论最有意义的方式是,基本规则给出了判断推导的归纳表示,而不涉及任何术语。也就是说,我们得出这样的判断A类,B类A类×B类A、 B\vdash A\乘以B使用配对操作等。从语义上讲,每个判断都是某个范畴结构中的一种“宾语或态射”,该判断的每个派生都代表一个特定的宾语或形态射。现在,这些派生树通常太笨拙,无法直接使用,所以我们用变量和术语对它们进行注释,这样就可以根据它分配给根的术语重建整个树,如x个:A类,:B类x个,:A类×B类x: A,y:B\vdash\langle x,y\rangle:A\乘以B但基本对象是未命名的派生树,我认为我们也应该称之为“证明”。我所熟悉的所有类型理论都可以用这种方式呈现。是什么让你称之为“分析”或“综合”的判断?

(我也希望能收到安德烈的来信。)

发布人:迈克·舒尔曼2016年8月10日9:22 PM|永久链接|对此的答复

回复:什么是形式证明?

你知道马丁·洛夫的论文吗类型论中的分析判断与综合判断? 他将综合判断与“判断的存在形式”联系起来,因为这需要构建一个对象,而不仅仅是根据所涉及的术语的含义进行检查。

发布人:David Corfield,2016年8月11日上午8:21|永久链接|对此的答复

回复:什么是形式证明?

(我昨天没有注意到这条评论。)

我不是专家,但据我所知,“分析的”和“综合的”是关于判断的(直觉的)真理是“不言而喻的”(分析的)还是“非综合的”(综合的)。

也就是说,我们使用配对操作导出了一个判断,如a、B⊢a×B等。

这样的判断是综合性的:当一种类型有人居住时,这并不是不言而喻的。

从语义上讲,每个判断都是某个范畴结构中的一种“宾语或态射”,该判断的每个派生都代表一个特定的宾语或形态射。

这大致符合这样一个事实,即可以将派生词的朴素句法表示附加到判断上,使其具有分析性。当一个给定的推导正确地推导出一个给定的判断时,这是不言而喻的。

现在,这些派生树通常太笨拙,无法直接使用,所以我们用变量和术语对它们进行注释,这样就可以从它分配给根的术语中重建整个树,如x:a,y:B⟨x,y⟩:a×B。

但ETT并不是这样做的,因为派生通常不能从一个项合理地重建。事实上,你刚刚大致描述了ITT的整个想法。在ITT中,作为一项要求,这样的判断是分析性的。在ETT中,这样的判断仍然是合成的。

据我所知,对这个问题有三种先验合理的反应。

1) ETT坏了,所以使用ITT。

2) ETT术语不是证明术语,因此添加证明术语以获得与“次要证人”不同的分析判断。

3) ETT的判断是综合性的,所以不要依赖证据术语,使用LCF风格的证据。

在每种情况下,您都可以找到一种方法来重建原始“无条件”判断的推导。当然,由于依赖性,无条件的判断是不够的。(2) (3)结果并没有影响ETT的语义,(1)改变了很多东西。也许OTT与ETT有本质上相同的语义。

(我不会因为把注意力限制在类型理论的内在语义上而让你大吃一惊,但要注意,这个故事还有更多内容。)

发布人:Matt Oliveri,2016年8月11日下午3:27|永久链接|对此的答复

回复:什么是形式证明?

等等,所以你认为A类,B类A类×B类A、 B\vdash A\次Bx个:A类,:B类x个,:A类×B类x: A,y:B\vdash\langle x,y\rangle:A\乘以B作为不同的判断? 我一直认为第二个词只是第一个词的注释。但我想您可以将带注释的判断视为不同的判断,就像将注释函数的图形定义为一个归纳族一样。

我不知道“不言而喻”是什么意思。但听起来好像你是在说,分析判断只能从一种方式推导出来?(也就是说,元理论的hprop?)还是有算法来决定它是否有推导?请给我下定义,不要用“不言而喻”这样的手语。

发布人:迈克·舒尔曼2016年8月11日下午5:05|永久链接|对此的答复

回复:什么是形式证明?

等等,那么你认为A,B×B和x:A,y:B×x,y×A×B是不同的判断?我一直认为第二个词只是第一个词的注释。

是的,这使他们大不相同。这并不是完全相同的区别,但考虑“P是可证明的”与“P是P的证明”。前者中有一个存在量词,它会把你从一个可判定命题推到一个半可判定命题。

但我并不是要坚持“分析”与“综合”必然是可决定的与半决定的。它更具手感和开放性。综合判断可能根本不是来自正式系统。

我不知道“不言而喻”是什么意思。但听起来好像你是在说,分析判断只能从一种方式推导出来?(也就是说,元理论的hprops?)

不,ITT的判断被认为是分析性的。

或者有一个算法来决定它是否有派生?

有些人这样解释。

请给我下定义,不要用“不言而喻”这样的手语。

在我看来,这种区别是由设计决定的。但也许不是。也许你应该和大卫·科菲尔德谈谈。

发布人:Matt Oliveri,2016年8月11日下午6:53|永久链接|对此的答复

回复:什么是形式证明?

哲学家们用手语是可以的,但我想在这里做数学。因此,如果“分析”和“综合”不能给出精确的含义,也许你可以重写这个解释不使用它们?

发布人:迈克·舒尔曼2016年8月11日下午7:09|永久链接|对此的答复

回复:什么是形式证明?

我对这些术语的使用似乎并不重要:

---(因为它们是合成的,不是分析的)+++(因为系统地检查它们是不切实际的)---在有分析判断的系统中,你有证据术语,+++在某些系统中,您有证据术语,

这是全部。

发布人:Matt Oliveri于2016年8月11日下午7:34|永久链接|对此的答复

回复:什么是形式证明?

只是ETT不是这么做的

在我看来,这意味着我们不应该对ETT和ITT中出现的东西使用相同的单词“术语”,因为它们实际上是根本不同的东西。

我不会因为你把注意力局限在类型理论的内在语义上而责备你,但请注意,这个故事还有更多内容。

我想我没有意识到这一点,因为我不知道你所说的“内在语义”是什么意思。在我看来,语义学对一个理论来说总是外在的:一个人在某种元理论中构建了一个理论模型。

发布人:迈克·舒尔曼2016年8月11日下午5:17|永久链接|对此的答复

回复:什么是形式证明?

但ETT不是这样做的

在我看来,这意味着我们不应该对ETT和ITT中出现的东西使用相同的单词“术语”,因为它们实际上是根本不同的东西。

我不确定我是否同意它们是根本不同的东西。它们可能是来自根本不同系统的完全相似的东西。

无论如何,我认为为“术语”找到一个新的术语是一个好主意。(呵呵)问题是“术语”太模糊了,但这很好,因为它表明我们在讨论结构化语法。所以,我建议,至少现在是这样,一个类似“X术语”与“Y术语”的方案。在给HoTT列表的一条消息中,我使用了“证明词”和“含义词”。但我认为ITT的条款同时扮演着这两个角色。(和那个女士们、先生们,这是ITT问题的本质所在。)ETT术语是含义术语,而不是证明术语。

证明术语是否需要可判定的类型检查仍有待决定。我建议不要,因为你用证明术语做的实际事情并不取决于可判定性,它们在实践中取决于实际可行的检查。

发布人:Matt Oliveri于2016年8月11日下午7:07|永久链接|对此的答复

回复:什么是形式证明?

我将使用短语“派生词”来表示派生词。正如我在其他地方所说的那样,在我看来,如果这实际上是一种“表示”,而不是一系列提示来通知对派生词的搜索,那么从派生词推导派生词的过程必须是可判定的。在这种语言中,问题是派生词是否应该存在;我认为是的,以某种形式,因为关键是要在某种表示中产生一个推导。

我不太清楚你在“证明术语”和“意义术语”之间做了什么区别。“意义术语”是一个“旨在”唯一识别语义对象的术语吗?也就是说,不同的派生词被标记为相同的“意义项”,目的是表示一个类别中的相同同态?然而,对你来说,“证明术语”是……一个没有意义的术语?除了“表示特定的派生词”(派生词,你的意思不是因为你的“证明词”没有可判定的类型检查)和“表示特定语义对象”(我想是指术语)之外,我不知道如何隔离一类其他的词。

无论如何,我认为它是精心设计的类型理论认为派生词和语义之间的距离尽可能小。在理想世界中,每个推导都代表确切地一个语义对象,所以“派生词”和(我假设你所指的)“意义词”是一样的。(为什么?因为类型理论作为自由范畴结构的呈现,本质上是关于证明的相干定理一个好的相干定理规定了对象和态射的“标准形式”。类型理论推导是一种仅生成规范形式的方法,或者至少可以排除尽可能多的非规范形式。)实际上,这并不总是可能的,但最好保持尽可能小的距离,并且能够使用与派生词和含义词相同的词似乎是一个很好的指示器。

发布人:迈克·舒尔曼2016年8月11日下午7:23|永久链接|对此的答复

回复:什么是形式证明?

我将使用短语“派生词”来表示派生词。正如我在其他地方所说的那样,在我看来,如果这实际上是一种“表示”,而不是一系列提示来通知对派生词的搜索,那么从派生词推导派生词的过程必须是可判定的。

然后,我将把“推导项”理解为我所说的“证明项”,但要求检查是可判定的,而不是要求检查在实践中是可行的。

就个人而言,我会要求“派生项”在线性时间内是可检查的。当然,这将是一个更窄的定义。

“意义术语”是指“意在”唯一标识语义对象的术语吗?

不,因为判断意义相等的术语必须表示相同的对象,即使术语不同。

也就是说,不同的派生词被标记为相同的“意义项”,目的是表示一个类别中的相同同态?

要明确解释一个有意义的术语,通常还需要考虑上下文。换句话说,一个术语在不同的上下文中可以表示不同的意思。(谁会想到呢?)如果没有独特的类型,一个术语在不同的类型中也可能意味着不同的东西。

然而,对你来说,“证明术语”是……一个没有意义的术语?

不可以。一个证明词可能是也可能不是一个有意义的词。“证明”/“含义”是术语角色之间的区别。它们不一定是不相交的集合。

证明项是一个可以通过某种算法进行检查以产生推导的项。支票不一定要是可决定的,但它必须在实践中是可行的。

发布者:Matt Oliveri于2016年8月11日下午8:52|永久链接|对此的答复

回复:什么是形式证明?

然而,对你来说,“证明术语”是……一个没有意义的术语?

不可以。一个证明词可能是也可能不是一个有意义的词。“证明”/“含义”是术语角色之间的区别。它们不一定是不相交的集合。

当然,我不是有意谈论个别术语。我的意思是“如果一个‘术语概念’不包含‘含义术语’,那么它是否被认为包含‘证明术语’?”

要明确解释一个有意义的术语,通常还需要考虑上下文。

当然,我的意思是不同的推导同样的判决标记有相同含义的术语必须表示相同的形态。要求不同域和余域的语态相等是没有意义的。

“意义术语”是指“意在”唯一标识语义对象的术语吗?

不,因为判断意义相等的术语必须表示相同的对象,即使术语不同。

这与我说的并不矛盾。在另一种语言中,我问的是“是一个‘意义术语’,如果你坚持迂腐,那么‘术语概念’是否由意义术语组成,如果)术语及其语义之间的关系是一对一的,即每个术语至多与一种语义相关联”?关系的对立面是否也是一对一的问题,即同一语义对象是否可以关联到多个术语,这是一个不同的问题。

发布人:迈克·舒尔曼2016年8月11日9:12 PM|永久链接|对此的答复

回复:什么是形式证明?

然而,对你来说,“证明术语”是……一个没有意义的术语?

不可以。一个证明词可能是也可能不是一个有意义的词。“证明”/“含义”是术语角色之间的区别。它们不一定是不相交的集合。

当然,我不是有意谈论个别术语。

我们的语言太仓促了。当然,我们应该一直在谈论术语的概念/种类/语言,以及判断的概念/形式/类别。

然后,从概念上讲,有所有术语概念的类型。“证明术语”是指术语概念的子集,例如……同样适用于“含义术语”和“派生术语”。

类似地,您实际上可以确定形式判断的结果是可以决定的。个人判断不构成决策问题。同样,我认为,对于“分析”和“综合”也是如此。

我的意思是“如果一个‘术语概念’不包含‘含义术语’,那么它是否被认为包含‘证明术语’?”

我理解你。考虑到上述解释,答案是一样的。所以“证明术语”和“意义术语”是术语概念的非分离集合。ITT的术语是两组术语的概念。(实际上,我应该称之为“证明术语概念”和“意义术语概念”,但这太长了。)

“意义术语”是指“意在”唯一标识语义对象的术语吗?

不,因为判断意义相等的术语必须表示相同的对象,即使术语不同。

这与我说的并不矛盾…

嗯,你说得对,你问这个词是否有意义唯一标识一个物体,我说不,一个有意义的词不是独特的在那些识别对象。

我被英语绊倒了。我真的在想改变了我的方向。德普。

也许你可以通过问一个有意义的词来救我标识独特的对象。

发布人:Matt Oliveri,2016年8月11日11:49 PM|永久链接|对此的答复

回复:什么是形式证明?

让我举例说明为什么你的“派生词”实际上是一个无用的标准。

我们对形式的ETT使用派生项(J,n),其中J型是判决(陈述)n个是一个自然数。这个数字为派生的大小设置了一个上限。

所以我们可以用一个类似这样的项来证明一些硬方程(fun__=>参考). 当然,“真正的”证明是在平等判断推导中。因此,派生项将类似于(⊢fun__=>参考:<硬等式>, 538475623984).

如何将其作为派生词?因为有许多有限大小的推导,所以如果“证明”不好,理论上你最终会找到答案。

可决定性具有什么都没有证明表示的有用性,或证明与诚实推导的接近性。

发布人:Matt Oliveri,2016年8月12日上午12:49|永久链接|对此的答复

回复:什么是形式证明?

无论如何,我认为它是精心设计的类型理论认为派生词和语义之间的距离尽可能小…

我从未见过有人将此作为类型理论的目标。这一段似乎都很可疑。你会慢慢地讨论这个论点吗,还是我应该忽略它?

发布人:Matt Oliveri于2016年8月12日凌晨3:25|永久链接|对此的答复

回复:什么是形式证明?

我从未见过有人将此作为类型理论的目标。

好吧,现在你有了。我没有提到的另一个原因是,如果你不需要经常检查解释函数的结果是否独立于求导,它可以使证明稳健性定理变得更容易。你觉得它有什么可疑之处?

发布人:迈克·舒尔曼2016年8月12日4:24 AM|永久链接|对此的答复

回复:什么是形式证明?

我想最奇怪的是:

类型理论推导是一种仅生成规范形式的方法,或者至少可以排除尽可能多的非规范形式。

但类型理论故意具有非规范形式。计算表示为标准形式的约简。

并且:

……保持尽可能小的距离很好,能够使用与派生词和含义词相同的词似乎是一个很好的指标。

这似乎表明你对ITT有强烈的偏好,其中的含义词也是派生词。

无论如何,相干定理甚至能解决自然数对象的自由范畴结构吗?我认为相干定理主要用于非常弱的系统的证明理论。如果是这样的话,那么你对苹果的判断就好像它们是橙子一样。

我没有提到的另一个原因是,如果你不需要经常检查解释函数的结果是否独立于求导,它可以使证明稳健性定理变得更容易。

我认为CwF机制和初等定理可以解决这个问题。

发布人:Matt Oliveri,2016年8月12日上午9:22|永久链接|对此的答复

回复:什么是形式证明?

计算表示为标准形式的约简。

是的,理想情况下是句法的操作,它发生在您谈论语义之前,所以语义只需要处理规范形式。例如,我们可以使用无割序列演算来表示一个自由的范畴结构,然后通过首先消除纯句法上的割,然后解释由此产生的无割派生,来解释使用割到范畴中的派生。

这似乎表明你对ITT有强烈的偏好,其中的含义词也是派生词。

对。

不管怎样,一致性定理甚至解决了具有自然数对象的自由范畴结构吗?

我认为,在对“相干定理”的松散解读下,对自由范畴结构的任何有趣表述都可以称为(部分)相干定理。因此,例如,使用IHOL或ETT表示自由拓扑,对于一个特别具有NNO的范畴来说,是一个部分相干定理。

如果您不需要经常检查解释函数的结果是否独立于推导,那么它可以使稳健性定理的证明更容易。

我认为CwF机制和初等定理可以解决这个问题。

嗯,是的,我说的是证明初等定理。

发布人:迈克·舒尔曼2016年8月12日上午9:31|永久链接|对此的答复

回复:什么是形式证明?

例如,我们可以使用无割序列演算来表示一个自由的范畴结构,然后通过首先消除纯句法上的割,然后解释由此产生的无割派生,来解释使用割到范畴中的派生。

嗯,我明白了,但我不认为这会比“显而易见”的策略更容易,即将判断性的平等推导解释为平等。

此外,如果你有判断funext和NNO,我认为你不能使用cut-elimation来避免判断平等。

这似乎表明你对ITT有强烈的偏好…

对。

你觉得OTT怎么样?

嗯,是的,我说的是证明初等定理。

我觉得为了一次性元定理的方便而优化整个语言设计是短视的。

发布人:Matt Oliveri,2016年8月12日下午7:43|永久链接|对此的答复

回复:什么是形式证明?

在相干定理的序贯演算中,并不一定更容易,但它能给你更多关于范畴的信息,因为你有态射的规范表示。这就是相干定理的目标。我故意选择一个简单的例子来说明这一点;对于更复杂的理论来说,事情确实更复杂。

考虑到初等定理实际上还没有被证明,我不认为有理由掩盖一切。此外,它不仅仅是一个一次性定理,因为世界上不只有一种类型的理论;有很多有趣且重要的类型理论,我们关心所有这些理论的语义。因此,设计类型理论使这些定理易于证明和根据需要进行推广是很好的。更重要的是,正如我在另一条评论中提到的,我认为ITT方法更有可能从严格的模型类别表示观点中概括出来,即CwF机制似乎也会束缚你;此外,在模型类别等价的情况下,它更有可能是不变的。

我还没有花时间去理解OTT,但是这个评论丹的建议是,我可以把它视为“合理的第一步”,也许是走向立方体理论?

发布人:迈克·舒尔曼2016年8月12日下午8:27|永久链接|对此的答复

回复:什么是形式证明?

考虑到初等定理实际上还没有被证明,我不认为有理由掩盖一切。

我不是在地毯下面扫。只是权衡一下假设更难的元定理的不便与在不太友好的逻辑中重复工作的不便。

此外,这不仅仅是一个一次性的定理,因为世界上不存在唯一的类型理论;有很多有趣且重要的类型理论,我们关心所有这些理论的语义。因此,设计类型理论使这些定理易于证明和根据需要进行推广是很好的。

所有其他条件都相同,是的。我认为这种轻微的分歧是由我们假设的不同情况引起的。我假设有一个通用的、基础的系统,只有少数人开发,很多人使用。你可能是在假设一些人会使用一些外来的内部语言。

发布人:Matt Oliveri于2016年8月12日下午8:50|永久链接|对此的答复

回复:什么是形式证明?

我还没有花时间去理解OTT,但丹的这一评论表明,我可以将其视为“合理的第一步”,也许是走向立体类型理论?

我之所以问这个问题,是因为我把它放在ITT类别中——因为它对证明术语和含义术语使用了相同的术语概念——但它具有集合级的外延性原则和规范性。这使得它成为设置级ITT中最不令人讨厌的形式。

所以对我来说,这只会使它比ETT差一点,但如果你喜欢当意义项是派生项时,你可能会更喜欢OTT而不是ETT。

仔细想想,我不知道OTT中的削减消除是如何下降的。可能“意义项是派生项”并不是对系统适用于相干定理的良好测试。

发布人:Matt Oliveri于2016年8月12日下午9:02|永久链接|对此的答复

回复:什么是形式证明?

我想我没有意识到这一点,因为我不知道你所说的“内在语义”是什么意思。在我看来,语义学对一个理论来说总是外在的:一个人在某种元理论中构建了一个理论模型。

哦,对了。我所说的“内在语义”是指类型是内在的语义。当然,语义本身是外在的。使用CwF或类似的分类语义样式仅支持内部类型。使用外部类型,可以判断对象的类型。(对象也具有内部类型,但可能所有感兴趣的对象都具有相同的内部类型。)

发布人:Matt Oliveri,2016年8月11日下午7:16|永久链接|对此的答复

回复:什么是形式证明?

使用外部类型,可以判断对象的类型。

是的,当然对这个不感兴趣。(-:

发布人:迈克·舒尔曼2016年8月11日下午7:24|永久链接|对此的答复

回复:什么是形式证明?

我很困惑。如果Andromeda实际上没有存储要由另一个工具验证的证明,那么如果它根本没有验证程序,它的验证程序怎么能小于Coq的验证程序呢?

对于Andrej来说,这是一个关于他使用“验证器”一词的问题,但我认为他的意思是这样的,还有一些相关背景:

LCF型系统中的“验证器”在执行证明步骤时检查其有效性。就仙女座而言,这也包括建立一个术语。人们可能会把它称为“证明术语”,但这是一种误导,因为它没有被检查,甚至不可能被检查。它的结构很好。证明步骤由Andromeda MetaLanguage(AML)执行。

不使用命题as-type的形式化系统使LCF方法不那么微妙:术语经过了类型检查,不需要构建证明,但已知存在,因为这些步骤是成功的。

对于安德洛米达来说,最好把证明看作是确定一个判决的推导存在的过程。是得到证实的判断(因为系统地检查它们是不切实际的),而不是类型。类型具有“证据”(其居民),但如果没有证据证明其具有预期类型,则无法切实识别证据。

在某些系统中,您有证明术语,因此LCF方法的另一种选择是对证明术语进行类型检查。这就是考克和阿格达所做的。不要以为考克是LCF风格的,因为它有战术!这是关于可信内核的设计。Coq的内核是一个受信任的类型检查器。仙女座的“核心”是原始战术的可信实现。(引用自AML。)

现在,为什么LCF内核可能比类型检查内核更简单?可能是因为一个相当LCF-ish的内核是类型检查器的一部分!类型检查器将遍历一个校验项,并在执行过程中执行检查。这些检查正是通过可信策略执行的检查。LCF风格的妙处在于认识到只需要检查步骤。它们是如何“输入”到计算机中的与此无关。在技术上不需要证明术语,它只是以最没有想象力的方式编写证明步骤。

我过于简单化了:将Coq切换到LCF风格的内核实际上可能并不那么简单的原因是终止检查。这是一个非合成检查,所以你不能一次性检查术语,就像你必须检查证明术语是否真的是退化的证明脚本一样。我认为这是一个追逐另一个坏主意。如果可以证明终止而不需要使用术语,那么就不需要在内核中进行终止检查。ITT惨败了。或者,如果你对粘稠的术语感到满意,你可以要求一个用于普通ITT的LCF风格的系统(无终止检查)。

因此,为了回答您的问题,Coq的内核比HOL Light或Andromeda的内核大的真正原因是Gallina是一种比HOL或扩展Type:Type.;要复杂得多的语言。)

发布人:Matt Oliveri于2016年8月11日下午7:30|永久链接|对此的答复

回复:什么是形式证明?

感谢您取消分析/合成。不幸的是,这里还有太多的行话让我无法理解。我觉得你在对象级和元级都使用了“证明”。这是真的吗?你所说的“证据”到底是什么意思?也许你可以用“派生”、“派生词”和“意义词”等明确的词语重新解释它(假设我们同意后者的含义)。

发布人:迈克·舒尔曼2016年8月11日下午8:12|永久链接|对此的答复

回复:什么是形式证明?

我想这是个好主意。
--------------

LCF-style系统中的“验证器”在执行[推导]步骤时检查其有效性。就仙女座而言,这也涉及到建立一个[意义]术语。人们可能会把它称为“证明术语”,但这是一种误导,因为它没有被检查,甚至不可能被检查。它的结构很好。[推导]步骤由Andromeda MetaLanguage(AML)执行。

不使用命题as-type的形式系统使LCF方法不那么微妙:[含义]术语进行了类型检查[我假设类似HOL的东西,带有可判定的类型检查],[命题的任何形式的形式证明,不是类型]都不需要构建,但已知存在,因为这些步骤是成功的。

对于仙女座来说,最好把[推导]看作是建立判断推导存在的过程。是得到证实的判断(原文如此)(因为系统地检查它们是不切实际的),而不是类型。[这是一次试图解释为什么在ETT中,形式证明的重点转移到了判决上的失败尝试。我不知道如何更新它,因为我故意将派生词(用于ETT)和证明词(用于ITT)混为一谈。]类型有“证据”(其居民),但[在ETT]中]如果没有[推导]它具有预期类型,就无法识别证据。

在某些系统中,您有证明术语,因此LCF方法的另一种选择是对证明术语进行类型检查。这就是考克和阿格达所做的。不要以为考克是LCF风格的,因为它有战术!这是关于可信内核的设计。Coq的内核是一个受信任的类型检查器。仙女座的“核心”是原始战术的可信实现。(引用自AML。)

现在,为什么LCF内核可能比类型检查内核更简单?可能是因为一个相当LCF-ish的内核是一个[足够扫描]类型检查器的一部分!类型检查器将遍历一个校验项,并在执行过程中执行检查。这些检查正是通过值得信赖的策略进行的检查。LCF风格的妙处在于认识到只需要检查步骤。它们是如何“输入”到计算机中的与此无关。在技术上不需要证明术语,它只是以最不具想象力的方式编写[推导]步骤。[请记住,推导过程也会产生一个有意义的术语。]

我过于简单化了:将Coq转换为LCF风格内核实际上可能不会这么简单的原因是终止检查。这是一种非成分检查,所以你不能一次性检查术语,就像你必须检查证明术语是否真的是退化的证明脚本一样。我认为这是一个追逐另一个坏主意。如果可以证明终止而不需要使用术语,那么就不需要在内核中进行终止检查。ITT惨败了。或者,如果你对粘稠的术语感到满意,你可以要求一个用于普通ITT的LCF风格的系统(无终止检查)。

因此,为了回答您的问题,Coq的内核比HOL Light或Andromeda的内核大的真正原因是Gallina是一种比HOL或扩展Type:Type.;要复杂得多的语言。)

发布人:Matt Oliveri,2016年8月11日,9:49 PM|永久链接|对此的答复

回复:什么是形式证明?

在您的帖子中,您使用了“proof”来表示派生树,并认为类型检查是将“参数”转换为proof。

这个术语的结果是依赖型理论的大多数证明助手不产生证明,因为大多数证明助手不使用派生树。“证明项”通常指的是一个可行类型的可检查项,而不是派生树。

正因为如此,也因为你说你不在乎一个证据一制作出来就被删除,我觉得你对安德烈的回复很奇怪。

正如安德烈所说,仅仅检查(半决定性地)一个论点在原则上是否有相应的证据,难道不就足够了吗?

发布人:Matt Oliveri于2016年8月10日凌晨2:00|永久链接|对此的答复

回复:什么是形式证明?

“证明项”通常指的是一个可行类型的可检查项,而不是派生树。

实际上,我的意思是在实践中进行打字检查是可行的。在最坏的情况下不会。

发布人:Matt Oliveri,2016年8月10日,上午2:32|永久链接|对此的答复

回复:什么是形式证明?

如果你读了我写的,我会这么说

一个证明助手……应该包括……一些表示这些证明的数据结构合理地忠实地

除其他原因外,我特别没有声称它们应该包括实际的证明,因为这些是几乎不可能在现实中表示的数学抽象。我不认为“证明词”本身就是“证明”有什么问题,就像“电影剧本”和“电影”不一样。

发布人:迈克·舒尔曼2016年8月10日上午6:58|永久链接|对此的答复

回复:什么是形式证明?

谢谢,但这并不能回答我的问题。事实上,这让我对你的观点更加困惑。但与其指出让我困惑的事情,不如让我试着提问。

1) 在什么条件下,校对助理应存储校对表示?

2) 证明表示与派生树足够接近的要求是什么?

作为参考,我的回答是:
1) 无条件
2) 不适用

证明助手用于检查输入给他们的推理,而不是维护在计算上完全无用的形式证明。

请记住,类型理论的证明助手需要存储术语。但不是因为它们是证明性陈述;因为它们表示您可能使用的对象。

发布者:Matt Oliveri,2016年8月10日下午4:05|永久链接|对此的答复

回复:什么是形式证明?

1) 我不认为有任何理由商店从“留着以后用”的意义上来说,这是一种证明表示。但是,对于一个要制作证据的证明助理来说,它必须在制作过程中以某种方式表示该证据。

2) “足够接近”是一种判断,不同的人可能会做出不同的判断。我的意思是,类型选择的可判定性是一个合理的,实际上是相当小的条件,它可以表示“足够接近”。

也许一个类比会有所帮助:考虑英语口语和书面语之间的关系。撇开语调等细微差别不谈,我们可以将书面英语视为口语的代表。当然,我们可以写很多字母串,比如“bhaued ntviu iuml wmvieo”,它们并不代表任何英语口语短语;但我们可以立即判断一串字母实际上是否代表一个口语短语。

但是现在假设有无数种方法可以尝试“发音”给定的一串字母,而判断一串字母是否代表某个口语短语的唯一方法是尝试用所有可能的方式发音。从某种意义上说,“阅读”仍然是可能的:如果一本书实际上是用正确的书面英语写成的,那么我们肯定能够读完它,但如果在某个地方出现了错误,那么我们的阅读过程可能会永远持续下去,而我们永远不知道我们是否能够读完这本书。在这种情况下,说书面英语是口语的代表真的有道理吗?

或者,更坦率地说:如果您对“证明表示”的半可判定类型检查感到满意,那么这里有一个证明表示。每个证明都用单词“foo”表示。类型检查算法首先检查是否给定了单词“foo”,然后用其他语言生成所有可能的参数,并逐个检查它们是否是所需语句的证明。“foo”真的是费马大定理证明的表示吗?

发布人:迈克·舒尔曼2016年8月10日下午4:56|永久链接|对此的答复

回复:什么是形式证明?

1) 我看不出有任何理由存储“为以后保存”的证明表示。但是,对于一个要制作证据的证明助理来说,它必须在制作过程中以某种方式表示该证据。

很公平。我想当然地认为,你不会拿出一个你不会使用的证据。因此,我必须添加一个问题:
3) 在什么条件下,证明助理应出示证明陈述?

我的回答是:
3) 只有当用户明确要求它将输入的证明表示转换为以不同格式输出时。(例如,为了与其他校对助手兼容。)

你认为以某种方式创建证据以检查证据的存在是一种技术要求吗?程序员不是那个建设性!:)

LCF风格的证明助手的整个思想就是,不需要构建派生树。正如安德烈所说:证明(“论点”)检查过程本身包含一个推导过程。

2) “足够接近”是一种判断,不同的人可能会做出不同的判断。我的意思是,类型选择的可判定性是一个合理的,实际上是相当小的条件,它可以表示“足够接近”。

我们将不得不推迟对此的讨论,直到我们首先有一个一致同意的理由来处理证据。

也许一个类比会有所帮助:考虑英语口语和书面语之间的关系…

这是一个有趣的类比,但还不够紧密。人类乐于发明书面句子的发音。当一个句子的发音影响它的意思时,书面形式往往会被误解。

或者,更坦率地说:如果您对“证明表示”的半可判定类型检查感到满意,那么这里有一个证明表示。每个证明都用单词“foo”表示…

是的,对于RE形式化系统,蛮力搜索是标准的半可判定证明检查器。我是对半决定性的检查感到满意。我要求检查,这在实践中是可行的。半可判定性和可判定性都不够。关键是,可判定性是没有必要的,甚至没有帮助的。如果不言而喻,我还要求存在一个论点,当且仅当存在派生时,该论点才能说服检查员。

…然后用其他语言生成所有可能的参数,并逐个检查它们是否是所需语句的证明。

即使在这个故意荒谬的场景中,你也有一个奇怪的假设。检查器不需要在任何具体表示中生成参数,就可以半决定是否存在派生。只需要陈述条款和判断。请注意,这甚至适用于术语不是合理证明表示的系统。(例如ETT、HOL)

发布人:Matt Oliveri于2016年8月10日下午5:55|永久链接|对此的答复

回复:什么是形式证明?

我打算推迟回答(3),直到我得到答案这个问题.

当一个句子的发音影响它的意思时,书面形式往往会被误解。

这与类比的意义无关。

我要求检查,这在实践中是可行的。半可判定性和可判定性都不够。

一个不可决定的程序是可行的,这意味着什么?你所说的“实践中”是指算法在“大多数现实世界”情况下在合理的时间内终止吗?这当然是一件有用的事情,但我认为这不足以让算法中的“证明项”进行计数,数学上和哲学上,作为输出证明的“表示”。在缺乏可判定性的情况下,“证明项”充其量只是一个相当明确的提示,以帮助算法搜索为了证明,即使提示足够明确,在大多数实际情况下搜索也会很快结束。(顺便说一句,我感谢你帮助我在脑海中澄清了为什么可判定性很重要这一点。)

检查器不需要在任何具体表示中生成参数,就可以半决定是否存在派生。只需要陈述条款和判断。

我甚至不理解你所做的区分,因为术语和派生词都是我使用这个词时的一种特殊的“论点”;但无论如何,这似乎也与重点无关。

发布人:迈克·舒尔曼2016年8月10日下午6:15|永久链接|对此的答复

回复:什么是形式证明?

我打算推迟回答(3),直到我得到这个问题的答案。

我已经回答了这个问题。希望能有所帮助。

这与类比的意义无关。

所以我想书面英语对应于论点,口语对应于证明,我不理解这个类比。传递英语口语的最佳方式是英语口语。提供证据的最佳方式是辩论。

一个不可决定的程序是可行的,这意味着什么?你所说的“实践中”是指算法在“大多数现实世界”情况下在合理的时间内终止吗?

对。

这当然是一件有用的事情,但我认为这不足以让算法中的“证明项”进行计数,数学上哲学地,作为输出证明的“表示”。

你说得对,这实际上是一种伪装成需求的效用度量。当然,如果它太慢太频繁,那么太多人会认为它实际上毫无用处。比如暴力搜索。

我对从哲学上讲什么是证明的表示不感兴趣。在数学上,我们定义了证明的概念。这只是数学,所以计算上是否愚蠢并不重要。它是为显而易见而“优化”的。当涉及到实际实现时,我说的是,不可判定的证明(论点)检查是有意义的,而成功的检查可能需要存在任何你喜欢的数学证明概念。

在缺乏可判定性的情况下,“证明项”充其量只是一个相当明确的提示,以帮助算法搜索为了证明,即使提示足够明确,在大多数实际情况下搜索也会很快结束。

这是一个很好的方法。我认为足够明确的提示是一个理想的论点。将这一思想推向极端的是“神谕证明”的思想,其中证明从字面上来说由一系列数字组成,这些数字指示在(一致的)证明搜索算法中的每个不确定性点上要采取的获胜分支。当然,最难的部分是同意一种搜索算法,并用它找到获胜的选择序列

对于“证明术语”来说,“相当明确的提示”可能太过分了,但我认为在实际实现中并不需要证明术语。(除了作为可检查参数的自然片段。)

发布人:Matt Oliveri于2016年8月10日下午8:45|永久链接|对此的答复

回复:什么是形式证明?

我甚至不理解你所做的区分,因为术语和派生词都是我使用这个词时的一种特殊的“论点”;但无论如何,这似乎也与重点无关。

哦,我认为一个论点必须足以找到证据。

所以在FOL(或HOL)中,命题和证明是不同的语法类别,对吗?在类型理论中,你可以用判断和推导作为粗略的类比。判断实际上得到了表示,而推导却没有。或者对于FOL,命题实际上得到了表示,而证明却没有。

我只是说,你似乎想当然地认为有一些证明/推导的表示。通常没有。

发布人:Matt Oliveri,2016年8月10日晚上9:25|永久链接|对此的答复

回复:什么是形式证明?

现在我不知道你所说的“代表”是什么意思。安德烈说,他用“证明表示法”代替了我的“论点”,所以根据这一点,证明肯定会得到表示。术语是一种可以代表它们的东西。

发布人:迈克·舒尔曼2016年8月10日9:29 PM|永久链接|对此的答复

回复:什么是形式证明?

术语是一种可以代表它们的东西。

如果检查切实可行,则不适用于ETT。

发布人:Matt Oliveri,2016年8月10日10:12 PM|永久链接|对此的答复

回复:什么是形式证明?

术语是一种可以代表它们的东西。

如果检查切实可行,则不适用于ETT。

我说的“能”是指有时也就是说,对于一些理论中的“术语”的一些概念。

发布人:迈克·舒尔曼2016年8月10日10:18 PM|永久链接|对此的答复

回复:什么是形式证明?

>>术语是一种可以代表它们的东西。
>如果检查切实可行,则不适用于ETT。
我所说的“可以”是指有时也就是说,对于一些理论中的“术语”的一些概念。

酷。因此,通过:

我只是说,你似乎想当然地认为有一些证明/推导的表示。通常没有。

我的意思是指出,在ETT的一个证明助理中,没有任何可判定的推导表示是合理的,我认为这与你的假设相矛盾。(我省略了“可决定的”。我想我认为这是隐含的,因为你把它作为一个最低要求。)

对不起,措辞太草率了。

发布人:Matt Oliveri,2016年8月10日10:50 PM|永久链接|对此的答复

回复:什么是形式证明?

如果我必须进一步解释这个类比,那么它可能对你没有任何好处,所以我就不麻烦了。另一个例子表达了大致相同的观点。

也许程序员可以将证明定义为最有用的证明,但作为一名数学家,我对确切的证据感兴趣。我希望一个正式的证明实际上是一个证明,而不仅仅是一个向计算机暗示它如何找到证明的提示。

发布人:迈克·舒尔曼2016年8月10日9:25 PM|永久链接|对此的答复

回复:什么是形式证明?

也许程序员可以将证明定义为最有用的证明,但作为一名数学家,我对确切的证据感兴趣。我希望一个正式的证明实际上是一个证明,而不仅仅是一个向计算机暗示它如何找到证明的提示。

那很好。我希望我的其他回复已经澄清了这一情况。如果不是,请指出一个逻辑和一个你认为是它的实际证据的东西,我将尝试解释如何使用证据术语检查或LCF风格的策略来建立可证明性,以及哪一种更适合。

发布者:Matt Oliveri,2016年8月10日10:22 PM|永久链接|对此的答复

回复:什么是形式证明?

这当然是一件有用的事情,但我认为这不足以让算法中的“证明项”进行计数,数学上哲学地,作为输出证明的“表示”。

好的,我想我开始了解你的立场了,我可以试着总结一下我与安德烈的立场之间的区别。

我认为你想当然地认为,在一个证明助手的某个地方,必然有一些证明术语。这是错误的。术语不一定是证明术语。(想想HOL。)即使是作为类型的命题,术语也不一定是证明术语。(想想ETT。)在LCF风格的系统中,如果有证据术语的话,那只是战术脚本的一个紧急特例。

Coq和Agda是非常不寻常的系统,基本上依赖于一种证明语言术语。(因为在其逻辑定义中进行了终止检查。)

普通ITT也碰巧附带了证明词,但在不构造词的情况下证明类型的存在也是有意义的。

我开始认为,证明检查正是证明术语的类型检查,这是整个反平等反思文化的原因。可以以这种方式进行校对,在非常特殊的系统(如ITT)中,这是很自然的。但对于大多数逻辑来说奇怪的因为无论如何,证明词的概念对逻辑及其语义来说是完全辅助的。

如果你不想要求ITT(或其后代),那么你似乎也不应该要求证明条款。

发布人:Matt Oliveri于2016年8月10日晚上10:08|永久链接|对此的答复

回复:什么是形式证明?

整个帖子解释了我为什么会这样想应该在证明助手中忠实地表示派生树。所以不,我不是想当然的;我正在为之辩解。我充分意识到许多理论中的“术语”派生树的忠实表示,这就是为什么我会谨慎地措辞,避免只谈论术语。

发布人:迈克·舒尔曼2016年8月10日10:20 PM|永久链接|对此的答复

回复:什么是形式证明?

整个帖子解释了为什么我认为应该在证明助手中忠实地表示派生树。所以不,我不是想当然的;我正在为它辩解。

啊,进步!那么,一旦你建立了它,就扔掉它怎么样?还可以吗?对我来说,这似乎毫无意义。不建造它是等效的,但更有效。事实上,这似乎显然毫无意义。这就是我困惑的地方。

我充分意识到,许多理论中的“术语”派生树的忠实表示,这就是为什么我会谨慎地措辞,避免只谈论术语。

谢谢你的关心,很抱歉再次讨论这个问题。

发布人:Matt Oliveri,2016年8月10日下午11:06|永久链接|对此的答复

回复:什么是形式证明?

我认为有太多的混淆,因为我们使用的是“形式证明”而不是“形式推导”。我将切换到“形式推导”。

为了确定,让我打电话校对接受陈述的程序第页并输出结论c(c)表示形式推导的第页,假如存在一个形式推导第页代表。取决于过程对无效第页它是:

  1. 可判定:如果它终止并报告失败
  2. 半可判定的:如果它可能永远运行

我们假设我们总是至少有一个半决定程序。此外,我们还将要求:

  • 完整性:每个形式派生都有一个表示
  • 导数-相关性:第页可以表示多个形式派生,过程找到哪一个(显式或隐式)并不重要。
  • 结论的唯一性:由表示的所有形式派生第页有相同的结论

派生无关意味着第页表示形式导子的有居集结论的唯一性表明,该集合中的所有形式导数都有相同的结论。

现在,回答你的问题:在既定假设下,foo公司这本身就违反了结论的唯一性,但这对(foo,C)哪里C类是结论是形式推导的有效表示。

Coq/Agda称为“证明证书”或“证明术语”的东西与(foo,C),除了它携带了一些更有用的信息,从而提高了效率,并限制了所表示的形式派生集。确实如此将集合缩减为单例,因为它没有指定如何导出等式。

在证明助理领域,游戏是如何有效地沟通和验证形式派生的存在性所以只有有趣的问题是效率问题。这个只有我们拒绝的原因(foo,C)由于通用的证明表示法在时间上效率太低。不过,它的空间效率很高。

事实上,我们可以想象一个正式的系统(foo,C) 是形式推导存在性的完美表示C类例如,如果我们拥有一个完整的线性时间证明搜索过程,那么交流证明是没有意义的,因为已经阅读它们需要和重建它们一样长的时间。

发布人:安德烈·鲍尔2016年8月11日上午9:52|永久链接|对此的答复

回复:什么是形式证明?

Coq/Agda称为“证明证书”或“证明术语”的东西与(foo,C)具有完全相同的状态

真的?它不是有一个可判定的校对程序,而不是(foo,C)的半判定程序吗?

它不会将集合缩减为单例,因为它没有指定如何导出等式。

我相信,对于某些类型理论,至少有一种方法可以确保唯一性,即在实际上没有平等判断的情况下使用“仅规范”表示法。对吗?

在证明助手领域,游戏是如何有效地沟通和验证形式推导的存在性,因此唯一有趣的问题是效率问题。

为什么这是游戏?我是一名数学家。我不在乎是否某物有证据;我在乎证据是什么。当有人声称已经证明了某件事时,我希望他们能够真正拿出证据,而不仅仅是说“你可以在我告诉你的时间内自己解决这个问题。”

发布人:迈克·舒尔曼2016年8月11日下午5:25|永久链接|对此的答复

回复:什么是形式证明?

为什么这是游戏?我是一名数学家。我不只是关心某件事是否有证据;我在乎证据是什么。当有人声称已经证明了某件事时,我希望他们能够真正拿出证据,而不仅仅是说“你可以在我告诉你的时间内自己解决这个问题。”

重要的是要认识到,作为数学对象的证明的建构主义概念不一定是可判定的形式证明。(事实上,证明对象是语义的,而不是句法的。)我认为,除了数学内容之外,你不应该关心形式证明。

记住:我们用战术“证明”(推导)的东西是判断。建设性“证明”对象(证据)有多种类型。

如果你坚持淡化判断和类型之间的区别,那么实际上你不得不使用ITT。

发布人:Matt Oliveri于2016年8月11日下午7:47|永久链接|对此的答复

回复:什么是形式证明?

我不知道你所说的“证明对象”是什么意思,但对我来说,“证明”确实是一个句法问题。建构主义在这里无关紧要;我所说的是我作为一名数学家与证明互动的方式,无论这些证明是否使用经典逻辑。

发布人:迈克·舒尔曼2016年8月11日下午8:08|永久链接|对此的答复

回复:什么是形式证明?

那样的话,我不相信你。我指责你实际上并不关心哪一个派生被用于形式(Γ⊢t:t)的ETT判断。

发布人:Matt Oliveri于2016年8月11日下午9:01|永久链接|对此的答复

回复:什么是形式证明?

我关心使用哪种推导,因为如果你声称已经推导出了它,我希望你实际上有它的推导,而不仅仅是告诉我我可以推导出它的推导。

发布人:迈克·舒尔曼2016年8月11日9:14 PM|永久链接|对此的答复

回复:什么是形式证明?

我关心使用哪种推导,因为如果你声称已经推导出了它,我希望你实际上有它的推导,而不仅仅是告诉我我可以推导出它的推导。

这是错误的。你无权要求以你想要的特定形式“衍生”,因为我是独立于你的思想代理人。你对我的内部工作方式一无所知。但我可以告诉你:

我将形式派生作为过程及时运行。这就是你需要知道的全部。

我声称,如果你反思自己的数学活动,你会得出类似的结论。但我不能确定,因为我对你的内部工作方式一无所知。

我不愿意记录我的嘲笑过程,我也不愿意与你交流,因为我缺乏这样做的资源。我愿意我们两人建立一种沟通的形式,让我能够交流建议如何为自己重建形式派生。如果你疯了,把形式推导存储在笔记本或电脑上,那就是你的问题。我不在乎。

发布人:安德烈·鲍尔2016年8月11日9:44 PM|永久链接|对此的答复

回复:什么是形式证明?

我不认为你希望我有一个推导意味着你关心它是哪一个推导。我坚持我的指控。

发布人:Matt Oliveri,2016年8月11日下午10:46|永久链接|对此的答复

回复:什么是形式证明?

让我再试一次。

形式推导它们从来没有被机器明确地构造出来,也从来没有被数学家看到过,它们对人类来说是完全没有启发的,只是发生了一些事情作为一个过程它们在实践中从来都不是对象。你从逻辑中学到的东西使你认为它们是一定存在于某处的对象。它们确实存在,但不是你期望的地方。它们是作为过程存在的。我想,我真的不能说得比这更清楚了。

当你说打印我的定理Coq做了给你看一个正式的证明。如果是这样的话,你会立刻迷失方向,除了最简单的陈述。因此,Coq明智地将大部分证据隐藏在符号、隐式参数、宇宙多态性等背后不是正式的证据!

作为一名数学家,你想要用论据来说服你相信真理并向你展示它是如何完成的在人类实践中,你可以通过阅读人类写下的论据来获得两者,但这些都是许多的与正式证明相比,它们更接近Coq脚本和Agda输入。

你似乎在问,形式证明与人类论证扮演着同样的双重角色,我认为这是一个设计错误。机器(目前)擅长建立正确性,但不擅长解释它是如何完成的。人类仍然需要向人类解释这是如何做到的。我们通过编写Coq脚本和Agra输入来实现这一点,其他人可以这样做作为进程重播.希望我们也能在此过程中写下一些有用的评论。

我们观察实践中实际发生的事情是不可取的。传统逻辑和数学基础可以从实践的反馈中受益匪浅。我们已经从传统形式逻辑的(革命性)见解中榨取了精华。现在是时候审查和改进逻辑,并使其适应计算机时代。

发布者:安德烈·鲍尔2016年8月11日9:39 PM|永久链接|对此的答复

回复:什么是形式证明?

我想我可能正在慢慢接近理解。以下是对“LCF风格”校样助理的正确描述吗?

  1. 写一个校对助手,它实际上在内部将推导表示为归纳判断族的元素,其构造器是规则。

  2. 注意,这个族是归纳定义的,这一事实只与元理论有关,如稳健性和可容许性定理。为了构造特定的派生词,我们所需要的只是族的构造器,而不是其归纳原理。因此,我们可以用具有相同类型但实际上不起任何作用的“假构造函数”来代替实际构造树的构造函数,而不用耗费时间和内存。只要判断家族足够抽象,就能保证这些“假构造函数”是只有构造元素的方法是,我们用它们编写的任何程序都可以用“真正的构造函数”运行,以产生真正的证明。

如果这就是“详细的证据隐含在证据检查器的执行痕迹中”的意思,那么在我看来,它实际上满足我的要求“一些数据结构,合理地忠实地表示证据”。因为它不只是用一个不明确的编码来表示归纳判断家族吗?就像X(X),X(X)(X(X)X(X))X(X)\对于所有X,X到(X到X)到X通过应用它给我一个自然数\mathbb{N},00成功成功在这里,您定义了一个具有足够抽象类型的函数,它可以应用于实际的归纳判断家族,以产生实际的证明。

发布人:迈克·舒尔曼2016年8月10日下午10:25|永久链接|对此的答复

回复:什么是形式证明?

我想我可能正在慢慢接近理解。以下是对“LCF风格”校样助理的正确描述吗…

很近!要实现的主要区别是,通常不是构造函数的类型确保只生成有效的派生,而是构造函数执行中的检查。就像在Ltac。你可以执行一个策略,结果会是“不”。这不是Ltac的类型检查错误;Ltac是非类型的。(这可能是Gallina的类型检查错误,因为Ltac可以调用Gallina详细说明器。)

但是,是的,您有派生的抽象构造函数,但它们实际上并没有构造派生树;它们是“假的”。Ltac构造函数是假的,因为它们只构造术语,而这些术语甚至可能不是类型良好的。LCF风格的构造函数是假的,因为它们什么都不构造,但至少它们本可以正如你所说,构建了有效的派生。(假设他们没有报告错误。)

此外,这些“假构造函数”是原始的策略,需要保持证明状态。这方面的细节因系统而异,但它涉及条款和判断的簿记,需要进行充分的检查。

(Ltac是非类型的,AML是Hindley-Milner类型的,但显然有一个大类型用于“判断”(伪派生)。您还可以使用战术语言,使用类型来跟踪战术试图证明的特定判断。(这是一个较新的发展。)重要的共同特点是,成功执行战术意味着存在派生。是否在加载策略时(由于对策略进行类型检查)、运行策略时或某种组合时进行检查是一种工程权衡。)

仙女座的“假构造函数”显然被称为“判断计算”,并记录在这个部分仙女座遗址。由于代数效应/处理机制,仙女座的证明很复杂(但希望值得)。如果判断计算是你试图让计算机相信某事,那么代数效应可以让计算机要求对你遗漏的细节进行解释。(你也可以让你的战术库的一部分需要你的解释,或者你的战术库里的另一部分。)

呼。

如果这就是“详细的证据隐含在证据检查器的执行轨迹中”的含义,那么在我看来,它实际上满足我的要求“一些数据结构,合理地忠实地表示证据”。

事实上,它的字面意思远不止于此。考虑验证一个程序。你需要一个编程语言的定义。假设您使用操作语义。(即状态机)执行跟踪是一系列步骤。使用LCF风格的系统成功检查证据的痕迹是一个特殊的子集。健全性说,从每一个这样的轨迹中,你可以得到被成功检查过的判断,以及该判断的推导。(还有其他一些我们不关心的事情。)

更直观的是,把合理性理解为“如果它说它被证明了,就有证据。”,但说痕迹包含了推导似乎表明了为什么不应该在哲学上偏爱“作为数据的证据”,而不是“作为过程的证据”。

因为它不只是用一个不明确的编码来表示归纳判断家族吗?就像∀X的任何元素一样,X→(X→X)→X通过将其应用于ℕ,0和succ,给了我一个自然数,在这里,你定义了一个具有足够抽象类型的函数,它可以应用于实际的归纳判断族,以产生一个实际的证明。

没有。

1) 抽象类型在实际程序中的使用方式与非指示性编码(实际上从未使用过)之间存在差异。

2) ∀X,X→(X→X)→X与自然数的归纳类型同构,所以你不可能避免构造和存储带有非指示性编码的东西,你知道吗?实际上,这些数据很大而且很慢。

3) 更重要的是,伪派生是策略语言(AML)中的抽象类型,而不是用于实现内核的语言(OCaml)。在实现语言中,只要正确,就可以做任何您想做的事情。无论您使用的策略多么不正确,抽象都可以确保其可靠性。

发布者:Matt Oliveri,2016年8月11日12:43 AM|永久链接|对此的答复

回复:什么是形式证明?

∀X,X→(X→X)→X与自然数的归纳型同构…

哦,等等,这通常不是真的,是吗?不管怎样,您使用该类型获得的实现是垃圾。

发布人:Matt Oliveri,2016年8月11日12:46 AM|永久链接|对此的答复

回复:什么是形式证明?

我不完全理解您的意思,但似乎您所做的区分都是实现的工件,就目前的目的而言,我并不在乎。例如,当我说“用非指示性编码表示归纳判断族”时,我并不是指有问题的编程语言(我不在乎我们谈论的是哪种语言)事实上使用这样的表示法,只是从数学上来说,它与实际的表示法是同构的。我认为:

Axiom NAT:类型。公理归零:NAT。Axiom SUCC:NAT->NAT。定义三:NAT:=SUCC(SUCC(SUCC ZERO))。

使用非指示性编码:

定义三:对于所有X,X->(X->X)->X:=fun NAT ZERO SUCC=>SUCC(SUCC(SUCC ZERO))。

有一种类型的判断,其元素存储有问题的特定判断(也许这就是你所说的“证明状态”?),而不是一个实际的索引判断族,似乎是对实现语言不是依赖类型的事实的必要让步。当然,这意味着规则的应用程序在实现语言中可能类型良好,但仍然失败,但从道德上讲,这是因为它在真正的依赖类型版本中类型不正确。

发布人:迈克·舒尔曼2016年8月11日下午1:27|永久链接|对此的答复

回复:什么是形式证明?

我认为:

Axiom NAT:类型。公理归零:NAT。公理SUCC:NAT->NAT。定义三:NAT:=SUCC(SUCC(SUCC ZERO))。

使用非指示性编码:

定义三:对于所有X,X->(X->X)->X:=fun NAT ZERO SUCC=>SUCC(SUCC(SUCC ZERO))。

奇怪的。从技术上讲,两者都不需要无懈可击。但第二种方法在不可靠的情况下变得更加有效。

发布人:Matt Oliveri,2016年8月11日下午4:44|永久链接|对此的答复

回复:什么是形式证明?

我使用短语“非指示性编码”只是指使用归纳类型的特定方式。它不要求环境类型理论具有技术意义上的非独立宇宙(尽管有一个确切的意义,第二个至少是“非独立定义”)。如果你对此有更好的说法,请分享。

发布人:迈克·舒尔曼2016年8月11日下午4:58|永久链接|对此的答复

回复:什么是形式证明?

我不明白为什么你认为这两个是相同的“归纳型工作方式”,所以我不能推荐一个词。但我认为,如果你考虑的是奇特的类型,那么你理解LCF谚语的方向就错了。

发布人:Matt Oliveri,2016年8月12日凌晨1:01|永久链接|对此的答复

回复:什么是形式证明?

当然,这意味着规则的应用程序在实现语言中可能类型良好,但仍然失败,但从道德上讲,这是因为它在真正的依赖类型版本中类型不正确。

这可能是不对的。编程语言的强类型系统使您能够确定程序永远不会失败。但校对人员必修的当提供无效证据时失败。失败场景的测试必须是程序执行的一部分。

也许您正在考虑在运行时生成和检查代码,但LCF风格的检查器不是这样工作的。

发布人:Matt Oliveri于2016年8月12日凌晨3:40|永久链接|对此的答复

回复:什么是形式证明?

你用“失败”有两种不同的方式。校对员所需的“失败”并不是强类型系统所能避免的那种“失败”。当您编写类型为选项Int错误然后它又回来了右侧(抬起“oops”),这并没有被类型系统阻止,因为它不是类型错误,但它仍然是语义的错误是指它表示输入有问题。这就是我所说的“失败”。

发布人:迈克·舒尔曼2016年8月12日4:22 AM|永久链接|对此的答复

回复:什么是形式证明?

这正是关键所在。您不能总是使用类型来处理校对程序处理的那种失败。因此,原始策略(从概念上或实际上)不具有保证正确派生的类型。他们自己检查推导是否正确进行。保证了正确的推导(实际上没有构造)如果战术运行成功。(您可以用正确的类型系统中的类型来表示。)

关于您的示例:

当然,这意味着规则的应用程序在实现语言中可能类型良好,但仍然失败,但从道德上讲,这是因为它在真正的依赖类型版本中类型不正确。

这是错误的。规则的应用程序可能会失败,无论它在其中进行类型检查的类型系统有多花哨,仅仅因为它正确地拒绝了规则的无效实例。

也许我误解了你对LCF风格系统的整个解释。这些规则是通过原始策略实现的,但也许你没有这样想。

发布人:Matt Oliveri于2016年8月12日上午6:36|永久链接|对此的答复

回复:什么是形式证明?

你能举一个完全依赖类型的规则的例子吗?它以一种良好的方式应用,但失败了?我想不出有什么。

发布人:迈克·舒尔曼2016年8月12日上午6:49|永久链接|对此的答复

回复:什么是形式证明?

类似于:

modusPonens:对于所有f a:法官,选项{fa:Jud|exists A B:Fmla,证明f(Impl A B)/\证明A A/\证明fa B}

你可能会问,为什么不:

modusPonens:所有人(f a:法官)(a B:弗姆拉),证明f(Impl A B)->证明A->{fa:判断|证明fa B}

好吧,如果您实际实现的策略语言实际上知道如何检查该类型,那么这将非常有意义。但大多数策略语言都没有这种类型,所以我们只能对策略实际执行检查的方式进行建模。

发布人:Matt Oliveri,2016年8月12日上午8:43|永久链接|对此的答复

回复:什么是形式证明?

你必须考虑到这样一个事实,即类型理论之上的元语言只是类型化的。然后,您将能够想到一个规则应用程序,它从简单类型的ML级别看起来是正确的,但实际上不是。

例如,隐式消除是类型的智能构造函数imply_elim:判断->判断->判断如果我们已经计算了判断j1公司j2公司,很容易发生类型良好的计算imply_elim j1 j2将触发异常,因为j1公司形式不正确,即,。不是暗示。

您不能通过说ML本身应该是独立类型的来绕过这个问题。必须有人在非依赖类型化的语言中实现ML,并且那个同样的现象也会发生。它不可能一直是依赖型理论。

发布者:安德烈·鲍尔2016年8月12日上午8:43|永久链接|对此的答复

回复:什么是形式证明?

斜体短语的哪一部分

它是打错的在真正的依赖类型版本中

你能举一个例子吗完全依赖类型化规则

不清楚?

我非常清楚,实际的实现语言是简单类型的。事实上,你反对的原始段落正是我对这一事实的承认。我的观点是如果你用一种独立类型的语言写它,就不会有“失败”;但是因为实际的实现语言不依赖于那里的类型是失败的应用程序。也就是说,你在说什么。

发布人:迈克·舒尔曼2016年8月12日上午9:22|永久链接|对此的答复

回复:什么是形式证明?

需要认识到的一点是战术语言这必须是独立类型的(或其他一些更特殊的类型系统)才能摆脱无限制策略。这个实现语言可以是任何东西。

我想强调的是,不检查策略和检查策略是不同的程序。您不能在检查策略中查看运行时检查失败,并说这是道德上的类型错误。至少,我觉得这种想法很容易引起误解。我向你展示了检查和不检查策略的强大类型。希望您能够想象实现是如何类型化的。

发布者:Matt Oliveri,2016年8月12日上午9:40|永久链接|对此的答复

回复:什么是形式证明?

我想强调的是,不检查策略和检查策略是不同的程序。您不能在检查策略中查看运行时检查失败,并说这是道德上的类型错误。

仔细想想,您可能是指中的运行时检查失败战术是应用程序的道德类型检查错误规则你可以用元理论的语言来假设。这是对的。策略所做的检查基本上是依赖类型检查器在给定派生树结构的情况下所做的。

发布人:Matt Oliveri,2016年8月12日下午6:24|永久链接|对此的答复

回复:什么是形式证明?

(深呼吸)

我很抱歉对你发脾气;那是不必要的。我现在应该知道,任何深夜写的博客帖子或评论都不应该在早上发布。(-:O由于某种原因,整个讨论比平时压力更大。

发布人:迈克·舒尔曼2016年8月12日上午9:46|永久链接|对此的答复

回复:什么是形式证明?

你为什么说这是误导?这对我来说很有意义;如果你试图将modus-ponens应用于第一个不是暗示的参数,或者应用于第二个不是第一个参数假设的参数,那么这是一个类型错误,因为modus-ponens不是这样做的。

发布人:迈克·舒尔曼2016年8月12日上午9:49|永久链接|对此的答复

回复:什么是形式证明?

没错,这不是我们的惯常做法规则dos–一类派生树的实际构造函数。但从这个意义上讲,战术不是规则。我说的是战术类型,而不是最初的规则。

方法推理的检查策略必须接受任何两个伪派生。通过抽象类型的不变量,我们可以将它们视为有效的派生。但是,该策略需要自己检查派生是否确实适合于modus-ponens实例,然后才能输出结论的伪派生,否则我们将违反不变量。

发布人:Matt Oliveri,2016年8月12日下午6:00|永久链接|对此的答复

回复:什么是形式证明?

我想也许你认为我混淆了两件我没有混淆的事情。我根本不是在谈论战术;我说的是实际构建派生(或伪造派生)的构造函数。它们在依赖类型的版本中不会失败,它们的简单类型版本只需要进行检查,因为它们不是依赖类型的。但什么时候检查试图通过应用构造函数生成派生的用户术语(我认为这就是你所说的策略?),用户总是有可能出错,因此总是有失败的可能性,即使在依赖类型的版本中也是如此。这是一种不同的“失败”。

发布者:迈克·舒尔曼2016年8月12日下午6:08|永久链接|对此的答复

回复:什么是形式证明?

我在你的心理模型中考虑到了战术“实际构建派生(或伪造它)的构造函数”(他们肯定会伪造它)。战术总是假装的;规则(派生树的构造函数)永远不会。我不知道你为什么要考虑简单类型的规则。

但什么时候检查试图通过应用构造函数生成派生的用户术语(我认为这就是你所说的战术?)…

没有单独的机制来检查“用户条款”。用户通过运行策略(伪造它的构造函数)来输入证明。使用AML这样的语法,大多数战术调用看起来都像术语生成器,所以您可以经常将AML程序作为目标语言术语来阅读,但需要一些有趣的技巧。但实际上,用户界面是某种战术语言的REPL。

(使用依赖类型的战术语言,REPL当然会在运行之前对用户输入的战术调用进行类型检查,因此您甚至可以交互地使用无检查战术。)


我现在认为你基本上明白了,但我误解了你的解释,因此认为你没有明白。

发布人:Matt Oliveri于2016年8月12日下午7:02|永久链接|对此的答复

回复:什么是形式证明?

我现在认为你基本上明白了,但我误解了你的解释,因此认为你没有明白。

是的,我也是这么想的;虽然我对你的解释。(-:

发布人:迈克·舒尔曼2016年8月12日下午7:17|永久链接|对此的答复

回复:什么是形式证明?

你几乎是对的,只是这些“智能构造函数”做了一些事情:它们输出派生的结论(而生成结论的唯一方法是使用智能构造函数)。我将用一个非常简约的LCF风格的谚语写另一篇博客文章,来展示它是如何做到的。

发布人:安德烈·鲍尔2016年8月11日上午8:21|永久链接|对此的答复

回复:什么是形式证明?

我知道这场对话变得相当棘手,但我认为这个评论成为一个重要的松散环节。所以我想再次指出。

我说:

那么,一旦你建立了它,就扔掉它怎么样?还可以吗?对我来说,这似乎毫无意义。不建造它将是等效的,但更有效。

因为,很久以前,Mike:

我的问题是一个纯粹的哲学-数学问题:如果一个证明助理正在帮助我创建一个证明,那么它真的不应该吗创建证据? 我不在乎那个证明是作为“证书”存储,还是在制作完成后立即删除。

我假设当时的“证明”是指Mike现在所说的“推导项”。

发布人:Matt Oliveri于2016年8月12日凌晨1:20|永久链接|对此的答复

回复:什么是形式证明?

我不敢相信我花了这么长时间才想到这个。但我想通常是这样的:我对某事有一种直觉,只有当我把头撞向它并说了很多废话(在这种情况下是公开的)之后,我才明白为什么直觉是正确的,以及如何使它精确。请随意忽略我所说的一切,并对这条评论作出回应,就像它被附加到了原始博客文章的末尾一样。

这里有一个具体的标准,用以判断一个证明助理是否“对一个推导过程产生了一个合理可信的表示”,这是我想要的意义,同时还有一个实际的关注理由。假设我对稳健性/初等定理有一个构造性证明,即通过导子树上的结构归纳定义的函数;某种程度上自噬也许,或者只是普通初等定理相对于上下文范畴或你所拥有的东西的形式化证明。您的校对助手是否吐出(或者可以将其修改为吐出)一些东西,我可以将其插入此函数以生成对校对的实际解释?

这实际上是我想做的。类型理论的范畴语义的一个要点是,我们可以在许多不同的类别中解释相同的证明。一旦我们在一个证明助手中完成了所有的数学运算,这种解释就是我们想要做的数学运算的一部分。但如果我们可以使用相同的环境证明助手来编写我们想要解释为其他类别的证明,那肯定会很好,而不必在类型理论中编写一个全新的内部证明助手。

发布人:迈克·舒尔曼2016年8月12日4:33 AM|永久链接|对此的答复

回复:什么是形式证明?

假设我对稳健性/初等定理有一个构造性证明,即通过导子树上的结构归纳定义的函数;也许是某种形式的自噬,或者只是普通初等定理相对于上下文范畴的形式化证明。您的校对助手是否吐出(或者可以将其修改为吐出)一些东西,我可以将其插入此函数以生成对校对的实际解释?

之前,我写道:

因此,我必须添加一个问题:
3) 在什么条件下,证明助理应出示证明陈述?

我的回答是:
3) 只有当用户明确要求它将输入的证明表示转换为以不同格式输出时。(例如,为了与其他校对助手兼容。)

所以看起来你想到了另一个理由,把一个证明“转换”成另一种“格式”。

简短的回答是“是”。但我想知道你是否犯了分类错误。证明助手处理术语和证明脚本,它们是数学抽象的具体形式化表示。你想把这个插入到一个构造定理中(所以它技术上是一个程序),以便它构造抽象的数学对象。不是形式化的表示,真正的交易,模数,它们是构造对象的实现。

为此,您需要实现(作为一种编程语言)定义语义对象的构造性元语言。(或者可能是你的经典元语言的非经典片段。)如果你的语义碰巧是在CS部门发明的,这可能会很自然(至少在理论上是这样;这是一个奇怪的设计,从工程角度来看)。但我猜你不是这么想的。

您还可以将您可能更喜欢的内容翻译为开发语义的元语言术语。这甚至在技术上不要求语义是构造性的。(但是,如果不是这样,则翻译的实例可能无法说明问题。)

这实际上是我想做的事…

所以这需要相当多的工程。你有一个内部语言和一个外部语言,所以你需要两个可用的证明助手。您需要在实际可执行的条件下使用语义/转换器。也许你想在一个受信任的内核上实现这一点,而不是两个或更多,所以它是某种逻辑框架,能够可靠地检查多个逻辑中的证明。

我正在慢慢地开发一个系统,主要是为计算机科学家开发的,但这将作为一个特例支持此工作流。不要屏住呼吸。

你可以尝试诱使安德烈的团队尽快支持这一点,而不是迟迟不支持。

对于当前存在的系统,我个人首先考虑的主要内容是Twelf和Isabelle。

……但是的,原则上,这绝对是可以用LCF式系统实现的。Andrej一直强调的一点是,您在检查证明脚本的同时运行推导过程,这样您就可以随时提取任何想要的数据。您可以使用原始策略,即“假构造函数”,进行一些实际的构造。

由于基元是受信任内核的一部分,您可能不想每次更改语义时都更改它。相反,您可能会添加一个选项来转储类似于.vo格式文件,用于内核外的专门转换。(我想现在你将宣布胜利,但请注意,这个中间代表仍然没有很好的理由可以决定。)

中间形式的另一个好处是相分离。你可以添加神谕来表示缓慢的、证据确凿的部分,这样你的朋友可以更快地重新检查证据。我想你也应该给他们原稿,以防他们想改变发展。或者他们可能不介意在任何情况下重新进行证据搜索。这本质上是构建系统问题。

发布人:Matt Oliveri于2016年8月12日上午6:01|永久链接|对此的答复

回复:什么是形式证明?

请放心,我不抱任何幻想,认为用目前的技术这很容易;我也没有任何特殊的需要或愿望事实上在不久的将来做这件事。我只是想说,我希望校对助理的设计能够做到这一点。是的,我非常清楚,这将是一场势均力敌的比赛,尽管关键是需要两个不同的证明助手,但能够对元语言和对象语言使用相同的证明助手,即自噬真正在进食它本身是的,我同意避免LEM意义上的建设性是无关紧要的;我这么说只是为了强调我说的是功能我关心的是他们的实际产出,而不是“纯粹的证据”。

因此,如果可以对派生树的“执行跟踪”表示进行微小的调整,以输出可以插入解释函数的实际派生,那么我很高兴(目前)。我保留稍后再次改变主意的权利,但现在我想这就是我想要的。毕竟,条款的可决定性是一种转移注意力的方法,因为我们需要(也可以得到)更好的东西。

我真希望其他类型的理论家也出现了,为可判定性辩护。我真的很想看到一场真正的双边辩论关于这个主题。

发布人:迈克·舒尔曼2016年8月12日上午6:54|永久链接|对此的答复

回复:什么是形式证明?

我真希望其他类型的理论家也出现了,为可判定性辩护。我真的很想看到关于这个问题的真正的双边辩论。

也许如果你再写一篇帖子,声明自己的可判定性“毕竟是一种转移注意力的方法”,它会让一些辩护者放弃。

我很好奇为什么ITT的人喜欢ITT。也许可判定性只是一种理智检查,他们真正重视的是ITT的其他方面。

发布人:Matt Oliveri,2016年8月12日上午9:22|永久链接|对此的答复

回复:什么是形式证明?

我喜欢ITT的原因是它允许HoTT。

发布人:迈克·舒尔曼2016年8月12日上午9:23|永久链接|对此的答复

回复:什么是形式证明?

HTS是否也不允许HoTT?这绝对是ETT家族。

发布者:Matt Oliveri于2016年8月12日下午7:10|永久链接|对此的答复

回复:什么是形式证明?

哦,你是想问为什么人们不喜欢有反射规则的等式类型吗?

HTS许可HoTT。但它至少似乎将语义与模型范畴表示联系得更紧密了,在模型范畴表示中,存在一个“点集级别的相等”来解释严格的相等。我们还不知道如何在没有模型分类演示的情况下解释ITT,但在我看来,ITT更可能做到这一点,因为它的判断平等比HTS的严格平等更受控制。

发布人:迈克·舒尔曼2016年8月12日下午7:18|永久链接|对此的答复

回复:什么是形式证明?

哦,你是想问为什么人们不喜欢有反射规则的等式类型吗?

不。

HTS在某种程度上允许HoTT。但它至少似乎将语义与模型范畴表示联系得更紧密了,在模型范畴表示中,存在一个“点集级别的相等”来解释严格的相等。

我很肯定这不是ITT和ETT的结果。托尔斯滕·阿滕柯奇、保罗·卡普里奥蒂和尼古拉·克劳斯有一个严格平等的HoTT基于ITT+K,我认为存在相同的问题。

……在我看来,ITT更有可能做到这一点,因为它的判断平等性比HTS的严格平等性更受控制。

我不知道。必须有一个我们都能认可的HoTT版本。我对ITT的问题是,它在术语中添加了证据检查所需的提示,但这些提示在语义上毫无对应。找到一种利用Book HoTT抽象的语义,然后进行设计好的,gungless表示它的术语,您将拥有正确的系统。

发布人:Matt Oliveri于2016年8月12日下午8:32|永久链接|对此的答复

回复:什么是形式证明?

如果我说“我不喜欢ETT,因为X”,而你说“ETT不是唯一有X的东西”,那么我当然会回答“好吧,那意味着我也不喜欢其他东西”。(-:

(我不是教条主义者——这些理论有其用途,我自己也用过。我只是说我不想使用它们;具体化的严格平等感觉就像是一个更优雅的理论所不能缺少的笨蛋。)

在我看来,“粘稠”的问题似乎只是在用户级寻找好的隐式论据和推理/精化工具的问题,而与底层类型理论(即派生树)的设计无关。

然而,这个讨论与本文的主要主题有很大的分歧,所以如果你想继续下去,我们可以发邮件给你。

发布人:迈克·舒尔曼2016年8月12日10:01 PM|永久链接|对此的答复

回复:什么是形式证明?

目前的校对助理中没有这种功能,修改它们需要大量的技术工作。

即使经过技术修改,该工具也不会实际生成对象x个这是形式推导并将其输入到翻译功能中(f)把翻译好的人。至少我不会这样做。相反,我会提供包含您的(f)进入过程对应于x个,但存在于时间中,以生成修改后的过程对应于。因此,你不会得到本身(相信我,你会的想要),但你会得到结论属于基于元理论你可以信任的。

这是我脑海中的想法,也是我想要一个非常灵活的核的原因之一。顺便说一句,在大多数情况下,你会对翻译理论的碎片而不是整个数据类型理论。

发布人:安德烈·鲍尔2016年8月12日上午8:51|永久链接|对此的答复

回复:什么是形式证明?

我可以接受“大量的技术努力”;我只想让架构成为可能。

发布人:迈克·舒尔曼2016年8月12日上午9:25|永久链接|对此的答复

回复:什么是形式证明?

我现在没有很多时间讨论这个问题,但我喜欢讨论。你愿意说明哪些其他的元属性是至关重要的吗?(例如,我不记得NuPrl或andromeda有哪些属性)。

发布人:低音喷溅2016年8月12日上午9:34|永久链接|对此的答复

回复:什么是形式证明?

如果这是针对我的(用“critical”表示“我想要他们”?),那么我想我需要你给我一个元属性列表来选择。(-:

发布人:迈克·舒尔曼2016年8月12日上午9:37|永久链接|对此的答复

回复:什么是形式证明?

我们显然需要一致性,规范性似乎也很重要,Coq没有很强的规范化…

(我在度假,所以我现在真的不应该讨论这个。然而,这个讨论目前正在进行。)

发布者:低音喷溅2016年8月13日上午7:34|永久链接|对此的答复

回复:什么是形式证明?

一致性当然是由稳健性定理保证的。但是,如果我们要打破决策的偶像,我们不应该想当然地认为其他任何事情。想要正典的真正原因是什么?

发布人:迈克·舒尔曼2016年8月15日上午5:11|永久链接|对此的答复

回复:什么是形式证明?

我对仙女座不太清楚,但所有其他“建设性”类型的理论似乎都有经典性。对于NuPrl来说,它是意义解释和计算解释的重要组成部分。参见Dan Licata的邮递以及最近关于计算高等类型理论.

因此,讨论似乎与判定性不同,在判定性中有合理的构造型理论而没有这个性质。

发布人:低音喷溅2016年8月30日下午2:25|永久链接|对此的答复

回复:什么是形式证明?

我不确定“所有建构型理论都具有规范性”这句话有什么意义,除非从本质上把它作为“建构”一词的定义。《HoTT》一书在另一个意义上是“建设性的”,但它没有正典性。

发布者:迈克·舒尔曼2016年8月30日下午6:39|永久链接|对此的答复

回复:什么是形式证明?

我在思考没有HIT和单价的类型理论。我想这就是为什么你说《霍特》一书没有正典性?

发布人:低音喷溅2016年8月30日9:38 PM|永久链接|对此的答复

回复:什么是形式证明?

是的,在这种情况下。但更一般地说,我认为一个理论在某些意义上可以是“建设性的”,而不具有规范性。

发布人:迈克·舒尔曼2016年8月30日9:41 PM|永久链接|对此的答复

回复:什么是形式证明?

这个新论文关于高阶单价的强规范化计算规则,极小逻辑总结了意义解释所需的内容:

  • 汇流
  • 归一化
  • 一个类型的每个封闭nf都是一个规范对象
发布人:低音喷溅2016年10月5日9:18 PM|永久链接|对此的答复

回复:什么是形式证明?

这个新论文在一个强有力的…

我真的希望人们不要直接向提供盲目链接。PDF文件,尤其是当文件有网页主页时。

罗宾·亚当斯(Robin Adams)、马克·贝泽姆(Marc Bezem)、蒂埃里·科昆德(Thierry Coquand):高阶极小逻辑中单叶性的强规范化计算规则,arXiv:1610.00026

看到了吗?我可以看出,Coquand是一名作家,而无需下载PDF。

发布者:RodMcGuire于2016年10月6日下午3:21|永久链接|对此的答复

发布新评论