1
; This file introduces definable Skolem functions that can be used in order to
2
; reduce theorems about all elements of a list to theorems about an arbitrary
3
; elements of a list. Matt Kaufmann first learned of this trick from Ken
8
;;;**********************************************************************
10
;;;**********************************************************************
12
(include-book "merge") ; for badguy and lemmas about it
14
(defun sumbits-badguy (x y k)
17
(if (not (equal (bitn x (1- k)) (bitn y (1- k))))
19
(sumbits-badguy x y (1- k)))))
22
(defthm sumbits-badguy-is-correct-lemma
23
(implies (equal (bitn x (sumbits-badguy x y k))
24
(bitn y (sumbits-badguy x y k)))
29
(defthmd sumbits-badguy-is-correct
30
(implies (and (bvecp x k)
32
(equal (bitn x (sumbits-badguy x y k))
33
(bitn y (sumbits-badguy x y k)))
36
(equal (equal x y) t))
38
:use sumbits-badguy-is-correct-lemma
39
:in-theory (enable sumbits-thm))))
41
(defthmd sumbits-badguy-bounds
42
(implies (and (integerp k)
44
(let ((badguy (sumbits-badguy x y k)))
45
(and (integerp badguy)