1. notice
  2. 中文
  3. 1. feature
  4. 逻辑
  5. 2. 逻辑
  6. 3. 集合论
  7. 4. 映射
  8. 5. 序
  9. 6. 组合
  10. 微积分
  11. 7. 实数
  12. 8. 数列极限
  13. 9. ℝ^n
  14. 10. Euclidean 空间
  15. 11. Minkowski 空间
  16. 12. 多项式
  17. 13. 解析 (Euclidean)
  18. 14. 解析 (Minkowski)
  19. 15. 解析 struct 的操作
  20. 16. 常微分方程
  21. 17. 体积
  22. 18. 积分
  23. 19. 散度
  24. 20. 网极限
  25. 21. 紧致
  26. 22. 连通
  27. 23. 拓扑 struct 的操作
  28. 24. 指数函数
  29. 25. 角度
  30. 几何
  31. 26. 流形
  32. 27. 度规
  33. 28. 度规的联络
  34. 29. Levi-Civita 导数
  35. 30. 度规的曲率
  36. 31. Einstein 度规
  37. 32. 常截面曲率
  38. 33. simple-symmetric-space
  39. 34. 主丛
  40. 35. 群作用
  41. 36. 球极投影
  42. 37. Hopf 丛
  43. 场论
  44. 38. 非相对论点粒子
  45. 39. 相对论点粒子
  46. 40. 纯量场
  47. 41. 纯量场的守恒流
  48. 42. 非相对论纯量场
  49. 43. 光锥射影
  50. 44. 时空动量的自旋表示
  51. 45. Lorentz 群
  52. 46. 旋量场
  53. 47. 旋量场的守恒流
  54. 48. 电磁场
  55. 49. 张量场的 Laplacian
  56. 50. Einstein 度规
  57. 51. 相互作用
  58. 52. 谐振子量子化
  59. 53. 参考
  60. English
  61. 54. notice
  62. 55. feature
  63. logic-topic
  64. 56. logic
  65. 57. set-theory
  66. 58. map
  67. 59. order
  68. 60. combinatorics
  69. calculus
  70. 61. real-numbers
  71. 62. limit-sequence
  72. 63. ℝ^n
  73. 64. Euclidean-space
  74. 65. Minkowski-space
  75. 66. polynomial
  76. 67. analytic-Euclidean
  77. 68. analytic-Minkowski
  78. 69. analytic-struct-operation
  79. 70. ordinary-differential-equation
  80. 71. volume
  81. 72. integral
  82. 73. divergence
  83. 74. limit-net
  84. 75. compact
  85. 76. connected
  86. 77. topology-struct-operation
  87. 78. exponential
  88. 79. angle
  89. geometry
  90. 80. manifold
  91. 81. metric
  92. 82. metric-connection
  93. 83. geodesic-derivative
  94. 84. curvature-of-metric
  95. 85. Einstein-metric
  96. 86. constant-sectional-curvature
  97. 87. simple-symmetric-space
  98. 88. principal-bundle
  99. 89. group-action
  100. 90. stereographic-projection
  101. 91. Hopf-bundle
  102. field-theory
  103. 92. point-particle-non-relativity
  104. 93. point-particle-relativity
  105. 94. scalar-field
  106. 95. scalar-field-current
  107. 96. scalar-field-non-relativity
  108. 97. projective-lightcone
  109. 98. spacetime-momentum-spinor-representation
  110. 99. Lorentz-group
  111. 100. spinor-field
  112. 101. spinor-field-current
  113. 102. electromagnetic-field
  114. 103. Laplacian-of-tensor-field
  115. 104. Einstein-metric
  116. 105. interaction
  117. 106. harmonic-oscillator-quantization
  118. 107. reference

note-math

命题逻辑

自然语言的例子

命题 (proposition) 真假值 (bool)
人是生物 真, true, 1
铁是生物 假, false, 0

数字电路表示 bool

电路值 bool
高电平 1
低电平 0

这里不处理数字电路的硬件实现. 我也不知道细节

logic-operator_(tag) logical and, or, not

  • 且, ∧, and, 逻辑合取 (conjunction)
  • 或, ∨, or, 逻辑析取 (disjunction)
  • 非, ¬, not, 逻辑反取 (negation)

自然语言的例子

命题 真假值
人是生物且 1 是自然数 1
人是生物且 1 = 2 0

形式语言

𝑝 𝑞 𝑝∧𝑞
1 1 1
1 0 0
0 1 0
0 0 0
𝑝 𝑞 𝑝∨𝑞
1 1 1
1 0 1
0 1 1
0 0 0
𝑝 ¬𝑝
1 0
0 1

∧,∨,¬ 的数字电路和逻辑门 (gate) 的表示

gate 设计为不允许反向电流?

