求解布尔方程(Boolean Equations)的4个高效baseline算法
求解布尔方程(Boolean Equations)是理论计算机中的基本问题之一;事实上,求解 F q \mathbb{F}_q Fq上 n n n个变量的 m m m个非线性多项式方程组是一个基础的数学问题,受到了包括密码学界在内的各个理论计算机研究方向的广泛关注;众所周知,AI领域的计算机视觉和自然语言处理就有许多具体任务(比如人脸识别,语义分割)的baselines(也就是提供参考对比的基线模型/算法),那么自然研究求解布尔方程也有对应的baselines,今天我们就介绍当前最佳的4个高效baseline算法.

布尔方程组求解问题(Boolean PoSSo (polynomial system solving) Problem):给定一组布尔多项式 F \mathcal{F} F:
{ f 1 , f 2 , … , f m } ⊆ R 2 \{f_{1}, f_{2}, \ldots, f_{m}\} \subseteq \mathcal{R}_{2} { f1,f2,…,fm}⊆R2
目标是找到解 ( x 1 , … , x n ) ∈ F 2 n (x_{1}, \ldots, x_{n}) \in \mathbb{F}_{2}^{n} (x1,…,xn)∈F2n 对于 ∀ f i ∈ F \forall f_{i} \in \mathcal{F} ∀fi∈F, 满足 f i ( x 1 , … , x n ) = 0 f_{i}(x_{1}, \ldots, x_{n})=0 fi(x1,…,xn)=0. 其中:
R 2 = F 2 [ x 1 , … , x n ] / ⟨ x 1 2 + x 1 , x 2 2 + x 2 , ⋯ , x n 2 + x n ⟩ \mathcal{R}_{2}=\mathbb{F}_{2}[x_{1}, \ldots, x_{n}] / \langle x_{1}^{2}+x_{1}, x_{2}^{2}+x_{2}, \cdots, x_{n}^{2}+x_{n}\rangle R2=F2[x1,…,xn]/⟨x12+x1,x22+x2,⋯,xn2+xn⟩
它限定了每个变元的取值也在 F 2 \mathbb{F}_{2} F2 上;
算法分类
布尔方程组求解问题和计算机科学里的许多其他 NP-hard 问题都有联系(比如SAT问题,MILP整数规划问题等等);因此求解思路大致分为搜索求解,代数方法求解,问题变换求解三种基本思路,按照这样的划分,本文要介绍以下4种baseline算法:
- BCS算法(Boolean Characteristic Set Algorithm)[1]:基于经典代数消元方法吴消元法的求解算法;
- Groebner基算法[2]:基于多项式理想构造算法Groebner Basis的求解算法(基于SAGE V9.2的Polybori库实现);
- FESLib库(Fast Exhaustive Search Algorithm)[3]:基于分治+解空间搜索的求解算法(复杂度是指数级别 O ( d ⋅ 2 n ) \mathcal{O}(d \cdot 2^n) O(d⋅2n));
- 转SAT算法(Boolean Equations to SAT Algorithm)[4]:将布尔方程组问题转化为等价的SAT问题再使用SAT求解器求解的算法(基于Cryptominisat实现);
在本文中,我们主要侧重实现(所有代码均在Linux下编译实现),理论部分可以详见参考文献(如有需要,我会另外写博客来分别介绍这4篇工作的技术细节部分);
BCS算法(Boolean Characteristic Set Algorithm)
BCS算法 [1] 虽然基于吴消元法计算特征列,但是巧妙利用了布尔多项式的加法特点,克服了原方法里多项式膨胀的问题:
在 R 2 \mathcal{R}_{2} R2 中做拟除 Pesudo-division: 利用多项式 P 1 = I 1 x C + R 1 P_{1}=I_{1} x_{C}+R_{1} P1=I1xC+R1 去消元 P 2 = I 2 x c + R 2 P_{2}=I_{2} x_{c}+R_{2} P2

介绍求解布尔方程的四种高效基线算法:BCS算法、Groebner基算法、转SAT算法及FESLib库,涵盖代数消元、多项式理想构造、问题变换等方法。
最低0.47元/天 解锁文章
659

被折叠的 条评论
为什么被折叠?



