IN-TAU-INTERVALP

Boolean membership in a tau interval
Major Section:  TAU-SYSTEM

General Form:
(in-tau-intervalp e x)

Here, x should be an interval (see tau-intervalp). This function returns t or nil indicating whether e, which is generally but not necessarily a number, is an element of interval x. By that is meant that e satisfies the domain predicate of the interval and lies between the two bounds.

Suppose x is an interval with the components dom, lo-rel, lo, hi-rel and hi. Suppose (<? rel u v) means (< u v) when rel is true and (<= u v) otherwise, with appropriate treatment of infinities.

Then for e to be in interval x, it must be the case that e satisfies the domain predicate dom (where where dom=nil means there is no restriction on the domain) and (<? lo-rel lo e) and (<? hi-rel e hi). [Note: ``Appropriate treatment of infinities'' is slightly awkward if both infinities are represented by the same object, nil. However, this is handled by coercing e to a number after checking that it is in the domain. By this trick, ``<?'' is presented with at most one ``infinity'' and it is always negative when in the first argument and positive when in the second.]

Note that every element in an INTEGERP interval is contained in the analogous RATIONALP interval (i.e., the interval obtained by just replacing the domain INTEGERP by RATIONALP). That is because every integer is a rational. Similarly, every rational is an ACL2 number.

Note that an interval in which the relations are weak and the bounds are equal rationals is the ``unit'' or ``identity'' interval containing exactly that rational.

Note that an interval in which the relations are strong and the bounds are equal rationals is empty: it contains no objects.

Note that the interval (make-tau-interval nil nil nil nil nil) is the ``universal interval:'' it contains all ACL2 objects. It contains all numbers because they statisfy the non-existent domain restriction and lie between minus infinity and plus infinity. It contains all non-numbers because the interval contains 0 and ACL2's inequalities coerce non-numbers to 0. The universal interval is useful if you are defining a bounder (see bounders) for a function and do not wish to address a certain case: return the universal interval.

Recall that make-tau-interval constructs intervals. Using make-tau-interval we give several self-explanatory examples of in-tau-intervalp:

(in-tau-intervalp 3 (make-tau-interval 'INTEGERP nil 0 nil 10))           = t
(in-tau-intervalp 3 (make-tau-interval 'RATIONALP nil 0 nil 10))          = t
(in-tau-intervalp 3 (make-tau-interval NIL nil 0 nil 10))                 = t

(in-tau-intervalp -3 (make-tau-interval 'INTEGERP nil 0 nil 10))          = nil
(in-tau-intervalp 30 (make-tau-interval 'INTEGERP nil 0 nil 10))          = nil

(in-tau-intervalp 3/5 (make-tau-interval 'INTEGERP nil 0 nil 10))         = nil
(in-tau-intervalp 3/5 (make-tau-interval 'RATIONALP nil 0 nil 10))        = t

(in-tau-intervalp #c(3 5) (make-tau-interval 'RATIONALP nil 0 nil 10))    = nil
(in-tau-intervalp #c(3 5) (make-tau-interval 'ACL2-NUMBERP nil 0 nil 10)) = t

(in-tau-intervalp 'ABC (make-tau-interval NIL nil 0 nil 10))              = t