not gate 将低电平转到高电平, 说明 gate 的硬件实现需要外部能量, 需要通电

"冗余性" e.g. 我们可以用 ¬,∧ 表示 ∨

电路 gate 实现是用 not,nand or ¬,(¬∧) 作为开始. 但我觉得保持 ∧,∨ 的对称性是有用的, 认知上或者 negetive dual 上

computability_(tag) 电路的可计算性

可用逻辑门制造任何 {0,1}𝑛→{0,1}𝑚 函数

(image from p.85 of ref-1)

  • {0,1}𝑛 输入的构造

𝑛 条电路 𝐴0,…,𝐴𝑛−1 最多需要 2𝑛 个 and gate 𝑌0,…,𝑌2𝑛−1. 有些函数只需要 2𝑛 输入的一部分, 此时不接一些线

𝑛⇝2𝑛 代表了 {0,1} 值并行电路的 "乘法" 性质

  • {0,1}1 输出的构造

在输入中, 将想要输出到 1 的电线接到 or gate

Example not xor

互斥或, ⊕, xor

𝑝 𝑞 𝑝⊕𝑞
1 1 0
1 0 1
0 1 1
0 0 0
  • {0,1}𝑚 输出的构造. 只需将需要的电线组合接到 𝑚 个 or game

如果函数不需要完整 {0,1}𝑛→{0,1}𝑚, 电路计算元件不一定要按这种固定方式来构建. 可以根据情况, 进一步简化, 减少 gate 数量的使用. 但这里不进入细节

计算单元中多条输入线或输出线的一种符号表示

control-circuit_(tag) 控制电路, 选择器 or 复用器 (multiplexer)

𝑆=0 将 𝐷0 输出到 𝑌, 𝑆=1 将 𝐷1 输出到 𝑌

2𝑛 个输入 𝐷0,…,𝐷2𝑛−1 需要 𝑛 条控制电路 𝑆0,…,𝑆𝑛−1

De-Morgan-law_(tag) negative dual 律 or De Morgan 律

¬(¬𝐴)=𝐴¬(𝐴∧𝐵)=(¬𝐴)∨(¬𝐵)¬(𝐴∨𝐵)=(¬𝐴)∧(¬𝐵)

用穷举证明, 就像人类数数其实也是穷举. 下同

boolean-algebra_(tag)

bool 代数记为 {0,1},+,⋅ 或者 {0,1},∨,∧

bool-distributive-law_(tag) 分配律

(𝐴+𝐵)⋅𝐶=𝐴⋅𝐶+𝐵⋅𝐶 or (𝐴∨𝐵)∧𝐶=(𝐴∧𝐶)∨(𝐵∧𝐶)

其 negative dual

(𝐴⋅𝐵)+𝐶=𝐴⋅𝐶+𝐵⋅𝐶 or (𝐴∧𝐵)∨𝐶=(𝐴∨𝐶)∧(𝐵∨𝐶)

归纳地

⋀𝑖=1..𝑛⋁𝑗=1..𝑚𝐴𝑖𝑗=⋁𝑖=1..𝑛⋀𝑗=1..𝑚𝐴𝑖𝑗

以及 e.g. ⋀𝑖⋁𝑗⋀𝑘𝐴𝑖𝑗𝑘=⋯

bool-commutative-law_(tag) 交换律 𝐴+𝐵=𝐵+𝐴. same for ⋅

bool-associative-law_(tag) 结合律 (𝐴+𝐵)+𝐶=𝐴+(𝐵+𝐶). same for ⋅

periodic-circuit_(tag) 周期电路

由晶体振荡器实现

memory-circuit_(tag) 电路记忆

黑箱模型

可能的实现

  • 使用环电路重用上一个周期的 𝑎,𝑎¯ 的 1/0 值
  • 反相器 (not gate) 确保电流方向并防止 1 衰减 (通过外部能量)
  • 为了将 0 写入已有的 1, 需要在 write¯ 写入 1 得到 𝑎¯=1, 然后反转为 𝑎=0
  • 需要比循环里的电压更高的写入电压来覆盖循环中的先前已有的 1? e.g. 用更高电压 write ¯=1 来覆盖已有的 𝑎=1

finite-machine_(tag) 有限状态机

i/o_(tag) 电路的输入可能来自外界 (e.g. 传感器, 键盘), 电路的输出也可能到达外界 (e.g. 信号灯, 屏幕)

外界输入的节奏通常不一致于计算机内部周期电路的节奏, 因此需要让外界输入先经过同步元件

memory-array_(tag) 内存阵列

二进制, 序, 自然数. Example 23 就是从 000, 001, 010 数到 111 时经过的步数, 虽然这假设了我们能识别三位 bit. 2𝑛=2⋯2⏟𝑛-fold, 101=1⋅22+0⋅21+1⋅20=4+1=5

