果然科技树只能按照顺序点:量子计算机上的程序无法调试,无法测试,只能依靠编译器在编译时形式化验证

2014-05-27 08:11:08 +08:00
 akfish
在看一些量子计算机相关的文献,看到这么一段:

来源: http://www.monoidal.net/papers/tutorialqpl-2.pdf

Speci cation and veri cation.
In classical programming languages, debuggers
are useful tools while writing programs. In quantum computation, due to
impossibility to watch quantum information without modifying it, a debugger
for a program is a lost cause.
In classical programming languages, one can develop test suites to analyze
the behavior of a program and check whether it (statistically) behaves
correctly in the expected input data-range. In the case of embedded software, if
it is not possible to do it with the actual device, one can usually perform these
tests o -site. In quantum computation, because of the cost of running code
early quantum computers and the impossibility to e efficiently simulate quantum
computation on large inputs, test suites are not an option.
In typed classical programming languages, one has the choice between
strong type systems, dynamic type systems, or even blends of these, bearing the
fact that run-time errors can be captured and potentially resolved by the user
(as in LISP, for example). In quantum computation, due to the cost of the run
of a quantum computation and the difficulty to keep stable quantum memory,
the programmer cannot afford run-time errors in his code, specially if they come
from something as simple as the attempt to clone a quantum bit.
The conclusion is that the work have to be done upstream.

简单的说就是由于观察者效应,对量子态的观察必定会造成结果的改变,你不可能设个断点然后把量子CPU上的寄存器内容撸出来看了,还能继续正确运行,你一观察内容就变了。所以调试器是不可能有的。

由于运行成本高,以及不可能有效的对输入数据规模很大时的运算过程进行模拟,所以测试也是不可能。

唯一的出路只有在编译时验证。

所以如果人类一开始捡到了外星人的黑科技,尝试在没有电子计算机的情况下,直接去点量子计算机的科技树,可能根本无法做到自举,因为要写出一定规模的量子程序,需要首先有另外一种运算能力强的设备去撸编译器。
8100 次点击
所在节点    程序员
52 条回复
wwqgtxx
2014-05-27 11:48:16 +08:00
放心,这个问题一定会在量子计算机流行之前解决的
shyrock
2014-05-27 12:01:35 +08:00
可不可以这样理解,量子计算的不确定性中其实包涵了设计逻辑上的不完备?因此只要你的代码大体上是正确的就行了,本来你得到的计算结果就每次都不一样,只是指向理想结果的概率更大而已。
akfish
2014-05-27 12:24:06 +08:00
@shyrock 这不是设计逻辑的问题,而是由基础物理理论决定的。
也不是说不完备,而应该认为是一种不同的计算模型。
计算结果以概率密度的形式出现,并不代表对代码只需要大体正确,也不代表结果的正确性没有保证。
量子计算机的非决定性来源于量子比特是处于叠加态,即可能同时处于0,1或者01叠加态,这满足非决定性图灵机的定义:即对于当前状态以及一个特定的输入,可能有多种状态转移方案。这并不代表计算过程本身不确定。
事实上量子逻辑门的一个很独特的特征就是可逆性,即完成一系列的量子逻辑运算后,如果再逆向执行一遍,可以恢复到最初状态。而数字电路里的逻辑门则不行,你不能从1 OR 0的结果1,逆向得到最初的输入1和0.
HowardMei
2014-05-27 12:27:26 +08:00
@akfish 顺不顺序,都是事后诸葛亮,有些东西就是试错试出来,十几年后才有完备理论解释,半导体发展史就是典型例子,你不能说因为现代计算机建立在半导体基础上,并顺势生长了几十年,就说科技树只会顺势增长,这种历史决定论,无法解释科技突破中的偶然性和劈叉生长。

科技树有缓变生长期和突变分叉期,之所以叫树,当然是因为它的新芽生长方向不定,如果完全是顺序攀爬,那只会在主干一个分支上发展,根本不会分叉,只能叫科技棒。

最早的半导体器件,就是撸出来的,没有任何理论支持那些器件会和传统电子管一样工作,更别说工作得更好,晶体管本身是肖克利凭经验、直觉和偏执,弄出来的,那个时候谁知道沟道里面量子效应是什么,外部特性“像”电子管就行了。

