Questions tagged «logic»

与数学逻辑有关的问题及其在计算机科学中的用途

2
Y组合器是否与Curry-Howard对应矛盾?
Y组合器的类型为。根据库里·霍华德 Curry-Howard)的对应关系,因为类型被居住,所以它必须对应于一个真定理。但是始终为真,因此似乎Y组合器的类型对应于定理,但并不总是正确的。怎么会这样?(a → a )→ a(一种→一种)→一种(a \rightarrow a) \rightarrow a(a → a )→ a(一种→一种)→一种(a \rightarrow a) \rightarrow a一→ 一一种→一种a \rightarrow a一种一种a

4
是否有用于证明层次结构的存储库?
我是自学证明的助手,因此决定开始一些基本的证明,然后逐步发展。由于证明基于其他证明,因此形成了层次结构,是否存在证明层次结构的存储库? 我知道我可以选择一个特定的证明助手并分析其库以提取其层次结构,但是,如果我想在链中找到下一个证明以进行证明,那么当它不在库中时,我将无法。 在我的脑海中,我描绘了所有可以使用英语语句表达的已知数学证明(而不是使用图片的证明)的图形(可能是DAG)。这将是主地图(从一个点开始并通过中间点移动到另一点的地图),对于特定的校对助手,将拥有一个主地图的子图。然后,如果要使用在母版上而不在子图上找到的校对助手创建校对,则可以通过比较两个图形来了解为校对助手创建缺少的校对所需的工作。 我知道数学证明不一定很容易转换为与证明助手一起使用,但是对做什么的总体了解比根本没有要好得多。 同样,通过拥有主地图,我可以查看是否存在从一个点到另一个点的多条路径,并选择一条更适合特定证明助手的路径。 编辑 在搜索中,我发现了一些类似的数学函数。我没有在NIST上找到要证明的东西

1
产品类型的类型推断
我正在为连接语言开发编译器,并希望添加类型推断支持。我了解Hindley–Milner,但是我一直在学习类型理论,所以我不确定如何适应它。以下系统是否合理,可以推断? 术语是文字,术语的组合,术语的引用或基元。 e::=x∣∣ee∣∣[e]∣∣…e::=x|ee|[e]|… e ::= x \:\big|\: e\:e \:\big|\: [e] \:\big|\: \dots 所有术语表示功能。对于两个函数和,,即,并置表示反向组合。文字表示尼拉德功能。e 2 e 1e1e1e_1e2e2e_2e1e2=e2∘e1e1e2=e2∘e1e_1\:e_2 = e_2 \circ e_1 除组合以外的其他术语具有基本的类型规则: x:ι[Lit]Γ⊢e:σΓ⊢[e]:∀α.α→σ×α[Quot],α not free in Γx:ι[Lit]Γ⊢e:σΓ⊢[e]:∀α.α→σ×α[Quot],α not free in Γ \dfrac{}{x : \iota}\text{[Lit]} \\ \dfrac{\Gamma\vdash e : \sigma}{\Gamma\vdash [e] : \forall\alpha.\:\alpha\to\sigma\times\alpha}\text{[Quot]}, \alpha \text{ not free in } \Gamma 值得注意的是缺少应用规则,因为连接语言缺少它。 类型可以是文字,类型变量,也可以是堆栈之间的函数,其中堆栈被定义为右嵌套元组。相对于“堆栈其余部分”,所有函数都是隐式多态的。 …


2
融合证明,可实现简单的重写系统
假设我们有一种简单的语言,其中包含以下术语: truetrue\mathtt{true} falsefalse\mathtt{false} 如果t1,t2,t3t1,t2,t3t_1,t_2,t_3是项,则ift1thent2elset3ift1thent2elset3\mathtt{if}\: t_1 \:\mathtt{then}\: t_2 \:\mathtt{else}\: t_3 现在假设以下逻辑评估规则: iftruethent2elset3→t2[E-IfTrue]iffalsethent2elset3→t3[E-IfFalse]t1→t′1ift1thent2elset3→ift′1thent2elset3[E-If]iftruethent2elset3→t2[E-IfTrue]iffalsethent2elset3→t3[E-IfFalse]t1→t1′ift1thent2elset3→ift1′thent2elset3[E-If] \begin{gather*} \dfrac{} {\mathtt{if}\: \mathtt{true} \:\mathtt{then}\: t_2 \:\mathtt{else}\: t_3 \to t_2} \text{[E-IfTrue]} \quad \dfrac{} {\mathtt{if}\: \mathtt{false} \:\mathtt{then}\: t_2 \:\mathtt{else}\: t_3 \to t_3} \text{[E-IfFalse]} \\ \dfrac{t_1 \to t_1'} {\mathtt{if}\: t_1 \:\mathtt{then}\: t_2 \:\mathtt{else}\: t_3 \to \mathtt{if}\: t_1' \:\mathtt{then}\: t_2 \:\mathtt{else}\: t_3} …

