范畴论与 Haskell 程序设计(零):大纲

This process of hierarchical decomposition and recomposition is not imposed on us by computers. It reflects the limitations of the human mind.
— Bartosz Milewski, Category Theory for Programmers: The Preface

工程学的核心是管理复杂性面对庞大混沌错综交织的现实需求我们几乎只有一种武器分解我们将大问题分解为小问题将复杂的模块分解为简单的单元这是我们作为工程师的本能也是我们唯一的本领这并非计算机强加于我们的思维范式它根植于人类心智的局限性

对于如何分解如何抽象如何组合也许每一位程序员都有自己的想法世界上有这样一群人我们混迹各种编程话题难免会注意到他们的存在

  • 出没在各种函数式编程社区通篇充斥着抽象废话 (abstract nonsense)
  • 热衷于展示一些难懂的交换图但看起来只是装模做样
  • 喜欢嘲讽任何非纯的程序语言尤其是取笑这些语言的锁机制
  • 标榜自己的代码只在主逻辑传入参数定义函数根本不需要形参
  • 转身打开编辑器偷偷写一些 do ... return ... 这样看上去和其他语言别无二致的东西
  • 被吃瓜群众问到以后涨红脸说些非纯……Monad 的事能叫非纯吗……这样难懂的话
  • 被要求解释一下什么是 Monad叽里咕噜半天什么打开盒子装进盒子一些具体的抽象废话
  • 现实中据说这些人真的参与大型软件项目但谁也没在身边见过打听来打听去好像这些人只能混迹在银行和铁路这些老古董行业什么编译器那也是老古董
一些对 Haskell 程序员并不刻板的印象

我本人并非 Haskell 程序员甚至也不是函数式编程的拥趸在很长一段时间里我对他们的态度是保持好奇同时敬而远之我不相信范畴论可以指导任何现实中的软件设计问题我认为设计模式——连同其他面向对象设计原则——已经足够解决我在实际编码工作中遇到的所有问题了如果说在范围之外还有别的问题那一定涉及到如何安排开发周期如何组织团队协作如何面对需求变更诸如此类而这是软件工程的领域和编程语言无关

起初我认为他们——我是指 Haskell 程序员——并没有严肃对待软件设计问题在我看来他们更像一群沉迷于智力游戏的数学爱好者而非愿意弄脏双手的工程师当我们在现实的泥潭中与并发状态管理和异常搏斗时他们冷漠地打量着我们偶尔推销一些不着边际的银弹用以解决一些仅存在于他们想象中的问题

后来我遇到了一些困难超出了我的认识范围我误打误撞在 Haskell 社区中找到了需要的东西它如此简洁紧凑纯粹浑然天成任何人看到它都会认为没错编程本来就是这样我并不准备将这个故事放在开头我们会在后面的章节逐渐分享它总之在那之后我突然明白对于软件设计他们和我们的身份一样也是勤勉而热烈的工程师我们都勇敢且真诚地面对软件内生的复杂性[1]他们使用的语言和概念不是抽象废话那是他们的哲学他们的世界观是一套切实可行甚至可以说高效的工程范式只是——只是与我们这一套不同非常非常不同

然而通往新世界的大门似乎并不情愿为外来者敞开Haskell 社区常常给我一种极端排外的印象他们的文字间充满各种隐晦难以理解的暗号和密语所谓入门材料也大多晦涩难懂往往在展示了 mapfilter 的简单用法后立即将读者抛入自函子范畴的风暴中吝于提及沿途的风景和危险这道——我认为是人为构筑的——鸿沟吓退了无数像我一样满怀好奇的冒险者也让 Haskell 社区与我们距离越来越远愈发陌生

这份讲义是我们为后来者绘制的地图我希望它能从我们熟悉的经验驱动的工程世界出发径直联接到与那个看似遥远的由范畴论构建的形式化王国我们绝不会回避那些艰深的概念但我们会从直觉出发用我们共通的工程师视角认识它们的轮廓揭示它们在代码中的具体形态探索它们如何解决现实的工程问题——我们终究还是乐于弄脏双手因为我们认同自己是勤奋勇敢的工程师

对读者的期待

严格讲大灾变[2]之后的今天学习任何领域的内容都不再需要传统意义上的预备知识只要读者擅长思考和提问有一套内化的元学习框架那么读者必定可以从一份基础材料出发通过向 LLM 提问从而完整掌握材料涵盖的知识

我们期待读者对一切充满好奇至少此刻对范畴论和函数式编程充满好奇这是整个旅途中持续驱动读者向更远方更深处探索的力量源泉也是我们唯一的硬性要求那些真正走完全程在终点开启宝箱的人并不是因为他们多么强大多么聪明——甚至不是因为他们比别人更自律——而是因为他们有不得不奋力向前的理由他们好奇远方的地平线之下会是怎样的风景他们好奇宝箱里藏着什么他们好奇站在终点回望来时路的心情直到最后他们在终点远眺新的地平线整理行囊向仍旧陌生的远方继续进发我们心照不宣其实马里奥从来不在乎碧姬公主[3]星之卡比也根本无意营救瓦豆鲁迪不过是顺手为之这些远非支撑冒险的理由一切都出于——也仅仅出于——我们最原始最强烈的情感那便是好奇心

无人在意瓦豆鲁迪

不过有些读者更习惯从书本中进入一个新领域先建立一套连贯的概念地图再按需查漏补缺这是非常高效的学习习惯——即使在大灾变后也是一样为此我们推荐两本入门读物

  1. 计算机程序的构造与解释大名鼎鼎的 SICP如果将函数式编程看作一门真正的外语[4]比如英语SICP 就相当于新概念英语你后来意识到它有这样那样的局限和缺憾但当你回忆对这门外语最初的感觉那些模糊的轮廓和形貌无一例外都源于它你不会后悔读过它因为是它教会你如何用这门外语思考和表达切换到技术性的视角在前两章书中将 map 应用在多种数据结构上引导读者思考背后的共性暗示了函子 (functor) 的存在类似还有 accumulate 暗示了幺半群对象 (monoid object)——只是 SICP 并未明文点出这些概念同时第二章的许多概念为 Haskell 提供了雏形例如2.2 层次性数据和闭包性质这一节与代数数据类型 (ADT) 有着直接关联还有2.5 带有通用性操作的系统我们熟悉的类型类type class正是在这个想法启发下诞生的在第三章读者会直面现实的混沌认识纯函数和非纯函数并养成自己的品味——你愿意为了一方面的优势而容忍另一方面的代价吗作为整本书最深刻的巧合3.5 流这一节中SICP 事实上在流计算中完整构造了一个 Monad——我们的讲义将会解释为何会出现这种巧合当然SICP 还包含无数我们没有精力提及的概念例如惰性求值抽象屏障等等它们同样重要我们鼓励读者花点时间弄明白这些概念最后——我是说真正的最后在读者还有我完成这份讲义后演出谢幕之时——我们可以回去看看2.1.3 数据意味着什么在范畴论的高观点我们能回答这个问题吗
  2. Haskell 趣学指南这本书可以帮助读者了解 Haskell 的基本语法强化函数是一等公民的概念通过 mapfold 巩固函数式编程的初步直觉通过二叉树的例子接触持久化数据结构——这是纯函数式语言最地道 (idiomatic) 的数据结构读者会接受充分的训练学会识别 Haskell 对象的类型签名然后越来越熟练越来越快我们特别推荐第十二章的走钢索这是 Monad 最好的入门实例如果读者在任何时候觉得自己迷失在 Monad 的森林里都可以折回来再看一眼这个例子况且扮演一个走钢索的杂技演员本身也很有趣

我们期待读者接受过基本的数学训练——别担心请放松继续读下去——这大致等同于说读者不患有公式恐惧症并且赞同适当的形式化有助于更准确地更紧凑地组织概念人的认知资源[5]高度有限更紧凑的表示 (representation) 使得我们可以更自如地思考和表达

我们期待读者在旅途中保持审慎保持质疑作者不是首都派驻 12 区的导师斯诺作者和读者一样共同参与一场盛大的冒险——只是作者出发稍早我们同样机敏勇敢雄心勃勃我们一同翻越高山遁入深谷但务必小心我们也许会在峭壁上一脚踩空在阴影中摸黑摔倒我们在任何一处都可能犯错也许作者将一张错误的地图交到读者手中包括定义概念解释实例隐喻引申乃至思维方式——这一切都有可能出错我们鼓励读者质疑讲义中任何含糊模棱两可甚至看上去明显有问题的地方鼓励读者时刻保持警惕在作者企图蒙混过关的时候抓住他

最后我们期待与读者保持沟通评论邮件微信Github issue——我们欢迎任何途径范畴论是关于联接的科学我们以文本为媒介与读者建立联接我们将会看到正是联接让孤立的对象成为范畴让人类个体成为人类社会让你和我成为我们

符号与样式

数学部分

首先约定一下数学概念的符号和样式

  1. 范畴 (category) 使用英文草书体大写字母 \mathcal例如一般的范畴 $\mathcal{C},\ \mathcal{D}$还有 Hask 范畴 $\mathcal{H}$
  2. 对象 (object) 使用英文意大利体大写字母即数学环境的默认字体例如 $A,\ B,\ X$
  3. 态射 (morphism) 使用英文意大利体小写字母例如 $f,\ g$特别地$1_{X}$ 表示对象 $X$ 的单位态射态射复合记为 $g \circ f$$\mathrm{Hom}_{\mathcal{C}}(A,\ B)$ 表示范畴 $\mathcal{C}$ 上从对象 $A$ 到对象 $B$ 的所有态射组成的集合 上下文清楚时——几乎是所有时候——我们省略下标直接记为 $\mathrm{Hom}(-,\ -)$
  4. 函子 (functor) 同样使用小写字母但使用德文尖角体 \mathfrak以便与态射区分例如 $\mathfrak{f},\ \mathfrak{g}$$\mathfrak{f}(A)$$\mathfrak{f}(h)$ 分别表示函子 $\mathfrak{f}$ 的对象映射和态射映射
  5. 自然变换 (natural transformation) 使用小写希腊字母例如 $\alpha,\ \eta$如要强调该变换在某对象 $X$ 上的分量 (component)用对象名作为下标$\alpha_{X}$
  6. 在自函子范畴 (endofunctor category) 上沿用德文尖角体表示自函子特别地恒等函子记为 $\mathfrak{id}$函子 $\mathfrak{f}$ 到自身的恒等自然变换记为 $\mathrm{id}_{\mathfrak{f}}$$\beta \circ \alpha$ 表示两自然变换的竖直复合这与态射复合的记号保持一致$\gamma * \eta$ 表示两自然变换的水平复合此外$\mathrm{Endo}(\mathcal{H})$ 表示 Hask 范畴的自函子范畴在提及恒等函子对某对象 $X$ 的作用时我们习惯直接用 $X$ 代替 $\mathfrak{id}(X)$
  7. 积 (product) 的泛性质 (general property) 用三元组 $\{A \times B,\ p_{1},\ p_{2}\}$ 表示另一方面余积 (coproduct) 的泛性质用三元组 $\{A+B,\ i_{1},\ i_{2}\}$ 表示$h=\left<f,\ g\right>$ 表示积和余积的态射运算
  8. 用德文尖角体大写字母表示图示 (diagram)多数时候我们不会直接给图示命名而是直接说以下几张图交换如果我们需要特别提及——譬如在定义极限和余极限时——某张图示记为 $\mathfrak{F},\ \mathfrak{G}$

