纯数学表达式实现布尔逻辑与条件分支
一年前的奇思妙想(ai让我发的呀):尝试不依赖任何编程语言的控制流(if-else, while),仅使用纯数学公式(四则运算、绝对值、最大值函数),构造出比较完整的布尔逻辑、比较运算和条件分支。
工程无用,纯属逻辑体操。但本质上是现代 AI 可微编程(Differentiable Programming)中“连续函数逼近离散逻辑”的雏形。(ai说的啊,本蒟蒻不懂)
一、基础设定
容差与类型断言
nucha = 0.01 // 容差变量(Epsilon)(我真会起名)· bool:表示结果为布尔值的标识前缀。
· j(表达式):类型断言占位符。无具体数学意义,仅表示括号内表达式的结果必须是 bool 类型(0 或 1)。
二、核心工具函数
- 阶跃前置函数(ReLU 原型)
几乎所有判断都要基于此函数开始:
q(a,b) = \frac{(a-b) + |a-b|}{2}· 逻辑解析:如果 a > b,则结果为 a-b;否则为 0。这本质上是深度学习中大名鼎鼎的 ReLU 函数 ReLU(a-b)。
- 求最大值
max(a,b) = q(a,b) + b· 逻辑解析:如果 a > b,则 q(a,b) + b = a;否则 0 + b = b。如果相等,则返回 a。
三、布尔逻辑门
- 非门 (NOT)
bool not a = j(|a-1|)· 逻辑解析:输入 0 变 1,输入 1 变 0。通过绝对值实现逻辑翻转。
- 或门 (OR)
bool a || b = j(max(a,b))- 与门 (AND)
bool a && b = j(a * b)四、归零函数 (归一化核心)
bool h(a) = not { (1 / nucha) * [max(-|a| + nucha, 0)] }· 设计目标:0 变 0,非 0(外部值)变 1。
· 实际表现:其余值小于 nucha 时为 0,大于 nucha 时快速逼近 1。
· 已知缺陷(精度问题):
由于计算机浮点数下溢(Underflow)以及连续代数的限制,0.000…1(极小非零值)代入时会被直接截断为 0,导致归一化崩溃。在纯数学上这应该是“连续逼近离散”的必然妥协,无法在无阈值的情况下实现绝对阶跃。
五、比较运算符
利用归零函数 h(a) 处理 q(a,b) 的结果:
- 大于 (Greater Than)
bool a > b = h(q(a,b))· 逻辑解析:如果 a > b,则 q(a,b) > 0,经 h 归一化输出 1;否则 q(a,b) = 0,输出 0。
- 小于 (Less Than)
bool a < b = b > a- 等于 (Equals)
bool a == b = not(a > b) && not(b > a)· 逻辑解析:既不是大于,也不是小于,即相等。(注:原笔记中写的是 not(a>b)&¬(a>b),此处修正为逻辑等价的标准形式 not(a>b)&¬(b>a))
六、条件控制流 (if-else 模拟)
基于 bool 与乘法,实现无分支编程(Branchless Programming):
if (bool) { ab; } z = (bool) * (ab)· 逻辑解析:若条件为真 (1),则 z = 1 \times ab = ab;若条件为假 (0),则 z = 0 \times ab = 0。以此实现条件分支的数学表达。
备注:这套体系证明了,在不使用任何控制流语法的前提下,纯粹依靠四则运算和绝对值,依然可以搭建出比较完整的图灵完备逻辑体系。
--- (deepseek优化语音组织,我只是个非常弱的蒟蒻)