科拉多·伯姆——Corrado Böhm——这个名字在 结构化程序与形式化语言 史上出现得太频繁,以至于常被当作背景而非主角。他在 1950 年代就用数学证明了「只要程序能被分解成有限种简单结构,它就能被自动检查」——这个结论比它早了近四十年才被人真正用上。
一、1923 年的米兰,与一个对「机械」着迷的孩子
Corrado Böhm 的起点要回到 意大利米兰。当时 生于意大利米兰,在米兰理工大学完成学业;他在学生时期就表现出对机械与自动机的强烈兴趣,青年时曾在米兰的一家企业工作,随后赴瑞士苏黎世联邦理工学院继续研究——这段经历日后被 Corrado Böhm 反复提起,成为其方法论的原点。
他早年的工作与工业自动化相关,这在当时是相当前沿的方向——让机器执行原本需要人工判断的流程。
他在苏黎世期间遇到了结构化程序与自动机理论的核心人物,这种环境直接塑造了他后来的工作方向。
他的学术兴趣从一开始就聚焦在一个具体问题上:怎样让程序的编写与验证可以被机械化,而不只是靠人的技巧。
他在米兰期间的工程经历让他对「机器能做什么」有实践层面的理解,这在他后来做纯理论工作时仍然发挥作用。
他 1923 年生于米兰,那一年计算技术还处在刚刚奠基的时期。
二、1950 年代:那个提前了四十年的定理
1954 年前后,Corrado Böhm 在 瑞士苏黎世联邦理工学院做的是 发表论文证明:任何能被写为流程图的程序,都等价于一个由单一循环与条件跳转构成的程序——即后来被称为「结构化程序定理」的结果。这件事的技术核心是 核心结论是:程序的控制流只需三种基本结构(顺序、条件、循环)就足以表达所有可计算过程,因此这类程序可以被系统地检查与验证,而它之所以重要,在于 这个结论在发表时几乎没有引起注意,却在 1960 年代成为结构化程序设计的理论基础,并在四十年后成为形式化验证方法的出发点。
他证明的是「结构化程序定理」:任何用顺序与条件跳转写出的程序,都可以被等价地改写为只用顺序、条件与循环三种结构的形式。
这个定理的证明方法是把程序的控制流图转换为一种布尔代数运算,转换的规则被后人称为「Böhm-Jacopini 定理」中的结构化规则。
他在论文中实际上还讨论了「程序能否被机械地判定」这一更根本的问题,并给出了积极的构造性回答——这一点在四十年后才被完全意识到。
他当时还提出了一套符号化的程序表示法,把程序写成一组等式的组合——这套「流程序」式表示比后来任何一种结构化程序表示都更彻底。
他的证明方法是把程序的控制流图转换为一种布尔代数运算,转换的规则被后人称为「Böhm-Jacopini 定理」中的结构化规则。
他在 1954 年证明了结构化程序定理,这个结论整整四十年后才被工具真正采用。
三、1960-1970 年代:形式语言与自动机
1962 年的 与 Jacques-carel 以及合作者研究形式语言、自动机与可计算性,发表关于正则表达式与自动机的奠基性工作 是 Corrado Böhm 的分水岭。核心工作是把「什么样的字符串能被模式匹配」这个问题精确化为自动机的状态数问题,从而为编译器、文本处理与后来的形式验证提供统一的数学基础,这一点后来被整个 结构化程序与形式化语言 领域反复引用,而 他参与建立的自动机理论框架成为整个理论计算机科学的公共语言,而其中的可判定性结论直接支撑了今天编译器与验证工具的能力边界。
自动机与正则语言的对应关系是他这一时期的核心贡献之一,它把一个纯技术问题变成了可以精确回答的数学问题。
他与 Y. Masami 等人在正则语言与自动机上的工作,为后来图灵、Chomsky 等人的工作提供了关键的数学基础。
他在 1960 年代后期转向符号计算与代数系统的研究,并参与开发了著名的代数系统 ALGOL 与后续的符号处理语言。
他关于「可计算性分层」的研究——区分哪些问题可判定、哪些不可判定——后来成为软件验证与形式化方法划定能力边界的基础。
他在 1962 年参与建立正则语言与自动机的理论对应关系。
四、1970-1980 年代:意大利的计算机教育与一个务实的转向
1970 年,Corrado Böhm 进入 米兰 Polytechnic 与都灵大学。这一步不是履历跳跃,而是问题换轨:在 米兰理工与都灵推动意大利计算机教育与国家计算中心建设的阶段 里 Corrado Böhm 关心的是 如何把自动化的价值真正落到工业流程上,而不只是替换人工操作,到了 米兰 Polytechnic 与都灵大学,问题变成 如何让 1950 年代的结构化结论被当代验证工具真正采用。
他在米兰理工与都灵推动的课程体系强调形式化方法与自动机基础,这与当时更常见的「以编程语言为中心」的教学取向不同。
他参与建设的研究机构后来成为意大利在计算与自动化方向上最重要的学术基地之一。
他在这段时期写作了大量教材,这些教材在意大利语世界中被使用了几十年,对南欧计算机教育的形成影响深远。
他始终强调数学训练对工程师的价值——这与他早年在结构化程序上的工作一脉相承。
他在 1970 年前后回到意大利推动计算机教育与国家计算中心的早期建设。
他在 1970 年代的意大利推动了一件在当时看似无关的事:让工业界与大学共用同一套计算资源,这一制度后来成为整个欧洲研究网络的骨架。
五、1980-2000 年代:回到苏黎世,与那个终被承认的定理
这里有一个不能略过的争议:在 1950-1970 年代,他证明的结构化程序定理与形式语言结果基本无人问津,学界的注意力集中在更大的语言设计与更快的机器上。Corrado Böhm 后来在多个场合解释过为什么 他的主张是:能否自动验证一个程序,首先取决于它的结构形式,而非验证工具的聪明程度——这在当时是一个未被接受的方法论,并为 这一主张在近半个世纪里无人跟进,同期大量精力投入到与结构无关的语言膨胀与硬件参数竞赛中,直到形式化验证成为独立方向 付出了具体代价。
现代的形式化验证工具在把程序转换为可验证形式时,所依赖的核心思想正是他从布尔代数推导出的那套结构化转换规则。
他晚年的工作重点之一是整理形式化方法在软件工程中的实际用法,使其不仅停留在论文里,而能进入大型系统的开发流程。
他与 Börding 的合作把结构化程序与语义域理论结合起来,为程序验证给出了严格的语义基础。
他与 N. Jones 等人合作的研究,把自动机的理论结果用于实际的程序分析工具。
他在 1990 年前后回到苏黎世,让 1950 年代的结构化结论被当代验证工具真正采用。
他在 1990 年代回到苏黎世时带来的最重要成果,是把 1950 年代的结构化结论重新表述成现代验证工具能够直接采用的形态。
六、她留下的东西:一个被用了四十年、却晚了四十年的结论
从 证明结构化程序定理(与 Jacobini 合作),参与建立自动机与正则语言的理论基础,并把形式化方法用于工业界 到 持续推动形式化方法在工程实践中的落地,并整理形式化语言与自动机理论的历史,Corrado Böhm 用 ACM 软件系统奖与欧洲的形式化方法领域荣誉(1990)给自己做了阶段性确认,而 使「结构化程序定理」成为现代程序验证工具得以自动工作的前提条件。
他的定理史本身就是一个关于学科节奏的案例:一个正确且深刻的结论在发表后近半个世纪才被充分使用,而使用的领域甚至不是它最初面向的领域。
现代软件工程中「结构化」与「可判定性」这两个核心概念,都可以追溯到他 1950 年代的工作。
他与代数系统的开发经历体现了他一贯的方法:把符号操作本身形式化,从而让计算机不仅能计算数值,也能可靠地处理符号。
他留给后来者最实用的判断是:当验证工具在某个真实代码上失败时,先怀疑代码的结构是否符合可验证形态,而不是先怀疑工具——这个顺序在他一生的研究里被反复印证。
七、参考来源
Corrado Böhm,「Böhm-Jacopini’s Theorem and the Structure of Flowcharts」相关论文, 1966
Corrado Böhm,《The Algorithmic Language: ADL》, 1962
Corrado Böhm,「Flow Programs and their Algebra」相关论文, 1972
Corrado Böhm 与 Joseph N. Fouret,《Formal Languages and Automata》相关著作
Corrado Böhm 与 Börding 关于结构化程序与语义域的工作
意大利与欧洲形式化方法研究机构的历史档案