新浪博客

[转载]关于清华maTHmU“抄袭”的问题

2016-05-19 13:27阅读:
原文作者:An-Turing

中国学术要发展,光靠一些表面上的狗皮膏药是要不得的,它只能欺骗一些水平很一般的人,它是骗不了专家的,当然也骗不了我。我会陆续发文阐述国内一些“高端”的抄袭,我会用大众听得懂的语言去详细解释为什么它抄了,背后的根源是什么?这些涉嫌抄袭的东西,包括:清华大学maTHmU、中科院麒麟操作系统、DOA、透明计算、中科院MMP机械化推理平台,等等。在文章里,限于篇幅,我只能大致说明情况,更为具体的源代码层次的分析,读者可私下联系我,我会详细给出“源代码级别”的分析,至于方式,面谈、电话、QQ、Skype都行,联系方式请私聊我,我不想公开得罪人。
maTHmU是清华大学几个本科生(李超等人)的项目,获得了校方的支持,号称要写出“中国人自己的Mathematica”。相关的介绍,请各位自行百度,在互联网上,已经有相关的介绍了,在这里就不浪费笔墨了。他们的源代码在这里可以下载:https://github.com/mulab/nV。另外,项目的介绍页面是http://mathmu.github.io/MTCAS/index.html。事实上,这段源代码根本没法运行,因为它有bug,我已经把它调通了。环境已经打包到了VMware虚拟机,虚拟机安装了Ubuntu 14.04 LTS 32位版,账号是enzo,密码是toor。我已经上传到了百度云,下载地址:http://yun.baidu.com/share/link?shareid=1959608874&uk=2050234562
。相关的东西,我都装进了这个虚拟机,供各位下载参考。
下面阐述几个问题:
1. 做计算机代数系统是不是像李超等人吹嘘的那么高难度?
2. 清华大学的生源、教育、学生产出是不是真的很好?甚至可以与哈佛相比?
3. maTHmU 的真实水平是什么样的?
4. 做计算机代数系统需要什么样的能力?
5. 这件事对中国教育的启发是什么?

下面开始:
1. 写计算机代数系统并没有什么难度,但写顶尖的计算机代数系统难度确实很大。

计算机代数系统(Computer Algebra System,CAS)是“以字符串为对象进行符号计算的计算机软件”,一个软件只要可以做这件事情,就能叫做“计算机代数系统”。
(1)《计算机程序的构造和解释》第二章2.3.2(99页)“实例:符号求导”中构建了一个“求导系统”,在2.5(128页)“带有通用型操作的系统”中,实现了一个用于符号计算的环境。在按照定义,它就是一个CAS,但是,显然懂点计算机的人都可以写得出类似的东西,这显然是没有任何难度可言的。
SICP 中相关例子,链接是:
https://mitpress.mit.edu/sicp/full-text/book/book-Z-H-16.html#%_sec_2.3.2
这只是SICP的一道习题,就是实现符号求导的程序,如下图所示:
分别求(x+3)^4 + (x+2)^2和x的导数。
图片


有人拓展了这个例子,用Scheme实现了相对完整的CAS,名曰racket-cas,下载地址:
https://github.com/soegaard/racket-cas
显然,类似的东西也可以叫“计算机代数系统”,因为它的确是用字符串为单位进行符号计算的程序。但这样的程序,显然是个人都写得出来,根本没任何难度。所以,写计算机代数系统,本身并没有什么难度。它的难度,在于你能写多好的计算机代数系统,是否能比Mathematica还要好?

(2)写顶尖的计算机代数系统难度的确非常大,首先,你需要抽象出符号运算系统,做出机器描述,并且自己发明一门计算机语言,作为人机接口。这需要你精通程序语言理论(PLT),精通程序语言理论的前提是,精通范畴论,看得懂范畴论的前提是,精通实变函数、复变函数、泛函分析、抽象代数、拓扑学、公理集合论,否则范畴论看都看不懂。另外,光发明一门语言是不够的,你还得实现CAS的数学计算。这就要求,基本的编程、算法、数学知识,具体到知识,必须会微积分、线性代数、常微分、偏微分、数值分析、抽象代数、基本算法和数据结构,等等。我曾经说过两件事情,第一,写计算机代数系统是对一个人数学能力最强的考验,第二,能写比较好的计算机代数系统的人,可以免试直接进入我的研究团队,第三,写顶尖的计算机代数系统需要精通 all aspects of Mathematics
(3) maTHmU 显然不是优秀的计算机代数系统,甚至涉嫌抄袭和侵权。需要清楚的是,清华大学的本科生,生源、教育质量、产出和哈佛、耶鲁、宾大是有明显差异的,以清华大学本科生的素质,如果不是属于那少部分的天才(当然,天才每个学校都有,又不是只有清华才有,中科大也有天才啊,复旦也有啊,川大、电子科大同样有天才啊),也很难写得出像样的CAS。这些说法我会在下面一一分析。

2. maTHmU 有什么问题?为什么涉嫌学术剽窃?为什么性能极差?
(1) maTHmU 的内核,只是 Mathematica 的仿制品,甚至函数名都没有任何改动。
我为什么敢这么说?我就不去说内核的实现了,因为这要说很久。我只说一个东西,那就是,maTHmU中不定积分的实现。
你解压maTHmU的源代码(已经上传到附件)之后,在目录下的 mUScript/Integrate 下的文件,就是符号积分的实现。
这个实现,Rubi部分抄袭自http://www.apmaths.uwo.ca/~arich/Rubi4.9.zip,这本来是一个Mathematica程序,Albi部分根本没有写。
这说明两个问题:maTHmU的积分算法是抄的,并且抄袭的部分,可以直接在Mathematica中运行,说明maTHmU的内核也是抄的,它只是仿造了Mathematica,否则为什么Mathematica程序可以不加修改就在maTHmU中运行呢?答案只有一个,那就是maTHmU的内核,要么抄袭了Mathematica,要么是按部就班仿造的Mathematica。
如下图所示,这是Rubi4.9解压之后的源代码目录:
图片
下图是,清华大学maTHmU中关于符号不定积分的代码目录,
位置是:源码目录/mUScript/
Integrate/Rubi,
图片
结论如下:
还轮不到去仔细核对源代码,就看文件名,就知道,maTHmU的开发者,只不过把抄袭源头的一些文件分解成了多个文件装在了对应的文件夹下面而已,文件名都是大致相同的。唯一的区别,就是抄了不同的版本,有细微差异而已。甚至,maTHmU的积分脚本,可以直接在Mathematica中运行,扩展名都是*.nb,这完全说明了,积分算法就是抄的,maTHmU的内核也是抄的,否则怎么可能Mathematica的代码不加修改就可以在这里面运行?真是见鬼了。
读者可以自行下载源代码,或者我配置好的虚拟机环境,来检验这些东西。
最后要说明的一点是,maTHmU只实现了所谓的Rubi,Albi根本就没实现,源代码都找不到,只找到了Rubi,而且还是抄袭的。这显然和他们的技术文档不符合,他们做了虚假陈述。如下图,Albi哪儿去了?被吃了么?
图片

(2) maTHmU 的性能,只能用“极差”来形容。
这个很好验证,您敲几个命令进去试试就知道了,根本不用我去黑,而且我也犯不着去黑清华的学生和产品吧?为什么“极差”?因为maTHmU只抄袭了Mathematica的“形”,“神”并没有学到。事实上,Mathematica并非完美的CAS,它更大的意义在于语言上,Mathematica作为计算机语言,是划时代的。Mathematica语言的本质,是无类型Lisp的一个分支,它用了Lisp的M-语法。作为计算机语言,Mathematica是很智能的,它是“任意门”的,允许任何形态的数据(动态、静态、结构化、非结构化、文字、图片、音乐等等)直接写到程序里进行运算。我就这么说,Stephen Wolfram设计Mathematica的原因,并非仅仅是作为数学软件,他设计Mathematica,是为了用Mathematica写Wolfram Alpha。
反观,maTHmU的内核只在语法层面上,模拟了Mathematica,并没有抄到精髓,差得远。
需要说明的是,看上去maTHmU的符号积分成功率似乎比Mathematica还要高,是这些因素导致的:
Mathematica的符号积分算法不开源,但我们在用的时候,通常不用它自带的积分算法,而是用这个名叫“Rubi4.x”的工具包进行不定积分的计算,下载地址:http://www.apmaths.uwo.ca/~arich/Rubi4.9.zip这个工具包的计算能力强于Mathematica自带的不定积分算法。maTHmU的内核抄袭了Mathematica,尽管抄袭的不全面,但大体框架还是有的,而他们又抄袭了更好的算法,当然符号积分能力看上去强于Mathematica。需要说明的是,并不是用Mathematica达不到同样的效果,这要看用户怎么用。
另外,maTHmU由于没有抄袭到精髓,而且实现也是半斤八两,只要遇到极端输入,则经常出现内存错误,然而软件实现的整体水准实在是太差,根本没法修改,Debug的成本比重新写一个还大。内存段错误,多得不计其数。如下图:
图片
出现段错误这种低级错误,这让我怀疑他们是否精通了C++?是否精通了编译原理?是否精通了程序语言理论? 就这样的编程能力,如何让我相信他们有能力写顶尖的计算机代数系统?

(3) 清华大学学生写的一些所谓的技术资料(在网上都找得到),完全是“借鉴”《Mathematica全书》(The Mathematica Book),
《Mathematica 全书》的地址是:http://www.wolfram.com/language/elementary-introduction/?source=nav
而且,在公开的技术阐述中,很多文字都含糊不清,糊弄外行可以,但糊弄专家显然不行,甚至有些概念搞错了。
图片

另外,大量的知识点来源,也是“借鉴”的Modern Computer Algebra,毫无创新。
Modern Computer Algebra
下载地址:http://pan.baidu.com/share/link?shareid=1282765758&uk=388276938
(4) 抄袭的一个旁证:
这是maTHmU之一的开发者李超,在哈佛大学的档案http://www.math.harvard.edu/~chaoli/
他的个人简历,对maTHmU的开发经历只字未提,你们可以点进去看看。

是否说明了如下几个问题?

I. 简历上不敢写maTHmU,我怀疑他申请哈佛的时候,是不是没有把这段资历写进了PS或推荐信?是否是因为怕被揭穿?
II. 他的教育背景,并没有计算机,他的后续研究,也没有体现出在计算机代数、数值分析、计算机逻辑等领域的延续性。
III. 开发顶尖的计算机代数系统,显然已经超出了他的能力范畴。
3. 数学是什么?
我想,弄清数学是什么,是很重要的。这也可以一定程度地支持我的看法。
数学是利用符号系统去研究因果关系链的形式科学。

(1)数学界的语言系统是符号系统,也就是范式化的描述语言和封闭化的应用语言,而不是英语、日语、简体中文、口水话等等,符号系统是可计算的。数学讲究形式上的规范和研究对象的抽象性,数学的核心在于符号系统到真实世界的耦合与解耦。
(2)
因果关系链是数学的本质结构,逻辑学是数学的上层学科,或者也可以认为数学是逻辑学的分支。数学研究的展开是在因果关系链上进行的。数学的诞生是因为人类思考问题的机理是一样的,人和动物的差异在于人会制造和使用工具,这种思考机理迫使人类去把宗教、科学、哲学中共有的思维模式抽象出来,形成一门单独的学科,叫做逻辑学。逻辑学从某种意义上讲,就是研究因果关系及其派生关系的学科。将逻辑学形式化,就是数学。从数学诞生的历史来看,因果关系链是其最本质的结构。
数学是什么?数学就是结构。计算机代数系统,只不过是一种机械化的数学结构,把数学中的东西,翻译成和lambda calculus等价的东西,仅此而已。
4. 对于CAS的正确认识。什么是好的CAS?
只要能进行符号运算,就是CAS,并不要太在意具体的实现。不是只有Rubi和Albi可以实现积分运算,如果你高兴,用深度学习的方法,用海量题库训练神经网络,得到了积分运算能力,那么这也是计算机代数系统。不要循规蹈矩,没有任何东西是一定的。
我们关心的,不仅仅是CAS的运算能力,还要关心它的运算精准度,这是CAS的一个发展方向。
计算机代数系统,通常都没有强大和完整的类型系统,例如Mathematica,这导致了它的逻辑能力比较差。但是,并不是所有的CAS都是如此,事实上,IBM沃森研发中心开发的Axiom就是一个反例。www.axiom-developer.org/
Axiom 有一个强大的类型系统,类似Martin-Löf Type System (但不是),它是,它完整地表达了 Curry-Howard Isomorphism,它说程序和证明有一一对应关系,具体如下。
图片
只有拥有了强大的类型系统,才能准确地描述这种同构,才能实现“程序即证明”。
Axiom的类型系统是动态类型、强类型、first class type、类型动态生成的,使用了 Curry-Howard isomorphism,这导致了,它可以自我验证自己的运算是否正确。
比如,Mathematica计算不定积分,如果返回空值,你不知道它到底算不出来还是本来函数就不可积分。但Axiom可以准确地告诉你,到底是什么原因导致了不可积分。
如下图所示,总所周知,Exp(x^2)对x的不定积分不是初等函数,它是不可积的,Axiom可以证明它积不出来。请注意,它的返回值,以及类型系统返回的类型。
事实上,我和Axiom的一些开发者是很好的朋友,其中一位还给我写过推荐信,他们的几位也给我的数学软件AMSTOA的开发,我们一致讨论的结果是,maTHmU作为无类型的CAS,只是Mathematica的仿制品,而且没有抄袭到精髓,计算机代数系统的发展方向,应该是Axiom的方向,那就是有完整的类型系统、有逻辑能力,另一个方向则是机器学习。
图片
事实上,Axiom的符号运算能力非常强,比Mathematica强得多,然而maTHmU的作者,在报告中只字不提,就想忽悠过去。我不知道,他究竟是不知道有Axiom这么个东西,还是说想故意隐瞒技不如人的事实。反正不管是哪种情况,都证明了学术能力、学术道德的低下。

5. 为什么清华的学生团队做不出好的计算机代数系统?

(1)总体原因是什么?
很简单,生源质量过得去,但很难称得上顶尖。为什么?这是生源选拔制度、教育水平、管理制度、成果验收制度和

我的更多文章

下载客户端阅读体验更佳

APP专享