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

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上的寄存器内容撸出来看了,还能继续正确运行,你一观察内容就变了。所以调试器是不可能有的。

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

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

所以如果人类一开始捡到了外星人的黑科技,尝试在没有电子计算机的情况下,直接去点量子计算机的科技树,可能根本无法做到自举,因为要写出一定规模的量子程序,需要首先有另外一种运算能力强的设备去撸编译器。
8074 次点击
所在节点    程序员
52 条回复
chengxiao
2014-05-27 08:29:37 +08:00
外星人说不定用的是灵能或者是原力,怎么破?May the force be with you
yangff
2014-05-27 08:40:05 +08:00
为毛要调试,你需要证明啊亲。。
rannnn
2014-05-27 08:52:11 +08:00
po主兴趣真广泛。。。
notcome
2014-05-27 09:03:12 +08:00
@chengxiao The Force gives us answers.
tonyup
2014-05-27 09:03:51 +08:00
嗯……看来只能打printf了!233
sinxccc
2014-05-27 09:06:46 +08:00
@tonyup printf 也算是“观察者”吧…
akfish
2014-05-27 09:07:18 +08:00
@tonyup printf也不行,因为print之前也要先对量子态进行测量。
量子计算机只能一个算法从头跑到尾,然后才能取结果,所以中间任何问题都无法在运行时发现。
se77en
2014-05-27 09:07:44 +08:00
表示即使是普通计算机调试在多线程下也没什么用,更多的是靠打 log 来观察的,一旦涉及到线程竟态,调试就几乎没作用了
akfish
2014-05-27 09:09:29 +08:00
@rannnn 主要是为了搞懂Google的Quantum Computing Playground(http://qcplayground.withgoogle.com/)是怎么一回事
hq5261984
2014-05-27 09:18:51 +08:00
哼,卑微的人类,连大规模心电感应,头脑风暴云计算都不会。
akfish
2014-05-27 09:19:11 +08:00
@se77en 不能调试对发展早期技术的自举过程会有比较严重的影响,不管是验证硬件的正确性还是软件的正确性都很困难,电子计算机刚开始也并没有多线程,而且多线程程序的除错调试也不见得完全无用,因为bug可能出在非并发代码中。
tossking
2014-05-27 09:19:41 +08:00
函数式编程可以大显身手了?
hq5261984
2014-05-27 09:19:45 +08:00
akfish
2014-05-27 09:23:21 +08:00
@tossking 貌似。
现在量子编程语言也就两个流派,指令式和函数式。
guotie
2014-05-27 09:42:48 +08:00
这充分说明了量子计算机不是给人用的,而是给智能人用的。
williamx
2014-05-27 10:37:29 +08:00
同一段代码运行两次能给出相同的结果吗?
akfish
2014-05-27 10:44:22 +08:00
@williamx 不会,量子计算机是非决定性的,给出的解是只是一定的概率。这是由不确定性原理决定的。
HowardMei
2014-05-27 10:49:42 +08:00
少见多怪,有些硬件也是不能直接引出调试接口的,比如大多数小信号模拟/射频微电路,
只能从数字控制端进行调试输入,从很多级放大之后的大信号端放测试输出,这种不透明的
级联黑盒测试,也没妨碍你手机正常工作呀?

原因在于,实际应用不需要全透明穷举测试,只需要正常工作模式下批量可靠性超过一个阈值,
那就是合格了;追求完全透明可靠,那是科学派的洁癖和偏执,如果搞工程的也这么做事,
技术根本别想发展、手机会是目前价格的百倍、很多科学理论的工程实证基础也会显得过于
粗糙而摇摇欲坠。
akfish
2014-05-27 11:02:55 +08:00
@HowardMei No no no 你的关注点偏了,这个帖子说的主要是要按顺序点科技树,和你说的完全不是同一个话题。
你举的例子之所以不是问题,是因为人类已经按顺序点完了科技树,理论储备、工程设施已经这么完备了,才可能做到,说得好像人类一来就撸得出射频电路造手机一样。
量子计算机的这些问题最后应该都能解决,因为人类已经有技术储备,有足够强的运算设备了。
loading
2014-05-27 11:28:45 +08:00
将程序切片,先输出,再把结果给下一个子程序。

类似 linux 用管道把一大堆工具协同使用的方法!
do one thing and do it well.

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

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

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

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

© 2021 V2EX