2
Lambda微积分中的“应用顺序”和“正常顺序”
应用顺序:在评估函数本身之前,请始终充分评估函数的参数,例如- (λ X 。X2(λ X 。(X + 1 )2 )))→ (λ X 。X 2(2 + 1 ))→ (λ X 。X 2(3 ))→ 3 2 → 9 (λx.x2(λx.(x+1) 2)))→(λx.x2(2+1))→ (λx.x2(3))→ 32 → 9(\lambda x. x^2(\lambda x.(x+1) \ \ 2))) \rightarrow (\lambda x. x^2(2+1))\rightarrow \ (\lambda x. x^2(3)) \rightarrow \ 3^2 \ …

1
SICP的话说:“著名的逻辑学家在这里犯了令人尴尬的错误。” 这指的是什么?
这是上下文(计算机程序的结构和解释,第1.1.8节,在“本地名称”下): 过程的形式参数在过程定义中具有非常特殊的作用,因为形式参数的名称无关紧要。这样的名称称为绑定变量,我们说过程定义绑定了它的形式参数。如果在整个定义中始终对绑定变量进行重命名,则过程定义的含义不变。 最后一行的末尾有一个脚注(26),其中: 一致重命名的概念实际上是微妙的,很难正式定义。著名的逻辑学家在这里犯了令人尴尬的错误。 文本指的是谁?为什么定义“一致的重命名”会很困难,哪些逻辑学家在定义该定义时犯了错误,这些错误是什么?
14 logic 

5
学习命题和谓词逻辑的原因
我能理解计算机科学家或任何与软件开发相关的工程师应该理解基础逻辑研究的重要性。 但是,除了需要使用任何形式的知识表示的任务之外,是否有任何任务/工作明确需要有关这些知识的知识Knowledge Base?我想听听任务的类型,而不是概念上的回应。 我问这个的原因仅仅是出于好奇。虽然CS学生必须在该主题上花费一定的时间,但一些实用性强的课程(例如AI类)完全跳过了该主题。而且我只是想知道,例如了解predicate logic可能有助于绘画,ER diagram但可能不是必需的。 更新5/27/2012)感谢您的回答。现在我想我完全理解并同意logicCS在其大量应用中的重要性。从Windows“蓝屏问题” 解决方案中获得的深刻印象中,我才真正选择了最佳答案。
14 logic 

1
用于假人的Monadic二阶逻辑
我是一个对自动机有所了解的程序员,但对逻辑并不了解。 我在论文中读到,两者之间有着密切的联系。确定性有限自动机(DFA),树自动机和可见下推自动机都与Monadic二阶逻辑(MSO)相关。尽管我了解自动机,人们(在论文中)试图向我解释与MSO的关系,但他们始终假设自己具有强大的逻辑背景和对MSO的理解。 当我阅读有关逻辑的书籍和课程时,它们大多只处理一阶逻辑,这看起来很简单,并且仅包含以下几个概念:变量,或者(并非暗示)全部存在,等等。 有人可以向我解释或指向可以解释以下内容的资源: 与一阶逻辑相比,二阶逻辑是什么? 什么是单子逻辑与非单子逻辑? 可判定二阶逻辑为什么单调很重要,或者为什么这是错误的问题? 为什么一元二阶逻辑是可确定的? 与至少DFA的关系? 如果它是一种资源,并且假设我是程序员而不是逻辑学家,那将很好。这意味着我想了解如何将其实现为代码,因为在那之前数学对我来说就像是魔力;) 谢谢您能给我的任何帮助。我真的很感激。

1
测试任意证明是否为圆形?
我当时在考虑证明,然后遇到了一个有趣的观察。因此,证明与通过Curry-Howard同构的程序等效,而圆形证明对应于无限递归。但是从暂停问题中我们知道,在一般测试中,任意程序是否会永久递归是不确定的。用柯里·霍华德(Curry-Howard)表示,这是否意味着没有“证明检查器”可以确定证明是否使用循环推理? 我一直认为,证明应该由容易检查的步骤(与推理规则的应用相对应)组成,检查所有步骤可以使您确信结论是正确的。但是现在我在想:也许实际上不可能编写这样的证明检查器,因为没有办法解决暂停问题并检测循环推理?