Haskell 部分

在 Haskell 语言中存在大量与范畴论对应的概念然而Haskell 代码没有自然语言文档这样丰富的样式因此有必要约定清楚这些对应关系尽量避免符号误用和混淆

  1. 原则所有文档中的 Haskell 概念都使用等宽字体 \texttt\mathtt
  2. 特例对于Hask 范畴Hask 范畴上的自函子范畴这两个特殊概念Haskell 语言的代码中不会显式提及它们因此我们仍然沿用数学概念的记号 $\mathcal{H}$$\mathrm{Endo}(\mathcal{H})$
  3. 范畴论中的对象对应 Haskell 中的类型 (type)$\mathtt{a,\ b,\ c,\ a1,\ a2}$ 等表示任意类型即 Hask 范畴 $\mathcal{H}$ 中的任意对象极少数时候我们会提及具体的类型例如 $\mathtt{Bool,\ Int}$
  4. 态射对应 Haskell 中的函数 (function)$\mathtt{f,\ g}$ 等作为函数名指代某个具体的态射而函数类型签名体现了这个态射的源对象 (domain) 和目标对象 (codomain)例如
    $$\mathtt{f\ ::\ a\ \to\ b}$$
    这个函数签名表示名为 f 的函数接受类型为 a 的输入同时输出类型为 b 对应到范畴论的概念上态射 $f$ 将源对象 $A$ 指向目标对象 $B$
  5. 函子对应 Haskell 中的类型构造器 (type constructor)例如 Maybe[]必须特别注意我们也会用 $\mathtt{f,\ g}$ 表示任意函子我们尽力避免函子与态射的记号相互混淆但我们无奈地承认这种可能性读者必须根据上下文自行甄别——尤其是出现对象映射时读者必须提高警惕函子的态射映射 $\mathfrak{f}(h)$ 在 Haskell 中对应 fmap h :: f a -> f b其中态射 $h$ 的类型签名为 h :: a -> b
  6. 自然变换在 Haskell 上非常有趣我们通过一个参数多态 (polymorphism) 的 Haskell 函数——这里随意命名为 eta ——来表示函子 f 到函子 g 的自然变换
    $$\mathtt{eta\ ::\ forall\ a.\ f\ a\ \to\ g\ a}$$
    用范畴论的视角看参数多态的 Haskell 函数其实并非一个单独的态射而是以任意对象 $\mathtt{a}$ 为参数的一族态射 $\eta$取参数 $\mathtt{a} = A$得到其在对象 $A$ 上的分量为 $\eta_{A}$ ——这恰好是自然变换的定义
  7. 积在 Hask 范畴上对应元组 (tuple) (,) $\{\mathtt{(a,\ b),\ fst,\ snd}\}$对应的态射运算为 f &&& g而余积则对应 Either $\{\mathtt{Either\ a\ b,\ Left,\ Right}\}$对应的态射运算为 f ||| geither f g

体例

这份讲义的目标是建立以下三者的联系

  1. 范畴论
  2. Haskell 编程语言
  3. 现实中可以被抽象出来的典型计算过程数据关联

瞄准目标我们将以结构化的方式引入每一个范畴论概念首先从直观的实例和隐喻开始为读者建立必要的直觉随后尝试严格化分别使用两种视角定义并认识这个概念数学家的视角Haskell 程序员的视角接着我们会加入更系统更完整的 Haskell 代码实例帮助读者进一步实现概念接地最后每个概念会附上 5-10 道习题

强调数学家视角和程序员视角的差异与联系这是本讲义贯彻始终的母题我们坚持向读者传递这种思维方式即对于范畴论的同一概念数学家和程序员分别选择了更趁手的界面或接口interface简而言之两套接口内核一致只是表象不同我们将会看到得益于 Haskell 优雅的设计两套接口在基本概念上几乎完全一致但对于一些进阶概念二者之间确实存在差异这里举一例

对于保持了源范畴之幺半结构的函子范畴论——即数学家的接口——使用弱幺半函子这个名字而 Haskell 语言——即程序员的接口——使用 Applicative 类型类弱幺半函子要求我们提供一个单位态射 $\phi_0$ 和一个自然变换 $\phi_1$用于说明函子如何保持原范畴的幺半结构Applicative 要求我们实现 pure<*> 两个函数乍看上去二者是如此不同但我们会证明两套接口可以互相实现因此它们是等价的

关于如何对待数学证明本讲义采取的态度是如非特别强调默认只在 Hask 范畴 $\mathcal{H}$ 下证明定理且只证明那些对行文逻辑必不可少的定理毕竟这不是一本范畴论教材——那将严重偏离我们的写作动机和目标如果可能我们首先考虑以 Haskell 代码的形式组织证明——尤其是证明各种同构在 Haskell 代码中这等价于要求我们实现两个方向的函数

内容安排

下面列出的大纲非常粗糙为了抓住灵感有些地方甚至不成句子请读者见谅后续更新的内容将按大纲分节展开

范畴对象与态射

范畴的定义对象与态射的定义Hask 范畴下的类型与函数作为开篇要提醒读者注意到范畴论的世界观即不再关注对象的内部结构转而研究外部相互作用即将注意力放在态射上放在 Hask 范畴中这即是要求读者暂时忽略类型的值——当然同时也忽略函数的具体实现——专注于函数的类型签名

后面我们会构造一个例子从最简单的 $\mathtt{Bool}$ 类型入手向读者展示从内部视角迁移到外部视角并不会丢失任何信息不会损失语言的表达能力其核心想法是我们可以把类型 T 的 v v :: T看成是某种特殊记号语法糖等价于从单位对象出发的态射v :: () -> T而内部视角下的 v 可以看作这个态射的唯一签名

函子范畴间的变换

函子的定义Haskell 中的类型构造器Maybe[]并介绍一个特殊的例子 (->) s即固定入参类型的函数作为函子也叫指数函子若非特别强调函子其实是协变函子的简称对应某种生产容器其态射映射对应后处理

逆变函子选读

逆变contravariant函子选读首次可跳过对比 (->) sOp s前者是协变函子等价于 (s -> *)后者是逆变函子等价于 (* -> s)逆变函子的运算 contramap :: (b -> a) -> f a -> f b也记为 g >$< (f x)逆变函子对应某种消费容器其逆变态射映射对应预处理

自然变换函子间的变换

函子的自然变换本节开始带领读者识别并分析交换图我们会提供一对漂亮的实例safeHead :: [a] -> Maybe a 构造一个 []Maybe 的自然变换而反向并不构成自然变换因此两个函子不是自然同构本节还会介绍两个自然变换的竖直复合水平复合

积与余积组合对象的两种方式

积和余积积 (product) 在 Haskell 中对应的是 $p_1 = \texttt{fst},\ p_{2}=\texttt{snd}$$a \times b = \texttt{(a, b)}$ 以及 $\left<f,\ g\right> = \mathtt{f\ \&\&\&\ g}$ 注意积特指笛卡尔积是更一般的张量积 (tensor product, $\otimes$ ) 的特例顺便介绍对偶的概念$z,\ a,\ b,\ a \times b$ 的整张交换图反过来就可以得到余积 $\{a+b,\ i_{1},\ i_{2}\}$在 Haskell 中对应 $\{\mathtt{Either\ a\ b},\ \mathtt{Left},\ \mathtt{Right}\}$态射映射为 $\left<f,\ g\right> = \mathtt{f\ |||\ g}$

极限与余极限选读

选读内容极限 (limit) 与 余极限 (colimit)我们所熟悉的终对象始对象积和余积在该定义下成为极限与余极限的特例在 Haskell 中有终对象 () 以及对应的唯一态射族 const () :: a -> ()作为对偶还有始对象 Void 和对应的唯一态射族 absurd :: Void -> a对于包含两个对象且无态射的图示其极限为积余极限为余积

此外对于图示中存在态射——即存在约束或相互作用——的情况我们简要介绍等化子 (equalizer)推出拉回同时提醒读者注意由于 Haskell 中缺乏像 Idris 一样强大的依赖类型我们难以在 $\mathcal H$ 中表达复杂的极限概念这是 Haskell 类型系统的局限性

幺半范畴

幺半范畴 (monoidal category)结合子 $\alpha_{ABC}$ 以及左右单位子 $\lambda_A$$\rho_{A}$它们都是自然变换且满足由交换图给出的五边形公理三角形公理作为延申提及 Mac Lane 严格性定理 (Mac Lane’s coherence theorem)该定理告诉我们定义中无需引入更复杂的交换图只要满足三角形公理和五边形公理任何由结合子与单位子组成的自然变换图都交换

笛卡尔闭范畴

笛卡尔闭范畴 (Cartesian closed category, CCC)大略上拥有这种性质的范畴 $\mathcal C$对于任何态射类 $\mathrm{Hom}_{\mathcal C}(A,\ B)$ 都能找到相应的对象 $B^A \in \mathrm{Ob}(\mathcal C)$ 与之同构$B^A \cong \mathrm{Hom}_{\mathcal C}(A,\ B)$$B^A$指数对象它象征着 $\mathcal C$ 能够在其内部表示$A$$B$ 所有态射这个概念而无需诉诸集合范畴 $\mathrm{Set}$在 Haskell 中指数对象 $B^A$ 恰是我们熟悉的函数类型签名 a -> b

