如何证明Coq中的整数除法不等式

时间:2019-06-19 19:59:36

标签: coq proof

我需要证明:256 * (x / 256) <= 256 * x / 256,或更笼统地说forall a b c : N, c > 0 -> a * (b / c) <= a * b / c。这是正确的,因为b可以被c整除并且它们相等或不相等,并且先相乘可以使数字膨胀并导致更高的精度。但是,我在标准库中找不到能证明这一点的定理,而且我所知没有自动策略(自动,直觉,简单,zify和omega)起作用。如果有帮助,我也知道x < 256 * 256,但是检查所有65536个案例并不是一个很好的证明...

1 个答案:

答案 0 :(得分:4)

在我的特定情况下,我能够这样解决:

rewrite (N.mul_comm 256 x).

这会在右侧切换到256 * (x / 256) <= x * 256 / 256

rewrite (N.div_mul x 256).

这将右侧缩小为256 * (x / 256) <= x

rewrite (N.mul_div_le x 256).

采用这种自动策略后就可以了。