1
这是将任何递归过程转换为尾递归的通用方法吗?
看来我已经找到了将任何递归过程转换为尾递归的通用方法: 使用额外的“结果”参数定义帮助程序子过程。 将应用于过程的返回值的参数应用于该参数。 调用此帮助程序过程即可开始。“结果”参数的初始值是递归过程的退出点的值,因此,最终的迭代过程将从递归过程开始收缩的地方开始。 例如,这是要转换的原始递归过程(SICP练习1.17): (define (fast-multiply a b) (define (double num) (* num 2)) (define (half num) (/ num 2)) (cond ((= b 0) 0) ((even? b) (double (fast-multiply a (half b)))) (else (+ (fast-multiply a (- b 1)) a)))) 这是转换后的尾递归过程(SICP练习1.18): (define (fast-multiply a b) (define (double n) (* …

2
通过拥有“依赖类型”,我们可以获得什么?
我以为我正确理解了依赖类型(DT),但是这个问题的答案是:https : //cstheory.stackexchange.com/questions/30651/why-was-there-a-need-for-martin-l%C3% B6f要创建直觉型的理论使我产生了其他想法。 在阅读了DT并试图理解它们之后,我想知道,从DT的概念中我们可以得到什么?它们似乎比简单的lambda演算(STLC)更灵活,功能更强大,尽管我无法确切地理解“如何/为什么”。 用STLC无法完成的DT可以做什么?似乎增加DT会使理论变得更加复杂,但是有什么好处呢? 从以上问题的答案: 依赖类型由de Bruijn和Howard提出,他们希望将Curry-Howard对应关系从命题逻辑扩展到一阶逻辑。 从某种程度上讲,这似乎是有道理的,但我仍然无法掌握“如何/为什么”的全局图?也许一个例子明确表明了将CH对应关系扩展到FO逻辑可以帮助理解DT有什么大不了的地方?我不确定我也应该理解这一点。

5
为什么健全性意味着一致性?
我正在阅读以下问题:一致性和完整性暗示着健全性吗?里面的第一句话说: 我了解健全性意味着一致性。 这让我感到很困惑,因为我认为稳健性比一致性弱得多(即我认为一致性系统必须健全,但我猜这不是真的)。我在MIT的6.045 / 18.400课程中使用Scott Aaronson的非正式定义来保持一致性和健全性: 健全性=如果证明系统证明的所有陈述实际上都是真实的(可证明的一切都是真实的),则证明系统是正确的。即IF(ϕϕ\phi是可证明的)⟹⟹\implies(ϕϕ\phi为True)。因此,如果IF(有一个通往公式的路径)然后(该公式为True) 一致性=一致的系统永远不会证明A和NOT(A)。因此,只有一个A或它的取反可以为True。 考虑到这些(可能是非正式的)定义,我构造了以下示例,以说明存在一个健全但不一致的系统: CharlieSystem≜{Axioms={A,¬A},InferenceRules={NOT(⋅)}}CharlieSystem≜{Axioms={A,¬A},InferenceRules={NOT(⋅)}} CharlieSystem \triangleq \{ Axioms=\{A, \neg A \}, InferenceRules=\{NOT(\cdot) \} \} 我认为这是一个声音系统的原因是因为根据假设,该公理是正确的。因此,A和A都不成立(是的,我知道不包括排除中间定律)。因为唯一的推论规则是否定,所以我们可以从公理到达A而不是A并互相到达。因此,我们仅针对该系统得出True陈述。但是,系统当然并不一致,因为我们可以证明系统中唯一语句的取反。因此,我证明了声音系统可能不一致。为什么这个例子不正确?我做错什么了? 在我看来,这在直觉上是有道理的,因为稳健性只是说,一旦我们从推理开始并且公理并推论推理规则,我们只会到达目标为True的目的地(即语句)。但是,它并不能真正说明我们到达哪个目的地。但是,一致性表示我们只能到达达到或(两者都不都是)的目标。因此,每个一致的系统都必须将排除中律定律作为一个公理,我当然没有这样做,然后仅将唯一公理的否定作为唯一其他公理。因此,我感觉自己做的事情并不聪明,但是某种程度上出了什么问题?¬ 一个AAA¬A¬A\neg A 我只是意识到这可能是一个问题,因为我使用的是Scott的非正式定义。甚至在我写问题之前,我都检查过维基百科,但对我来说它们的定义没有意义。他们特别说的是: 关于系统的语义 他们的完整报价是: 就系统的语义而言,系统中可以证明的每个公式在逻辑上都是有效的。

2
建构逻辑中的“矛盾”是什么?
罗伯特·哈珀(Robert Harper)在《程序语言的实用基础》中说 如果一个命题是正确的意味着有一个证明,那么一个命题是错误的意味着什么呢?这意味着我们对此有反驳,表明它无法得到证明。也就是说,如果我们可以证明一个假设是真实的(有证据)与已知事实相矛盾,那么这个命题就是错误的。 但是,这就引出了一个问题:建设性/直觉逻辑中的矛盾是什么? 这是否意味着以某种方式派生?这将如何以明智的方式发生?是否需要采用形式判断?(⊥ true)(⊥ true)(\bot\text{ true})(A⊃⊥ true)(A⊃⊥ true)(A \supset \bot \text{ true}) 或者,从读者的意义上来说,这也许意味着读者可以使用自己的判断力非正式地将某些东西标记为矛盾的东西?例如,将和为矛盾的命题。a=ba=ba = ba≠ba≠ba \neq b
12 logic 

2
用Coq证明重言式
目前,我必须学习Coq,并且不知道如何处理or: 举个例子,尽管如此简单,但我不知道如何证明: Theorem T0: x \/ ~x. 如果有人可以帮助我,我将非常感激。 作为参考,我使用该备忘单。 我想到的也是一个证明示例:这里是双重否定: Require Import Classical_Prop. Parameters x: Prop. Theorem T7: (~~x) -> x. intro H. apply NNPP. exact H. Qed.
12 logic  coq 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.