手机整体固然是科技顺序生长的结果,但里面有些器件仍然不是,射频器件的很多设计,就没办法进行顺序攀爬和推论,某些新器件,只能作为新特例,反复黑盒测试、迭代修改,凑出来。试错不够多,就做不出来,工程实践就是这么残酷,很多东西要用真金白银烧,烧出来就叫科技树顺势生长,烧不出来就是枯死的末端。

科技树生长,除了不完全是顺序的、经常出乎意料地分叉,甚至都不完全是连续的,任何一粒别处的种子都有可能长出另一颗科技树,至今物理学和生物学这两颗大树,都是孤立生长的,就算物理学与化学都也没能完美合体,联系两棵树的价键理论,人工嫁接痕迹就非常重。
akfish
2014-05-27 12:34:59 +08:00
@HowardMei 你的关注点再次偏了,科技树的顺序决定的是发展难易程度,点错了可能会走弯路甚至死胡同,但总是可以回头换个方向。
不是说顺序有个是非对错,而是有好坏之分。

这不叫历史决定论,而是怎样从历史中学习进步。
假如说人类当初真是直接先点了射频电路,然后不断试错最终用了更长的时间撸到了今天的水平。这个时候如果回头再讨论其实有更好的顺序,意义不在于站在上帝视角诋毁人类的伟大成就,而是总结经验教训下次学聪明点。

这个讨论本来就是事后诸葛亮,人类已经有电子计算机了。
wodemyworld
2014-05-27 12:39:20 +08:00
好能yy,学过量子力学吗,学过测试相关理论么。。。。。。。。。。。
akfish
2014-05-27 12:44:44 +08:00
@wodemyworld
YY?写那些论文的作者们要哭了,原来别人努力学了这么多年终于可以靠这个吃饭了,到头随便一个只知道两个名词的人就能跳出来说人家没学过,233。
HowardMei
2014-05-27 12:55:07 +08:00
最早图灵机的程序,也是图灵自己大脑充当模拟器和调试、测试器。楼主所谓自举,那是多少年后,计算机科学化才催生的奢侈玩意儿。创造C,不必有比C更强大的语言做基础。

这篇文章作者,犯了学院派常见错误,过早担忧,总想找什么最优发展路径。其实只要量子计算机作为黑盒,在一些简单计算上,能足够可靠替换传统计算机,那么后续发展到一定程度,天然就能自举。

比如:算法里包含一些校验子算法,只要这些子算法得出的结果符合传统计算结论,就可以相信整个计算是可靠的,这跟网络传输协议有什么太大不同吗?
akfish
2014-05-27 12:59:46 +08:00
@HowardMei

第一,此自举非彼自举。
第二,喷前先看原文?你说的那些原文完全就没提到过,原作者也根本没那个意思。

你说的这些,放在完全不同的语境下面,我都表示同意。
放在这里,只能说你理解各种偏差了。
不再回了,讨论的完全不是同一个话题。
HowardMei
2014-05-27 13:07:47 +08:00
@akfish 没得到你的意思

按我的大概猜测,你大概和多数中国父母教育小孩一样,足够自信能从历史中总结一套‘正确’方式来保证不走弯路,但是科技本质上是探索未知,对错的判断,很多都是马后炮,所谓判断对错的经验,自然也无从谈起。

我已经在上面说了,科技缓变期,你这种方式可能收到很好投入产出比,但是忽略那些‘错误’的路径,也会让你错过科技突破和分叉。人类在和平时期,科研投入都是这种倾向,但在战争时期,就会出现病急乱投医的大胆试错,科技会发生突变,这种现象不是偶然的。

另外,人类点燃射频电路和数字电路的进程,基本上是同步的,并没有以数字电路为基础,才发展出射频,后面的融合是后面的事,数字长得快,射频长得慢,都有足够道理,两种发展路径很难比较优劣。
nybux
2014-05-27 13:08:47 +08:00
量子计算机如何实现 i++
akfish
2014-05-27 13:14:48 +08:00
@HowardMei 我来告诉你在这个帖子的做了一件什么事情:

