非理性不平等的整数化简

计算科学 计算几何
2021-12-01 06:05:31

我正在从事计算几何的工作,其中算法的鲁棒性很重要。在两个不同的场合,我遇到了一个场景,我比较了两个表达式的数值大小,最终的不等式最终看起来像这样:

A+B<C

在哪里A,BC是整数。我只关心谓词的值。本能地,我尝试对双方进行平方,但当然这并没有消除平方根项。

我的问题。有没有办法只使用整数(计算机)算术来确定这样的谓词的真值?

1个回答

认为a,b,c>0(否则很容易)。检查cb>0, 然后平方a<cb一次得到

c2+ba>2cb.
所以检查一下c2+ba>0(如果不是,那么它是错误的,因为 rhs 是正的,所以 lhs 也必须是这样),然后检查
(c2+ba)2>4bc2.

但是这有一个重要的问题:使用整数运算,您必须防止溢出。例如,当计算c432-bit 整数,这将溢出c256.

顺便说一句,您只需一行 Mathematica 就可以得出最后一个不等式:

GroebnerBasis[{c - u - v, u^2 - a, v^2 - b}, {a, b, c}, {u, v}]

这使:

{a22ab+b22ac22bc2+c4}

在圣人中也是如此:

R.<a,b,c,u,v> = PolynomialRing(QQ, 'a b c u v')
I = R.ideal([c-u-v, u**2-a, v**2-b])
I.elimination_ideal([u,v])

输出

Ideal (c^4 - 2*a*c^2 - 2*b*c^2 + a^2 - 2*a*b + b^2) of \
   Multivariate Polynomial Ring in a, b, c, u, v over Rational Field