我们经常听到在函数式语言中函数是一等公民所谓一等公民意思是说函数也是对象自然也有自己的类型现在我们看到笛卡尔闭范畴正是一等公民的理论基础它赋予了一捆态射作为对象的新身份这也是一种新视角是函数式语言强大表达能力的基石

作为对比延伸材料中简单提及对称幺半范畴 (symmetric monoidal category, SMC)它比笛卡尔闭范畴更弱用于建模资源有限的过程在编程语言中对应线性类型对称幺半范畴没有对角态射 $\Delta\ :\ A\to(A,\ A)$丢弃态射 $!\ :\ A \to ()$故所有类型无法复制无法丢弃能且只能使用一次

幺半群对象

幺半群对象 (monoid object)特别强调其幺半结构并非随意定义的而是完全从该对象生活的幺半范畴中继承——大部分教程都没有重视这一点那些有 SICP 基础的读者熟悉 accumulate 的概念更会想当然地认为对象上的幺半结构是人工随意赋予的一个点上局部的结构与来自范畴的宏观结构无关——这是严重狭隘和错误的认识我们明确指出这一点对下文中引入 ApplicativeMonad 的概念非常有帮助

准确地说我们所熟悉的幺半群其定义中要求一种二元运算我们可以自由访问该运算的第一个参数和第二个参数——这仿佛是天经地义的废话我们特别强调对象之所以具有这种性质绝非免费得来而是继承了范畴的幺半结构——由 (,) 诱导的笛卡尔积幺半结构为了深化理解我们构造一个反向的世界即通过 Either 诱导的余积幺半范畴我们会在这种情形下观察幺半群对象的行为它非常古怪能给读者留下深刻印象

弱幺半函子与 Applicative

弱幺半函子 (lax monoidal functor)保持源范畴上的幺半结构在 Haskell 中对应 Applicative用于合并相互独立的子计算数学家习惯的接口是 unit :: () -> f ()strength :: (f a, f b) -> f (a, b)程序员习惯的接口是 pure<*>注意我们可以用 {fmap, unit, strength} 实现 {pure, <*>}反之亦然因此二者等价

自函子范畴上的幺半群对象与 Monad

自函子范畴上的幺半群对象压平嵌套的函子在 Haskell 中对应单子 Monad用于串联互相依赖的子计算数学家习惯的接口是 unit :: a -> f ajoin :: f f a -> f a而程序员习惯的接口是 return / pure>>=同样二者等价作为延申可以提一下 Kleisli 范畴与 Monad 的联系

Freyd 范畴与 Arrow选读

选读内容第一次阅读可跳过Freyd 范畴和 Arrow这是一种介于 ApplicativeMonad 之间的抽象

伴随函子

伴随函子 (adjoint functors)两个自函子 $\mathfrak{f},\ \mathfrak{g}$ 伴随记为 $\mathfrak{f} \dashv \mathfrak{g}$ 这要求 $\mathrm{Hom}(\mathfrak{f}(a),\ b) \cong \mathrm{Hom}(a,\ \mathfrak{g}(b))$

作为例子可以证明 (->) s(s, ) 的伴随而证明所依赖的双射就是 curryuncurry恒等函子也是 Maybe 函子的伴随作为伴随函子最有趣的性质如果 $\mathfrak{f} \dashv \mathfrak{g}$那么 $\mathfrak{g} \circ \mathfrak{f}$免费生成一个 Monad即我们自动从同构中得到两个自然变换对单位变换有

$$\mathtt{unit}_{X}\ :\ X\ \to\ \mathfrak{g} \circ \mathfrak{f}\ (X)$$
压平变换
$$\mathtt{join}_{X}\ :\ (\mathfrak{g} \circ \mathfrak{f}) \circ (\mathfrak{g} \circ \mathfrak{f})\ (X) \to\ \mathfrak{g} \circ \mathfrak{f}\ (X)$$
我们也提供一些合成 Monad 的例子积函子 (s, ) 与指数函子 (->) s 复合而成的 monad 是 (s, ) -> s 在 Haskell 中称为 State monad而恒等函子和 Maybe 函子生成的就是 Maybe monad[] monad 也由类似的伴随函子生成而来总而言之伴随函子反映了函子间深刻的结构关联与优良的性质在对偶情形下$\mathfrak{f} \circ \mathfrak{g}$ 可以生成一个余单子 (comonad)我们所熟悉的 State monad其对偶的 comonad 是 (s, (->) s)在 Haskell 中称为 Store comonad也称 costate monad下文中的 lens 库正是建立在这种结构上

范畴论的世界观实例研究

插入小节本节尝试通过实例探讨范畴论的世界观外部视角本节尝试构造一系列与 Bool 类型相关的态射和对象实现了完整的逻辑运算读者将会清晰地认识到不依赖内部的值视角而是转向外部的态射视角我们同样可以还原 Bool 类型的全部行为范畴论的抽象并没有丢失任何信息核心构造定义两个态射 true :: () -> Boolfalse :: () -> Bool加入 not :: Bool -> Booland :: (Bool, Bool) -> Bool 等态射配合相应的交换图用以约束这些态射的行为我们还介绍一种思维观念上的语法糖值-类型 val :: a 可以看成范畴幺元 () 到对象 a 上的态射 val :: () -> a在这种对应关系下内部视角的可以看作这种态射的唯一标识类似地可以将函数 f 加载实参 val 后的输出 f val :: b 看作态射复合 f . val :: () -> b对多参数函数可以类似处理不再赘述在延伸内容中可以额外提一提终对象 (terminal object) 和全局元素 (global element) 两个概念

透镜与棱镜解析 lens

Profunctor Optics 和 lensControl.Lens.Prism它是 Haskell 生态系统中最重要的工具设计极尽工巧此刻读者已经掌握了足够的范畴论概念本节中我们会展示这些概念的威力全面剖析 lens 的设计思想和实现我们会看到它事实上是一个 Costate comonad源于指数对偶任何笛卡尔闭范畴都能自动生成这样的 comonad这也许是整份讲义中最优美最普适的代数结构我们期待本节内容能为读者带来审美和智识上的双重趣味

米田引理

米田引理 (Yoneda lemma)广义元素 (generalized element) 依赖类型Haskell 中不支持本节是范畴论内容的最后一块拼图也是这份讲义在形式上的结尾

尾声形式化的边界

尾声选读内容形式化的边界上述内容让读者体会到了范畴论优雅而精密的结构也见证了范畴论与 Haskell 语言相结合带来的强大抽象能力但是写在最后读者请务必意识到所谓 Hask 范畴并不是一个真正的范畴

表面上看这是因为 Haskell 语言的一些病态性质例如底 (bottom记为 $\bot$ ) 的存在导致并非每个 Haskell 函数都能输出它所承诺的类型一方面使用偏函数会让我们很快感知到 $\bot$ 的影响例如 head :: [a] -> a当列表为空时它会报错而非输出我们约定好的 a 类型另一方面即使我们避免使用偏函数——遵循 Haskell 社区的忠告——我们很快[6]会意识到这并非一个简单的编码规范问题绝不是你换成 safeHead :: [a] -> Maybe a 就能轻松绕行——事实上要深刻得多它直接与停机问题相关

哥德尔不完备定理说明我们永远不可能把形式化推向极致即便我们自信满满地通过 MaybeEither 安置了所有异常我们也许忽略了更基本的问题我们的函数真的会停止吗它能在有限的时间内输出一个我们约定的类型吗谁负责证明从停机问题——作为一切可计算问题的终点也是形式化的终点——往回看一个宏大的真相缓缓显出轮廓即语言的表达能力和类型系统的精度在超过某个临界点后会相互制约

现实中的编程语言必须在二者间找到平衡这个话题还可以充分延伸下去衔接到更为现代的函数式语言例如 Idris 2 和 Lean 4但那将远远超出这份讲义最初划定的概念边界接下来的旅途我们将方向盘交还给读者读者已经掌握了所有必要的知识接受了充分的训练是时候开始一番激动人心的自由冒险了


  1. 此事在人月神话中亦有记载一般作为没有银弹的补充说明 ↩︎

  2. 指 GPT 3.5 公开的时间点在那之后一切面向文本输入输出的工作都在日渐失去价值这个说法最早可以追溯到知乎用户@酱紫君我非常认同 ↩︎

  3. 除了库霸王我似乎看不出有任何一个角色关心碧姬公主我甚至怀疑有些通关了很多代正作的人第一次知道碧姬公主是在马里奥赛车 ↩︎

  4. 由于我不是计算机系科班SICP 是我的编程启蒙读物导致 Scheme 甚至是我的母语——或者换句话说我在启蒙阶段就是一个学杂了的双语者Python 和 Scheme 都是我的母语我无法确定 SICP 多大程度塑造了我今天的思维那是我进入这个世界的第一扇门十年前我抬头看到门楣上刻着铭文抽象与隔离有一个声音一遍一遍问我准备好了吗我迫不及待地推开那扇门隆隆声扬起一阵呛人的灰尘然后我意识到门后是什么——现实世界汹涌的复杂性后来我逐渐明白那铭文是一个咒语我们用肉体凡胎试图理解——并对抗——比我们强大亿万倍的复杂性那是唯一的咒语 ↩︎

  5. 人的工作记忆大约只能容纳 $7 \pm 2$ 个区块 (chunks)怎样组织区块的内容并控制区块的数量这直接决定我们能处理多复杂的问题 ↩︎

  6. 出于巧合某天你初次尝试定义某种有限规模的容器作为一个类型你定义了若干操作尝试让编译器帮你证明这些操作都保持你的容器有限起初一帆风顺但当你偶然写下某种递归操作你突然察觉到编译器表现出一些怪异的行为接着你开始反思是不是你设计的类型定义有问题也许你漏掉了什么——随着你反复迭代你潜意识中怀疑一切背后也许有什么神秘的东西似乎是某种你暂时说不清楚的限制并非 Haskell 语言给你的限制而是比那更宏大更深刻更接近某种事物的本源——你不知道如何表达这种感受于是你开始搜集资料终于你看到了这份讲义 ↩︎

迈尔斯·戴维斯自传

第一章

