Included Books
other
(in-package "ACL2")
include-book
(include-book "ext-compat")
x*/y=1->x=y-extencapsulate
(encapsulate nil (local (include-book "rtl/rel9/arithmetic/top" :dir :system)) (defthm x*/y=1->x=y-ext (implies (and (rationalp x) (rationalp y) (not (equal x 0)) (not (equal y 0))) (equal (equal (* x (/ y)) 1) (equal x y)))) (defthmd ratio-theory-of-1-f (implies (and (real/rationalp x) (real/rationalp y) (<= 0 x) (< x (- y))) (and (<= (/ x y) 0) (< -1 (/ x y)))) :rule-classes :linear) (defthmd x*y>1-positive-stronger (implies (and (or (and (< 1 x) (<= 1 y)) (and (<= 1 x) (< 1 y))) (real/rationalp x) (real/rationalp y)) (< 1 (* x y))) :rule-classes (:linear :rewrite)) (defthm nintegerp-/ (implies (and (real/rationalp x) (< 1 x)) (not (integerp (/ x)))) :rule-classes :type-prescription) (defthm mod-even (implies (rationalp x) (equal (integerp (* 1/2 (mod x 2))) (integerp (* 1/2 x))))) (defthm mod-1-integerp (implies (case-split (acl2-numberp x)) (equal (integerp (mod x 1)) (integerp x)))) (defthm mod-prod (implies (and (rationalp m) (rationalp n) (rationalp k)) (equal (mod (* k m) (* k n)) (* k (mod m n))))) (defthm mod-mult-n (equal (mod (* a n) n) (* n (mod a 1)))) (defthm mod-when-y-is-complex-rationalp (implies (complex-rationalp y) (equal (mod x y) (if (not (complex-rationalp x)) (fix x) (if (not (rationalp (/ x y))) x (if (integerp (/ x y)) 0 (+ x (* -1 y (floor (* x (/ y)) 1))))))))) (defthm mod-when-y-is-an-inverse (implies (and (integerp (/ y)) (integerp x) (case-split (< 0 y))) (equal (mod x y) 0))) (defthm rationalp-mod-ext (implies (case-split (rationalp x)) (rationalp (mod x y))) :rule-classes (:rewrite :type-prescription)) (defthm mod-integerp-when-y-is-power-of-2 (implies (integerp x) (integerp (mod x (expt 2 i)))) :rule-classes (:rewrite :type-prescription)) (defthm mod-of-mod (implies (and (case-split (natp k)) (case-split (natp n))) (equal (mod (mod x (* k n)) n) (mod x n)))) (defthm mod-sum (implies (and (rationalp a) (rationalp b)) (equal (mod (+ a (mod b n)) n) (mod (+ a b) n)))) (defthm mod-mod-sum (implies (and (rationalp a) (rationalp b)) (equal (mod (+ (mod a n) (mod b n)) n) (mod (+ a b) n)))) (defthm mod-diff (implies (and (case-split (rationalp a)) (case-split (rationalp b))) (equal (mod (- a (mod b n)) n) (mod (- a b) n)))) (defthm mod-does-nothing (implies (and (< m n) (<= 0 m) (case-split (rationalp m))) (equal (mod m n) m))) (defthm mod-bnd-2 (implies (and (<= 0 m) (case-split (rationalp m))) (<= (mod m n) m)) :rule-classes :linear) (defthm mod-sums-cancel-1 (implies (and (case-split (<= 0 y)) (case-split (rationalp k)) (case-split (rationalp y)) (case-split (rationalp x1)) (case-split (rationalp x2))) (equal (equal (mod (+ k x1) y) (mod (+ k x2) y)) (equal (mod x1 y) (mod x2 y))))) (defthm mod-sums-cancel-5-ext (implies (and (case-split (<= 0 y)) (case-split (rationalp k)) (case-split (rationalp y)) (case-split (rationalp x))) (equal (equal (mod k y) (mod (+ k x) y)) (equal 0 (mod x y))))) (defthm mod-mod-2-thm (implies (and (<= y1 y2) (case-split (< 0 y1)) (case-split (acl2-numberp x)) (case-split (rationalp y1)) (case-split (rationalp y2)) (case-split (not (equal y1 0)))) (equal (mod (mod x y1) y2) (mod x y1)))) (defthm mod-mod-2-not-equal-ext (implies (acl2-numberp m) (not (equal (mod m 2) (mod (1+ m) 2)))) :hints (("Goal" :use ((:instance mod-mod-2-not-equal))))) (defthm mod-quotient-integerp (implies (and (integerp (* y k)) (rationalp x) (rationalp y) (rationalp k)) (equal (integerp (* k (mod x y))) (integerp (* k x))))) (defthm mod-1-sum-integer (implies (and (rationalp x) (rationalp y)) (equal (integerp (+ x (mod y 1))) (integerp (+ x y))))) (defthm mod-mod-e (implies (and (integerp (/ y1 y2)) (case-split (not (equal y2 0))) (case-split (rationalp y1)) (case-split (rationalp y2))) (equal (mod (mod x y1) y2) (mod x y2)))) (defthm mod-sum-elim-second (implies (and (case-split (not (complex-rationalp x1))) (case-split (not (complex-rationalp x2)))) (equal (mod (+ x1 (mod x2 y)) y) (mod (+ x1 x2) y)))) (defthm mod-sum-elim-second-gen (implies (and (integerp (/ y2 y)) (case-split (not (complex-rationalp x1))) (case-split (not (complex-rationalp x2))) (case-split (not (equal y 0))) (case-split (rationalp y))) (equal (mod (+ x1 (mod x2 y2)) y) (mod (+ x1 x2) y)))) (defthm mod-sum-elim-both (implies (and (case-split (not (complex-rationalp a))) (case-split (not (complex-rationalp b)))) (equal (mod (+ (mod a y) (mod b y)) y) (mod (+ a b) y)))) (defthm mod-drop-irrelevant-first-term (implies (and (integerp (* k (/ y))) (case-split (not (equal y 0))) (case-split (rationalp y)) (case-split (not (complex-rationalp x)))) (equal (mod (+ k x) y) (mod x y)))) (defthm mod-mult-ext (implies (and (integerp a) (case-split (not (complex-rationalp x))) (case-split (not (complex-rationalp y)))) (equal (mod (+ x (* a y)) y) (mod x y)))) (defthm mod-complex-rationalp-rewrite (implies (case-split (rationalp y)) (equal (complex-rationalp (mod x y)) (complex-rationalp x)))) (defthm mod-upper-bound-less-tight-rewrite (implies (and (case-split (< 0 y)) (case-split (not (complex-rationalp x))) (case-split (not (complex-rationalp y)))) (<= (mod x y) y))) (defthm mod-upper-bound-3 (implies (and (<= y z) (case-split (< 0 y)) (case-split (not (complex-rationalp x))) (case-split (not (complex-rationalp y)))) (< (mod x y) z))) (defthm mod-non-negative-linear (implies (and (case-split (< 0 y)) (case-split (not (complex-rationalp x))) (case-split (not (complex-rationalp y)))) (<= 0 (mod x y))) :rule-classes ((:linear :trigger-terms ((mod x y))))) (defthm mod-integerp-2 (implies (and (integerp y) (case-split (acl2-numberp x))) (equal (integerp (mod x y)) (integerp x)))) (defthm mod-rational-when-y-is-rational-rewrite (implies (and (rationalp y) (case-split (acl2-numberp x))) (equal (rationalp (mod x y)) (rationalp x)))) (defthm mod-force-equal-ext (implies (and (< (abs (- a b)) n) (rationalp a) (rationalp b) (integerp n)) (iff (equal (mod a n) (mod b n)) (equal a b))) :hints (("Goal" :use ((:instance mod-force-equal))))) (defthm mod-equal-int-ext (implies (and (equal (mod a n) (mod b n)) (rationalp a) (rationalp b)) (integerp (+ (* a (/ n)) (- (* b (/ n)))))) :hints (("Goal" :use ((:instance mod-equal-int))))) (defthm mod-equal-int-reverse-ext (implies (and (integerp (+ (* a (/ n)) (- (* b (/ n))))) (rationalp a) (rationalp b) (rationalp n) (< 0 n)) (equal (mod a n) (mod b n))) :hints (("Goal" :use ((:instance mod-equal-int-reverse))))) (defthm even-odd-5 (implies (and (rationalp x) (integerp (* 1/2 x))) (and (integerp (- x 1)) (not (integerp (* 1/2 (- x 1))))))) (defthm expt-2-is-not-odd (implies (and (evenp x) (< 0 i) (integerp i)) (equal (equal (expt 2 i) (+ 1 x)) nil))) (defthm expt2-integer (implies (case-split (integerp i)) (equal (integerp (expt 2 i)) (<= 0 i)))) (defthm expt-bigger-than-i (implies (integerp i) (< i (expt 2 i)))) (defthm expt2-inverse-integer (implies (case-split (integerp i)) (equal (integerp (/ (expt 2 i))) (<= i 0)))) (defthm expt2-1-to-1 (implies (and (integerp i1) (integerp i2)) (equal (equal (expt 2 i1) (expt 2 i2)) (equal i1 i2)))) (defthm expt-between-one-and-two (implies (and (<= 1 (expt 2 i)) (< (expt 2 i) 2)) (equal (expt 2 i) 1))) (defthm expt-prod-integer-3-terms-2-ext (implies (and (<= (+ j l) i) (integerp i) (integerp j) (integerp l)) (integerp (* (expt 2 i) (/ (expt 2 j)) (/ (expt 2 l)))))) (defthm complex-rationalp-prod (implies (and (rationalp k) (case-split (not (equal k 0)))) (and (equal (complex-rationalp (* k x)) (complex-rationalp x)) (equal (complex-rationalp (* x k)) (complex-rationalp x))))) (defthm product-greater-than-zero-ext (implies (or (case-split (not (complex-rationalp x))) (case-split (not (complex-rationalp y)))) (equal (< 0 (* x y)) (or (and (< 0 x) (< 0 y)) (and (< y 0) (< x 0)))))) (defthm product-less-than-zero (implies (case-split (or (not (complex-rationalp x)) (not (complex-rationalp y)))) (equal (< (* x y) 0) (if (< x 0) (< 0 y) (if (equal 0 x) nil (if (not (acl2-numberp x)) nil (< y 0))))))) (defthm quotient-not-integerp (implies (and (< i j) (<= 0 i) (<= 0 j) (case-split (< 0 i)) (case-split (< 0 j)) (case-split (rationalp j))) (not (integerp (/ i j))))) (defthm rationalp-product-when-one-arg-is-rational (implies (and (rationalp x) (case-split (not (equal x 0))) (case-split (acl2-numberp y))) (and (equal (rationalp (* x y)) (rationalp y)) (equal (rationalp (* y x)) (rationalp y))))) (defthm rationalp-sum-when-one-arg-is-rational (implies (and (rationalp x) (case-split (acl2-numberp y))) (and (equal (rationalp (+ x y)) (rationalp y)) (equal (rationalp (+ y x)) (rationalp y))))) (defthm rationalp-unary-divide (implies (case-split (acl2-numberp x)) (equal (rationalp (/ x)) (rationalp x)))) (defthm complex-rationalp-+-when-second-term-is-not-complex (implies (not (complex-rationalp y)) (equal (complex-rationalp (+ x y)) (complex-rationalp x)))) (defthm complex-rationalp-+-when-first-term-is-not-complex (implies (not (complex-rationalp x)) (equal (complex-rationalp (+ x y)) (complex-rationalp y)))) (defthm fraction-less-than-1 (implies (and (< (abs m) (abs n)) (rationalp m) (rationalp n)) (<= (* m (/ n)) 1))) (defthm floor-with-i-not-rational (implies (not (rationalp i)) (equal (floor i j) (if (and (complex-rationalp i) (complex-rationalp j) (rationalp (/ i j))) (floor (/ i j) 1) 0)))) (defthm floor-with-j-not-rational (implies (not (rationalp j)) (equal (floor i j) (if (and (complex-rationalp i) (complex-rationalp j) (rationalp (/ i j))) (floor (/ i j) 1) 0)))) (defthm floor-of-rational-and-complex (implies (and (rationalp i) (not (rationalp j)) (case-split (acl2-numberp j))) (and (equal (floor i j) 0) (equal (floor j i) 0)))) (defthm floor-when-arg-quotient-isnt-rational (implies (not (rationalp (* i (/ j)))) (equal (floor i j) 0))) (defthm floor-non-negative-integerp-type-prescription (implies (and (<= 0 i) (<= 0 j) (case-split (not (complex-rationalp j)))) (and (<= 0 (floor i j)) (integerp (floor i j)))) :rule-classes (:type-prescription)) (defthm floor-non-negative (implies (and (<= 0 i) (<= 0 j) (case-split (not (complex-rationalp i)))) (<= 0 (floor i j)))) (defthm floor-equal-i-over-j-rewrite (implies (and (case-split (not (equal j 0))) (case-split (rationalp i)) (case-split (rationalp j))) (equal (equal (* j (floor i j)) i) (integerp (* i (/ j)))))) (defthm integerp-sum-of-odds-over-2 (implies (and (rationalp x) (rationalp y) (integerp (* 2 x)) (not (integerp x))) (equal (integerp (+ x y)) (and (integerp (* 2 y)) (not (integerp y)))))) (defthm mod-bnd-3 (implies (and (< m (+ (* a n) r)) (<= (* a n) m) (integerp a) (case-split (rationalp m)) (case-split (rationalp n))) (< (mod m n) r)) :rule-classes :linear) (defthm mod-force-ext (implies (and (<= (* a n) m) (< m (* (1+ a) n)) (integerp a) (rationalp m) (rationalp n)) (= (mod m n) (- m (* a n)))) :hints (("Goal" :use ((:instance mod-force))))) (defthm mod-equal-0-ext (implies (and (case-split (rationalp y)) (case-split (not (equal y 0)))) (equal (equal (mod x y) 0) (integerp (* (/ y) x)))) :hints (("Goal" :in-theory (enable mod-equal-0)))) (defthm mod-integerp-2-2 (implies (and (integerp y) (integerp x)) (integerp (mod x (/ y))))) (local (include-book "rtl/rel9/arithmetic/extra-rules" :dir :system)) (defthm exp-invert-ext (implies (and (integerp n) (<= n -1)) (<= (/ (- 1 (expt 2 n))) (1+ (expt 2 (1+ n))))) :hints (("Goal" :use ((:instance exp-invert))))) (defthm mod-integerp-when-y-is-an-inverse (implies (and (integerp (/ y)) (integerp x)) (integerp (mod x y)))))