Included Books
other
(in-package "ACL2")
include-book
(include-book "ground-zero")
local
(local (include-book "fp2"))
local
(local (include-book "denominator"))
local
(local (include-book "numerator"))
local
(local (include-book "predicate"))
local
(local (include-book "unary-divide"))
local
(local (include-book "product"))
local
(local (include-book "integerp"))
local
(local (include-book "arith"))
nonnegative-integer-quotient-with-a-non-integer-argtheorem
(defthm nonnegative-integer-quotient-with-a-non-integer-arg (implies (not (integerp i)) (equal (nonnegative-integer-quotient i j) 0)) :hints (("Goal" :in-theory (enable nonnegative-integer-quotient))))
nonnegative-integer-quotient-with-a-non-integer-arg-2theorem
(defthm nonnegative-integer-quotient-with-a-non-integer-arg-2 (implies (not (integerp j)) (equal (nonnegative-integer-quotient i j) 0)) :hints (("Goal" :in-theory (enable nonnegative-integer-quotient))))
nonnegative-integer-quotient-with-a-non-positive-argtheorem
(defthm nonnegative-integer-quotient-with-a-non-positive-arg (implies (<= i 0) (equal (nonnegative-integer-quotient i j) 0)) :hints (("Goal" :in-theory (enable nonnegative-integer-quotient))))
nonnegative-integer-quotient-with-a-non-positive-arg-2theorem
(defthm nonnegative-integer-quotient-with-a-non-positive-arg-2 (implies (<= j 0) (equal (nonnegative-integer-quotient i j) 0)) :hints (("Goal" :in-theory (enable nonnegative-integer-quotient))))
nonnegative-integer-quotient-upper-bound-rewritetheorem
(defthm nonnegative-integer-quotient-upper-bound-rewrite (implies (and (case-split (<= 0 i)) (case-split (<= 0 j)) (case-split (rationalp j))) (<= (nonnegative-integer-quotient i j) (/ i j))) :hints (("Goal" :cases ((rationalp i)) :in-theory (enable nonnegative-integer-quotient))))
nonnegative-integer-quotient-upper-bound-lineartheorem
(defthm nonnegative-integer-quotient-upper-bound-linear (implies (and (case-split (<= 0 i)) (case-split (<= 0 j)) (case-split (rationalp j))) (<= (nonnegative-integer-quotient i j) (/ i j))) :rule-classes ((:linear :trigger-terms ((nonnegative-integer-quotient i j)))))
nonnegative-integer-quotient-max-value-rewritetheorem
(defthm nonnegative-integer-quotient-max-value-rewrite (implies (and (case-split (<= 0 i)) (case-split (<= 0 j)) (case-split (integerp i)) (case-split (integerp j))) (equal (equal (nonnegative-integer-quotient i j) (/ i j)) (integerp (/ i j)))) :hints (("Goal" :in-theory (enable nonnegative-integer-quotient))))
nonnegative-integer-quotient-lower-bound-rewritetheorem
(defthm nonnegative-integer-quotient-lower-bound-rewrite (implies (and (case-split (integerp i)) (case-split (integerp j)) (case-split (<= 0 i)) (case-split (<= 0 j))) (< (+ -1 (/ i j)) (nonnegative-integer-quotient i j))) :hints (("Goal" :in-theory (enable nonnegative-integer-quotient))))
nonnegative-integer-quotient-lower-bound-lineartheorem
(defthm nonnegative-integer-quotient-lower-bound-linear (implies (and (case-split (integerp i)) (case-split (integerp j)) (case-split (<= 0 i)) (case-split (<= 0 j))) (< (+ -1 (/ i j)) (nonnegative-integer-quotient i j))) :rule-classes ((:linear :trigger-terms ((nonnegative-integer-quotient i j)))))
nonnegative-integer-quotient-upper-bound-linear-strongertheorem
(defthm nonnegative-integer-quotient-upper-bound-linear-stronger (implies (and (case-split (<= 0 i)) (case-split (<= 0 j)) (not (integerp (* i (/ j)))) (case-split (acl2-numberp i)) (case-split (rationalp j)) (case-split (rationalp k)) (case-split (< 0 k))) (< (* k (nonnegative-integer-quotient i j)) (* k (/ i j)))) :hints (("Goal" :cases ((rationalp i)) :in-theory (enable nonnegative-integer-quotient))) :rule-classes ((:linear :trigger-terms ((* k (nonnegative-integer-quotient i j))))))
nonnegative-integer-quotient-when-j-is-0theorem
(defthm nonnegative-integer-quotient-when-j-is-0 (equal (nonnegative-integer-quotient i 0) 0))
nniq-no-rounding-to-doencapsulate
(encapsulate nil (local (defthm nniq-no-rounding-to-do-all-but-j=0 (implies (and (integerp (* i (/ j))) (integerp i) (>= i 0) (integerp j) (> j 0)) (equal (nonnegative-integer-quotient i j) (/ i j))))) (defthm nniq-no-rounding-to-do (implies (and (integerp (* i (/ j))) (case-split (integerp i)) (case-split (<= 0 i)) (case-split (integerp j)) (case-split (<= 0 j))) (equal (nonnegative-integer-quotient i j) (/ i j)))))
denom-1-means-num-is-alltheorem
(defthm denom-1-means-num-is-all (implies (and (rationalp x) (equal (denominator x) 1)) (equal (numerator x) x)) :hints (("Goal" :in-theory (disable rational-implies2) :use rational-implies2)))
nonnegative-integer-quotient-by-1theorem
(defthm nonnegative-integer-quotient-by-1 (implies (and (integerp x) (<= 0 x)) (equal (nonnegative-integer-quotient x 1) x)))
division-by-zero-yields-zerotheorem
(defthm division-by-zero-yields-zero (equal (/ m 0) 0))
fraction-less-than-1theorem
(defthm fraction-less-than-1 (implies (and (< (abs m) (abs n)) (rationalp m) (rationalp n)) (<= (* m (/ n)) 1)) :hints (("Goal" :cases ((> n 0) (= n 0)))))
nniq-inttheorem
(defthm nniq-int (implies (and (integerp x) (case-split (<= 0 x))) (equal (nonnegative-integer-quotient (numerator x) (denominator x)) x)))
quotient-numer-denomencapsulate
(encapsulate nil (local (include-book "../../../arithmetic/rationals")) (local (include-book "../../../arithmetic/idiv")) (defthm quotient-numer-denom (implies (and (integerp x) (< 0 x) (integerp y) (< 0 y)) (equal (nonnegative-integer-quotient (numerator (/ x y)) (denominator (/ x y))) (nonnegative-integer-quotient x y)))) (defthm numerator-minus (equal (numerator (- i)) (- (numerator i)))) (defthm denominator-unary-minus (implies (rationalp x) (equal (denominator (- x)) (denominator x)))) (defthm denominator-plus (implies (and (rationalp r) (integerp i)) (equal (denominator (+ i r)) (denominator r)))) (defthm denominator-plus-2 (implies (and (rationalp r) (integerp i)) (equal (denominator (+ r i)) (denominator r)))) (defthm numerator-plus (implies (and (rationalp x) (integerp i)) (equal (numerator (+ x i)) (+ (* i (denominator x)) (numerator x)))) :hints (("Goal" :in-theory (disable rational-implies2) :use (:instance rational-implies2 (x (+ x i)))))))
numerator-plus-alttheorem
(defthm numerator-plus-alt (implies (and (rationalp x) (integerp i)) (equal (numerator (+ i x)) (+ (* i (denominator x)) (numerator x)))) :hints (("Goal" :in-theory (disable numerator-plus) :use (:instance numerator-plus))))
numerator-minus-erictheorem
(defthm numerator-minus-eric (equal (numerator (* -1 i)) (* -1 (numerator i))) :hints (("Goal" :in-theory (disable numerator-minus) :use numerator-minus)))
denominator-unary-minus-erictheorem
(defthm denominator-unary-minus-eric (implies (rationalp x) (equal (denominator (* -1 x)) (denominator x))) :hints (("Goal" :in-theory (disable denominator-unary-minus) :use denominator-unary-minus)))
nonnegative-integer-quotient-sum-on-top-gen-both-casesencapsulate
(encapsulate nil (local (defthm nonnegative-integer-quotient-sum-on-top (implies (and (integerp x) (>= x 0) (integerp y) (> y 0)) (equal (nonnegative-integer-quotient (+ x y) y) (+ 1 (nonnegative-integer-quotient x y)))))) (local (defun nniq-induct (x y a) (if (zp a) 1 (* x y (nniq-induct x y (- a 1)))))) (local (defthm nonnegative-integer-quotient-sum-on-top-gen (implies (and (integerp x) (>= x 0) (integerp a) (integerp y) (> y 0) (>= a 0)) (equal (nonnegative-integer-quotient (+ x (* a y)) y) (+ a (nonnegative-integer-quotient x y)))) :hints (("subgoal *1/2" :in-theory (disable nonnegative-integer-quotient-sum-on-top) :use ((:instance nonnegative-integer-quotient-sum-on-top (x (+ x (* (- a 1) y)))))) ("Goal" :do-not '(generalize) :induct (nniq-induct x y a))))) (local (defthm nonnegative-integer-quotient-sum-on-top-back (implies (and (integerp x) (>= x 0) (integerp y) (> y 0) (>= (+ x (- y)) 0)) (equal (nonnegative-integer-quotient (+ x (* -1 y)) y) (+ -1 (nonnegative-integer-quotient x y)))))) (local (defun nniq-induct-2 (x y a) (if (or (not (integerp a)) (>= a 0)) 1 (* x y (nniq-induct-2 x y (+ a 1)))))) (local (defthm nonnegative-integer-quotient-sum-on-top-gen-back (implies (and (integerp x) (>= x 0) (integerp a) (integerp y) (> y 0) (< a 0) (<= 0 (+ x (* a y)))) (equal (nonnegative-integer-quotient (+ x (* a y)) y) (+ a (nonnegative-integer-quotient x y)))) :otf-flg t :hints (("subgoal *1/" :in-theory (disable nonnegative-integer-quotient-sum-on-top-back) :use ((:instance nonnegative-integer-quotient-sum-on-top-back (x (+ x (* (+ a 1) y)))))) ("Goal" :do-not '(generalize) :induct (nniq-induct-2 x y a))))) (defthm nonnegative-integer-quotient-sum-on-top-gen-both-cases (implies (and (integerp x) (>= x 0) (integerp a) (integerp j) (> j 0) (<= 0 (+ x (* a j)))) (equal (nonnegative-integer-quotient (+ x (* a j)) j) (+ a (nonnegative-integer-quotient x j)))) :hints (("Goal" :cases ((>= a 0))))))
nniq-eric-1encapsulate
(encapsulate nil (local (include-book "../../../arithmetic/idiv")) (local (include-book "../../../arithmetic/top-with-meta")) (defthm nniq-eric-1 (implies (and (rationalp x) (not (integerp x))) (> (+ 1 (nonnegative-integer-quotient (numerator x) (denominator x))) x)) :hints (("Goal" :in-theory (disable quotient-upper-bound nonnegative-integer-quotient) :use (:instance quotient-upper-bound (x (numerator x)) (y (denominator x)))))))
nniq-eric-2theorem
(defthm nniq-eric-2 (implies (and (rationalp x) (not (integerp x))) (> (+ (denominator x) (* (denominator x) (nonnegative-integer-quotient (numerator x) (denominator x)))) (numerator x))) :hints (("Goal" :in-theory (disable nniq-eric-1 rational-implies2) :use (nniq-eric-1 rational-implies2))))
nniq-eric-3theorem
(defthm nniq-eric-3 (implies (and (rationalp x) (not (integerp x))) (>= (+ (denominator x) (* (denominator x) (nonnegative-integer-quotient (numerator x) (denominator x)))) (+ 1 (numerator x)))) :hints (("Goal" :in-theory (disable nniq-eric-2) :use (nniq-eric-2))))
nniq-eric-4theorem
(defthm nniq-eric-4 (implies (and (rationalp x) (not (integerp x))) (>= (+ 1 (nonnegative-integer-quotient (numerator x) (denominator x))) (+ (/ (numerator x) (denominator x)) (/ (denominator x))))) :hints (("Goal" :in-theory (disable nniq-eric-3 rational-implies2) :use (nniq-eric-3))))
nniq-lower-bound-non-integer-casetheorem
(defthm nniq-lower-bound-non-integer-case (implies (and (rationalp x) (not (integerp x))) (>= (+ 1 (nonnegative-integer-quotient (numerator x) (denominator x))) (+ x (/ (denominator x))))) :hints (("Goal" :in-theory (disable nniq-eric-3 nniq-eric-4) :use (nniq-eric-4))))
in-theory
(in-theory (disable nniq-eric-1 nniq-eric-2 nniq-eric-3 nniq-eric-4))
nniq-eric-5theorem
(defthm nniq-eric-5 (implies (and (integerp p) (integerp q) (not (integerp (/ p q))) (< 0 p) (< 0 q)) (< (nonnegative-integer-quotient p q) (/ p q))) :hints (("Goal" :in-theory (disable nniq-eric-1 rational-implies2) :use (nniq-eric-1 rational-implies2))))
nniq-eric-6theorem
(defthm nniq-eric-6 (implies (and (integerp p) (integerp q) (not (integerp (/ p q))) (< 0 p) (< 0 q)) (< (* q (nonnegative-integer-quotient p q)) p)) :hints (("Goal" :in-theory (disable nonnegative-integer-quotient nniq-eric-5) :use (nniq-eric-5))))
nniq-eric-7theorem
(defthm nniq-eric-7 (implies (and (integerp p) (integerp q) (not (integerp (/ p q))) (< 0 p) (< 0 q)) (<= (+ 1 (* q (nonnegative-integer-quotient p q))) p)) :hints (("Goal" :in-theory (disable nonnegative-integer-quotient nniq-eric-6) :use (nniq-eric-6))))
nniq-eric-8theorem
(defthm nniq-eric-8 (implies (and (integerp p) (integerp q) (not (integerp (/ p q))) (< 0 p) (< 0 q)) (<= (+ (/ q) (nonnegative-integer-quotient p q)) (/ p q))) :hints (("Goal" :in-theory (disable nonnegative-integer-quotient nniq-eric-7) :use (nniq-eric-7))))
in-theory
(in-theory (disable nniq-eric-5 nniq-eric-6 nniq-eric-7 nniq-eric-8))