1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
|
(in-package "ACL2")
;These rules may cause case splits, but that's sort of the point.
(local (include-book "product-proofs"))
(defthm product-less-than-zero
(implies (case-split (or (not (complex-rationalp x))
(not (complex-rationalp y)))) ;can't gen: (* #C(-1 9) #C(-1 9))=#c(-80 -18)
(equal (< (* x y) 0)
(if (< x 0)
(< 0 y)
(if (equal 0 x)
nil
(if (not (acl2-numberp x))
nil
(< y 0)))))))
#|
(defthm product-less-than-zero
(implies (case-split (not (complex-rationalp x))) ;can't gen: (* #C(-1 9) #C(-1 9))=#c(-80 -18)
(equal (< (* x y) 0)
(if (< x 0)
(< 0 y)
(if (equal 0 x)
nil
(if (not (acl2-numberp x))
nil
(< y 0)))))))
;this use hint shouldn't be needed
(defthm product-less-than-zero-2
(implies (case-split (not (complex-rationalp y))) ;(case-split (rationalp y))
(equal (< (* x y) 0)
(or (and (< x 0) (< 0 y))
(and (< y 0) (< 0 x))))))
|#
;combine the next two by case-splittin on an OR?
(defthm product-greater-than-zero
(implies (case-split (not (complex-rationalp y)))
(equal (< 0 (* x y))
(or (and (< 0 x) (< 0 y))
(and (< y 0) (< x 0))))))
(defthm product-greater-than-zero-2
(implies (case-split (not (complex-rationalp x)))
(equal (< 0 (* x y))
(or (and (< 0 x) (< 0 y))
(and (< y 0) (< x 0))))))
;could write the conclusion using an OR...
(defthm product-equal-zero
(equal (equal 0 (* x y))
(if (not (acl2-numberp x))
t
(if (not (acl2-numberp y))
t
(if (equal 0 x)
t
(equal 0 y))))))
|