我正在寻找 C++ 开源库(或只是开源 Unix 工具)来做:Equality test on Equations。
方程可以在运行时构建为 AST 树、字符串或其他格式。
方程大多是简单的代数方程,带有一些关于未知函数的假设。域,将是整数算术(没有浮点问题,因为相关问题是众所周知的 - 感谢@hardmath 强调它,我假设它是已知的)。
示例:输入可能包含 function phi
,并带有关于它的假设(大多数情况)phi(x,y)=phi(y,x)
并尝试解决:
equality_test( phi( (a+1)*(a+1) , a+b ) = phi( b+a, a*a + 2a + 1 )
它可以是模糊的或任何相等测试 - 我的意思是,它不必总是成功(即使方程相等,它也可能返回“假”)。
phi
如果支持上述关于函数的假设存在问题,我可以处理这个问题,所以也欢迎简单的线性代数方程等式测试人员。
- 你能推荐一些 C/C++ 编程库或 Unix 工具吗?(开源)
- 如果可能的话,你能否附上一些例子,在给定的库/工具中,这样的平等测试可能是什么样子的?
PS如果这样的equal_test可以(在成功的情况下)返回同构 - (我的意思是一种“映射”) - 在两个给定的方程之间,将非常受欢迎。但是没有这种能力的工具也很受欢迎。
PS“模糊测试器”是指内部方程求解器在寻找两个函数的“同构”方面将是“模糊的”,而不是在针对随机输入的测试方面 - 我可以实现这个,当然,但我尝试找到更精确的东西。
PPS 还有另一个问题,为什么我需要更好的性能解决方案,而不是蛮力“所有输入测试”。上面的方程是我内部问题的简化形式,我没有方程中的变量之间的映射。也就是说,我有eq1=phi( (a+1)*(a+1) , a+b )
和eq2=phi( l+k, k*k + 2k + 1 )
,我必须找出那个a==k
和b==l
。但是这个子问题我可以用“蛮力”方法(甚至这种方法的渐近复杂度)来处理,如果只有几个变量,让它是 8。所以我需要为每个可能的映射做这个 equation_test。如果有一个工具可以完成整个工作,我将非常感激,并且可以为这样的项目做出贡献。但我不需要这样的功能,只需 equation_test() 就足够了,我可以轻松处理休息。
把它们加起来:
- equal_test() 只是我必须解决的许多子问题之一,因此计算复杂性很重要。
- 它不必是 100% 可靠的,但比仅使用一些随机输入和变量映射测试方程的可能性更高:)。
- “是”或“否”的输出(所有附加信息可能有用,但在未来,在这个阶段我需要“是”/“否”)