计算机科学

为学生,研究人员和计算机科学从业者提供的问答

1
范畴论(子集)和关系代数之间是否存在同构?
它来自大数据角度。基本上,许多框架(如Apache Spark)通过提供类似Functor / Monad的接口来“补偿”缺乏关系操作,并且向cats到SQL的转换也有类似的趋势(Scala中的Slick)。例如,我们需要自然联接(假设索引上没有重复),以便从SQL角度对向量进行元素zip + map(multiply) 逐次乘法,这ElementwiseProduct在类别理论的应用程序中可以被视为(但Spark的MLib已经拥有)。 简单地说(以下示例在Scala中): 引用的join子案例可以看作是应用函子(在有序集合上),这反过来又给我们zip:List(1,2,3).ap(List(2,4,8).map(a => (b: Int) => a * b))-> (List(1,2,3) zip List(2,4,8)).map(x => x._1 * x._2)。此外,假设进行一些预处理(groupBy算符或仅仅是外推,或者通常是一种同形),我们可以将其引入其他联接。 其他联接和选择可以认为是monad。例如,WHERE只是:List(1,2,2,4).flatMap(x => if (x < 3) List(x) else List.empty)->List(1,2,2,4).filter(_ < 3) 数据本身就是ADT(GADT也是吗?),它又看起来像一个简单的Set类别(或更笼统地说-笛卡尔封闭),因此(我想)它应该涵盖基于Set的操作(由于Curry- Howard-Lambek本身)以及类似的操作RENAME(至少在实践中如此)。 聚集对应于fold/reduce(变形) 所以,我要问的是,我们可以在类别理论(也许是子类别理论)和(整个)关系代数之间建立同构吗?还是有发现的东西?如果可行,类别的什么同构子集与relalgebra同构? 您会看到我自己的假设是相当广泛的,而诸如逻辑-猫-lambda的Curry-Howard-Lambek对应之类的形式化解则更为精确-因此,实际上,我要求参考已完成的研究(该研究表明了直接的关系),以及Scala / Haskell中的更多示例。 编辑:接受的答案使我认为我将连接和条件表示为monad太过分了(尤其是使用有效实例化FALSE的空值),我认为回调至少应足以满足SQL的relegebra子集。Monad更适合诸如GROUP BY的高阶(嵌套)内容,这不是relalgebra的一部分。

3
抽象游戏的最佳策略
在一次采访中,我遇到了以下问题(我已经解决不了,没有试图欺骗自己):游戏从一个正整数。(例如)此数字转换为二进制表示形式,而是设置为的位数。(例如,)A0A0A_0A0=1234A0=1234A_0 = 1234NNN111A0=b100 1101 0010A0=b100 1101 0010A_0 = b100\ 1101\ 0010N=5.N=5.N = 5. 玩家1选择一个比小的数字。只能将一位设置为1。(例如)令。(例如)如果满足先前的约束,并且设置的位数仍然等于N,则移动有效。B0B0B_0A0A0A_0B0B0B_0B0=b10 0000 0000=512B0=b10 0000 0000=512B_0 = b10\ 0000\ 0000 = 512A1=A0−B0A1=A0−B0A_1 = A_0 - B_0A1=1234−512=722=b1011010010A1=1234−512=722=b1011010010A_1 = 1234-512 = 722 = b10 1101 0010B0B0B_0A1A1A_1 玩家2通过选择有效的从继续,然后玩家1从继续,依此类推。如果没有有效的动作,则玩家将输。A1A1A_1B1B1B_1A2A2A_2 假设两个玩家都发挥最佳状态,则使用合理有效的方法确定获胜玩家。(在我的问题定义中,对此的限制是程序必须能够为容纳有符号的32位整数的数百万个输入数字提供解决方案。)也就是说,解决方案不需要完全分析。 我个人的兴趣是弄清楚我对找到并实施正确解决方案的期望是否合理,而在给出的120分钟内却没有关于正确性的反馈。或者这是那些“让我们看看他们之前是否曾经看过这个难题”之一。 我失败了,因为我选择实施一种看似合理的策略,这给了我一些预先给出的测试用例正确的结果,浪费了太多时间使它快速运行,最终导致错误的处理我的时间用完了。 回想起来,我应该对小数目的起始号码实施强力搜索并记住部分解决方案,但是事后看来总是20/20。我很好奇,但是是否有一种另类的通用方法使我无法成为一个蓬松的人。

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的非正式定义。甚至在我写问题之前,我都检查过维基百科,但对我来说它们的定义没有意义。他们特别说的是: 关于系统的语义 他们的完整报价是: 就系统的语义而言,系统中可以证明的每个公式在逻辑上都是有效的。

