January 22, 2013
Defining and Proving Interval Bounds for Arithmetic Functions
J Moore
Abstract:
Consider (+ x y) and suppose we know that the inputs, x
and y, are contained in two intervals, int1 and int2.
We wish to compute from int1 and int2 an interval
containing (+ x y). For example, if x is known to be
an INTEGERP such that 1 <= x <= 16 and y is a RATIONALP
such that 0 < y (with no known upper bound), then (+ x
y) is known to be in the RATIONALP interval such that 1
< (+ x y) (with no known upper bound). I call the
function that takes two intervals containing x and y
respectively and returns an interval containing (fn x
y) a ``bounder'' for fn.
I have developed a book that defines bounders for +, *,
/, FLOOR, MOD, LOGAND, LOGNOT, LOGIOR, LOGORC1, LOGEQV,
LOGXOR, EXPT2, and ASH. The book proves the
correctness of each bounder. In future work I hope to
extend ACL2 so that users can define and verify
bounders to improve the tau system. The present work
is an exploration of the shape and content of such
bounder theorems. Ideally, the present book would just
become part of an arithmetic package and not be built
into ACL2.
I will discuss some of the bounders defined, their
correctness theorems, two of the basic proofs
illustrating two different styles of bounder
definitions and proofs, and some of the issues
confronted in finding accurate bounds.