盗梦空间科普札记之一:梦里乾坤嵌套深,醒来可知在哪层?   (唐常杰)


     (这是发在科学博客上一个系列博文的1/4,涉及到递归算法,第四篇涉及到图灵机停机问题,稍难一些)

   上周五晚上,和几位中学生忘年交客人一起看了电影《盗梦空间》。孩子们大呼精彩,边看边议;而我在云里梦里,半懂不懂。惭愧,快out或已out了,看来,知识更新速度在加快,连看电影这样的简单娱乐,也和此博客的开户艺名一样,要“学到老”了。

    下面的图(修女托盘,分形昆虫和周杰伦之递归),先留点悬念,稍后解释。



  向孩子们请教了令人迷失的细节,原来,他们先在网上或朋友那里了解了情节框架,记住了人物姓名,了解了梦里做梦的结构化知识和游戏规则,打印了要点(叹服这一代的IT能力);用如今的Web2.0中的时髦术语描述,孩子们先有了一个关于盗梦空间的“本体”,(ontology,这将在下篇博文“思想植入,托梦、转基因与本体”中解释)因而易理解故事情节。

1  故事情节在潜思维中发酵


   过去以为,玄幻者,娱乐也;常处之以“相逢开口笑,过后不思量“。周日早起,却忽然有了感觉;也许是在睡眠中的潜思维发酵,在梦中把故事情节和孩子们给我的解释串了起来,实现了顿悟。基于两个课程PPT(计算理论递归图灵机和语义WEB)中的几页通俗解释,利用周日,快草了这篇科普博文。本文重点不在复述电影情节,而是议论哪些笔者能够解释的科普亮点。
  为把道理讲得浅显有趣,从远到近,选了一些轮廓或情节;太长,暂分两篇:
      (a) 梦里乾坤嵌套深,醒来可知在哪层----科普札记之一,本文;
      (b) 思想植入与托梦、转基因与本体----科普札记之二。(稍后发出)

2  故事的基本框架:梦里做梦 + 强制托梦.
   古有庄生梦蝶,梦里做梦不算新奇。曾经编导过《蝙蝠侠前传》的导演克里斯托的在强制托梦方面表现了大胆的想象力和程序设计的周密性,嵌套了6层梦。为解释梦之递归,先给出一些 今、古、外、中 的有趣的递归对象。

3  幼儿园的孩子也会玩递归  (今)
  小孩子大都知道并复述过著名的“老和尚讲故事”:“从前有个庙,庙里有个老和尚,老和尚给小和尚讲故事,讲的故事是:从前有个庙,庙里有个老和尚,老和尚给小和尚讲故事,讲的什么故事呢?故事是……”
  写成C语言程序:
Void  Story ( )
{
 printf(“从前有个庙,庙里有个老和尚,老和尚给小和尚讲故事, \r\n”);
 printf(“讲的什么故事呢?故事是:\r\n”);
 Story( );
}
  这里没有递归深度控制,执行程序,将在屏幕上显示出(有始无终的)故事文本,直到堆栈溢出死机或程序出错并报告:”Stack oveflow”。这里的“有始无终”,正是小孩子的兴奋点。
  《一千零一夜》中共有264个故事,有的故事是以嵌套形式表达的,从第N+1层结束时,回到第N层故事环境。

4 图片中套图片 ( 外,国外或境外)
   先看上面的图片,后做解释。

   让小孩看上左图讲故事,可能会这样说:“有个修女托了一个盘子,托的什么盘子呢?(that)盘上有个修女托了一个盘子,托的什么盘子呢?(that) 盘上有个……”。
    用英语的that从句来表达, N口气读不完;
   60岁以上的人可能会联想起了1950年代的小学一年级语文书封面 “开学了”。
   “那本书的封面上有一个小孩子拿着书,拿的什么书呢?那本书的封面有一个小孩子拿着书,拿的什么书呢….”,又递归了。
   右边“图中周杰伦左后墙上挂了一张图,挂的什么图呢?(那张)图中周杰伦左后墙上挂了一张图,.....”,递归了。谢谢博友  zhenjiaolin 提供了此图。
    而中图是分形,以递归为技术要点;科学网上有很多很多专家的精彩博文,不再赘述。
   类似的还有镜子里面照镜子,电影里面放电影,故事里面讲故事。都能激发孩子们的好奇、遐思和思索。

 5  诺贝尔物理奖得主的递归诗 (外)
 I wonder why,
 I wonder why,
 I wonder why I wonder why,
 I wonder why I wonder why  I wonder why I wonder why.
 ………
        (By  Richard Feynman  1965诺贝尔物理奖得主,)
   翻译成中文:
       我好奇,/我好奇,/我好奇我为什么会好奇,/
       我好奇我为什么会好奇那个“我好奇我为什么会好奇
   不愧是诺奖得主,不但有语言美、物理美,还有数学美、递归美。表现了科学家的无穷好奇心和探索精神,言简意赅,不需多说。