1
对鲁珀特来说,包装一袋礼物比圣诞老人容易吗?
或者:我们是否需要鲁珀特才能获得礼物? 除了路由问题之外,圣诞老人还面临以下问题(很多次都过去了): 给定一个容量为的袋子和一组礼物{ p 1,… ,p n },每个礼物的大小为s i,他希望使孩子{ c 1,… ,c k }开心。他从所有的愿望清单知道孩子ç Ĵ值目前p 我正好v 我,Ĵ ∈ Q ≥ 0得多。CCC{p1,…,pn}{p1,…,pn}\{p_1, \dots, p_n\}sisis_i{c1,…,ck}{c1,…,ck}\{c_1, \dots, c_k\}cjcjc_jpipip_ivi,j∈Q≥0vi,j∈Q≥0v_{i,j} \in \mathbb{Q}_{\geq 0} 这(两两不相交)套礼物挑选为每一个孩子,使一切都适合,即Ij⊆[1..n]Ij⊆[1..n]I_j \subseteq [1..n] ,∑j∈[1..k]∑i∈Ijsi≤C∑j∈[1..k]∑i∈Ijsi≤C\qquad\displaystyle \sum_{j \in [1..k]} \sum_{i \in I_j} s_i \leq C 随之而来的是尽可能多的幸福²,即 max!∑j∈[1..k]∑i∈Ijvi,jmax!∑j∈[1..k]∑i∈Ijvi,j\qquad\displaystyle \max! \sum_{j \in [1..k]} \sum_{i \in I_j} …

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 

4
PRNG用于精确生成n个设置位的数字
我目前正在编写一些代码来生成二进制数据。我特别需要生成具有给定数量的设置位的64位数字;更准确地说,该过程应取并返回一个伪随机的64位数字,其中恰好位设置为,其余设置为0。0&lt;n&lt;640&lt;n&lt;640 < n < 64nnn111 我当前的方法涉及以下内容: 生成一个伪随机数64。kkk 计算的位数,并将结果存储在。kkkbbb 如果,输出 ; 否则转到1。b=nb=nb = nkkk 这行得通,但看起来并不优雅。是否有某种PRNG算法可以比这更优雅地生成带有设置位的数字?nnn

5
哥德巴赫猜想和忙海狸数字?
背景:我是计算机科学领域的外行。 我在这里阅读“忙碌的海狸”编号,发现以下段落: 人类可能永远不会知道BB(6)的价值,更不用说BB(7)或序列中任何更高的数字了。 确实,前五名和六名规则的竞争者已经使我们望而却步:我们无法以人的角度解释它们是如何“发挥作用”的。如果创造力充满了他们的设计,那不是因为人类将它放在了那里。一种理解的方法是,即使是小型的图灵机也可以编码深奥的数学问题。以哥德巴赫的猜想为例,每个4或更高的偶数是两个质数之和:10 = 7 + 3,18 = 13 + 5。该猜想自1742年以来就一直抵制证明。然而,我们可以设计一个图灵机,用哦,比方说100条规则,该规则测试每个偶数是否是两个质数之和,并在发现和发现反例时停止。推测。然后知道BB(100),原则上我们可以将此机器运行BB(100)步骤,确定它是否暂停,从而解决哥德巴赫的猜想。 斯科特·亚伦森。“谁可以命名更大的数字?” 谁可以命名更大的数字?Np,网络。2016年11月25日。 在我看来,作者似乎在暗示我们可以证明或反驳哥德巴赫猜想,这是在有限数量的计算中关于无限多个数字的陈述。我想念东西吗?


1
动态逻辑与时间逻辑之间的区别
为了找到区别,我在下面遇到了有关Wikipedia中时间逻辑的断言: 模态逻辑与动态逻辑具有许多共同特征的另一种变体与所有上述逻辑的不同之处在于Pnueli将其表征为“内生”逻辑,而其他则是“外生”逻辑。Pnueli的意思是,时间逻辑断言是在一个通用的行为框架内解释的,其中单个全局情况随时间的流逝而变化,而其他逻辑的断言则是在它们所针对的多个动作的外部做出的。内源性方法的优点是,它对环境随时间变化的原因没有做出任何基本假设。相反,时态逻辑公式可以讨论系统的两个不相关部分,因为它们是不相关的,因此它们是默认地并行地并行发展的。实际上,时间断言的普通逻辑结合是时间逻辑的并发合成运算符。这种并发方法的简单性使得时间逻辑成为选择并发系统的模态逻辑,并具有同步,干扰,独立性,死锁,活锁,公平等方面的推理。 我无法意识到这种差异。动态逻辑不能涵盖自变量中的每个时间驱动方面以及时态逻辑吗? 还是为什么动态不应该处理并发系统? 你能解决这个问题吗?

