跳转至

关于计算、逻辑与宇宙的杂记

“万物皆数,数即万物。” —— 毕达哥拉斯(相传)

这篇文章是我随手记录的一些思考碎片,涵盖编程语言的设计、数学中的悖论、物理学中的对称性,以及它们之间奇妙的联系。内容零散,不成体系,但或许能引发一些有趣的联想。


1. 编程语言中的“类型”与数学中的“集合”

类型系统是编程语言的核心组成部分。从数学角度看,一个类型可以看作一个集合——它包含了所有可能的取值。例如,布尔类型 bool 对应集合 {True, False},整数类型 int 对应全体整数集合

1.1 函数类型与映射

在类型理论中,函数类型 A -> B 表示从类型 AB映射。这与数学中的函数概念如出一辙。例如,在 Haskell 中:

Haskell
add :: Int -> Int -> Int
add x y = x + y

这个签名表示 add 是一个接受两个整数并返回一个整数的函数。在集合论中,这相当于一个从 ℤ × ℤ 的映射。

1.2 类型安全与逻辑证明

有趣的是,类型安全 可以看作是一种逻辑证明。Curry-Howard 同构指出,类型与逻辑命题、程序与证明之间存在一一对应关系。一个类型良好的程序,本质上就是其类型对应的逻辑命题的一个构造性证明。

Python
# 一个简单的 Python 函数,类型提示表明它接受 int 返回 str
def int_to_str(n: int) -> str:
    return str(n)

在类型理论中,这个函数的存在就证明了命题“对于任意整数,存在一个对应的字符串”。


2. 数学中的无限与计算的可判定性

2.1 可数无限与不可数无限

康托尔证明了实数的数量比自然数要多,即 |ℝ| > |ℕ|。这引发了关于无限大小的深刻思考。在计算机科学中,我们处理的通常都是可数无限的集合(如所有可能的程序、所有可能的字符串),但实数这样的不可数集则无法在计算机中完全表示。

Python
# 我们可以列举自然数,但无法列举实数
for i in range(1, 1000000):  # 只能列举有限个
    print(i)

2.2 停机问题与哥德尔不完备定理

图灵的停机问题证明了不存在一个算法能判断任意程序是否会停止。这与哥德尔的不完备定理有着深刻的联系——两者都揭示了形式系统的内在局限性

哥德尔不完备定理的直观理解

任何足够强大的形式系统,要么是不完备的(存在无法证明也无法证伪的命题),要么是不一致的(能推出矛盾)。这与图灵停机问题的“不可判定性”如出一辙,共同指向了形式推理的边界。


3. 物理学中的对称性与守恒律

3.1 诺特定理

德国数学家艾米·诺特(Emmy Noether)证明了:每一种连续对称性都对应一个守恒量。例如:

对称性 守恒量
时间平移对称性 能量守恒
空间平移对称性 动量守恒
旋转对称性 角动量守恒

这个定理揭示了物理定律背后的深刻美学——自然界之所以表现出某些不变性,恰恰是因为它们遵循了更深层的对称性。

3.2 爱因斯坦场方程

广义相对论的核心方程如下:

\[ G_{\mu\nu} + \Lambda g_{\mu\nu} = \frac{8\pi G}{c^4} T_{\mu\nu} \]

其中 \(G_{\mu\nu}\) 是爱因斯坦张量,\(\Lambda\) 是宇宙学常数,\(T_{\mu\nu}\) 是能量-动量张量。这个方程告诉我们:时空的几何结构由其中的物质分布决定

一个有趣的类比

这有点像编程中的“上下文”——数据(物质)决定了程序的行为(时空曲率),而程序的行为又反过来影响数据如何被处理。


4. 算法与自然的相似性

4.1 分形与递归

自然界中充满了分形结构,如雪花、海岸线、树冠等。这些结构往往可以用递归来精确描述。例如,一棵树的树枝分叉模式可以用简单的递归函数模拟:

C
void draw_branch(float length, int depth) {
    if (depth == 0) return;
    draw_line(length);
    rotate(30);
    draw_branch(length * 0.7, depth - 1);
    rotate(-60);
    draw_branch(length * 0.7, depth - 1);
    rotate(30);
}

4.2 进化算法与蒙特卡洛方法

达尔文的自然选择本质上是一个优化算法——在巨大的搜索空间中寻找适应度更高的个体。与此类似,蒙特卡洛方法通过随机采样来近似复杂问题的解,这在物理模拟和机器学习中广泛应用。