6 庄生梦蝶与梦境层次 (古 与 外)
在23个世纪前(战国时代),有点逍遥倾向的思想家庄子就想到了梦里套梦。《齐物论:庄子蝶梦》中有下列段子(先给译文,后给原文

    古文新译:以前庄子做梦变蝴蝶,活灵活现的蝴蝶,那么潇洒那么快活,乐而忘己,忘记自己是庄周。谁知甜蜜的梦容易醒,醒来才知是那个“戚戚然”(心情略带杯具)的庄周。不知到底是庄周做梦变成蝴蝶呢,还是蝴蝶做梦变成了庄周?


原文:“昔者,庄周梦为蝴蝶,栩栩然蝴蝶也,自喻适志与,不知周也。俄然觉,则戚戚然周也。不知周之梦为蝴蝶与,蝴蝶之梦为周与?
  这里,庄子的“觉”即“醒”,有两种可能,
  (a)回到了现实世界,
  (b)从第N+1层梦“醒”回到第 N层梦,还在梦中。


所以,其感觉可能是:

   “梦里身在他乡独漂流醒来爹娘慈爱伴左右”;也可能反过来,是:
   “梦里爹娘慈爱伴左右 醒来身在他乡独漂流”。(念亲恩 之歌词)
怎能不“戚戚然”?。

OK,怎样鉴别梦与非梦呢?
  最近网上热议的、获鲁迅文学奖的
车延高诗作《徐帆》在最后一句给了朴素方法:
      臂上一拧,/  好痛;/ 这才知道:/梦,/ 有时和真的一样.”
《盗梦空间》用戒指鉴别梦与非梦,男主角如带有戒指,则暗示他、也同时暗示观众:此情此景在梦中。这比老子和庄生提倡的“无为”要好一些,但仍有不足,即不能标识梦境层次。
  为梦际旅游安全,笔者冒昧支两招:(a) 换指头带戒子,构造“梦层协议”或“梦层函数”,把五个梦境层次映射到五个指头;(b)纽扣暗示,例如,每进入一层梦,扣一颗纽扣


7 嵌套梦使人犯晕李商隐在《锦瑟》中写到:
      锦瑟无端五十弦,一弦一柱思华年。
庄生晓梦迷蝴蝶,望帝春心托杜鹃
      沧海明月珠有泪,蓝田日暖玉生烟。 此情可待成追忆,只是当时已惘然
如此的缠绵迷离,那么的朦胧惆怅;对比之下,笔者在看盗梦空间时堕入云里梦里,半懂不懂,也不算太out了。


8 不知下篇能否更精彩
     文已太长,疑犹未解,到此,只提出了问题,解释了问题;
     《盗梦空间》中有些什么规则,怎样实现“醒来可知在哪层”呢?

下篇盗梦空间科普札记之二:思想植入与托梦、转基因与本体 准备回答这一问题,请我的中学生忘年交朋友修改把关,已经发出。


相关博文
  盗梦空间科普札记之一:梦里乾坤递归深,醒来可知在哪层?
  盗梦空间科普札记之二:用科学家的目光看电影
  盗梦空间科普札记之三:递归梦的判定性与图灵机停机问题
  盗梦空间科普札记之四: 中美学生思维差异、RSA蓝军以及盗梦算法争议与实验9 附录  盗梦空间粗略框架结构的C语言描述:


   仅供熟悉C语言的朋友鉴赏批评。在下文中还会用《盗梦空间》的本体来解释
Main盗梦空间( void)
  {  Dream(0);//从层数为0开始,调用下面的递归梦境函数,就开始电影故事;
  }
其中的递归梦境函数框架如下:
Dream(N) //递归梦境函数
   { ………
    ……..
    Printf(“这是第 %d 层梦境”,N); //明白标注们的层次,不要忽悠了自己
    Dream(N+1); //进入更深一层的梦境,注意参数N上增加了1
    Printf(“现在回到了第 %d 层梦境”,N); //提醒自己,已从下层梦中醒过来
   }  
  为了这里好理解大结构,函数中省略了若干语句,例如跳出的条件等等,将在下文中用本体知识解析。


其它系列博文的入口 -  唐常杰博客主页 -  科学博客主页