3
每种自修改算法都可以用非自修改算法建模吗?
如果我们有任何可以修改其指令的计算机程序,是否可以使用无法修改其指令的程序来模拟该程序? 编辑: 我是stackexchange的新手,所以不确定是否可以在这里提出一个新问题,但是这里有:好的,就如你们所显示的,证明有可能实现这一事实实际上非常简单。现在,我想知道:与输入输出等效的最有效非自修改算法相比,使用最有效的自修改算法来解决该问题是否更有效(在何种程度上)?

1
RAM可以计算自己的哥德尔编号吗?
您可以将RAM的Gödel编号设为命令列表,然后将此列表设为整数。 因此,我想到的是这样的情况:“要返回自己的Gödel编号(例如)的RAM 必须在其中包含信息,因此整数将大于,因此它不会返回自己的Gödel数。”xxxxxxxxx 但是后来我注意到,对于特定的数字,您可以进行压缩,例如计算而不是在RAM代码中写入100000 ... 000。尽管哥德尔数可能不是,但至少可以是。10999910999910^{9999}10999910999910^{9999} 问题:是否有一个RAM可以计算自己的哥德尔数?可以这样吗?

2
为什么在Co-NP中使用FACTOR?
我很难解决PRIME,COMPOSITE,FACTOR以及它们在复杂性方面如何相关的问题。我了解AKME素数测试已显示PRIME在,并且我相信这也适用于COMPOSITE。PPP 至于FACTOR, F一çŤO R = { (m ,r ):∃ 小号 使得1 &lt; 小号&lt; ř 和 小号 分裂 米}FACTOR={(m,r):∃s such that1&lt;s&lt;r and s divides m}FACTOR = \{(m,r) :\;\; \exists s \text{ such that} 1<s<r \text{ and } s \text{ divides } m\} 从我读它似乎是在。我看到它在N P中,因为证书将由m小于r的素数组成。但是什么样的证书可以证明(在多项式时间内)没有这样的素数除数?ñP∩ ço − NPNP∩Co−NPNP \cap Co-NPñPNPNP米mm[Rrr

2
调度问题的这种特殊情况是否可以在线性时间内解决?
爱丽丝(Alice)是一名学生,在接下来的几周里要完成很多作业。每一项家庭作业都需要她一天的时间。如果每个项目都错过了截止日期,那么每个项目都有一个截止日期,并且会对她的成绩产生负面影响(假设为实数,仅假设可比性,则获得加分)。 编写一个函数,该函数给出了(截止日期,成绩影响)列表,该时间表列出了在哪一天进行作业的时间表,以最大程度地减少对她的成绩造成的负面影响。 所有作业都必须最终完成,但是如果她错过了某个项目的截止日期,那么上交多晚都没关系。 在替代公式中: ACME公司希望向客户供水。他们都住在一条上坡路。ACME在这条街上分布着几口井。每口井可容纳一名顾客的水。客户出价要提供的金额不同。水只下坡。通过选择供应哪些客户来最大化收入。 我们可以使用存储桶排序对截止期限进行排序(或者假设我们已经按截止期限进行了排序)。 如果我们首先按降级影响进行排序,则可以使用贪婪算法轻松解决该问题。该解决方案不会比O(n log n)好。 受到中位数中位数和随机线性最小生成树算法的启发,我怀疑我们也可以在(随机化的)线性时间内解决我的简单调度/流程问题。 我在寻找: (潜在随机化)线性时间算法 或者替代地,认为不可能有线性时间 作为垫脚石: 我已经证明,仅知道在截止日期之前可以完成哪些项目,就足以在线性时间内重建完整的计划。(这种见解是我仅询问证书的第二种提法的基础。) 一个简单的(积分!)线性程序可以对这个问题进行建模。 使用该程序的对偶性,如果还为对偶程序提供了解决方案,则可以在线性时间内检查候选提议的解决方案是否最优。(两个解都可以用线性位数表示。) 理想情况下,我想在仅使用坡度影响之间比较而不在此处假设数字的模型中解决此问题。 对于这个问题,我有两种方法-一种基于使用截止日期和影响的挖掘,另一种类似于QuickSelect的方法,其基于选择随机枢轴元素并按影响对项目进行划分。两者都具有迫使O(n log n)或更坏的性能的最坏情况,但是我无法构造一个简单的特殊情况来降低两者的性能。


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.