3
;Rename this book, since the guts have been ripped out?
4
;BOZO clean up this book?
5
;BOZO move these lemmas to extra?
8
This book contains a few lemmas which are exported in lib/arith but which aren't needed in support/ or
13
(local (include-book "fp2"))
15
(defthm rearrange-fractional-coefs-<
17
(implies (and (case-split (rationalp c))
18
(case-split (rationalp z))
19
(case-split (rationalp x))
21
(equal (< (* (/ c) x) z)
23
(implies (and (case-split (rationalp c))
24
(case-split (rationalp z))
25
(case-split (rationalp x))
26
(case-split (rationalp y))
28
(equal (< (+ (* (/ c) x) y) z)
29
(< (+ x (* c y)) (* c z))))
30
(implies (and (case-split (rationalp c))
31
(case-split (rationalp z))
32
(case-split (rationalp x))
33
(case-split (rationalp y))
35
(equal (< (+ y (* (/ c) x)) z)
36
(< (+ (* c y) x) (* c z))))
37
(implies (and (case-split (rationalp c))
38
(case-split (rationalp z))
39
(case-split (rationalp x))
40
(case-split (rationalp y1))
41
(case-split (rationalp y2))
43
(equal (< (+ y1 y2 (* (/ c) x)) z)
44
(< (+ (* c y1) (* c y2) x) (* c z))))
45
(implies (and (case-split (rationalp c))
46
(case-split (rationalp z))
47
(case-split (rationalp x))
48
(case-split (rationalp y1))
49
(case-split (rationalp y2))
50
(case-split (rationalp y3))
52
(equal (< (+ y1 y2 y3 (* (/ c) x)) z)
53
(< (+ (* c y1) (* c y2) (* c y3) x) (* c z))))
54
(implies (and (case-split (rationalp c))
55
(case-split (rationalp z))
56
(case-split (rationalp x))
58
(equal (< z (* (/ c) x))
60
(implies (and (case-split (rationalp c))
61
(case-split (rationalp z))
62
(case-split (rationalp x))
63
(case-split (rationalp y))
65
(equal (< z (+ (* (/ c) x) y))
66
(< (* c z) (+ x (* c y)))))
67
(implies (and (case-split (rationalp c))
68
(case-split (rationalp z))
69
(case-split (rationalp x))
70
(case-split (rationalp y))
72
(equal (< z (+ y (* (/ c) x)))
73
(< (* c z) (+ (* c y) x))))
74
(implies (and (case-split (rationalp c))
75
(case-split (rationalp z))
76
(case-split (rationalp x))
77
(case-split (rationalp y1))
78
(case-split (rationalp y2))
80
(equal (< z (+ y1 y2 (* (/ c) x)))
81
(< (* c z) (+ (* c y1) (* c y2) x))))
82
(implies (and (case-split (rationalp c))
83
(case-split (rationalp z))
84
(case-split (rationalp x))
85
(case-split (rationalp y1))
86
(case-split (rationalp y2))
87
(case-split (rationalp y3))
89
(equal (< z (+ y1 y2 y3 (* (/ c) x)))
90
(< (* c z) (+ (* c y1) (* c y2) (* c y3) x))))))
93
(defthm rearrange-fractional-coefs-equal
95
(implies (and (case-split (rationalp c))
96
(case-split (rationalp z))
97
(case-split (rationalp x))
99
(equal (equal (* (/ c) x) z)
101
(implies (and (case-split (rationalp c))
102
(case-split (rationalp z))
103
(case-split (rationalp x))
104
(case-split (rationalp y))
106
(equal (equal (+ (* (/ c) x) y) z)
107
(equal (+ x (* c y)) (* c z))))
108
(implies (and (case-split (rationalp c))
109
(case-split (rationalp z))
110
(case-split (rationalp x))
111
(case-split (rationalp y))
113
(equal (equal (+ y (* (/ c) x)) z)
114
(equal (+ (* c y) x) (* c z))))
115
(implies (and (case-split (rationalp c))
116
(case-split (rationalp z))
117
(case-split (rationalp x))
118
(case-split (rationalp y1))
119
(case-split (rationalp y2))
121
(equal (equal (+ y1 y2 (* (/ c) x)) z)
122
(equal (+ (* c y1) (* c y2) x) (* c z))))
123
(implies (and (case-split (rationalp c))
124
(case-split (rationalp z))
125
(case-split (rationalp x))
126
(case-split (rationalp y1))
127
(case-split (rationalp y2))
128
(case-split (rationalp y3))
130
(equal (equal (+ y1 y2 y3 (* (/ c) x)) z)
131
(equal (+ (* c y1) (* c y2) (* c y3) x) (* c z))))))
135
; We now prove a bunch of bounds theorems for *. We are concerned with bounding the
136
; product of a and b given intervals for a and b. We consider three kinds of intervals.
137
; We discuss only the a case.
139
; abs intervals mean (abs a) < amax or -amax < a < amax, where amax is positive.
141
; nonneg-open intervals mean 0<=a<amax.
143
; nonneg-closed intervals mean 0<=a<=amax, where amax is positive.
145
; We now prove theorems with names like abs*nonneg-open, etc. characterizing
146
; the product of two elements from two such interals. All of these theorems
147
; are made with :rule-classes nil because I don't know how to control their
153
(implies (and (rationalp a)
162
(and (< (- (* xmax bmax)) (* a b))
163
(< (* a b) (* xmax bmax))))
164
:hints (("Goal" :cases ((equal b 0))))))
166
; This lemma is for lookup * d and lookup * away. We don't need to consider 0
167
; < b for the d case because we have 0 < 1 <= d and the conclusion of the new
168
; lemma would be no different.
170
(defthm abs*nonneg-open
171
(implies (and (rationalp a)
176
(<= a amax) ; (< a amax) is all we'll ever use, I bet.
180
(and (< (- (* amax bmax)) (* a b))
181
(< (* a b) (* amax bmax))))
182
:hints (("Goal" :by renaming))
185
(defthm abs*nonneg-closed
186
(implies (and (rationalp a)
196
(and (< (- (* amax bmax)) (* a b))
197
(< (* a b) (* amax bmax))))
198
:hints (("Goal" :cases ((equal b 0))))
201
(defthm nonneg-closed*abs
202
(implies (and (rationalp a)
212
(and (< (- (* amax bmax)) (* b a))
213
(< (* b a) (* amax bmax))))
214
:hints (("Goal" :use abs*nonneg-closed))
217
(defthm nonneg-open*abs
218
(implies (and (rationalp a)
223
(<= a amax) ; (< a amax) is all we'll ever use, I bet.
227
(and (< (- (* bmax amax)) (* a b))
228
(< (* a b) (* bmax amax))))
229
:hints (("Goal" :use abs*nonneg-open))
232
; The next three, which handle nonnegative open intervals in the first argument,
233
; can actually be seen as uses of the abs intervals above. Simply observe that
234
; if 0<=a<amax then -amax<a<amax.
236
(defthm nonneg-open*nonneg-closed
237
(implies (and (rationalp a)
247
(< (* a b) (* amax bmax))))
248
:hints (("Goal" :use abs*nonneg-closed))
251
(defthm nonneg-open*nonneg-open
252
(implies (and (rationalp a)
261
(< (* a b) (* amax bmax))))
262
:hints (("Goal" :use abs*nonneg-open))
265
; and the commuted version
266
(defthm nonneg-closed*nonneg-open
267
(implies (and (rationalp a)
277
(< (* b a) (* amax bmax))))
278
:hints (("Goal" :use nonneg-open*nonneg-closed))
281
(defthm nonneg-closed*nonneg-closed
282
(implies (and (rationalp a)
293
(<= (* a b) (* amax bmax))))
297
(implies (and (rationalp a)
307
(and (< (- (* amax bmax)) (* a b))
308
(< (* a b) (* amax bmax))))
309
:hints (("Goal" :cases ((< b 0) (> b 0))))