Included Books
other
(in-package "ACL2")
flfunction
(defun fl (x) (declare (xargs :guard (real/rationalp x))) (floor x 1))
include-book
(include-book "ground-zero")
include-book
(include-book "negative-syntaxp")
local
(local (include-book "mod-proofs"))
mod-acl2-numberp-type-prescriptiontheorem
(defthmd mod-acl2-numberp-type-prescription (acl2-numberp (mod x y)) :rule-classes (:type-prescription))
mod-acl2-numberptheorem
(defthm mod-acl2-numberp (acl2-numberp (mod x y)))
mod-rationalptheorem
(defthm mod-rationalp (implies (case-split (not (complex-rationalp x))) (rationalp (mod x y))) :rule-classes (:rewrite :type-prescription))
mod-rational-when-y-is-rational-rewritetheorem
(defthm mod-rational-when-y-is-rational-rewrite (implies (and (rationalp y) (case-split (acl2-numberp x))) (equal (rationalp (mod x y)) (rationalp x))))
mod-integerptheorem
(defthm mod-integerp (implies (and (integerp x) (integerp y)) (integerp (mod x y))) :rule-classes (:rewrite :type-prescription))
mod-integerp-2theorem
(defthm mod-integerp-2 (implies (and (integerp y) (case-split (acl2-numberp x))) (equal (integerp (mod x y)) (integerp x))))
mod-with-x-a-non-acl2-number-is-zerotheorem
(defthm mod-with-x-a-non-acl2-number-is-zero (implies (not (acl2-numberp x)) (equal (mod x y) 0)))
mod-when-y-is-not-an-acl2-numberptheorem
(defthmd mod-when-y-is-not-an-acl2-numberp (implies (not (acl2-numberp y)) (equal (mod x y) (fix x))))
mod-when-y-is-complex-rationalptheorem
(defthmd 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)))))))))
mod-non-negativetheorem
(defthm mod-non-negative (implies (and (case-split (< 0 y)) (case-split (not (complex-rationalp x))) (case-split (not (complex-rationalp y)))) (<= 0 (mod x y))))
mod-non-negative-rationalp-type-prescriptiontheorem
(defthm mod-non-negative-rationalp-type-prescription (implies (and (case-split (< 0 y)) (case-split (not (complex-rationalp x))) (case-split (not (complex-rationalp y)))) (and (<= 0 (mod x y)) (rationalp (mod x y)))) :rule-classes ((:type-prescription :typed-term (mod x y))))
mod-non-negative-lineartheorem
(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)))))
mod-upper-boundtheorem
(defthm mod-upper-bound (implies (and (case-split (< 0 y)) (case-split (not (complex-rationalp x))) (case-split (not (complex-rationalp y)))) (< (mod x y) y)))
mod-upper-bound-lineartheorem
(defthm mod-upper-bound-linear (implies (and (case-split (< 0 y)) (case-split (not (complex-rationalp x))) (case-split (not (complex-rationalp y)))) (< (mod x y) y)) :rule-classes ((:linear :trigger-terms ((mod x y)))))
mod-upper-bound-less-tight-rewritetheorem
(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)))
mod-upper-bound-3theorem
(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)))
mod-upper-bound-2theorem
(defthm mod-upper-bound-2 (implies (and (<= 0 x) (case-split (not (complex-rationalp x)))) (<= (mod x y) x)) :rule-classes (:rewrite (:linear :trigger-terms ((mod x y)))))
mod-complex-rationalp-rewritetheorem
(defthm mod-complex-rationalp-rewrite (implies (case-split (rationalp y)) (equal (complex-rationalp (mod x y)) (complex-rationalp x))))
mod-non-positive-type-prescriptiontheorem
(defthm mod-non-positive-type-prescription (implies (and (< y 0) (rationalp x) (rationalp y)) (and (rationalp (mod x y)) (<= (mod x y) 0))) :rule-classes (:type-prescription))
mod-non-positivetheorem
(defthm mod-non-positive (implies (and (< y 0) (case-split (rationalp x)) (case-split (rationalp y))) (<= (mod x y) 0)))
local
(local (include-book "fl"))
mod-drop-irrelevant-first-termtheorem
(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))))
mod-drop-irrelevant-second-termtheorem
(defthm mod-drop-irrelevant-second-term (implies (and (integerp (* k (/ y))) (case-split (not (equal y 0))) (case-split (rationalp y)) (case-split (not (complex-rationalp x)))) (equal (mod (+ x k) y) (mod x y))))
mod-drop-irrelevant-second-term-with-more-termstheorem
(defthm mod-drop-irrelevant-second-term-with-more-terms (implies (and (integerp (* k (/ y))) (case-split (not (equal y 0))) (case-split (rationalp y)) (case-split (not (complex-rationalp x))) (case-split (not (complex-rationalp x2)))) (equal (mod (+ x k x2) y) (mod (+ x x2) y))))
mod-drop-irrelevant-third-termtheorem
(defthm mod-drop-irrelevant-third-term (implies (and (integerp (* k (/ y))) (case-split (not (equal y 0))) (case-split (rationalp y)) (case-split (not (complex-rationalp x))) (case-split (not (complex-rationalp x2)))) (equal (mod (+ x x2 k) y) (mod (+ x x2) y))))
mod-mult-erictheorem
(defthm mod-mult-eric (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))))
mod-sum-elim-secondtheorem
(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))))
mod-sum-elim-second-gentheorem
(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))))
mod-sum-elim-firsttheorem
(defthm mod-sum-elim-first (implies (and (case-split (not (complex-rationalp a))) (case-split (not (complex-rationalp b)))) (equal (mod (+ (mod b y) a) y) (mod (+ a b) y))))
mod-sum-elim-first-gentheorem
(defthm mod-sum-elim-first-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 (+ (mod x2 y2) x1) y) (mod (+ x1 x2) y))))
mod-sum-elim-boththeorem
(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))))
mod-difference-elim-secondtheorem
(defthm mod-difference-elim-second (implies (and (case-split (rationalp x1)) (case-split (rationalp x2))) (equal (mod (+ x1 (* -1 (mod x2 y))) y) (mod (+ x1 (* -1 x2)) y))))
mod-sum-elim-negative-first-argtheorem
(defthm mod-sum-elim-negative-first-arg (implies (and (case-split (rationalp x1)) (case-split (rationalp x2))) (equal (mod (+ (* -1 (mod x2 y)) x1) y) (mod (+ (* -1 x2) x1) y))))
mod-mult-of-ntheorem
(defthmd mod-mult-of-n (implies (and (integerp (* x (/ y))) (not (equal y 0)) (rationalp x) (rationalp y)) (equal (mod x y) 0)))
mod-negative-ytheorem
(defthmd mod-negative-y (implies (and (< 0 y) (integerp x) (integerp y)) (equal (mod x (- y)) (if (integerp (/ x y)) 0 (+ (- y) (mod x y))))))
mod-does-nothingtheorem
(defthm mod-does-nothing (implies (and (< m n) (<= 0 m) (case-split (rationalp m))) (equal (mod m n) m)))
mod-mod-etheorem
(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))))
mod-of-modtheorem
(defthm mod-of-mod (implies (and (case-split (natp k)) (case-split (natp n))) (equal (mod (mod x (* k n)) n) (mod x n))))
mod-idempotenttheorem
(defthm mod-idempotent (implies (and (case-split (rationalp x)) (case-split (rationalp y))) (equal (mod (mod x y) y) (mod x y))))
mod-fl-2theorem
(defthm mod-fl-2 (implies (case-split (acl2-numberp x)) (equal (+ (* y (fl (/ x y))) (mod x y)) x)) :rule-classes nil)
mod-deftheorem
(defthm mod-def (implies (case-split (acl2-numberp x)) (equal (mod x y) (- x (* y (fl (/ x y)))))) :rule-classes nil)
quot-modtheorem
(defthm quot-mod (implies (case-split (acl2-numberp m)) (equal (+ (* n (fl (/ m n))) (mod m n)) m)) :rule-classes nil)
mod-force-erictheorem
(defthmd mod-force-eric (implies (and (<= (* a y) x) (< x (* (1+ a) y)) (integerp a) (rationalp x) (rationalp y)) (equal (mod x y) (- x (* a y)))))
mod-force-chosen-a-negtheorem
(defthmd mod-force-chosen-a-neg (implies (and (< x 0) (<= (* -1 y) x) (rationalp x) (rationalp y)) (equal (mod x y) (- x (* -1 y)))))
mod-eventheorem
(defthm mod-even (implies (rationalp x) (equal (integerp (* 1/2 (mod x 2))) (integerp (* 1/2 x)))))
mod-even-gentheorem
(defthm mod-even-gen (implies (and (rationalp x) (integerp n) (integerp (* 1/2 n))) (equal (integerp (* 1/2 (mod x n))) (integerp (* 1/2 x)))))
mod-canceltheorem
(defthmd mod-cancel (implies (syntaxp (not (and (quotep y) (equal (cadr y) 1)))) (equal (mod x y) (if (acl2-numberp x) (if (acl2-numberp y) (if (equal 0 y) x (* y (mod (/ x y) 1))) x) 0))))
mod-minustheorem
(defthmd mod-minus (implies (and (case-split (rationalp x)) (case-split (rationalp y))) (equal (mod (* -1 x) y) (if (equal 0 y) (- x) (if (integerp (/ x y)) 0 (- y (mod x y)))))))
mod-minus-alttheorem
(defthm mod-minus-alt (implies (and (syntaxp (negative-syntaxp x)) (case-split (rationalp x)) (case-split (rationalp y))) (equal (mod x y) (if (equal 0 y) x (if (integerp (/ (- x) y)) 0 (- y (mod (- x) y)))))))
mod-1-integerptheorem
(defthm mod-1-integerp (implies (case-split (acl2-numberp x)) (equal (integerp (mod x 1)) (integerp x))))
mod-by-2-rewrite-to-eventheorem
(defthmd mod-by-2-rewrite-to-even (implies (integerp x) (equal (equal (mod x 2) 0) (integerp (* 1/2 x)))))
fl-plus-mdtheorem
(defthm fl-plus-md (implies (rationalp x) (equal (+ (fl x) (mod x 1)) x)))
mod-1-sum-integertheorem
(defthm mod-1-sum-integer (implies (and (rationalp x) (rationalp y)) (equal (integerp (+ x (mod y 1))) (integerp (+ x y)))))
mod-quotient-integerptheorem
(defthm mod-quotient-integerp (implies (and (integerp (* y k)) (rationalp x) (rationalp y) (rationalp k)) (equal (integerp (* k (mod x y))) (integerp (* k x)))))
mod-mod-2-thmtheorem
(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))))
mod-equal-0theorem
(defthmd mod-equal-0 (implies (and (case-split (rationalp y)) (case-split (not (equal y 0)))) (equal (equal (mod x y) 0) (integerp (* (/ y) x)))))
mod-2-1-means-oddtheorem
(defthmd mod-2-1-means-odd (implies (integerp x) (equal (equal (mod x 2) 1) (not (integerp (* 1/2 x))))))
mod-integerp-2-2theorem
(defthm mod-integerp-2-2 (implies (and (integerp y) (integerp x)) (integerp (mod x (/ y)))))
mod-cancel-special-1theorem
(defthm mod-cancel-special-1 (implies (and (acl2-numberp x) (rationalp k) (acl2-numberp y) (not (equal y 0)) (not (equal k 0))) (equal (mod (* k x) (* y k)) (* k (mod x y)))))
mod-integerp-when-y-is-an-inversetheorem
(defthm mod-integerp-when-y-is-an-inverse (implies (and (integerp (/ y)) (integerp x)) (integerp (mod x y))))
mod-when-y-is-an-inversetheorem
(defthm mod-when-y-is-an-inverse (implies (and (integerp (/ y)) (integerp x) (case-split (< 0 y))) (equal (mod x y) 0)))
fl-mod-x-1theorem
(defthm fl-mod-x-1 (equal (fl (mod x 1)) 0))
mod-by-2theorem
(defthmd mod-by-2 (implies (integerp x) (equal (mod x 2) (if (integerp (* 1/2 x)) 0 1))))
mod-sum-movetheorem
(defthm mod-sum-move (implies (and (case-split (<= 0 k1)) (case-split (< k1 y)) (case-split (rationalp y)) (case-split (rationalp x)) (case-split (rationalp k1))) (equal (equal k1 (mod (+ k2 x) y)) (equal (mod (+ k1 (- k2)) y) (mod x y)))) :rule-classes nil)
mod-sum-move-constantstheorem
(defthm mod-sum-move-constants (implies (and (syntaxp (and (quotep k1) (quotep k2))) (case-split (<= 0 k1)) (case-split (< k1 y)) (rationalp y) (rationalp x) (rationalp k1)) (equal (equal k1 (mod (+ k2 x) y)) (equal (mod (+ k1 (- k2)) y) (mod x y)))))
mod-sums-cancel-1theorem
(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)))))
mod-sums-cancel-2theorem
(defthm mod-sums-cancel-2 (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 (+ x1 k) y) (mod (+ k x2) y)) (equal (mod x1 y) (mod x2 y)))))
mod-sums-cancel-3theorem
(defthm mod-sums-cancel-3 (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 (+ x1 k) y) (mod (+ x2 k) y)) (equal (mod x1 y) (mod x2 y)))))
mod-sums-cancel-4theorem
(defthm mod-sums-cancel-4 (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 (+ x2 k) y)) (equal (mod x1 y) (mod x2 y)))))
mod-sums-cancel-5theorem
(defthm mod-sums-cancel-5 (implies (and (case-split (<= 0 y)) (case-split (rationalp k)) (case-split (rationalp y)) (case-split (rationalp x))) (equal (equal (mod k y) (mod (+ x k) y)) (equal 0 (mod x y)))))
mod-sums-cancel-6theorem
(defthm mod-sums-cancel-6 (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)))))
mod-sums-cancel-7theorem
(defthm mod-sums-cancel-7 (implies (and (case-split (<= 0 y)) (case-split (rationalp k)) (case-split (rationalp y)) (case-split (rationalp x))) (equal (equal (mod (+ k x) y) (mod k y)) (equal 0 (mod x y)))))
mod-sums-cancel-8theorem
(defthm mod-sums-cancel-8 (implies (and (case-split (<= 0 y)) (case-split (rationalp k)) (case-split (rationalp y)) (case-split (rationalp x))) (equal (equal (mod (+ x k) y) (mod k y)) (equal 0 (mod x y)))))
fl-mod-equaltheorem
(defthm fl-mod-equal (implies (and (equal (fl (/ x 2)) (fl (/ y 2))) (equal (mod x 2) (mod y 2)) (acl2-numberp x) (acl2-numberp y)) (equal x y)) :rule-classes nil)
mod-bnd-1theorem
(defthmd mod-bnd-1 (implies (and (case-split (< 0 n)) (case-split (not (complex-rationalp m))) (case-split (not (complex-rationalp n)))) (< (mod m n) n)) :rule-classes :linear)
mod-mult-erictheorem
(defthm mod-mult-eric (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))))
integerp-modtheorem
(defthm integerp-mod (implies (and (integerp m) (integerp n)) (integerp (mod m n))) :rule-classes (:rewrite :type-prescription))
rationalp-modtheorem
(defthm rationalp-mod (implies (rationalp x) (rationalp (mod x y))) :rule-classes (:rewrite :type-prescription))
rationalp-mod-case-splittheorem
(defthm rationalp-mod-case-split (implies (case-split (rationalp x)) (rationalp (mod x y))) :rule-classes (:rewrite :type-prescription) :hints (("Goal" :in-theory (enable mod))))
in-theory
(in-theory (disable rationalp-mod))
mod-0-fltheorem
(defthm mod-0-fl (implies (acl2-numberp m) (iff (= (mod m n) 0) (= m (* (fl (/ m n)) n)))) :rule-classes nil)
mod-0-0theorem
(defthm mod-0-0 (implies (and (integerp p) (rationalp m) (rationalp n)) (iff (= (mod m (* n p)) 0) (and (= (mod m n) 0) (= (mod (fl (/ m n)) p) 0)))) :rule-classes nil)
mod-prodtheorem
(defthmd mod-prod (implies (and (rationalp m) (rationalp n) (rationalp k)) (equal (mod (* k m) (* k n)) (* k (mod m n)))))
mod012theorem
(defthm mod012 (implies (integerp m) (or (equal (mod m 2) 0) (equal (mod m 2) 1))) :rule-classes nil)
mod-mod-2-not-equaltheorem
(defthm mod-mod-2-not-equal (implies (acl2-numberp m) (not (= (mod m 2) (mod (1+ m) 2)))) :rule-classes nil)
mod-mod-sumencapsulate
(encapsulate nil (defthmd 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)))) (defthmd mod-bnd-2 (implies (and (<= 0 m) (case-split (rationalp m))) (<= (mod m n) m)) :rule-classes :linear))
mod-plus-mod-2theorem
(defthm mod-plus-mod-2 (implies (and (integerp a) (integerp b)) (iff (= (mod (+ a b) 2) (mod a 2)) (= (mod b 2) 0))) :rule-classes nil)
mod-must-be-ntheorem
(defthm mod-must-be-n (implies (and (= (mod m n) 0) (< m (* 2 n)) (< 0 m) (rationalp m) (rationalp n)) (= m n)) :rule-classes nil)
natp-compound-recognizertheorem
(defthm natp-compound-recognizer (equal (natp x) (and (integerp x) (<= 0 x))) :rule-classes :compound-recognizer)
natp-modtheorem
(defthm natp-mod (implies (and (natp m) (natp n)) (natp (mod m n))) :rule-classes ((:type-prescription :typed-term (mod m n))))
natp-mod-rewritetheorem
(defthm natp-mod-rewrite (implies (and (natp m) (natp n)) (natp (mod m n))))
mod-multtheorem
(defthmd mod-mult (implies (and (integerp a) (rationalp m) (rationalp n)) (equal (mod (+ m (* a n)) n) (mod m n))))
mod-difftheorem
(defthmd mod-diff (implies (and (case-split (rationalp a)) (case-split (rationalp b))) (equal (mod (- a (mod b n)) n) (mod (- a b) n))))
mod-bnd-3theorem
(defthmd 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)
mod-forcetheorem
(defthm mod-force (implies (and (<= (* a n) m) (< m (* (1+ a) n)) (integerp a) (rationalp m) (rationalp n)) (= (mod m n) (- m (* a n)))) :rule-classes nil)
mod-equal-inttheorem
(defthm mod-equal-int (implies (and (= (mod a n) (mod b n)) (rationalp a) (rationalp b)) (integerp (/ (- a b) n))) :rule-classes nil)
mod-equal-int-reversetheorem
(defthm mod-equal-int-reverse (implies (and (integerp (/ (- a b) n)) (rationalp a) (rationalp b) (rationalp n) (< 0 n)) (= (mod a n) (mod b n))) :rule-classes nil)
mod-mult-2theorem
(defthmd mod-mult-2 (implies (integerp a) (equal (mod (* a n) n) 0)))
mod-mult-2-alttheorem
(defthmd mod-mult-2-alt (implies (integerp a) (equal (mod (* n a) n) 0)))
mod-mult-ntheorem
(defthmd mod-mult-n (equal (mod (* a n) n) (* n (mod a 1))))
mod-mult-n-commutedtheorem
(defthmd mod-mult-n-commuted (equal (mod (* n a) n) (* n (mod a 1))))
mod-0-inttheorem
(defthm mod-0-int (implies (and (integerp m) (integerp n) (not (= n 0))) (iff (= (mod m n) 0) (integerp (/ m n)))) :rule-classes nil)
mod-mult-2-gentheorem
(defthm mod-mult-2-gen (equal (mod (* a n) n) (* n (mod a 1))))
mod-mult-2-alt-gentheorem
(defthm mod-mult-2-alt-gen (equal (mod (* n a) n) (* n (mod a 1))))
mod-2*m+1-rewritetheorem
(defthm mod-2*m+1-rewrite (implies (integerp m) (equal (mod (1+ (* 2 m)) 2) 1)))
induct-natfunction
(defun induct-nat (x) (if (and (integerp x) (> x 0)) (induct-nat (1- x)) nil))
nk>=ktheorem
(defthm nk>=k (implies (and (integerp n) (integerp k) (> k 0) (not (= (* n k) 0))) (>= (abs (* n k)) k)) :rule-classes nil)
mod-force-equaltheorem
(defthm mod-force-equal (implies (and (< (abs (- a b)) n) (rationalp a) (rationalp b) (integerp n)) (iff (= (mod a n) (mod b n)) (= a b))) :rule-classes nil :hints (("goal" :use (mod-equal-int (:instance nk>=k (k n) (n (/ (- a b) n)))))))
nk>=k-lineartheorem
(defthmd nk>=k-linear (implies (and (integerp n) (integerp k) (not (= n 0))) (>= (abs (* n k)) k)) :rule-classes :linear)
fl-modtheorem
(defthm fl-mod (implies (and (rationalp x) (natp y)) (equal (fl (mod x y)) (mod (fl x) y))))
mod-sum-casestheorem
(defthmd mod-sum-cases (implies (and (<= 0 y) (rationalp x) (rationalp y) (rationalp k)) (equal (mod (+ k x) y) (if (< (+ (mod k y) (mod x y)) y) (+ (mod k y) (mod x y)) (+ (mod k y) (mod x y) (* -1 y))))))