Python
import random

def monte_carlo_pi(n_samples):
    inside = 0
    for _ in range(n_samples):
        x, y = random.random(), random.random()
        if x*x + y*y <= 1:
            inside += 1
    return 4 * inside / n_samples

print(monte_carlo_pi(1000000))  # 近似 π

5. 关于写作与思考的杂感

5.1 为什么需要记录?

记录思考碎片有助于梳理混沌的思路。写作即思考,将模糊的想法形诸文字,往往能让逻辑更清晰。尤其是在跨学科领域,随手记录能帮助我们发现不同领域间的隐秘关联。

5.2 这个博客的定位

正如博客名所示,这是一个杂集——它不追求系统性,但求真实与有趣。内容涵盖:

  • 编程语言与类型系统
  • 数学中的悖论与证明
  • 物理世界的对称性与守恒律
  • 算法设计与自然现象
  • 偶尔的读书笔记与观影随想

如果你也在跨学科探索,欢迎一起交流。


6. 附录:一些有用的资源

6.1 推荐阅读

  • 《哥德尔、艾舍尔、巴赫》 —— 侯世达(Gödel, Escher, Bach)
  • 《费曼物理学讲义》 —— 理查德·费曼
  • 《计算机程序设计艺术》 —— 高德纳(TAOCP)
  • 《普林斯顿数学指南》 —— 待读

6.2 脚注示例

如果你对 Curry-Howard 同构感兴趣,可以参考1


7. 几个用于测试样式的列表

无序列表

  • 编程语言:Python, Haskell, Rust, C++
  • 数学分支:集合论, 范畴论, 数理逻辑
  • 物理理论:相对论, 量子力学, 统计物理

有序列表

  1. 第一步:提出一个模糊的问题
  2. 第二步:尝试用代码或数学形式化
  3. 第三步:寻找物理或几何直觉
  4. 第四步:重复以上过程,直到理解更清晰

任务列表(Material 支持)

  • 写完这篇文章
  • 测试 Markdown 渲染
  • 添加数学公式支持(MathJax)
  • 配置 Algolia 搜索

8. 代码块测试

Python 代码(带行号)

Python
1
2
3
4
5
6
7
8
def fib(n: int) -> int:
    """返回斐波那契数列的第 n 项(递归版本)"""
    if n <= 1:
        return n
    return fib(n-1) + fib(n-2)

for i in range(10):
    print(f"fib({i}) = {fib(i)}")

Rust 代码

Rust
fn main() {
    let numbers = vec![1, 2, 3, 4, 5];
    let sum: i32 = numbers.iter().sum();
    println!("Sum is {}", sum);
}

带输出的代码块

Bash
$ python3 --version
Python 3.12.4
$ mkdocs --version
mkdocs, version 1.6.0

9. 表格测试

学科 核心对象 基本方法 典型问题
数学 抽象结构(集合、空间、群) 公理化证明 连续统假设、P vs NP
物理 物质与时空 实验与数学建模 暗能量、量子引力
计算机科学 算法与信息 设计与分析 可计算性、复杂性

10. Admonitions 测试(Material 特色)

信息提示

这篇文章纯粹是为了测试样式而生成,内容并无严格论证,请勿当作严谨的学术文章。

注意

数学公式需要启用 MathJax 插件才能正常渲染,否则会显示为纯文本 LaTeX。

潜在风险

阅读此文可能导致你产生学习新领域的冲动,请做好时间管理。

已完成

所有主要样式元素均已覆盖,可以放心提交。


11. 内容标签页测试

Python
print("Hello, World!")
Rust
fn main() {
    println!("Hello, World!");
}
Haskell
main = putStrLn "Hello, World!"

12. 引用与链接

引用自某处:“计算是数学的奴仆,数学是物理的语言,物理是宇宙的诗歌。”(我自己编的)

更多内容可以参考 Material for MkDocs 官方文档我的 GitHub


结语

这篇测试文章到此结束。如果你看到这里,说明你的浏览器滚动条已经走了很远。希望这篇文章能帮你充分体验 Material 主题的排版之美——如果发现任何样式异常,那就是调整 CSS 的好机会了。

祝写博客愉快!✍️


  1. “Curry-Howard Isomorphism” 是逻辑、类型论和计算理论之间的桥梁,其核心思想可以追溯到 1934 年的 Haskell Curry 的工作。