用多位 bit 包含的自然数范围, 例如 3 bit 的 0,1,…,7 作为参数, 去对应到真实世界的内容. Example 计算机的字符的表示方式 e.g. ASCII, Unicode, 屏幕的发光点位置和颜色

(image modified from wiki media about ASCII)

在实际应用中, 每个地址多个 bit 好于每个地址 1 bit, or 二维内存阵列比一维高效

instruction_(tag) 指令

通常由内存里一个地址中写着的多位 bit 数据来表示某些电路任务

一些常用电路任务

  • 自然数的加法
  • 判断 bit 数据是否满足所需条件
  • 跳转到其它指令的执行

假设一个指令在一个电路周期内完成 (单周期计算机)

Example add 指令. add x_1 x_2. 指令的 bit 数据位分为三个区域, 表示不同类型的信息

  1. 读取 add 指令

    • add 指令在 adress_0 (add x_1 x_2 以及 adress_1, adress 2 来自源代码和编译器的生成)
    • 固定的内存地址 adress_of_instruction 存储的值 adress_0 被读出, add 指令的 index 区的数据被送到控制信号元件 (control unit), 然后计算出控制信号并输出 (细节太多, 见 ref-1)
  2. 执行 add 指令

    • 输出的控制信号输入到内存的控制电路元件, 读出内存的 x_1 in adress_1 和 x_2 in adress_2, 将它们输入到算术元件 (ALU)
    • 根据输出控制信号, 算术元件的输出 x_1 + x_2 被写到 adress_1
  3. 进入和读取下一个周期的指令

    • adress_of_instruction 存储的值 adress_0 被已经设计好的电路送到算术元件, 计算出 adress_0 + 1 i.e. 下一个指令地址, 被写到 adress_of_instruction 里面的数据. adress_0 + 1 将在下一个电路周期被执行

其它指令可能有多于两个的数据区 (非指令 index 区)

指令流

Example loop_(tag) 循环

周期电路的速度远远高过人类速度 (1 GHz = 每秒 10^9 次周期)

高级编程语言的循环

i : int = 0;
while (i < 10) {
i = i + 1;
} // result = 10
  1. 读取指令

    bgt (branch_grater_than) 指令存储在 adress_0. (指令从源代码和编译器生成.) 10 在 bgt 的一个数据区, while loop 需要的指令流数量 3 在 bgt 的另一个数据区

  2. 执行指令

    执行条件判断 𝑖<10

    读出 i 和 10, 在算术元件中比较大小, 根据结果给出控制信号, 结合指令 bgt index 区给出的控制信号

    根据条件判断的结果, 执行不同的任务

    • 𝑖<10 时

    算术元件根据此判断输出控制信号, 将 adress_of_instruction 存储的值改变为下一条指令的地址 adress_0 + 1

    • adress_0 + 1 的指令要执行任务 𝑖new =𝑖 old +1

      用 add 指令计算 i + 1, 写回 adress_1

    • 执行完 add 后, 要回到下一次循环的判断 𝑖<10?

      add 指令的下一条指令是 jump 指令, 执行结果是, 修改 adress_of_instruction 的值为 adress_0, 实现指令的跳转, 进行下一次循环的判断 𝑖<10?

    • 𝑖≥10 时
    算术元件根据此判断, 输出控制信号, 将 adress_of_instruction 存储的值改变为 adress_0 + 3, 跳出 while 循环, 执行后面的指令

compile_(tag) parse_(tag)

用 parser or compiler (编译器) 验证 token 流语言正确性, 本质上是遍历所有语言规则, 或使用生成的有限状态机

parser 的运行需要生成内存中大型复杂的数据结构 (一些形象的描述: 表格, 结点, 树)

如果数据流是高级编程语言源代码, 还可以根据这个数据结构生成指令流. 此时称为 compile (编译), 但 parse 和 compile 经常混用

如果语言规则很复杂, 可以对语言规则进行 (多次) 分类和分解, 先遍历分类, 再遍历分类里面的规则. Example 分开为 "syntax 检查" 和 "semantics 检查"

抽象和 API 的概念的启发性例子: 你周围的物品, 不知道制作原理也能方便地使用, 因为它们是被这样设计的

计算机, 除了周期电路高速的优势, 其它优势有, 内存记忆的容量 (1 GB = 2^(30+3) bit = 8589934592 bit) 和持续性 (通电时间)

它们是证明辅助对人类有用的原因的一部分

内存里可以构造复杂的数据结构和计算函数. 对很多其它领域也可能有用

变量 or 变量名的动机是人类无法记忆那么多地址, 变量名是为了用语义协助人类, 并让计算机将变量名转化为地址, 根据变量在整个程序逻辑的位置

变量 or 变量名使得可以通过地址对内存里面所存储的值进行复用, 而不是一次型