gab*_*b06 2 math symbolic-math
我正在寻找一种简单的方法来为一个数学表达式赋予一个数字,比如介于0和1之间,这表达了表达式的简化程度(完全简化为1).例如:
eval('x+1') 应该返回1.
eval('1+x+1+x+x-5')应该返回一些小于1的值,因为它远非简单(即,它可以进一步简化).
参数eval()可以是字符串或抽象语法树(AST).
我想到的一个简单的想法是计算运算符的数量(?)
编辑:让简单等同于一个系统如何接近一个问题的解决方案.例如,给定代数问题(即极限,导数,积分等),它应该分配一个数字来说明它与解决方案的接近程度.
最接近的比喻我可以想出一个数学教授如何看待一个不完整的问题并进行心理评估,以便说明学生与解决方案有多接近.就像在数学考试中一样,学生没有完成一个价值20分的问题,但教授分配了20分中的8分.为什么他会提出8/20,我们可以编程这样的东西吗?
我将打破堆栈溢出规则并将其作为答案而不是评论发布,因为不仅我很确定答案是你不能(至少不是你想象的那样),而且因为我相信它在一定程度上可以发挥教育作用.
让我们假设可以建立简单的标准(类似于正常形式).在我看来,你非常接近于尝试解决类似于entscheidungsproblem或停止问题.我怀疑在典型代数所需的复杂规则系统中,你可以找到一种方法,对一系列术语缩减的步数(事实上是任意长度的计算)给出正确和明确的答案,而不实际执行它.这样的答案意味着事先知道这样的计算是否可以终止,并且因此与自动定理证明对于能够表示算术的任何足够强大的逻辑是不可判定的问题相矛盾.
在给定的示例中,教师实际上是在心理上执行该计算(逐步执行,应用他自己的规则序列),或者根据他的经验给出估计.但是,没有通用的算法可以保证他的步骤序列是最简单的,也不是他的结果表达式是最简单的(除了琐碎的表达式),因此对解决方案的"距离"的任何量化都是没有意义的.
不是所有这一切都是真的,你的问题会很简单:你知道步骤的数量,你知道你到目前为止采取了多少步骤,你将后者除以前者;-)
现在,返璞归真的标准,我也建议你看一看上希尔伯特的24问题,即专门找了一个"简约,或某些证据的最简单的证明标准." ,以及略微相关的证明压缩.如果你在哲学上倾向于进一步理解这些主题,我建议你阅读经典的哥德尔,埃舍尔,巴赫.
附加说明:要理解为什么,请考虑一个着名的数学人工制品Mandelbrot分形集.通过确定z(n+1) = z(n)^2 + c对于任何特定的方程的解c是否有界来计算每个像素颜色,即,"当复数c开始z(0) = 0并且重复应用迭代时z(n)n,复数是Mandelbrot集的一部分,但是剩余的绝对值是有界的.很大的." 尽管方程非常简单(你知道,将数字平方并求和一个常数),但是如果没有实际执行无限次迭代或者直到找到一个循环,那么绝对没有办法知道它是否会保持有界(忽略复杂的启发式方法) ).在这个意义上,每个分形都有一个粗略的近似,通常使用逃逸时间算法作为启发式,以提供有根据的猜测 解决方案是否有界.