一个人从山上下来,运气好选了一条容易的路走完了,回头发现有一条很难的路,然后他感叹了下:“还好当初没有走那条路,显然这个世界上有的路容易有的路难。”
这个时候出来一个路人甲跳出来一阵说教:“别总是想着一来就找到最好的路,你这是犯了学院派错误,blah,blah,blah。”他的这些话可能本身都是正确的,但在这个场合下就是绝对无用的废话。

你就是那个路人甲,这还不懂那我就没办法了。
akfish
2014-05-27 13:32:17 +08:00
Panic
2014-05-27 13:33:43 +08:00
@akfish 不懂为什么好好的帖子被歪成现在这个样子
akfish
2014-05-27 13:34:33 +08:00
akfish
2014-05-27 13:37:08 +08:00
@Panic 没办法,都容易陷入自己的想法不能自拔,人之常情。
bengol
2014-05-27 13:42:19 +08:00
不得不说lz是个好人,脾气好,正在撸这个google链接中。。。
HowardMei
2014-05-27 14:12:00 +08:00
@akfish 你自己的观点是:“果然...” 和 “所以...”,这两部分,我的回应完全切合主题,讨论的就是科技树怎么长,怎么爬,不存在关注点偏了的问题。

这篇文章是你拿来作为例证的,反映的是这篇文章作者的观点,不能算你自己的观点。如果你本来意图是让大家针对文章或者内容本身,主题应该是“这篇文章水准...” 或 “该文xxx提到的...” 如何如何。

针对这个意图,我的看法:
文章本身:很水,等同国内常见的综述文;扯了一堆不可能性,唯一结论是"the work have to be done upstream";

文章内容:没什么有用信息,他扯的那些稍微关注量子计算的都应该知道,结论也不新,upstream该怎么做,才是最有价值的部分。

而且在你复述的时候,结论upstream那段变成“唯一的出路只有在编译时验证”,与原文意思风马牛不相及。

谁告诉你量子计算语言一定和通用计算机的C语言一样,要静态编译时验证了?动态语言里广泛使用的单元测试、行为测试等非侵入式查错手段,就一定不能用?实际上量子计算根本还没到这步,最起码把我前面说的校验算法这类可靠性基石先搞定,再扯什么语法级的调试。

基本上,你自己不清楚想要表达些什么,只会说别人不懂你的心思,却不管自己打出来的字在别人眼里是什么意思。
HowardMei
2014-05-27 14:23:04 +08:00
@akfish 呵呵,你的“果然...”、"所以..." 可真是很强的感慨啊,这既然是你的观点,我来驳斥你的观点,不正切合主题?你也承认我说的对,是正确的废话,那不一个回复就结了?

自己歪楼而不自知,中文论坛里的常见病,引述作者结论,就是表达了自己观点?拜托,那是原作者的观点,不是你的。两个观点之间,并没有显然的不言自明效果。

如果希望大家讨论原作者的观点,你应该针对那些观点发表评论,而不是感什么慨。
akfish
2014-05-27 14:24:02 +08:00
@HowardMei 读懂/读完原文再说,OK?

实际上就在我引用的那一段紧接着就有两条:
* A program needs to be specified and verified beforehand. A quantum programming language therefore needs to come up with a well-defined and sound semantics, in which one can specify a particular behavior for a piece of code, and eventually prove that the code behave as expected.
* Because of the cost of each run, the compiler of the programming language should catch most of the standard causes of run-time errors: the language needs a strong type system.

我引用的这一段所处位置文章都还没过半,你就能理解成这是“唯一的结论”,后文对现有量子编程语言的评价分析被你吃了?

还扯什么动态语言,基础物理原理都不同,计算体系结构都不同,你这种逻辑就等于说猪肉都可以烤着吃,砖头凭什么不能油炸。

不看文章先说文章水,自己理解能力有限就怪别人表达不清,真是放之四海而皆准总能立于不败之地的流氓逻辑。

真是懒得跟你扯了,给你个台阶下,你过去说的,即将说的,已经说的,还没说的都是对的行了吧。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/114409

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX