【为什么系列】为什么我读不懂数学书?

——那是因为我搞不清形式语言和非形式语言 (v0.02)

自去年开始,自觉之前大学所学的基础学科不够用,想要补补课的我,从 cocoa 留下的那一本离散数学的笔记出发,被 b1 带着钻到计算理论,而后跑到了数学的世界里。作为一个常游泳但嫌水冷都要磨叽半天的我,跳进非舒适区的感觉自然不那么好,于是希望有类似经历的人不再和我一样辛苦得很可怜,就不断地在这边开坑;加之,我想借这个地方纪念我所学的和给我带来帮助的人,我觉得与其期待论文致谢把大家的名字说出来,不如时时用这种方式感谢那些在我平凡日子里嵌进一颗颗宝石的人,所以如果在看这些博客的你有想和我分享的东西,也请不吝赐教哦/

那么 进入正题——

我们大学阶段所看的数学教材,大体是会如此组织:
先是公理,然后是定理,然后可能有一些定义啊、推论、引理(为了证明什么新的东西出来)以及夹杂其间的例子以及证明。然后是习题啊啥啥的;有些实用性强的教材,比如我先前本科经济学的教材,则不注重理论和证明,东西能用就好(何况在高频交易的世界里学了微积分也用不上emmmm)

这样学习的好处是可以不纠结基础理论,也可以说是可以高屋建瓴:不用在数学的大厦里往地基推进。很多人(比如我)能用数学解决问题,但是什么数理逻辑啊模型论啊公理化集合论啊递归论(可计算性理论)还有证明论啥啥的都没听过,也没耽误做医学统计搞经济模型或者机器学习。

但是对于跨学科的人来讲,如果有基础科学的加持,便可以不用在新领域里只得做一个解题能手,因为你可以从更底层去思考问题,这是科班出身的人会有但往往不扎实的能力。

在滚动更新的时候,没必要在学一份“经济数学”再来一份“医学数学”再来一份“计算机数学”的时候,把所有的共通线重刷好几遍——经济数学、医学数学、计算机数学应该像是DLC那样,装载在数学范式的本体上;而对于像我这样先前有安装实用数学(我姑且这么叫)的人,我给自己的建议,还是要把数学的部分滚动更新一下的。

那我来说说为什么我读不懂数学书吧。

简单来讲,最重要的一个事情是:数学语言和我们的日常语言很不一样

这里要讲一个概念叫【元数学】。元数学是指一种“将数学视为人类意识和文化客体的科学思维或知识”,它使用数学技术来解决数学问题,是研究数学和数学哲学的数学。

我可能记不太清了,b1 有一次和我说,主要用非数学语言,比如汉语描述数学的过程,是元数学研究;多讲一句,这算是元数学的三道门中的第一道:
1 将非形式化的理论“形式化”,得到
2 (一般的)形式体系和特殊的形式体系——对象理论,而后
3 借用元理论,描述并研究形式体系 最后使你到到达了数学的世界

在这个过程中,元理论是会使用很多寻常语言的:比如你看哥德尔不完备定理的全文,在他的论述前有 20 多页的前言,全是用非数学语言叙述;论证的过程中,也不像你我看到的数学书那样充满符号。

但是一旦离开了数学的天空之城——元数学的范畴,我们便来到了地上的城——数学。至于说为什么元数学不是数学,可以思考一下理查兹悖论。这个城市和元数学不同,是建立在以“公理化集合论”为代表的“数理逻辑”上的;或者说,当今数学世界的范式,是数理逻辑。这个世界里充满了形式语言,它是用精确的数学或机器可以处理的公式定义的语言;在这里,偶尔出现的非形式化语言只能给人家做个点缀(这时候我们称这种形式化非形式化掺杂的语言为‘半形式化语言’)

形式语言和非形式语言虽然都有语言学上的“语法”和“语义”,但它们行同陌路。
从最小的符号的定义上都截然不同。这便是为什么我看数学系的教材往往是似懂非懂的。

你看,我们定义非形式语言为“一套复合交流系统”;定义形式语言为“一个字母表上的某个有限长字符串的集合”。真的你瞅瞅,这俩东西咋看咋不是一家的。

所以说了这么多,搞不明白形式语言和非形式语言的区别,拿着应用数学的知识和非形式化语言的逻辑,想看懂数学的教材,对于我们这些外行人来讲一定是相当困难的事情。想要搞懂数学书上是什么内容,我认为要从熟悉形式语言和符号入手;若是懂一些公理化集合论和数理逻辑,那就最好了。

那么最后问一个问题,为什么形式语言都写在数学书里呢?

要回答这个问题,我想让你先想象自己是像欧拉那样的,每天脑子里都会蹦出改变世界的新想法的天才数学家。别谦虚,想就是了w

你的脑子里有新的点子:于你而言,你是有一套天才的证明方法的;事实上,我相信每个数学家都有自己特色的核心处理法,直觉也算。但是你的证明方法别人不一定能听懂,你的灵感源泉无法向别人解释,更要命的是你无法百分百证明自己的点子是正确的,因为你的核心处理法不一定百试百灵。那怎么办?

为了能够跟你眼中够不上你的大多数人,或是和你有不同研究个性的同侪们解释你的点子,你首先要尝试把它翻译成人人都能精准理解的某种语言,然后再给对方。不论是解释、证明还是争辩,你都要用这种精准的、没有歧义的语言来转换你的点子、你的想法;这样你便保证了你思想的果实可以完整地传递给他人。当然他人怎么把这种中间语言转换成他的理解那就不是我们要管的事儿了。——精准地传递信息,这就是形式语言的意义。这种经过公认考验和提炼的精准语言的格式,我们称为数学范式。

有了形式语言的另一个好处是,我们可以划定处理问题的边界,或者不确切地说,“我们所表述所研究的数学理论”是什么。确切来讲则是:相对于元数学,数学是什么。我们还是假设你是一个为你所在的某个领域做出贡献的数学家,你希望你所做的描述不只符合某种特殊情况,而是尽可能地具有普适性,可以用在各种具有某些共同性质的东西上。我们便把这些共同性质抽提成为一个集合的性质/运算,把那些具有共同性质的东西抽提为集合中的元素,这种带有元素还带有运算的东西,我们可以称之为“空间”;这种公论承认、无需证明的共同性质,我们叫它们“公理”。比如构造线性空间的 8 条公理:

线性空间的公理化定义,截图自 https://zh.wikipedia.org/wiki/向量空间, 2020-03-08

只要你想让你的理论和概念在这个空间里适用,那么你一定要满足这 8 条公理;如果别的数学家或者你的学生搞出了新的想法,你也可以用“这些想法是否满足这 8 条公理”来验证。把公理作为集合的元素后,我们便有了“公理系统”;把公理和它们导出的所有定理总括起来,我们把它称为“数学理论”。数学理论的范围,可以说便是相对于元数学的数学世界了。我没有使用“范畴”这个词,是因为不想让你重写范畴论里的范畴定义w

形式/半形式语言写就的公理,和你在书上看到的那些形式化/半形式化语言一样,它们不是自然法则,它们是一座座桥,连接着你、你的同侪和那些伟大的数学家。为了这座桥的平整牢靠,我们使用“抽象化”来处理这座桥的模型,便成就了它极简抽象、晦涩难懂的风格。你的目的和困难,在于把桥的模型了然于胸;至于之后你如何装点你心里的桥,那便是你的事情了。

最后,形式语言、非形式语言、公理化集合论、数理逻辑等等的定义本身,维基百科说得肯定比我好,那样的知识也俯拾即是,我便不再赘言了w

下一次,我想讲一讲“为什么我看不懂数学符号”
或 “为什么我看不懂数学证明”

新生舊事 – 2019年末的隨想隨說

“毀滅一個東西比重建它簡單多了。”

雖然看來我歲月靜好,安然恬淡,可知道我的人一定了解,今年於我來講可以說是很難很難的一年;甚至可以說,我一輩子不會可能再像今年那樣有那麼多的坎,那麼多的路:我愛的人或是因為陽壽已盡離開了我,或是因為齟齬背叛拋棄了我;而與之相對,我拋棄了過去,放棄了自由,把自己放在了天秤一側,夢想和虛無放到了另一邊。

扔掉學生簽證,扔掉學生身分,申請陪讀,從洛杉磯到新澤西,從講台到灶台。離開過去的日子是痛苦的,沒有自由的日子是痛苦的。b1 有一次問我,為了我的夢想奉獻了什麼;而後在我的沈默中,她改口——“妳該給自己留點什麼了”。

可是我也不知道該給自己留點什麼,可能也就只有一些想法和故事,還有音樂和膠卷、愛和盟誓以及夢想是我的,其他的我無法留住——且我覺得我應該卑微到什麼也沒資格留住了。畢竟,這個世界的一個公理是,毀滅一個東西往往比重建簡單多了。

那就在這邊寫寫看起來沒用的文字,把我的想法記下來;我也希望有人能聽聽我說話,在一個不屬於自己的城市的不屬於自己的大學裡,我是孤獨的。若是長時間無人傾聽,不論是貓還是兔子都會死掉的。何況是一個在父母口中被稱為“計算機愛好者一樣的保姆”——我也不是 Vivian Maier。

“為了一個答案的輪迴”

從 2010 年開始,我就踏上了一個至今仍在繼續的循環:我自一個城市去往另一個,一個行業去往另一個,一個大學去往另一個,一個國家去往另一個。最開始只是希望自己走得遠一點,看得多一點,畢竟工作了就意味著在一個地方穩定;穩定,於那時的我可不是什麼很好的東西。

去一個新的城市的大學,學些本事,這就是最初的想法,可是我失望了——我對大學失望,因為大學沒有幾個大學老師,也沒有幾個大學生;我對知識失望,因為大學講授的知識淺薄且沾染了實用主義和自私利己的註腳;我對未來失望,因為職場上的人們不會接受一個外表與他們不同的異類,儘管能力和外表沒有關係。在那之後,我便在對各個“大學”、“知識”、“未來”認識的迭代中,改變了自己“做一個世間趕路的過客”的想法。我只希望能夠做到如下三條:“穿著自己喜歡的衣服,做自己喜歡的研究或工作,有和喜歡的人在一起的能力。”

奈何九年了。為了這個答案的輪迴,走了太久了。何況,我喜歡的人,不論家人還是親密的人也都

可是我還會走下去。我相信我的家人,我喜歡的人們,喜歡我的人們會理解我的任性的。

“知識是平等良善的藝術”

我相信年久失修的大樓必將倒塌,於知識而言尤甚;這也是我總在路上的原因:因為我沒見過真正的知識。我們現在所學習的知識,更多意義上是種種“技能”。這些技能用來使社會運作,通過人人各司其職。

可是技能永遠只是技能:做一場手術、寫一份企劃、出一份報表、做個服務器維護,這些都是可以簡化成按一個按鈕的動作,因為其本身並不需要創新、構思、哲學,只需要遵循步驟就可以了,和開飛機一樣。這不是知識,這是技校就能教的技能。可惜,很多人認為這就是知識,從而失去了批判和再認識的能力。這可能也算是我們用諸如“五道口工程技術大學”、“中關村應用文理學院”調侃大學校名的深層原因吧。

多說一句,之前曾經和某個院長談話說到知識的定義的時候,她曾經這麼說「當代大學里教授的所謂知識,在技校里也能教,這並不是正常現象。大學要傳授的是知識,不是技能;大學要輸出給社會的是最新的理念,而非適合當下工作的人才。」我深以為然。

那麼知識到底是什麼呢?我認為,知識是能讓一個人成為想成為的自己的階梯,也是能讓人類成為想成為的人類的階梯:於己來講,可以通過知識成為想成為的人;於人類來講,可以通過知識告別吃香蕉搖大樹的矇昧日子。那種知識不只包括處理事情的方法和對事物的認識,還有我們作為主體和周邊的世界交互的能力;而這種能力是魯棒的,可復用的,可拓展的,可遷移的。

一個學科的發展是必然經歷從無序到有序、從分散到系統、從底層到高層抽象的過程。從煉金術到化學亦然,從電子電路到區塊鏈大體也是一樣。學科大廈如是建立起來,知識便從經驗到了久經驗證、嚴密論證的學術。這個過程中有兩個好處:第一,零散的認知經歷了沈澱、概括、組織、重構的過程後,便成為了較為嚴整的自洽的體系,有利於在現實中繼續利用及自我辯證和發展;第二,知識成為體系後變成了符合認知論的知識串,有利於在不同的環境、不同的文化背景、不同的學生中進行教授,從而傳習。

上升到社會的視角,它當然是希望能者多勞、各司其職;於是理想情況下,我們便可得出一個粗淺的結論:不同的知識的運用賦予人在社會中的不同位置;社會的發展程度可以從「可在多大程度上用知識自由地改變命運」來體現。

社會當然知道,若是教育學/教學法施展出了它的全部力量,那麼每個人都可以獲得同樣高度的 acquisition,即運用知識的能力;所以,為了社會的分工,對於元知識的某種歪曲開始了:

我們把知識等同於技能,把知識中哲學的部分束之高閣;我們使用考試作為人們獲取知識的准入制度,既保證了分工又嘗試提高社會效率;我們集中優勢的教育資源於幾點,並且讓優秀的學生分在優秀的世界里,就像是《北京折疊》那樣,給每個人以一個符合生存方式且內部方便交互的空間;我們把知識打散,把技能打散,通過教授碎片化的技能給人以「我學會了某種東西」的錯覺,實際上讓知識的傳授過程分出了優劣甚至只給人以學到知識的幻象。

於是,因為社會,或者說,因為社會分工的創造者,教育變成了不公平的東西:知識不再變成知識,而變成了一種藝術;優秀大學的教學目的變成了培養能「出活兒」的學生,除此之外的大學則是通過學生對大學的滿足感來完成教學價值。於是出現了一個很顯而易見的副產物:學生不以學到的知識本身為榮,而是以講授課程的地方為榮;人們不以掌握技能的熟練程度評價人的地位,而以所在的行業評價人的地位。

既然知識已經成為了藝術,我也無法改變社會,
那麼最起碼的,我希望它是平等良善的藝術。

更廣泛的結果是,於中國的最好的大學教授的東西,還是脫離不開「解決問題為要」的框框;當然,因為資源的緣故,新的理念可以傳播進來;但是我還是希望,有昭一日,中國可以有一所能以傳播知識和教授技能並重的大學。

如果能做到的話,我和島娘應該不會再這樣做一個9年的流浪了吧。

可是現在中國終究是沒有這樣的大學;就算有的話,與大多數人都是遙不可及的,中國社會才不會給每個人想成為自己期待的樣子的機會。那怎麼辦呢?

“如果身邊沒有最好的大學,
那就在妳心裡造一個”

我在今年,又踏上了蹭課的流浪之旅。不過和往年不同,這次我不再有家的牽掛,而是把自己打包,去往另一個完全不熟悉的地方了。想想對於大學的失望,可能有九年多了。“如果身邊沒有最好的大學,那就在你心裡造一個”這句話,也第一次高考前我對自己說的;至於說為什麼沒有在那時候跳到國外而是繼續參加高考,一是家人不放心我,二是,公立醫院醫師 + 醫科大學教授,在那時候真賺不了那麼多錢。

一路看了這麼多同期生畢他們的業,我覺得我對大學的失望和一般人對大學的失望根本不是一回事——高考的程序使得考生往往現實達不到預期,於是從入學就有落差的心境,我想除了最高學府的學生之外都逃不掉。而進到大學的人對於大學的抱怨的超集,大抵是我對大學失望的原因。

前面說到,絕大部分中國大學失敗的地方是把技術當知識,同時有階級帶來的校校分層和教學法缺失所帶來的校內內捲。導致的問題變成了學生們口中的抱怨——“學校管理系統使得學生自主性缺失”“面向大作業學習”“會的課不用聽,不會的課聽不懂”,加之中國大學裡的知識結構不可避免地有政教侵入,使得學校的學生不堪重負。但學校聲名日盛,學生也習慣了反求諸己,便陷入到了一種“只能靠自己”的環境裡,搞得跟養蠱一樣。受不了大學環境的人,放棄理想,放棄自己的期待,甚至在壓力下抑鬱成疾積勞成疾,默默忍受著他人的無視,卻也不會想到是大學的問題。為什麼好多畢業生,不願意感謝母校,回想自己的日子往往是形單影隻?那麼大學的任務是什麼呢?

大學/技校的意義是教學。區分大學優劣的準繩絕不是分數線或生源,也不是就業率或雙一流,甚至不是排名;我斷言,衡量大學優劣的標準只有一個,即“教學知識的能力大小”。

教學知識的能力強,意味著對於入學學生的能力寬容度高,對於就讀學生的潛能可以施以充分的發揮,對於畢業生可以讓最短板的能力達到一個不錯的高度。比如,一個數學愛好者可以通過大學的知識變成一個歷史學研究者,一個攝影師可以通過大學的知識變成一個量子力學家,等等。大學要為此具備兩個重要的元素:教學法和資源。教學法保證了知識的高效、完整傳遞,資源保證了知識和信息的流動,從而賦予學生多種機會。能具備這兩種東西的大學,於我來講才算可以自豪的大學。

奈何好多大學是沒有這兩樣東西的;更可怕的是,他們總會有一種迷之自信,所以會盡他所能地侵佔學生的生活:他們用各種活動把學生綁定在學校、課程表或是時鐘上,因為他們可悲可笑地堅信,只要學生嚴格按照他們的方法走,就一定能“成才”。他們對於學生的管理高於教學,對於老師的管理高於教學,認為只要流程可控便可以造出最好的製品。這便是中國大部分大學悲劇的另一個原因。

那麼,那些被學生視為寇仇的大學們,你們為什麼不學學父母呢?

“所謂家庭,是夢想的傳遞啊”

我只有一次選擇原生出生家庭的機會。我被生父拋棄了。可能是因為這樣,我才能看到更多血緣之外的東西吧。我覺得,家庭、家族不是血緣的繼承,而是夢想的延續;於是,世間的諸多國家、團體、集體、個人的成功,都可歸結為家族的成功。

和一個人親密地在一起也是一樣的。情侶、愛人達不到“為對方實現夢想,自己將奉獻至毫無保留”的地步,但家人可以——我們的父母大抵都在用自己一生的大大小小的成就,給我們未來的成功做鋪墊。我覺得,這就是家庭的意義。家庭的傳承,不只是財產的傳遞,也有記憶和經驗的傳承。所以我才把計算機當成自己的最後一站,也算是為了繼承除了血緣之外的,來自養父的一生經驗;他對於心電圖診斷的認識若是還在,他便活著。

於大學、於社會來講,他們要做的事情,便更應像是家族一樣。他們準備資源和可能性,給你通往不同路徑的鑰匙,讓你在這一路上擁有決定你命運的選擇權。

於我的話,則是會以“了解我、認同我、願意為了對方的夢想互相付出”為條件與人交往。
一路走過來的我,也發現自己願意以為人實現夢想為自己存在的意義;
所以我變成了一個為了實現夢想而互相扶持的集體的中間人,
經歷了六年的思考,我就此跳出了其他人給我的限制,接受了自己是 polyamory 的事實。

今年我重要的人離開了我。或是因為陽壽已盡,或是因為嫌棄我是 intersex / polyamory。6年的妹子、兩年半的男票、相處15年的爺爺奶奶、最親的姥姥,都沒有了。

讓我心痛且不甘的是,他們都是不告而別。我不知道他們是不是為我好,可能他們知道,我見不到他們離開的那一刻,大概便不會在他們面前心碎。

他們錯了。

今年我彷彿換了一個人,把之前的東西或是扔掉或是打包,去一個陌生的城市、不屬於我的地方尋求一個不可能的夢;痛苦未盡,夏初來臨,我在美國有了新的家庭。有了哥哥,有了妻子老婆們;可是,我依舊未來不定,依舊會在夢裡驚醒。因為

“重建一個東西比毀滅它難多了”

而這,將成為我的 2020。

我想去往最好的大學,不論是心裡的還是現實的,去學我喜歡的知識,EE/CS什麼都可以,只要能做出新的東西,不再做人類社會的書籍員;只要能讓我把家裡人的知識傳承下來;只要能穿著喜歡的衣服,做喜歡的事情,有和喜歡的人在一起的能力。但在這之前,我還得去一趟我的故鄉——姥姥的墓,我還得掃,姥爺我也得看看了。

我到現在還不相信我會被人以我愛人的方式對待,即我認為我不會被人毫無保留地付出。我也不相信一切可以長久,包括感情或是家庭。那我有的就只有夢想和親人了。回到 b1 問我的問題,“你該為自己留點什麼了”;可是,我又能期待什麼呢?我覺得,2020年不能給我答案,

但是你能。
至少你也能給自己個答案吧。

The Way to an ‘Impossible Program’ 1: Automaton, Algorithm, and Church-Turing Thesis

Outputs from Computation Theory Lectures

From the Automata Theory before we moved to Computability Theory and Computational Complexity Theory, we had gone through several Formal Languages, Formal Grammars and Abstract Machines. For the lecture of COS487/MAT407 in Princeton, Formal System was the next topic for students’ discussion; but as long as I’m writing these posts in a line for everyone has the same amateur knowledge basis like me, I’d like to put the First-Order-Logic a bit off, and continue to explaining the Computability Theory in advance.

Speaking of those Abstract Machines, we can see the limitations each one of them easily: Due to the absence of storage, a Finite State Machine (FSM) can’t deal with those problems with ‘counting infinitely’ (eg., determine if a string ‘balanced’ with a and b, or \(L = \{a^n b^n | n ≥ 0 \}\)); a Pushdown Automaton (PDA) has infinite storage, but that storage is still a stack. That means a PDA must consume the input characters ‘in the order’ in which they are received, and cannot access them again, except by placing them on the stack. Therefore, a PDA can’t determine if a string satisfies such rules like ‘a string has the same amount of particular symbols in total’ (eg. “aacbcbdd”); besides, it only works on Context-Free…

Until we got A Turing machine – it has unlimited storage can be visited so efficiently under any order, any loop, any condition and any sub-function. Life is great ;D

Until, we reached the boundary of it. We added more features to those Turing machines but didn’t expand any additional abilities to them, by proving that those features can be replaced by another (bunch of) designed Turing Machines, if those features are applicable. Then where is that limitation of a Turing Machine? Is there an impossible program?

Those ‘General Systems’ such as Turing Machines are dealing with algorithms, not to mention computers. Then, to answer those questions, we have to see the features of an Algorithm. If we know the algorithms’ features and abilities, we might figure out what those limitations are.

In a total rudimentary way to explain, an algorithm is a set of instructions, each instruction takes an/ε input(s) and got an output of it/them. But there are 4 rules applied:

  • The number of instructions are finite;
  • The instructions can’t be complex;
  • The whole process with instructions can be done in finite length of time, if those instructions are followed/used correctly;
  • The result out of those sets of instructions must be ‘correct’ if those instructions are followed/used correctly.

Based on the 4 rules above, we can turn numerous algorithms into programming codes. But is it possible to convert each and every algorithm into a set of instructions for general systems’ execution? People (especially people writing codes) may just answer ‘yes’, following their instincts. Yet under the realm of Computational Architecture, the direct, abstractive idea of an algorithm is totally unequal to its logical, concrete implementation.

So again, can we design an algorithm with such unbelievable complexity and unmeasurable scale that no machine can grasp its stem?

Since 1930s, computer scientists have been working on creating an algorithm which could not be ‘solved’ by an abstract machine – every attempt of creating an model of computation returns a system, and those systems were all proved to have the equivalent capacity of a Turing machine, whereas there’s still no mathematical / logical proof for that general question. In fact, from the place I put up the 4 rules for algorithm, we are not be able to talk about the whole question on the level of logic or mathematics any more. But at least, along the way of exploration, we are confident to accept the hypothesis below:

“Every algorithm has the features as I mentioned in this post, can be executed by an abstract machine, or specifically, a Turing machine.” or let’s say, “a function on the natural numbers can be calculated by an effective method if and only if it is computable by a Turing machine.”

And here we reached the first stop of the Computability Theory: Church-Turing Thesis,

“We shall use the expression ‘computable function’ to mean a function calculable by a machine, and let ‘effectively calculable’ refer to the intuitive idea without particular identification with any one of these definitions.”

Turing, Alan (1938). Systems of Logic based on Ordinals (PhD thesis). Princeton University. doi: 10.1112/plms/s2-45.1.161.

or in Gandy’s(1980:123) words, every effectively calculable function is a computable function.

Despite of the form of Church-Turing Thesis is a ‘thesis’, a literature statement than a logical, formal expression, the Church-Turing Thesis came out from solid formalisms: the λ-calculus, besides recursion, and the Turing machine. Those are the topics up next, which requires we write something to show the power of those 3.

We’ll begin from the λ-calculus.

【120円の春 – Yuria】 大意

運命も 偶然も 少しだけ人任せ
命运 或是偶然 稍稍被人推着

前向きに アクティブに
往前走 向前迈

なんて わかってるの
为什么会这么做呢~

テレビの中 光るような空が
荧幕上点亮的天空

隙のない 半端なフィクションよ
无边的天空里 填上一半的幻想

インディゴの蒼い空 白い雲
靛青的天 白的云上

窓あければ 在るのにね
那里就有一扇窗w

教科書と違う この世界
和课本不同的 这个世界里

モニターとサイトの ロマンス
显示器和网站上的 浪漫的事

憧れとリアリズム 経験値だけじゃ
期待和现实 不是只靠经验值

乗り切れないの
就能调和的呢

雨降りの湖も 合図して ひとまたぎ
凝雨的湖畔 你在我就会跑来

長靴は 無いけれど
就算没有雨靴

川も ひとっ飛びよ
我也会走过那河川

あなたが指差す どしゃぷりの空は
和你一起伸手 在天空下比个框框

地味なコバルト さえない天気
哪怕天气暗沉色澹澹

でも水のシグナル 春の色
是雨是雾是润物无声,

目を閉じてちゃ 気づかないね
闭上眼就永远是晴天w

連れ出してくれた この世界
在蓝天白云外的 这个世界里

雨漏れ玉子焼き ロマンティック
听雨吃煎蛋也是浪漫的事

曖昧なリアリズム 馴染めないだけじゃ
美丽的故事 只要想着 不论前缘

乗り切れないよ
也是可以发生的呢

(Fly to the sky) 

上手く言えない
嘴拙是嘴拙

言葉にできない
说也羞于说 但是。。。

不器用でごめん ありがとう
ありがとう 

自己如此笨拙 真的对不起 谢谢哦
谢谢呐。

連れ出してくれた この世界
我们一起走向的 这个世界里

しょうがないだらけの現実
纵然有很多无可奈何的事

ロマンスとリアリズム 踏み込んでなくちゃ
但让美丽的期待和现实一步一步重叠的话

飛びこせないの
我们就这样一步一步地走着吧w

…Я бы хотела жить с Вами/我想和你在一起

…Я бы хотела жить с Вами
Марина Цветаева

В маленьком городе,
Где вечные сумерки
И вечные колокола.

И в маленькой деревенской гостинице –

Тонкий звон
Старинных часов – как капельки времени.

И иногда, по вечерам, из какой-нибудь
мансарды –
Флейта,

И сам флейтист в окне.
И большие тюльпаны на окнах.
И может быть, Вы бы даже меня любили…

Посреди комнаты – огромная изразцовая печка,
На каждом изразце – картинка:
Роза – сердце – корабль. –

А в единственном окне –
Снег, снег, снег.

Вы бы лежали – каким я Вас люблю: ленивый,
Равнодушный, беспечный.

Изредка резкий треск
Спички.

Папироса горит и гаснет,
И долго-долго дрожит на ее краю
Серым коротким столбиком – пепел.

Вам даже лень его стряхивать –
И вся папироса летит в огонь.

我想和你在一起
瑪琳娜·茨維塔耶娃

在一个小镇里,
无尽的黄昏,
绵延的钟声,
都有我和你。

小城素净的旅店,
古朴台钟吟出的
似有似无的声响,
好似时间般地轻轻滴落。

傍晚。某时,某个阁楼传来的
笛声。

吹笛者倚凭阑干,
团簇的百合缀满窗棂。

爱,随风透明。

小屋中央,是磁砖镶贴的壁炉,
每块磁砖上都是:
一艘船,一颗心,一朵玫瑰。

而那扇窗外都是:
雪,
雪,
雪。

你会躺成我喜欢的模样:慵懒,
洒然,恬淡。

夹杂着划亮火柴的
沙沙声。

烟呼吸着火苗间,渐渐暗淡,
明灭的红光点一点,点一点
灰短的烟蒂赘着灰。

你懒得弹落,
见白烟相忘于红焰。

【公式编辑测试+小题目w】

1 试计算概率论公式:

$\varphi(x)=\frac{1}{2\pi\sigma_1\sigma_2}\int^{+\infty}_{-\infty}e^{-\frac{\xi^2}{2\sigma_1^2}}e^{-\frac{(x-\xi)^2}{2\sigma_2^2}}d\xi\quad(\delta_1>0,\delta_2>0).$

2 契贝谢夫-厄尔米特多项式由公式
\begin{equation}
H_n(x)=(-1)^ne^{x^2}\frac{d^n}{dx^n}(e^{-x^2}) \quad(n=0,1,2,\cdots)
\end{equation}
而定义,试证明
\begin{equation}
\int^{+\infty}_{-\infty}H_m(x)H_n(x)e^{-x^2}dx=
\left\{
\begin{aligned}
&0,& 若m\neq n\\
&2^nn!\sqrt{\pi},&若m=n
\end{aligned}
\right.
\end{equation}

3 用latex编公式好好玩www

$\forall_{x_i}\exists_{a}a \wedge b \vee \neg c$什么的www

啊对了,

题目1 2来源于《数学分析习题集(吉米多维奇)》题目3839和3840。

3839的答案为$(\varphi)x=\frac{1}{\sigma\sqrt{2\pi}}e^{-(\frac{x^2}{2\sigma^2})},$

其中,$\sigma=\sqrt{\sigma_1^2+\sigma_2^2}$.

方丈記 – 逝水轻尘(鴨長明)

此文原文摘自【方丈記】第22-23頁。
文書卷帙之間,算是逃避性消遣,
便隨便譯了一下——

 

【原文】

ゆく川のながれは绝えずして、しかも、本の水にあらず。よどみに浮ぶうたかたは、かつ消えかつ结びて久しくとゞまりたる例なし。世中にある、人と栖と、またかくの如し。

たましきの都のうちに、棟を並べ、甍を争へる、高き、いやしき、人の住ひは、世々を經て盡きせぬものなれど、これをまことかと尋(ぬ)れば、昔しありし家は稀なり。或は去年焼けて今年作れり。或は大家滅びて小家となる。住む人もこれに同じ。所も変らず、人も多かれど、いにしへ见し人は、二三十人が中に、わづかにひとりふたりなり。朝に死に、ゆふべに生るゝならひ、たゞ水の泡にぞ似たりける。不知、生れ死(ぬ)る人、何方より来たりて、何方へか去る。また不知、假の宿り、谁が為にか心を恼まし、何によりてか目を喜ばしむる。その、主と栖と、无常を争ふさま、いはゞ朝颜の露にことならず。或は露おちて花のこれり。残るといへども朝日に枯れぬ。或は花はしぼみて露なほ消えず。消えずといへどもゆふべを待つことなし。

【譯文】

白川静流,流水逝水非静水;
泡浮尘世,且消且结且珍惜。
论及鸟鱼世人,栖居之所,亦作同理——

敷金缀玉之都,鳞次栉比,雕梁画栋间,诸人等等居所,忝列贵贱,
阑干经世而不尽不灭,然寻根溯源,旧时却无多少帝王百姓家。
细而观之,或去年所焚毁,今年得再造;
或家事衰灭,堵圮异爨,大院已成小宅。
房中之人,确实不变。而,虽栖居屋所不变,人丁不减,
然当年所见之人,已不存十分之一也。

早成晚殁,朝亡夕生,好似泡浮飞沫。
不知大江东去,逝者如斯,自何方来,向何处去;
亦不知,此生委身非我之世,寄人篱下,为谁恼心,又为何悦色。
只看那高楼宴宾间,主人争相无常,又何尝不似朝露日烯——
或露落而花残,花残不待朝日;
或花谢而露不消,露消不待夕阳。

N个女人的老死不相往来——n皇后问题

知乎问题链接:如何用C++10行内写出八皇后

前日闲暇之余乱逛,看到了这个问题,觉得蛮有意思。
也顺便想改进一下通行的官方解法,就认真写了一下,
顺便也把自己作为外行人的一点感想列在下面。

n皇后问题,较早为八皇后问题,出现于1848年。
Max Bezzel讨论的是“在国际象棋上出现8个后时,
应该如何排列,才可使她们不会相爱相杀。”

(八皇后问题的其中一个解)

虽然依照升变原则,同棋盘上可以出现17个后,
(一方全升变,一方被吃过路兵一次,加上初始两个)
但是真正走出来的可能性是微乎其微的。
况且这个问题没有考虑黑白方关系,
在象棋上也就是趣味的一问而已。
——直到图论和函数式编程思想出现,
穷举法和递归思想使得92个解终于呼之即出。

前面说到,n皇后问题的解法都是穷举法及递归,
加上回溯算法实现。这对于刚入门的傻喵来讲,
是很好的练习题目了——

' n queens cast by go basic
[loop]
input "How many queens (N>=4)";n
if n < 4 then
 print "Must be greater than 4"
 goto [loop]
end if
 
dim plot$(100,100)
dim q(n+20)
dim e(n+20)
dim o(n+20)
r=n mod 6
if r<>2 and r<>3 then 
  gosub [samp]
  goto [shoBoard]
end if
for i=1 to int(n/2)
  e(i) = 2 * i
next
for i=1 to int((n/2)+.5)
 o(i) = 2 *i-1
next
if r = 2 then gosub [edt2]
if r = 3 then gosub [edt3]
s = 1
for i=1 to n
  if e(i)>0 then 
    q(s) = e(i)
    s    = s+1
  end if
next
for i=1 to n
  if o(i) > 0 then 
    q(s) = o(i)
    s    = s + 1
  end if
next
' print board
[shoBoard]
cls
for i = 1 to n
  plot$(i,26-q(i)) = "*"
  plot$(i,24-n)    = chr$(96+i)
  plot$(n+1,26-i)  = str$(i)
next i
for ii = 1 to 100
 for jj = 1 to 100
  print left$(plot$(jj,ii)+" ",1);
 next jj
print
next ii
end
 
' the simple case
[samp] 
p = 1
for i = 1 to n
  if i mod 2=0 then 
    q(p) = i
    p    = p + 1
  end if
next i
for i = 1 to n
  if i mod 2 then 
    q(p) = i
    p    = p + 1
  end if
next
return
' edit list when remainder is 2
[edt2]
for i=1 to n
  if o(i) = 3 then 
    o(i) = 1 
   else 
    if o(i)=1 then o(i) = 3
  end if
  if o(i) = 5 then 
    o(i)= o(i) -1 
   else 
    if o(i) = 0 then 
      o(i) = 5
      return
    end if
  end if
next
 
' edit list when remainder is 3
[edt3]
for i = 1 to n
  if e(i) = 2 then 
    e(i)  = e(i)-1 
   else 
    if e(i) = 0 then 
      e(i) = 2
      goto [more]
    end if
  end if
next i
' edit list some more
[more]
for i = 1 to n
  if (o(i)=1 or o(i)=3) then 
    o(i) = o(i)-1 
   else 
    if o(i) = 0 then 
      o(i)   = 1
      o(i+1) = 3
      return
    end if
  end if
next

或是这样的尝试——

# Brute force permutations for 8 queens by R

safe <- function(p) {
  n <- length(p)
  for (i in seq(1, n - 1)) {
    for (j in seq(i + 1, n)) {
      if (abs(p[j] - p[i]) == abs(j - i)) return(F)
    }
  }
  return(T)
}
 
queens <- function(n) {
  p <- 1:n
  k <- 0
  while (!is.null(p)) {
    if(safe(p)) {
      cat(p, "\n")
      k <- k + 1
    }
    p <- next.perm(p)
  }
  return(k)
}
 
queens(8)

在好多人的口中,递归+穷举已然成为了8皇后问题的标准答案。
但是时代还是会变的,人的能力也是在随着问题进步的。
当面临N皇后问题时,传统的方法则捉襟见肘。

虽然有人推荐直接向上抽象,利用已有的库来简化方法,
但是私以为,练习归练习,学习归学习,但不能只会做一个传道者,
迷信工具,迷信顶层,而没有透彻的基础认识。
工具看了手册谁都会用,为什么用,怎么用,好不好则更加重要。
就像是学习语言或是诊断学,迷信书本只知所以然是万万不可的。
——只会利用工具的人,终究会被工具抛弃。

回到问题上来。

N皇后问题中,穷举法的复杂度为(n!),
但若是采用和某些逻辑题一样的算法,则可以大大简化代码。

首先,国际象棋的后拥有两种攻击方式:
好似城堡的十字攻击以及骑士的对角攻击,攻击范围无限制:

从而得出两个预结论——
1 N皇后于NxN棋盘上,若老死不相往来,则绝不在同一行列。
2 攻击范围有重叠时,绝非边与边重叠,只可相交,且相交仅会出现一次。
于是便可以将棋盘格子赋予是否安全的属性,1为受到攻击位置,0安全。
从第一条边向第八条边推进,标注所有可能的攻击位置,发现0则置子,
发现一个以上的安全位置,则从一个方向起下子,深度优先遍历。

于是使用位运算,将n~1横列化为n个二进制数,指定0位安全;
由预结论1,不考虑所下子横行上的攻击(下子后必然全为1);
由预结论1,copy下子所在竖列的状态至下一行;
利用位移运算符定义两种对角攻击模式。
以上图第4横行为例,下子状态标注为 0001 0000
(计算第5横行时,下子状态保留为 0001 0000,
攻击范围则将下子状态左移/右移一位,
分别是 0010 0000 和 0000 1000。
将三个状态列取或运算,则结果中的0位为安全位置。

于是——

#include <iostream>

// total:记录解;finishline:确认的行
int total = 0, finishline = 1;

// row:竖直攻击; ls:斜杠攻击; rs:反斜杠攻击
void trying(long row, long ls, long rs)
{
	if (row != finishline) // 开始新行
	{
		long position = finishline & ~(row | ls | rs);
		while(position) // 若行间无位可放...
		{
			long pointline = position & -position;
			position -= pointline;
			trying(row + pointline, (ls + pointline) << 1, (rs + pointline) >> 1);
		}
	}
	else 
	{
		total++;
	}
}

using namespace std;

int main(int argc, char *argv[]) {
	int grid = 8; // 修改grid的话,1~31皇后都能解w

finishline = (finishline << grid) - 1;

trying(0, 0, 0);

cout << total << endl;

return 0;

}

事就这么成了。

回到最早的知乎问题上去。我真的不明白为什么要限制行数,
而不是限制时间和内存,
但也因为这个问题看似哗众取宠,
便在想是不是某种形式的软广告。

不过最有意思的事情是问题下面百花齐放的代码。
有人简化变量名到一个字符,有人省略头文件,
有人把所有的东西挤成一行,自然注释都没有。
不用说美感,就连维护都是问题。
自己都看不懂了,就为了10行,图啥?
可谓是为完成任务而完成任务了的哗众取宠了。
还有人直接就import <8queens>,
抑或是贬损除了暴力枚举之外的其他算法,
真的是不知道什么逻辑了。

学习计算机科学到现在,傻喵越来越觉得,
好多东西都是如此相通的——
会用工具却拘泥于工具的人;
认为掌握工具便算精通的人;
知道规则便想创造规则的人;
末法心态的,实用主义的人。
希望我不会变成他们那样。。。

更愿意从数学汇编一步步学起,
就像当年从解剖学一步步学起,
就像当年从桥本文法开始学起,
就像当年从吹长音一步步学起,
这样,我想算是专业的负责吧。

不管。总之先把题答了——

#include <iostream>
int total = 0, finishline = 1;
void trying(long row, long ls, long rs){
if (row != finishline) { long position = finishline & ~(row | ls | rs);
while(position) { long pointline = position & -position; position -= pointline; trying(row + pointline, (ls + pointline) << 1, (rs + pointline) >> 1); }} else {total++;}} 
using namespace std;
int main(int argc, char *argv[]) {
int grid = 8; // 修改grid的话,1~31皇后都能解w
finishline = (finishline << grid) - 1; trying(0, 0, 0); cout << total << endl;
return 0;}

嗯。能看得懂,10行也就差不多这样了。

不过,如果八皇后问题真的会在项目里用到,
我则绝不会使用上面的所有程序,而会——

// 此处需使用八皇后算法,但忽略计算过程,仅使用答案节省时间。
// 八皇后解枚举数据头在******
void 8queensAnswers (0, 0, 0, 0)
//在里面做一个调用92个答案的接口,传参出去给大结构体
//保存各个答案类似于[91, 0, 4, 7, 5, 2, 6, 1, 3]这样
//或者n皇后的话[0,1][1,0][2,0][3,2][4,10][5,40]...这样

复杂度为1或是常数n,为啥不用?多好。

至于说怎么显示N皇后问题的解的话w
手动艾特@CocoaOikawa~

N皇后问题——记录下那些老死不相往来的N个女人的位置吧

以上ヾ(๑╹◡╹)ノ”

【翻译】Viva La Vida 我心不息 – ColdPlay

 

每次忧伤的时候就会发翻译呢。w

 

I used to rule the world
万千世界我曾主宰,

Seas would rise when I gave the word
山海排闼只为我而开;

Now in the morning I sleep alone
现在却在雾中醒来,

Sweep the streets I used to own
在我的故土失意徘徊。

 

I used to roll the dice
以生死押注打牌,

Feel the fear in my enemy’s eyes
品味恐惧在对手眼中绽开。

Listen as the crowd would sing:
得意侧耳万民青睐——

“Now the old king is dead
“先王老矣!”

Long live the king ”
“吾王万代!”

 

One minute I held the key
而后当我执掌权脉,

Next the walls were closed on me
却发现宫门深似海——

And I discovered that my castles stand
转身凝望社稷和城稗,

Upon pillars of salt’ pillars of sand
基地散如盐砂乱似尘埃。

 

I hear Jerusalem bells a ringing
听宣礼塔上钟声传来,

Roman Cavalry choirs are singing
看铁骑高呼 声震江海,

Be my mirror my sword and shield
做我明镜利剑和盾牌,

My missionaries in a foreign field
新约旧约传扬在国境之外。

For some reason I can’t explain
只有一事我无法释怀:

Once you gone there was never’
当你离开就不再——

Never an honest word
不再有心为我敞开,

That was when I ruled the world
这就是我一统的时代。

 

It was the wicked and wild wind
凛冽寒风挟肃杀而来,

Blew down the doors to let me in
重门猎猎投我入重霾。

Shattered windows and the sound of drums
骄傲不再、礼崩乐坏,

People couldn’t believe what I’d become
暴民要审判我的将来。

 

Revolutionaries wait
起义大军翘首以待,

For my head on a silver plate
我的头被斩下,被挂起来;

Just a puppet on a lonely string
正如傀儡断线无神摇摆——

Oh who would ever wanna be king
呜呼!谁又渴望受人膜拜!

 

I hear Jerusalem bells a ringing
听宣礼塔上钟声传来,

Roman Cavalry choirs are singing
看铁骑高呼 声震江海,

Be my mirror my sword and shield
做我明镜利剑和盾牌,

My missionaries in a foreign field
新约旧约传扬在国境之外。

For some reason I can’t explain
只有一事我无法释怀:

I know Saint Peter won’t call my name
不再有天使对我礼拜。

Never an honest word
不再有心为我敞开,

That was when I ruled the world
这就是我一统的时代。

 

(Ohhhhh Ohhh Ohhh)

 

I hear Jerusalem bells a ringing
听宣礼塔上钟声传来,

Roman Cavalry choirs are singing
看铁骑高呼 声震江海,

Be my mirror my sword and shield
做我明镜利剑和盾牌,

My missionaries in a foreign field
新约旧约传扬在国境之外。

For some reason I can’t explain
只有一事我无法释怀:

I know Saint Peter won’t call my name
不再有天使对我礼拜,

Never an honest word
不再有心为我敞开,

That was when I ruled the world
这就是我一统的时代。