谈起少时岁月我所记得最早的事物是一束火焰有人点燃煤气炉一束蓝色的火焰跳了出来我不记得那人是谁了也许当时是我在摆弄炉子这不重要我深深为之震撼一束蓝色火焰自炉头嗖一下窜出来那猝然一瞬那是我能追溯到最远的记忆更久远的过去是一团迷雾你知道的是谜而那火焰在我脑海中却像音乐般清晰那年我三岁

我注视着那束火焰感受它的热量传到脸上我感到恐惧真正的恐惧它第一次出现在我的人生中可我也记得那像一场冒险一种诡异的快感我猜那段经历将我带往意识中一个不曾步至的地方带往所有可能性的边界——也许如此我也不知道此前我从未试着厘清这一切那恐惧更像在鼓励我鼓励我径直走进某种我一无所知的东西我想正是那里我的人生哲学发源于此我开始投身于我所信奉的一切就在那一刻我不知道但我觉得大概就这样我他妈那时候懂个屁我始终坚信打那时起我只能一路前行远离那束火焰的热量

回顾过去我并不记得自己一岁时的事——何况我也不喜欢回忆过去但我确切知道一件事在我出生一年后一场剧烈的龙卷风袭击了圣路易斯城撕碎了一切对此我好像还零星记得什么——在我记忆深处也许这解释了我的脾气为何如此暴躁那场龙卷风将它狂暴的创造力留在我体内也许它还留下一阵强风你懂吹小号需要强风[1]从神秘且超自然的意义上我坚信如此况且龙卷风显然足够神秘足够超自然

我出生于 1926 年 5 月 26 号伊利诺伊州阿尔顿市阿尔顿是个河滨小城位于密西西比河上游东圣路易斯市以北 25 英里我继承了父亲的名字而他继承了他父亲的于是我叫迈尔斯·杜威·戴维斯三世但家里所有人都称呼我小迈我一辈子都讨厌这小名

我父亲来自阿肯色州他在一座农场长大那属于他父亲迈尔斯·杜威·戴维斯一世我祖父是个会计干这行得心应手他为白人做账赚了很多钱世纪之交他在阿肯色州买下五百英亩土地当他买完土地附近的白人那些曾雇佣祖父为他们梳理财务问题整理账本的白人转而排挤他将他驱离自己的土地依他们的认知黑人不该拥有所有土地所有财富他不该聪慧过人甚于白人这一切并没有多大改观哪怕在今天依旧一切如昨

在我一生多数时候来自白人的威胁笼罩着祖父的生活他甚至派自己的儿子也就是我的叔叔弗兰克当他的保镖以期避开这些威胁戴维斯家族一马当先父亲和祖父如是说而我对他们深信不疑他们说戴维斯家都是独树一帜的人——艺术家商人专家音乐家——旧日里为种植园主奏乐早在蓄奴制度废止前始终如此到我祖父为止戴维斯家祖辈都演奏古典音乐这也导致我父亲既不弹也不太听音乐蓄奴制度结束了祖父曾说他们只准黑人在破酒馆和窑子里演出他的意思是他们——那些白人——再也不想听到黑人演奏古典音乐他们只想听黑人唱唱灵歌和布鲁斯如今我不知道这有多大程度属实但父亲告诉我的就是这样

父亲还告诉我祖父曾告诫他每当他拿到一笔钱无论何时何地无论从谁手里一定要点清数额看看齐了没有他说在金钱方面信不得任何人哪怕是自家人有一回祖父给父亲一笔钱说有 1000 美元让他带去银行银行远在 30 英里外户外阴凉处也有 38 度 [2]——阿肯色州的夏日父亲一会步行一会骑马可算到了银行父亲点了一遍钱只有 950 美元他又数了一遍一模一样的数额950 美元他几乎吓尿了裤子连忙赶回家跑到祖父跟前说他丢了 50 美元祖父只是站在那儿看着他说你走之前数过钱吗齐了吗父亲说没有他走之前没数过钱那就对了祖父说因为我只给了你 950 美元你什么都没丢但我跟你说过吧把钱点清楚任何人的钱包括从我这给你 50 美元点清然后到银行把钱存进去照我说的做对于整件事能让你牢牢记在脑子里的不光是远在 30 英里外的银行还有那傻逼天气热得发癫祖父在这件事上着实冷酷但有时你必须冷酷父亲从未忘记这一课他还将这一课传给了孩子们所以现在我会数清每一分钱

我父亲以及我母亲克莱奥塔·亨利·戴维斯都于 1900 年出生在阿肯色州他在那儿读了小学父亲和他的哥哥妹妹都没上中学而是跳过去直接进了大学父亲毕业于阿肯色州浸会学院宾夕法尼亚州的林肯大学还有西北大学的牙科学院因此父亲获得了三个学位印象中在我长大一点的时候我抬头在他办公室墙上看到了那些傻逼玩意儿我说我操他可别让我弄这些我还记得一张照片父亲在西北大学的毕业照上面只有三副黑人面孔他二十四岁那年从西北大学毕业

他哥哥斐迪南上了哈佛和某所柏林的大学他比父亲大一到两岁跟父亲一样他也跳过了中学他高分通过入学考试直接进了大学他这人棒极了整天给我讲凯撒和汉尼拔的故事还有黑人历史他环球旅行走遍天涯海角他脑袋比我父亲更好使同时是个情场高手还是一份杂志的编辑名叫色彩他是那么聪明让我觉得自己是个傻子在我成长过程中只有他能给我带来这种感觉斐迪南叔叔远不止这些我喜欢围着他转听他讲旅行的故事讲他的女人他还巨他妈时髦我在他身边晃悠得太频繁甚至惹怒了母亲

父亲从西北大学毕业后娶了母亲她会拉小提琴也弹钢琴她的母亲在阿肯色州当风琴老师她从未提过太多她父亲的事所以我不太清楚她老家的情况她没说过我也没问过我也不知道为什么从我听到的只言片语推测——当然也考虑到我见过其中一个人——她的家族大概是中产阶级态度里流露着一丁点傲慢

母亲非常漂亮她时髦到夸张长着一副南亚人面容就像卡门·麦克雷还有深棕色的光滑皮肤她颧骨很高头发带着印度人的质感还有双美丽的大眼睛我和哥哥弗农长相都随她她穿貂皮大衣戴钻石她浑身上下光彩照人戴各式各样的帽子以及别的玩意儿在我看来母亲的朋友们都和她一样光彩照人她的穿着打扮总是极尽奢华炫目我继承了母亲的长相也继承了她的衣品还有对潮流的敏感我猜你可以说我身上一切艺术天赋都来自母亲

不过我和她相处并不算太融洽也许这是因为我们彼此都有坚强而独立的人格我们仿佛争论不休我爱母亲她不是凡夫俗子她甚至不会做饭但是我说了我爱她即便我们并不亲密关于我的人生轨迹她有一套自己的规划而我也有哪怕在小时候我也一直践行自己那一套我猜你可以说我和母亲更相似胜过父亲纵使我也从他那继承了一些东西

父亲一开始在伊利诺伊州阿尔顿市安家我和妹妹德罗茜在那出生随后我们举家迁至东圣路易斯市


  1. 原文两处用的都是 strong wind双关语可以理解为吹小号需要强劲的气息 ↩︎

  2. 原文中是 100 华氏度为方便阅读这里转换为摄氏度约为 37.8 摄氏度 ↩︎

天要下雨,随他去罢

华盛顿哥伦比亚特区

透过椭圆形办公室的落地窗向外望去奔流的雨水在草坪上汇集成水洼又被烈风卷向天空夏日的暴风雨正在席卷北美大陆东北部远处的安德鲁斯空军基地两架亮着绿色编队灯的战斗机刺破雨幕顶住横风挣扎着维持进近航道那是两架返场的F-35A今天最后的波次受极端天气影响安德鲁斯空军基地终止了所有航空作业

叮铃铃铃叮铃铃铃——橘黄色的大手拿起红色的话筒贴到耳边Hello, this is the president.

电话来自夏威夷第 15 太空监视中队一位年轻的太空军少校名叫 Gabriel Moore圣经中传来好消息的天使

Mr. President, we have an unsanctioned launch. I repeat, an unsanctioned launch from Cape Canaveral. Falcon 9 carrying a Crew Dragon. Trajectory indicates— indicates a transpacific injection. We believe the occupant is Elon Musk.少校语速快得惊人有点上气不接下气

特朗普总统从未意识到话筒如此容易变形塑料材质的话筒他听见话筒和自己的指节一起咔咔作响还有窗外暴雨痛击地面的声音夹杂着狂风撕扯树冠的声音那颗木兰树的树冠杰克逊总统两个世纪前亲手栽下的木兰树

壁炉上方挂着众先贤的画像正中央是乔治·华盛顿一头整齐的银发鲜衣怒马向右数两幅富兰克林·罗斯福坐在办公桌后一手执笔面无表情地注视着坐在同一张办公桌后的特朗普总统总统起身目光穿过椭圆的长轴逐一投向墙上的每一位总统期望得到答案

没有回答

Hello? Mr. President?话筒中传来少校焦急的声音

此刻历史将选择权交给他唐纳德·特朗普合众国第 47 任总统

The capsule is on a sub-orbital trajectory. It will re-enter the atmosphere over the Western Pacific in approximately 70 minutes. The Navy has assets in the area. We need your order, sir, what are the rules of engagement?少校催促着

那是他最好的朋友——曾经是暴风雨更大了远方传来雷鸣总统转身猛地打开落地窗狂风抓起桌面上散落的文件狠狠抛向天花板墙上的画框纷纷被掀翻在地砰然作响在四散飞舞的纸页中总统终于开口了声音低沉而疲惫

Well, just—just let 'em go while it’s raining outside.

佛罗里达州

三十分钟前肯尼迪航天中心 LC-39A 发射工位旁停着一辆特斯拉皮卡盛夏的骄阳把不锈钢车身烤得滚烫也许这辆车停得过分近了安全条款禁止如此从不远处的飞行控制中心望去皮卡模糊的银灰色影子受地表的热浪折射晃动着像是隔了一块缓慢熔融的玻璃

猎鹰九号火箭伫立在工位上它的一子级已经回收复用了七次箭身被燎成邋遢的炭黑色顶端的载荷是龙飞船 C212.4 自由号雪白的外壳光洁如初很难相信它此前执行过四次天地往返任务同托举它的火箭一样久经沙场依发射计划下周一自由号会飞往国际空间站执行它的第五次任务

火箭周遭弥漫着白茫茫的雾气箭体外壁甚至结了霜与酷热的环境格格不入

最后一次合练不是前天就结束了吗燃料都泄回了吧一名身穿 NASA 黑 T 恤的工程师揉着眼睛怀疑自己出现了幻觉头儿又心血来潮加了一场

我看了日程表今天没安排是不是液氧管路出问题了另一位同事放下手里的咖啡凑到窗边

等等——上帝啊那是埃隆的车他们在加注燃料埃隆——埃隆人在哪里

恐慌如同闪电般掠过飞行控制中心大屏幕上的数据显示39A 工位的燃料管路处于打开状态超低温的液氧和煤油正疯狂泵入猎鹰九号的贮箱这不是演习更不是故障

切断燃料供应任务主管嘶吼着却是徒劳控制台返回了红色的 ACCESS DENIED

系统被锁死了有人从内部接管了最高权限我们被踢出来了

安保安保在哪里未授权的发射重复一遍未授权的发射

几辆福特探索者冲向发射台可已经来不及了半路上远远望去特斯拉皮卡的车门忽然打开一个穿着 SpaceX 宇航服的人影下车隔着头盔上黑色的面罩监控看不清他的面容但他走路的姿态那种笨拙却坚定的步伐所有人都认得出来

埃隆·马斯克

他没有回头径直走向了发射塔的乘员升降机在他身后还有一位身穿宇航服的船员身形像是初中年龄的小孩手里拎着一个手提箱

他在飞船里他把自己关进去了

是自动发射程序他启动了倒计时

控制中心内人们眼睁睁地看着屏幕上鲜红的数字跳动这枚身经百战的火箭此刻像一头被唤醒的巨兽周身喷吐着寒气准备将它的主人送往一个无人知晓的目的地

… 5, 4, 3, 2, 1, 0. LAUNCH—

九台梅林发动机喷出烈焰狂暴的声浪和冲击波滚滚而至控制中心的地面震动着玻璃嗡嗡作响固定火箭的爆炸螺栓应声脱离猎鹰九号拖出一条壮丽的火龙决绝地刺向佛罗里达湛蓝的天穹那不是任何 NASA 预设的轨道在爬升到一定高度后火箭执行程序转弯径直飞向西方

那辆被遗弃的特斯拉皮卡在火箭尾焰的炙烤下不锈钢外壳迅速变成蓝紫色卷曲变型最终被气浪掀翻像一个孩子丢弃的玩具

西太平洋

Captain on the bridge!值更官喊出口令

舰长 Wexler 上校疾步跨进舰桥匆匆向值更官[1]回礼他刚睡下不到三个钟头就被 CIC[2] 打来的紧急通讯叫醒DDG-105美国海军杜威号导弹驱逐舰当前正处于灯火管制在西太平洋漆黑的海面上航行着

舰桥内舱壁被显示器微弱的亮光晕出一抹朦胧的暗红而舷窗外笼罩着一片如墨的夜色好像那片凝固的黑色本就是舰体的一部分大海很少像今晚这样柔和风平浪静站在舰桥感受不到一点摇晃杜威号仿佛在无边夜幕中悠然滑行

舰长感到一种梦境般的不真实航海钟显示现在舰上时间是凌晨三点一刻这不过是一次普通的 FONOPs 任务战术官[3]那种语气是怎么回事最佳拦截位置这只是一艘独立部署的驱逐舰谁的命令哪个疯子敢拦截中国的航天器一觉醒来这下轮到杜威号点燃世界大战了

舰长抬头看向综合显示器雷达锁定的目标自东向西飞行轨道高度 170 公里——这时数据链传来红外预警卫星捕捉的完整轨道信息——不对不是中国发射位置竟然是佛罗里达州卡纳维拉尔角

突然套住目标的红色小方框右上角出现一行跳动的数字

00:15:00
00:14:59
00:14:58

那是宙斯盾系统自动计算的拦截倒计时

TAO, ID the bogey.舰长慢慢恢复了脚踩地面的实感思维清晰起来

Sir, track is designated UNK-2025-S757917-Alpha. Launch detected from Florida. Profile matches a Crew Dragon. No squawk, no flight plan—this is an unsanctioned launch. It’s on re-entry, but on an atypical trajectory. Looks like it’s aimed at a specific splashdown point.战术官的声音有些干涩听筒里一并投来 CIC 嘈杂的背景音口令响成一片

A specific point? Where?

Aye, sir. Projected splashdown is in the South China Sea.

舰桥的空气似乎凝固了南海这个词像一枚深水炸弹在每个人的脑海里引爆一枚从美国本土发射未经授权的航天器目的不明即将闯入世界上最敏感的海域

And our orders from the C.O.C.?上校追问

Negative, sir. We’ve pinged PACFLT three times. The only word back is Stand By.

Stand by? 舰长吼了出来What the hell kind of order is that? The Aegis engagement clock isn’t going to Stand By!

Captain, T-minus ten minutes to intercept window.战术官提醒道他的手指悬停在武器释放按钮上The Aegis recommends autonomous engagement, sir.

上校死死盯着屏幕上那个代表着龙飞船的方框它像一颗流星正一往无前奔向自己的命运

Maintain the firing solution,他最终开口声音决绝NOBODY touches that console until I give the command.

Aye aye, sir! Holding the lock, waiting on your command. Two SM-3s are hot and ready.

前甲板下方两枚标准-3型反导拦截弹开始上电自检红外导引头启动制冷倒计时仍在继续杜威号穿过浓稠的夜色向西驶去前往拦截窗口的最佳位置

菲律宾

巴拉望岛的夜空格外纯净渔夫劳尔收起今天最后的渔网躺在螃蟹船窄小的船舷上准备抽完一根烟就睡下海风带着咸腥的暖意轻抚着他的脸庞

突然东方的天际亮了起来

不是流星流星是一闪而过纤细而优雅而那东西是一团巨大的燃烧的火球拖着长长的不断分裂的尾迹无声地划过天鹅绒般的夜幕火球的颜色在橙红和诡异的翠绿之间变幻那是金属在超高温下熔融汽化的颜色

劳尔惊得坐了起来嘴里的香烟掉进了海水里滋拉一声响

那团大火球在空中解体了像一朵在极致高度绚烂绽放的烟花分裂成几十个上百个更小的火球每一个都拖着自己的火尾组成了一场壮观而诡异的流星雨覆盖了半个天空它们不是坠落更像是燃烧殆尽在抵达海面之前就化作了夜色中最后的余烬

村子里传来几声犬吠但很快又归于平静劳尔怔怔地望向天空直到最后一丝光亮消失他不知道那是什么或许是天上的神明在巡游

他凝视着这场沉默的盛大的史诗般的葬礼划了个十字默默祈祷着明天的渔获

尾声

龙飞船没有留下任何可供辨认的残骸

美国海军联合中国越南菲律宾等多国海军在推算的溅落区域展开了持续数月的搜索最终只找到几块无法确定来源的高度烧蚀的复合材料碎片它们可能来自龙飞船也可能来自任何一颗再入大气的人造卫星

白宫发布了一份语焉不详的声明称 SpaceX 公司在一次无人试验任务中遭遇严重异常导致飞行器失联声明中没有提及埃隆·马斯克的名字此后特朗普总统在任何场合都再未提起过他

埃隆·马斯克就此从世界上消失了

他死了吗死在了那场撕裂天穹的绚烂解体中绝大多数人相信如此

但真相果真如此吗

阴谋论开始在互联网的暗流中滋生有人声称飞船解体是伪造的是马斯克用某种障眼法金蝉脱壳成功抵达了目的地有人言之凿凿说在中国西北的某个秘密科研基地里见到了他一位日本网友自称曾服役于海上自卫队说自己曾任 DDG-179 摩耶号的雷达官他说那个夜晚的确有军舰发射了反卫星导弹但不是杜威号从雷达特征上看那枚导弹甚至根本不是标准-3

最离奇的说法是马斯克压根没去中国而是执行了他的终极计划——龙飞船和早已等候在近地轨道的星舰对接飞往霍曼转移轨道成为那颗红色星球上孤独的创世者

真相被永久封存在了西太平洋数千米深的海底还有一部分在大气层中化为等离子体的烈焰

至于杜威号的舰长 Wexler 上校任务结束后他被调往五角大楼的一个文职岗位多年后官拜海军中将不过Wexler 将军再也没有回到海上他从不谈论那个夜晚的经历认识他的人都说他时常会望着西边的天空一看就是几个小时


  1. OOD当舰长不在舰桥时代为管理舰桥的军官舰长返回舰桥时值更官必须大声喊出口令将指挥权交还舰长 ↩︎

  2. 战术信息中心导弹驱逐舰上综合管理传感器与武器的舱室是驱逐舰的大脑重要性超过舰桥 ↩︎

  3. TAO战术信息中心CIC的主管军官 ↩︎

菲茨杰拉德短篇选译:资助芬尼根

作者F. 司各特·菲茨杰拉德 (1896-1940)

芬尼根和我有同一位文学经纪人负责为我们推销作品虽然我经常在芬尼根刚离开或即将到访时出现在坎农先生的办公室却从未见过他本人我们的出版商也是同一家每当我到那时芬尼根通常刚刚离开从他们提到他的语气中——

芬尼根——

是的芬尼根刚才在这儿

——我隐约感到这位杰出作家的来访并不平静某些话暗示着他离开时带走了什么东西——我猜是手稿是他那些畅销的伟大小说中的一部他带走的是需要做最后润色的部分据说他会反复修改十次以达到那种流畅自然机智幽默的风格而这正是他作品的标志不过我逐渐发现芬尼根的大多数拜访都与钱有关

很遗憾你要走了坎农先生会告诉我芬尼根明天要来然后经过一番若有所思的停顿我恐怕得花些时间陪他

我不知道是他声音里的哪种腔调让我想起曾与一位紧张不安的银行行长谈话当时有报道说迪林杰[1]就在附近他的目光望向远方像是在自言自语

当然他可能会带来一份手稿他正在写一篇小说你知道的还有一部戏剧

他说这话时好像在谈论某个文艺复兴时期的事件有趣但遥远不过紧接着他补充了一句或者也许是篇短篇小说他的眼神变得更有希望了

他应该很有才华吧我说

是的坎农先生振作起来他什么都能做到——只要他下定决心从来没有过这样的人才

我最近没怎么看到他的作品

但他正在努力工作有些杂志社还压着他的稿子呢

压着稿子等什么

为了更合适的时机——等到行情好转的时候持有芬尼根的作品总是一件令人骄傲的事

确实芬尼根的名字就像金子铸成的一样他的职业生涯一开始就光彩夺目尽管后来未能持续保持最初的辉煌但每隔几年他都会重新焕发光彩他是美国文坛上永远被寄予厚望的人——他运用文字的本领着实惊人字句闪耀迸发光彩——他写出的句子段落章节无一不是精工细织的杰作直到我遇到某个可怜的编剧他正试图把芬尼根的一本书改编成逻辑连贯的故事时我才意识到芬尼根也有他的敌人

读起来一切都很美那人厌恶地说但当你把它整理清楚时感觉就像在疯人院待了一周

从坎农先生的办公室出来后我去了第五大道上的出版商那里很快得知芬尼根明天也会来事实上他尚未露面声势已如此浩大以至于我原本打算用来讨论自己作品的午餐会大部分时间都围绕着芬尼根展开我再次感觉到我的东道主乔治·贾格斯先生与其说是在跟我讲话不如说是在自言自语

芬尼根是个伟大的作家他说

毋庸置疑

而且你知道他其实人挺好的

既然我并未质疑这一点我便问是否对此有过疑虑

没有他急忙说只是他最近运气实在太差了——

我同情地摇了摇头我知道跳进半空的游泳池那次真是倒霉透顶

那不是半空的泳池是满的满满的你应该听听芬尼根讲这个故事——他能把它说得让人笑破肚皮他说自己当时状态不好只是从泳池边随便一跳——贾格斯先生用刀叉指着桌子示意然后他看见几个年轻女孩从十五英尺高的跳板上跳下去他说他想到了自己逝去的青春于是也爬上去做了一个漂亮的天鹅跳——但肩膀在空中就断了他有些焦虑地看着我你听说过类似的情况吗比如棒球运动员扔球时脱臼

我一时想不出任何类似的骨科案例

然后他梦呓般继续说道芬尼根不得不在天花板上写作

在天花板上

差不多吧他没有放弃写作——那家伙很有胆量虽然你可能不信他让人做了个什么装置悬挂在天花板上他就仰面躺着在空中写字

我不得不承认这安排确实需要勇气

那影响他的作品了吗我问道你是不是得像读中文那样倒着读他的故事

有一阵子是挺混乱的他承认道但他现在好了我收到了他几封信听起来更像是过去的芬尼根了——充满了活力希望和对未来的计划——

他脸上又露出那种恍惚的神情于是我转而谈论更贴近我内心的话题直到回到他的办公室这个话题才再次浮现——我写下这段文字时不禁脸红因为这涉及到一件我很少做的事偷看别人的电报事情是这样的贾格斯先生在走廊里被人拦住了我走进他的办公室坐下时那封电报就摊开在我面前

有五十块我至少能付打字费理个发买点铅笔生活已难以为继我靠着好消息的梦想苟延残喘急盼 芬尼根

我简直不敢相信自己的眼睛——五十美元而且我恰好知道芬尼根的短篇小说稿费大约是三千美元乔治·贾格斯找到我时我还呆呆地盯着那封电报他看完后眼神惊恐地看着我

我不知道该如何心安理得地这么做他说

我愣了一下环顾四周确认自己还在纽约那个繁荣的出版商办公室里然后我明白了——我误解了电报内容芬尼根要的是五万美元预付款——这样的要求足以让任何出版商措手不及不管对方是谁

就在上周贾格斯沮丧地说我刚给了他一百美元每个季度我的部门都会因此亏损所以我不能再告诉合伙人了我自掏腰包——牺牲一套西装和一双鞋

你是说芬尼根破产了

破产他看着我无声地笑了起来——说实话我不太喜欢他笑的样子我哥哥也有神经质的笑声——但这是题外话过了一会儿他恢复了镇定你不会跟别人说吧其实芬尼根这几年接连遭遇挫折但他现在正在摆脱困境我相信我们会收回每一笔——他试图找个词给他的钱脱口而出这次轮到他急切地转移话题了

别误会芬尼根的事情并没有占据我在纽约的那一整周——但不可避免的是在代理商和出版商的办公室里频繁出入时我还是了解了不少例如两天后我在坎农先生的办公室用电话时不小心接到了他和乔治·贾格斯之间的一段对话这只能算部分偷听因为我只听到了一方的讲话而这总比听到全部好

……但我记得他身体还不错……几个月前他倒是提到过心脏有问题但后来听说好了……哦他还谈到一个手术好像是癌症……嗯我当时真想告诉他我也打算做个手术要是负担得起的话早就做了……不我没说他当时情绪很好我不想打击他他今天开始写一篇新故事还在电话里念了一部分给我听……

……我确实给了他二十五块因为他口袋里一分钱都没有……哦是的我相信他现在没问题了听起来他准备大干一场

我现在完全明白了这两个人已经默默达成了一种默契彼此互相安慰关于芬尼根的事他们在芬尼根身上的投资——对他未来的期望——已经累积到如此巨大的数额以至于芬尼根几乎成了他们的财产他们无法忍受听到任何关于他的负面评价——甚至来自他们自己

我坦率地对坎农先生说如果这个芬尼根是个骗子你不能无休止地给他钱如果他完了那就是完了没有什么可做的你因为他的事推迟了自己的手术而他却在外面跳进半空的游泳池这真是荒谬

泳池是满的坎农耐心地纠正我满满的

不管是满的还是空的我觉得这人就是个麻烦

听着坎农说我马上要和好莱坞通电话与此同时你可以看看这个他把一份手稿扔到我腿上也许它能帮你理解他昨天带来的

那是一篇短篇小说我一开始带着厌恶的心情阅读但不到五分钟我就完全沉浸其中彻底被它吸引并且暗自感叹上帝希望自己也能写出这样的作品当坎农结束电话时我让他等着直到我读完当我抬起头时作为一个身经百战的职业作家我的眼中竟噙满泪水全国任何杂志都会毫不犹豫地将其放在头条发表

不过从来也没有人否认芬尼根会写作

几个月后我再次来到纽约这一次在我的代理商和出版商的办公室里世界似乎变得更加安静稳定终于有了时间谈论我那些认真但缺乏灵感的文学追求去乡下拜访坎农先生或者在夏日夜晚与乔治·贾格斯一起消磨时光彼时纽约的星光垂直而下像闪电般坠入餐厅花园至于芬尼根他远得像是在北极——事实上他确实在那儿他带了一支队伍包括三位布林莫尔学院的人类学家听起来他可能会收集到很多素材他们打算在那里待上几个月如果这件事听起来像是一场有趣的家庭聚会那大概是因为我的嫉妒和偏见

我们都很高兴坎农说这对他是天赐良机他厌倦了这里的生活正需要这样的——这样的——

冰天雪地我补充道

是的冰天雪地他临走前的最后一句话非常符合他的风格无论他写什么都将纯净如雪——会有耀眼的光芒

我可以想象但是告诉我——谁资助的这次旅行上次我来的时候我感觉这人已经破产了

他真的很体面他欠我一些钱我想也欠乔治·贾格斯一点——这个老伪君子他明明很清楚——所以在他离开之前他把大部分人寿保险转让给了我们以防他回不来——毕竟那些旅行很危险

确实危险我说特别是和三个女学生一起去

所以我和贾格斯完全不用担心万一发生什么——就这么简单

保险公司资助了这次旅行吗

他明显不安地动了动

没有事实上当他们知道这笔款项的原因时有点不安乔治·贾格斯和我认为既然他有一个具体计划并且最终会有一本书我们有理由再支持他一步

我不明白我直截了当地说

你不明白他又露出疲惫的眼神好吧我承认我们犹豫过原则上我知道这是错的我过去偶尔会给作者预支小额款项但最近我已经制定了规则禁止这样做——并且一直遵守过去两年里只破例过一次是为一个处境艰难的女作家——玛格丽特·特拉希尔你认识她吗顺便说一句她是芬尼根的老相好

请记住我甚至不认识芬尼根

说得对等他回来你一定要见见他——如果他还回得来的话你会喜欢他的——他魅力十足

我再次离开纽约前往我内心想象中的北极时光流转夏天和秋天悄然过去十一月第一丝寒意沁入空气我带着一丝寒颤想起了芬尼根的探险队所有对他的嫉妒都消失了他带回来的任何战利品无论是文学上的还是人类学上的大概都是他应得的然而当我回到纽约不到三天时我从报纸上读到他和几位团队成员在食物耗尽后走入了一场暴风雪北极又吞噬了新的牺牲者

我为他感到难过但也很庆幸坎农和贾格斯得到了妥善保护当然芬尼根尸骨未寒——如果这样的比喻不算太过悲惨——他们并没有谈论此事但我了解到保险公司已经放弃了人身保护令[2]或他们行话里的类似条款看来他们拿到赔偿金是板上钉钉的事了

他的儿子一个英俊的小伙子在我待在乔治·贾格斯办公室时走了进来从他身上我能猜到芬尼根的魅力所在——一种羞涩的坦率伴随着一种印象他内心正进行着一场非常安静而勇敢的战斗他无法完全说出口——但在他的作品中却像热烈的闪电般显现出来
这孩子也写得很好乔治在他离开后说他带来了一些出色的诗他还没准备好接替他父亲的位置但绝对有前途

我能看看他的作品吗

当然这是他刚留下的

乔治从桌上拿起一张纸打开清了清嗓子然后他眯起眼睛稍微弯下腰坐在椅子上

亲爱的贾格斯先生他开始读我不愿当面跟您提这个请求——他停了下来眼睛迅速扫视着后面的内容

他要多少我问

他叹了口气

从他给我的印象我还以为这是他的作品他痛苦地说

但这就是他的作品啊我安慰他当然他还不太能接替他父亲的位置

我后来很后悔说了这话毕竟芬尼根已经还清了他的债务而且能活着真好现在好时光又回来了书也不再被视为不必要的奢侈品许多我认识的作家在大萧条期间勉强维生如今终于实现了长期推迟的旅行还清了抵押贷款或者创作出了只有在一定的闲暇和安全感下才能完成的更为精致的作品我刚刚收到了一千美元的好莱坞预付款准备带着旧日的激情飞往西海岸那时候家家锅里有鸡吃[3]我去找坎农告别顺便领这笔钱很高兴发现他也从中受益——他邀请我去看一艘他打算买的摩托艇

但最后一刻有些事情耽搁了他我等得不耐烦决定先走一步敲了几次门没人回应我干脆推开了他办公室的门

里面的办公室显得有些混乱坎农先生同时接了好几个电话正在向速记员口述关于保险公司的事务一个秘书正匆忙戴上帽子穿上外套像是要去执行任务另一个则在数着钱包里的钞票

只要一分钟坎农说只是办公室里有点小骚动——你从未见过我们这样

是芬尼根的保险吗我忍不住问它失效了

他的保险——哦完全有效完全没问题这只是为了尽快筹集几百块钱银行关门了我们都在凑份子

我刚拿到你给我的那笔钱我说我去西海岸用不了这么多我抽出两张百元大钞这些够吗

太好了——这简直就是救命钱没关系了卡尔森小姐梅普斯夫人您不用去了

我得走了我说

再等两分钟他恳求道我只需要处理一下这份电报这是个好消息会让你振奋的

那是一封来自奥斯陆的电报——在我开始读之前心里充满了预感

奇迹般安全抵达此地但被当局扣留请电汇四人路费外加两百块我正带回丰硕成果来自死者的问候

——芬尼根

是的这真是个好消息我附和道他一定有很多故事要讲了

他当然会有坎农说卡尔森小姐给那些女孩的家长发电报——最好也通知贾格斯先生

几分钟后当我们走在街上时我看到坎农先生似乎被这突如其来的消息震撼到了陷入了沉思我没有打扰他毕竟我不认识芬尼根也无法全心分享他的喜悦他沉默的情绪一直持续到我们走到摩托艇展的门口就在招牌下他停下脚步抬头望着仿佛第一次意识到我们要去哪里

天哪他说退后一步现在进去也没用了我以为我们要去喝一杯

我们确实去喝了一杯坎农先生仍有些恍惚完全沉浸在巨大的惊喜中——他在掏钱付账时摸索了好久我坚持让我买单

我想他当时整个人都处于迷糊状态他是一个极其细致准确的人可我在他办公室递给他的那两百美元从未出现在他寄给我的账单中不过我相信总有一天我会拿回来因为总有一天芬尼根会再次成功我知道人们会争相阅读他的作品最近我主动调查了一些关于他的传闻发现大多数都是假的就像那半空的游泳池一样虚假那个游泳池其实是满的满满的

到目前为止关于那次极地探险只出了一篇短篇小说是个爱情故事也许这题材没有他预期的那么宏大但电影界对他感兴趣——如果他们能先好好观察他一番我有充分的理由相信他会挺过去的他最好能挺过去

发表于时尚先生Esquire杂志
1938 年 1 月


  1. Dillinger著名银行劫匪 ↩︎

  2. Habeas Corpus法律概念指要求将某人带至法庭以判断其拘留是否合法的法律程序或令状 ↩︎

  3. A chicken in every pot, a car in every garage. 美国前总统胡佛在 1928 年的竞选口号 ↩︎

无声的咆哮

突然雷达屏幕上所有目标都消失了

时间一分一秒地过去屏幕刷新了一次又一次却始终毫无变化不再出现任何光点平静如水仿佛刚才的嘈杂和骚动只是一场幻觉令人不安的寂静一点一点灌满房间每个人后背都泛起一丝凉意这不寻常大家都明白徐上尉熟悉这种感觉他在美国空军交流的时候见证过那是七年前他刚从陆军官校[1]毕业不久一个万里挑一的机会砸中他飞去内华达州的内利斯空军基地作为学员旁观红旗军演[2]

徐上尉站起身透过窗户向西边望去海天相接的地方被夕阳染成一片眩目的橙红秋水共长天一色只是没有孤鹜除了落霞和秋水徐上尉的眼前只剩一条柔和的地平线空无一物海水慵懒地摇曳着像是要在这个祥和的黄昏沉沉睡去他眯起眼睛把目光集中在晚霞上努力想象着想象他的视线可以穿过云层看到两百多公里外的天空

一幅清晰的画面浮现在徐上尉的脑海中那是一架侧卫家族的战斗机[3]双座型通体涂成浅灰色背朝夕阳安静地拖出一条长长的冷凝航迹与制空挂载的侧卫不同这架战斗机的翼尖挂架没有挂格斗弹取而代之的是两个安装了刀状天线的设备舱同样它的翼下和机腹挂点挂了四个电子对抗吊舱没有中距弹它似乎不屑于炫耀武力就这么平稳而孤高地向东飞着机身边缘闪烁着暖红色的辉光空旷的天幕下它的身影显得犹为孤独或者说那其实是一种目空一切的傲慢忽然它轻轻摆了摆机翼优雅得像是孔雀抖落尾羽上的露水

雷达已经沉默了半个小时或者更久徐上尉收回想象面前的大海和记忆中内华达州的沙漠交织在一起这窒息的静谧这升腾而起的压迫感他太清楚一切的缘由——这是电子战飞机君临战场的征兆在数百公里外三万七千英尺的高空那厚厚的云层背后年轻的君王在活动筋骨它无声地咆哮着昭告天下它的旨意奔腾呼啸传遍秋日的天空传遍这座小岛上每一部雷达和通信终端

Veni Vidi Vici

不知怎的在这种时候徐上尉居然想起了自己在美国的太平日子红旗军演结束后他得到两周假期他飞去洛杉矶租了一辆老款丰田卡罗拉沿着一号公路飞驰饱览加州壮丽的海岸线那是一个同样令人心醉的黄昏红日西斜徐上尉握着方向盘朝左一扭头就能看到海面徐徐浪涛映出夕阳的余晖泛着琥珀色的点点光芒车刚开出 Big Sur 不久极目远眺华灯初上的 Santa Cruz 小城倒映在蒙特雷湾上如同一串闪闪发光的水晶项链车里的电台放着耳熟能详的民谣The Sound of Silence清冷的男声正唱出那句歌词

And no one dared
Disturb the sound of silence

天色渐暗年轻的君王仍在看不见的地方俯视众生咆哮着纵情展露它的威严君王从不亲自持剑它对杀戮毫无兴趣生来只为统治万籁俱寂仅仅因为它命令如此在这个夜晚新王加冕的夜晚属于它的夜晚它定义整片天空的法则无人胆敢忤逆它

这是徐上尉守着雷达的第五年此刻晚霞已经完全消失了天边的云层展现出本来的面目那是深灰色的积雨云厚重地连成一片仿佛正在为电闪雷鸣积蓄能量海面没有一丝风徐上尉长久地眺望云层感到有些喘不过气一定是气压降低的缘故

暴雨将至他想


  1. 中华民国陆军军官学校台湾武装力量培养陆军军官的军事院校校址设在台湾省高雄市前身为黄埔军校 ↩︎

  2. 美国空军举办的先进空战训练演习项目一年三次为期两周于 1975 年 11 月 29 日首次举行汇集了来自美军四个军种以及美国军事盟约国人员演练 ↩︎

  3. 这一段是徐上尉的幻想是一架在开战首日执行全面电磁压制任务的歼 16D 电子战飞机 ↩︎

一些最近很喜欢的俳句

打年初开始各种社交平台随处可见各式各样的俳句无厘头中又透着令人欲罢不能的趣味俳句的创作规则很简单就是三个句子每句的音节按 5-7-5 排列 中文是单音节语言凑音节的难度几乎可以忽略加上俳句本身就是很生活化很随意的体裁进一步降低了网友们参与俳句创作的门槛

一首典型的俳句像是这样

先是五个字

再写七字加五字

这就是俳句

小红书的当代俳句

细读一些作品被网友的智慧深深吸引有些作品完美还原了了松尾芭蕉的细腻和小林一茶的诙谐文学果然是每个人的文学中国人还是太全面了

先看一首松尾芭蕉式的俳句来自小红书用户在课桌上刻下一个草字

春雨大如瓢

奶茶饮半放窗台

半杯变一杯

动态季节元素平和而质朴的语言抓人的剧情我愿称草老师为当代徘圣

再来一首关于猫咪的俳句来自小红书用户老山羊拄拐

路遇小猫咪

呼唤不应好奇怪

是个垃圾袋

写每个人生活中共通的小趣味精准还原俳句的内核山羊老师堪称亚圣

英文俳句

回到稍微严肃一些的话题英语国家对俳句的喜好和追捧非常出乎我意料早在上世纪 60 年代创作英文俳句逐渐在美国文学圈流行开来在俳句运动的参与者中不乏耀眼的名字例如杰克·凯鲁亚克

Snow in my shoe—
Abandoned
Sparrow’s nest.

我很喜欢这首它复刻了日文俳句的神貌用精致的视角关注那些细微的东西同时在语言上不加雕琢仿佛一个缓慢的拉镜头用空镜诉说着细腻的故事

类似的还有佩妮·哈伍德Penny Harwood

First autumn morning:
the mirror remains fogged
with her absence.

也许是文化和民族性格的原因英文俳句占比更大的是另一种风格相比日文俳句见微知著的素雅英文俳句似乎偏好更宏大更瑰丽的意境我很喜欢其中两首后文附上个人拙译尽力用 5-7-5 的汉字重现原作的氛围

第一首出自美国黑人作家理查德·赖特Richard Wright

Whitecaps on the bay:
A broken signboard banging
In the April wind.

我的翻译

白浪覆海湾

听斑驳标牌响彻

料峭四月风

这首的意象很具体大体上是一个推镜头的描写动态也很简单通过排列组合这些基础元素塑造一幅早春的画面翻译过来几乎没有损失

第二首出自英国诗人詹姆斯·柯克普James Kirkup

In the amber dusk
Each island dreams its own night
The sea swarms with gold.

这首太过绝妙尤其是第二句带着迪士尼动画般的梦幻与美好还有詹姆斯·乔伊斯式的想象力我看到它立刻想到了卡尔维诺说的一切故事的原点

我很想把它翻译成中文我确实尽力尝试了但结果实在难以令我满意我把草稿放在这里盼望看到更好的译文

琥珀暮光下

星罗岛屿渐入梦

海涛点点金

隐含波动率与有效场论

BSM 期权定价模型用几何布朗运动GBM刻画标的资产的价格变化其噪声项 $W$ 是维纳过程事实上没有体现市场的长尾特性 [1]看起来 BSM 只是一个理想模型

$$dS = \mu S dt + \sigma S dW $$

在金融实践中我们往往直接将期权的价格代入 BSM反向求解出波动率对不同的期限 $T$ 和行权价 $K$我们都可以求得一个波动率称之为隐含波动率Implied Volatility, IV对于市场上所有合约隐含波动率构成一张曲面 $\sigma(K, T)$

$$C = S_0 N(d_1) - K e^{-rT} N(d_2) $$
$$d_1 = \frac{\ln \frac{S_0}{K} + \left( r + \frac{\sigma^2}{2} \right) T}{\sigma \sqrt{T}} $$
$$d_2 = d_1 - \sigma \sqrt{T} $$

因为噪声的影响将原始价格数据中反求的 IV 直接插值为曲面不是一个好主意我们不妨先把来自不同合约的 $(\sigma_i, K_i, T_i)$ 视作零散的数据点从最大后验概率估计MAP的视角下理解这个问题波动率曲面应该是某种意义上的平均或者说平滑同时满足一些约束条件金融直觉告诉我们约束中理所应当要包括无套利条件其次我还希望曲面是光滑的有了这些约束条件我们就可以把数据点代进来解一个优化问题最后得到一张波动率曲面Volatility Surface它是一切期权交易者的生命

波动率曲面

现在我们思考一个本质问题固定波动率的 BSM 显然无法捕捉市场的长尾特性这个硬算的波动率曲面来自 BSM却又不符合 BSM 的基本假设那么它到底是什么它捕捉到了什么超越 BSM 的信息

想想看我们从一个错误的模型中再做一次错误的处理最后得到了某个看起来或许是某种平均的可观测量我们希望依赖这个似是而非的可观测量洞察到真实的市场现象这可能吗

为了回答这些问题我们把目光投向一些超越 BSM 的模型例如 Merton这位是 BSM 中的 M是的还是他的扩散跳跃模型[2]既然维纳过程没法建模长尾那我们干脆加入一个随机的泊松跳跃接着我们可以推导出一个修正后的伊藤公式[3]得到扩散跳跃模型下的微分方程最后得到定价公式最妙的事情来了Merton 模型的定价可以看作若干 BSM 定价的加权和

理一理Merton 跳跃扩散模型的表达能力确实比 BSM 强但似乎并没有强很多长尾不是什么天堑我们甚至可以简单地利用 BSM 的线性组合来建模市场的长尾特征沿着这个思路提出问题BSM 要加上哪些额外的信息才能获得与 Merton 跳跃扩散模型同等的表达能力当然就是加权和的权重

写到这里也许有读者已经看明白了事实上波动率曲面就提供了这些额外的信息它把短时程的跳跃平均成长时程的扩散得到了一个有效波动率Effective Volatility

我似乎已经回答了波动率曲面是什么的问题但还没有解释为什么这种错两次的方法可行

高能物理中早就出现过类似的事情也就是错两次有一个低能标大尺度的模型要求得系统的某些性质我们必须遍历所有的尺度求和然而直接求和的时候致命的问题出现了——这个代表系统某些性质的物理量居然会发散聪明或者说绝望的物理学家们又发现如果我们不遍历所有的尺度而是在求和中截掉那些模型并没有覆盖到的尺度同时调整模型的某些参数最终奇迹般地得到一个正确的结果

简单地说低能标的模型并没有关于高能标细节的知识这是第一个错误截断到一个特定的尺度更没有道理这是第二个错误两个错误加起来却得到了正确的结果

后来的物理学家用重整化群理论描述了这个惊人的现象物理学家们认识到场论永远都是一种有效理论Effective Theory[4]在一个具体的有效理论下一方面我们永远无法知道高能标的细节无法对高能标下的现象做出任何预言但另一方面也是最激动人心的地方我们并不是什么都不能做有效理论允许我们把高能标的细节——那些我们并不知晓的细节——平均到低能标的某些参数下然后做出当前能标下有效的预言

回到 BSM 和 Merton 扩散跳跃模型波动率曲面可以视作一组被重整的参数它反映了小尺度的扩散跳跃过程在大尺度上的平均作用有效理论的又一次胜利为之欢呼吧

不想写了就这么结束感觉要说的点都提到了


  1. 面对黑天鹅事件你和你的模型一样可笑😅 ↩︎

  2. Merton R C. Option pricing when underlying stock returns are discontinuous[J]. Journal of financial economics, 1976, 3(1-2): 125-144. ↩︎

  3. Ito-Levy 公式但 Merton 的原始论文中并没有这么做他直接近似处理了泊松跳跃的效应 ↩︎

  4. 有效理论是一个非常大的主题背后蕴含着深刻的物理和哲学思想这种思想帮助人类认识并理解任何层次化的复杂系统举例而言电动力学是量子电动力学的低能有效场论几何光学是电动力学的低能有效场论更进一步计算机图形学又是几何光学的大尺度有效理论在图形学中我们通过微表面假设把光与环境的相互作用平均到 BRDF 上然后用 roughness mapnormal map 等被重整的参数描述整个系统在这个例子里BRDF 就是有效模型各种贴图是有效参数光通量类似哈密顿量或是配分函数这个主题很有意思我打算专门写写 ↩︎

市场的终点

有一个思考了一段时间的问题我没法三言两语把题干说明白所以先提一些基本概念

理论上说市场竞争总会把价格推向平衡点在一个信息充分传播市场参与者充分理性的前提条件下市场应该是有效的即当前资产的一切信息都已经体现在价格里无论加入其他任何信息集都无法对未来价格做出有效的预测

金融实践上市场远不是有效的否则一切利用市场波动的套利策略都将不复存在如果我们仿照平衡态统计物理的术语把新信息出现到市场作出响应并达到有效平衡点花费的时间称为弛豫时间股票市场的弛豫时间至少在分钟级以上

但是我是说但是对于任何市场参与者只要通过投机行为获利事实上都在把市场推向更有效例如高频交易者专门捕捉极小时间尺度下的市场失效并从中获利也就是在弛豫时间内获利每一个获利的高频交易者都在帮助市场缩小弛豫时间每个时间尺度下的策略容量都是有限的先是那匹从滑铁卢赶回伦敦的快马然后是电报再后来是那些光纤直连华尔街的交易服务器容量一点一点被吃掉而市场也变得越来越有效直到今天我们甚至可以宣布股票市场几乎是弱式有效的技术分析的价值在一天天下降

囿于过去几十年人工智能技术的发展——主要是表示学习representation learning——计算机在过去并不能接收并理解市场上的全部信息场内交易数据是完全结构化的因此计算机首先开发了基于场内数据的策略随着充分竞争最终这类策略的容量完全被消耗殆尽市场在有金融意义的时间尺度下几乎进入弱式有效

然而人工智能技术在发展transformer 出现后以及自监督学习出现后表示学习几乎已经发展到了终点今天的计算机可以用一套固化的流程理解几乎是任何模态的数据

沿着这个视角我们先考虑这样的简单情形如果计算机可以理解非结构化的文本数据那就意味着任何政策财报研报新闻舆情即所有的基本面和消息面信息都能被计算机理解作为某个交易模型的输入很快这些策略的容量也会被计算机抢占一空此时市场进入半强式有效

再进一步如果最终计算机可以直接接收并理解来自工厂物流仓库销售的所有信息市场将进入强式有效

想想看那是多么美妙多么无聊的图景市场变得完全有效一切资产的定价都无比正确整个市场不再需要人的参与我们生活在一个由计算机自动定价的世界

早就有人说过在一个充分有效的市场下任何主动买卖策略都没有意义盈利的数学期望都有基线保持一致因此买指数和 ETF 就足够了

一个最终不需要人参与的完美市场难道这就是资本主义的结局吗

始于亨利·詹姆斯的现代恐怖故事

伍尔夫的爸爸曾经当过亨利·詹姆斯的编辑伍尔夫一家人经常在客厅里听詹姆斯说那些华丽又晦涩的长句子关系非常好今天看到了一段伍尔夫写的评论关于亨利·詹姆斯写的恐怖故事

亨利·詹姆斯笔下的鬼魂与古老的暴力鬼魂——血迹斑斑的船长白马阴暗小巷和狂风中的无头女士——毫无共同之处它们起源于我们自身每当重要的事物超出我们的表达能力每当普通的事物被奇怪的事物包围它们就会出现那些残留的令人费解的事物那些挥之不去的令人恐惧的事物——这些都是他所捕捉体现的情感并使之成为一种安慰和陪伴

原来现代恐怖故事是从詹姆斯开始的布莱克伍德洛夫克拉夫特以及其他一切展现不可名状的恐怖的尝试都源自詹姆斯

笛安和福克纳

昨天和家属聊天猛然想起来高中读过笛安的书应该是告别天堂当时就爱死了这种时间和人物交错的多线叙事那本告别天堂应该是班上一位女同学的书我那时候很喜欢当然我是说那本书我大概读了三四遍然后把书还回去了此后过了很长时间十年甚至更久我再也没有读过笛安的书虽然我后来知道她慢慢出版了龙城三部曲草草浏览一下却总觉得找不到当年的兴致

今年我读了福克纳我弥留之际喧哗与骚动我隐隐觉得似乎在哪里见过这种叙事技巧文章的结构也有种难言的熟悉像是一个素未谋面的人你第一眼看到他的脸心里立刻涌起一个念头潜意识告诉你他是你的老朋友你此前已经在千万个场合接触过他的一切只是你自己都没意识到好吧也许福克纳发明的技术潜移默化影响了每一本后世的小说或许是我读过的或许我没读过——我这样解释这种奇妙的熟悉感

早上坐地铁回创新港一路上找来笛安的访谈读了读原来如此谜底揭晓笛安的爸爸就是作家而他最喜欢的作家是福克纳甚至写过一本像我弥留之际致敬的作品无风之树高中时候笛安受父亲的影响读了很多福克纳照这么说她第一部长篇小说有福克纳的影子也就再正常不过了

细想一下福克纳式的技术把故事拆成属于不同时间与角色碎片倒不是最难的难的是每一个碎片要有自己的声音——福克纳毫无疑问做到了而笛安大概做得不够好告别天堂的四个叙事者其实只有两种声音