1
; The ACL2 Matrix Algebra Book. Summary of definitions and algebra in matrix.lisp.
2
; Copyright (C) 2002 Ruben Gamboa and John R. Cowles, University of Wyoming
4
; This book is free software; you can redistribute it and/or modify
5
; it under the terms of the GNU General Public License as published by
6
; the Free Software Foundation; either version 2 of the License, or
7
; (at your option) any later version.
9
; This book is distributed in the hope that it will be useful,
10
; but WITHOUT ANY WARRANTY; without even the implied warranty of
11
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
; GNU General Public License for more details.
14
; You should have received a copy of the GNU General Public License
15
; along with this book; if not, write to the Free Software
16
; Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19
; Ruben Gamboa and John Cowles
20
; Department of Computer Science
21
; University of Wyoming
22
; Laramie, WY 82071-3682 U.S.A.
24
; Summer and Fall 2002.
25
; Last modified 1 November 2002.
28
To certify in ACL2 Version 2.6
30
(ld ;; Newline to fool dependency scanner
32
(certify-book "kalman-proof" 1)
37
(include-book "kalman-defs")
39
(defmacro enable-disable (enable-list disable-list)
41
(cons 'disable disable-list)
42
`(quote ,enable-list)))
44
(defstub best-estimate-of-x (*) => *)
46
(defun best-prior-estimate-of-x (k)
50
(best-estimate-of-x (1- k)))))
52
(defun result-form (y Xp k)
59
(defun result-form-derivative (y Xp k)
60
(m-+ (s-* 2 (m-mean (m-* (m-- Xp (x k))
64
(m-mean (m-* (m-- (z k)
67
(m-* (h k) Xp)))))))))
69
(defaxiom best-estimate-of-x-def
70
(implies (and (m-= (best-prior-estimate-of-x k) Xp)
71
(m-= (result-form-derivative y Xp k) (m-zero (n) (m))))
72
(m-= (best-estimate-of-x k)
73
(result-form y Xp k))))
76
(defthm non-singular-gain-component
77
(not (m-singular (m-mean (m-* (m-+ (z k)
78
(m-unary-- (m-* (h k) (xhatmin k))))
80
(m-unary-- (m-* (m-trans (xhatmin k))
81
(m-trans (h k)))))))))))
84
(defthm non-singular-gain-component-2
85
(not (m-singular (m-+ (r k) (m-* (h k) (m-* (pminus k) (m-trans (h k)))))))))
87
(defthm pminus-as-mean-case-0
90
(m-mean (m-* (m-- (x k) (xhatmin k))
91
(m-trans (m-- (x k) (xhatmin k)))))))
94
:in-theory (enable-disable (pminus xhatmin)
95
(x ; added by Matt K. for v2-8, 7/31/03
96
(pminus) (xhatmin))))))
103
(implies (and (integerp k)
105
(equal (m-- (x k) (xhatmin k))
106
(m-- (m-+ (m-* (phi (1- k)) (x (1- k)))
110
:hints (("Goal" :do-not-induct t
111
:in-theory (disable xhat)))
116
(implies (and (integerp k)
118
(equal (m-- (x k) (xhatmin k))
119
(m-+ (m-* (phi (1- k))
123
:hints (("Goal" :do-not-induct t
124
:use ((:instance lemma-1)
126
(implies (and (m-matrixp (l phi) (c phi) phi)
127
(m-matrixp (l x) (c x) x)
128
(m-matrixp (l xhat) (c xhat) xhat)
129
(m-matrixp (l ww) (c x) ww)
130
(equal (c phi) (l x))
131
(equal (l phi) (l ww))
133
(equal (c phi) (l xhat))
134
(equal (c x) (c xhat))
135
(equal (l x) (l xhat)))
136
(equal (m-- (m-+ (m-* phi x)
139
(m-+ (m-* phi (m-- x xhat))
144
(xhat (xhat (1- k))))))
145
("Subgoal 2'" :in-theory nil))
150
(implies (and (m-matrixp (l a) (c a) a)
151
(m-matrixp (l b) (c b) b)
156
(m-+ (m-* a (m-trans a))
157
(m-+ (m-* a (m-trans b))
158
(m-+ (m-* b (m-trans a))
159
(m-* b (m-trans b)))))))
164
(implies (and (m-= (m-* (m-+ (m-* phi (m-+ x (m-unary-- xhat))) ww)
165
(m-trans (m-+ (m-* phi (m-+ x (m-unary-- xhat))) ww)))
167
(m-* (m-+ x (m-unary-- xhat))
170
(m-unary-- xhat))))))
171
(m-+ (m-* phi (m-* (m-+ x (m-unary-- xhat))
177
(m-* ww (m-trans ww))))))
178
(m-matrixp (l x) (c x) x)
179
(m-matrixp (l xhat) (c xhat) xhat)
180
(m-matrixp (l phi) (c phi) phi)
181
(m-matrixp (l ww) (c ww) ww)
182
(equal (l phi) (l ww))
184
(equal (c phi) (l x))
185
(equal (c ww) (c xhat))
186
(equal (l x) (l xhat)))
187
(m-= (m-* (m-+ (m-* phi (m-+ x (m-unary-- xhat))) ww)
188
(m-trans (m-+ (m-* phi (m-+ x (m-unary-- xhat))) ww)))
189
(m-+ (m-* phi (m-* (m-+ x (m-unary-- xhat))
190
(m-* (m-trans (m-+ x (m-unary-- xhat)))
192
(m-+ (m-* phi (m-* (m-+ x (m-unary-- xhat)) (m-trans ww)))
193
(m-+ (m-* ww (m-* (m-trans (m-+ x (m-unary-- xhat)))
195
(m-* ww (m-trans ww)))))))
197
:use ((:instance acl2::trans-*
199
(acl2::q (m-- x xhat))))
200
:in-theory (disable acl2::trans-*
207
(implies (and (m-matrixp (l x) (c x) x)
208
(m-matrixp (l xhat) (c xhat) xhat)
209
(m-matrixp (l phi) (c phi) phi)
210
(m-matrixp (l ww) (c ww) ww)
211
(equal (c phi) (l x))
212
(equal (l phi) (l ww))
214
(equal (c phi) (l xhat))
215
(equal (c x) (c xhat))
216
(equal (l x) (l xhat)))
217
(m-= (m-* (m-+ (m-* phi (m-- x xhat)) ww)
218
(m-trans (m-+ (m-* phi (m-- x xhat)) ww)))
219
(m-+ (m-* (m-* phi (m-- x xhat)) (m-* (m-trans (m-- x xhat))
221
(m-+ (m-* (m-* phi (m-- x xhat)) (m-trans ww))
222
(m-+ (m-* ww (m-* (m-trans (m-- x xhat))
224
(m-* ww (m-trans ww)))))))
226
:use ((:instance lemma-3a
227
(a (m-* phi (m-- x xhat)))
230
:use ((:instance lemma-3b-1))
231
:in-theory (disable acl2::trans-*
238
(m-= (m-* (m-+ (m-* (phi (1- k)) (m-- (x (1- k)) (xhat (1- k))))
240
(m-trans (m-+ (m-* (phi (1- k))
241
(m-- (x (1- k)) (xhat (1- k))))
243
(m-+ (m-* (m-* (phi (1- k))
244
(m-- (x (1- k)) (xhat (1- k))))
245
(m-* (m-trans (m-- (x (1- k)) (xhat (1- k))))
246
(m-trans (phi (1- k)))))
247
(m-+ (m-* (m-* (phi (1- k))
248
(m-- (x (1- k)) (xhat (1- k))))
249
(m-trans (ww (1- k))))
250
(m-+ (m-* (ww (1- k))
251
(m-* (m-trans (m-- (x (1- k))
253
(m-trans (phi (1- k)))))
254
(m-* (ww (1- k)) (m-trans (ww (1- k))))))))
256
:use ((:instance lemma-3b
260
(xhat (xhat (1- k)))))))
266
(ACL2::M-BINARY-* (PHI (+ -1 K))
267
(ACL2::M-BINARY-* (ACL2::M-BINARY-+ (X (+ -1 K))
268
(ACL2::M-UNARY-- (XHAT (+ -1 K))))
269
(ACL2::M-TRANS (WW (+ -1 K))))))
271
:hints (("Goal" :do-not-induct t
272
:use ((:instance mean-*
274
(q (m-* (m-+ (x (+ -1 k))
275
(m-unary-- (xhat (+ -1 k))))
276
(m-trans (ww (+ -1 k))))))
277
(:instance mean-of-x-xhat*wtrans
279
:in-theory (disable xhat z
281
mean-of-x-xhat*wtrans)))))
286
(ACL2::M-BINARY-* (WW (+ -1 K))
288
(ACL2::M-BINARY-+ (ACL2::M-TRANS (X (+ -1 K)))
289
(ACL2::M-UNARY-- (ACL2::M-TRANS (XHAT (+ -1 K)))))
290
(ACL2::M-TRANS (PHI (+ -1 K))))))
292
:hints (("Goal" :do-not-induct t
293
:use ((:instance mean-*
294
(p (m-* (ww (+ -1 k))
295
(m-+ (m-trans (x (+ -1 k)))
296
(m-unary-- (m-trans (xhat (+ -1 k)))))))
297
(q (m-trans (phi (+ -1 k)))))
298
(:instance mean-of-w*trans-of-x-xhat
300
:in-theory (disable xhat z
302
mean-of-w*trans-of-x-xhat)))))
308
(ACL2::M-BINARY-* (PHI (+ -1 K))
309
(ACL2::M-BINARY-* (ACL2::M-BINARY-+ (X (+ -1 K))
310
(ACL2::M-UNARY-- (XHAT (+ -1 K))))
312
(ACL2::M-BINARY-+ (ACL2::M-TRANS (X (+ -1 K)))
313
(ACL2::M-UNARY-- (ACL2::M-TRANS (XHAT (+ -1 K)))))
314
(ACL2::M-TRANS (PHI (+ -1 K)))))))
315
(m-* (m-* (phi (1- k))
316
(m-mean (m-* (m-+ (x (+ -1 k))
317
(m-unary-- (xhat (+ -1 k))))
318
(m-trans (m-+ (x (+ -1 k))
319
(m-unary-- (xhat (+ -1 k))))))))
320
(m-trans (phi (1- k)))))
321
:hints (("Goal" :do-not-induct t
322
:use ((:instance mean-*
324
(m-* (m-+ (x (+ -1 k))
325
(m-unary-- (xhat (+ -1 k))))
326
(m-trans (m-+ (x (+ -1 k))
327
(m-unary-- (xhat (+ -1 k))))))))
328
(q (m-trans (phi (+ -1 k)))))
331
(q (m-* (m-+ (x (+ -1 k))
332
(m-unary-- (xhat (+ -1 k))))
333
(m-trans (m-+ (x (+ -1 k))
334
(m-unary-- (xhat (+ -1 k))))))))
335
(:instance mean-delete
337
:in-theory (disable xhat z acl2::*-+-right)))))
347
(acl2::m-binary-+ (x (+ -1 k))
348
(acl2::m-unary-- (xhat (+ -1 k))))
350
(acl2::m-binary-+ (acl2::m-trans (x (+ -1 k)))
351
(acl2::m-unary-- (acl2::m-trans (xhat (+ -1 k)))))
352
(acl2::m-trans (phi (+ -1 k))))))
356
(acl2::m-binary-* (acl2::m-binary-+ (x (+ -1 k))
357
(acl2::m-unary-- (xhat (+ -1 k))))
358
(acl2::m-trans (ww (+ -1 k)))))
360
(acl2::m-binary-* (ww (+ -1 k))
361
(acl2::m-trans (ww (+ -1 k))))
365
(acl2::m-binary-+ (acl2::m-trans (x (+ -1 k)))
366
(acl2::m-unary-- (acl2::m-trans (xhat (+ -1 k)))))
367
(acl2::m-trans (phi (+ -1 k)))))))))
375
(acl2::m-binary-+ (x (+ -1 k))
376
(acl2::m-unary-- (xhat (+ -1 k))))
377
(acl2::m-binary-+ (acl2::m-trans (x (+ -1 k)))
378
(acl2::m-unary-- (acl2::m-trans (xhat (+ -1 k)))))))
379
(acl2::m-trans (phi (+ -1 k)))))))
380
:hints (("Goal" :in-theory (disable acl2::*-+-right
384
acl2::right-distributivity-of-m-*-over-m-+
385
acl2::left-distributivity-of-m-*-over-m-+
386
xhat x z xhatmin-recdef gain-recdef)))))
390
(m-= (m-mean (m-* (m-+ (m-* (phi (1- k)) (m-- (x (1- k)) (xhat (1- k))))
392
(m-trans (m-+ (m-* (phi (1- k))
393
(m-- (x (1- k)) (xhat (1- k))))
395
(m-+ (m-* (m-* (phi (1- k))
396
(m-mean (m-* (m-- (x (1- k)) (xhat (1- k)))
397
(m-trans (m-- (x (1- k)) (xhat (1- k)))))))
398
(m-trans (phi (1- k))))
401
:use ((:instance lemma-3))
406
(m-+ (m-* (m-* (phi (+ -1 k))
407
(m-- (x (+ -1 k)) (xhat (+ -1 k))))
408
(m-* (m-trans (m-- (x (+ -1 k)) (xhat (+ -1 k))))
409
(m-trans (phi (+ -1 k)))))
410
(m-+ (m-* (m-* (phi (+ -1 k))
411
(m-- (x (+ -1 k)) (xhat (+ -1 k))))
412
(m-trans (ww (+ -1 k))))
413
(m-+ (m-* (ww (+ -1 k))
414
(m-* (m-trans (m-- (x (+ -1 k)) (xhat (+ -1 k))))
415
(m-trans (phi (+ -1 k)))))
417
(m-trans (ww (+ -1 k))))))))
418
(m-+ (m-* (m-* (phi (+ -1 k))
419
(m-mean (m-* (m-- (x (+ -1 k)) (xhat (+ -1 k)))
420
(m-trans (m-- (x (+ -1 k)) (xhat (+ -1 k)))))))
421
(m-trans (phi (+ -1 k))))
423
:in-theory (disable acl2::*-+-right
427
acl2::right-distributivity-of-m-*-over-m-+
428
acl2::left-distributivity-of-m-*-over-m-+
429
acl2::commutativity-2-of-m-+
439
(implies (and (integerp k)
441
(m-= (m-mean (m-* (m-- (x k) (xhatmin k))
442
(m-trans (m-- (x k) (xhatmin k)))))
443
(m-+ (m-* (m-* (phi (1- k))
444
(m-mean (m-* (m-- (x (1- k)) (xhat (1- k)))
445
(m-trans (m-- (x (1- k)) (xhat (1- k)))))))
446
(m-trans (phi (1- k))))
448
:hints (("Goal" :do-not-induct t
449
:use ((:instance lemma-2)
451
:in-theory (disable x xhat xhatmin-recdef
456
acl2::right-distributivity-of-m-*-over-m-+
457
acl2::left-distributivity-of-m-*-over-m-+
458
acl2::commutativity-2-of-m-+)))
461
(defthm pminus-as-mean-almost
462
(implies (and (integerp k)
465
(m-mean (m-* (m-- (x (1- k))
467
(m-trans (m-- (x (1- k))
470
(m-mean (m-* (m-- (x k) (xhatmin k))
471
(m-trans (m-- (x k) (xhatmin k)))))))
472
:hints (("Goal" :do-not-induct t
473
:use ((:instance lemma-5))
474
:in-theory (disable x xhat xhatmin
475
gain-recdef pplus-recdef xhatmin-recdef
480
acl2::right-distributivity-of-m-*-over-m-+
481
acl2::left-distributivity-of-m-*-over-m-+
482
acl2::commutativity-2-of-m-+))))
485
(defthm matrix-*-trans
486
(implies (and (equal m (l x))
489
(m-matrixp m n (m-* x (m-trans x)))))
491
(defthm id-*-x-useful
492
(implies (and (equal (l p) n)
493
(m-matrixp (l p) (c p) p))
494
(m-= (m-* (m-id n) p) p))
496
:use ((:instance acl2::id-*-x
500
:in-theory (disable acl2::id-*-x))))
502
(defthm x-*-id-useful
503
(implies (and (equal (c p) n)
504
(m-matrixp (l p) (c p) p))
505
(m-= (m-* p (m-id n)) p))
507
:use ((:instance acl2::x-*-id
511
:in-theory (disable acl2::x-*-id))))
518
(m-= (m-- (x k) (xhat k))
519
(m-- (m-* (m-- (m-id (n))
520
(m-* (gain k) (h k)))
521
(m-- (x k) (xhatmin k)))
524
:hints (("Goal" :do-not-induct t
525
:use ((:instance acl2::id-*-x
529
(:instance acl2::id-*-x
530
(acl2::p (xhatmin k))
533
:in-theory (disable acl2::id-*-x)))
539
(implies (and (equal (l a) (l b))
541
(m-matrixp (l b) (c b) b)
542
(m-matrixp (l a) (c a) a))
545
(m-+ (m-* a (m-trans a))
546
(m-+ (m-unary-- (m-* a (m-trans b)))
547
(m-+ (m-unary-- (m-* b (m-trans a)))
548
(m-* b (m-trans b)))))))
550
:use ((:instance acl2::unary---unary--
551
(acl2::p (m-* b (m-trans b)))))
552
:in-theory (disable acl2::unary---unary--)))
557
(m-= (m-* (m-- (x k) (xhat k))
558
(m-trans (m-- (x k) (xhat k))))
559
(m-+ (m-* (m-- (m-id (n))
560
(m-* (gain k) (h k)))
561
(m-* (m-* (m-- (x k) (xhatmin k))
562
(m-trans (m-- (x k) (xhatmin k))))
563
(m-trans (m-- (m-id (n))
564
(m-* (gain k) (h k))))))
565
(m-+ (m-unary-- (m-* (m-- (m-id (n))
566
(m-* (gain k) (h k)))
567
(m-* (m-* (m-- (x k) (xhatmin k))
569
(m-trans (gain k)))))
570
(m-+ (m-unary-- (m-* (gain k)
572
(m-trans (m-- (x k) (xhatmin k))))
573
(m-trans (m-- (m-id (n))
574
(m-* (gain k) (h k)))))))
578
(m-trans (gain k))))))))
580
:use ((:instance lemma-1)
582
(a (m-* (m-- (m-id (n))
583
(m-* (gain k) (h k)))
584
(m-- (x k) (xhatmin k))))
587
:in-theory (disable x xhat xhatmin
588
gain-recdef pplus-recdef xhatmin-recdef
593
ACL2::LEFT-DISTRIBUTIVITY-OF-M-*-OVER-M-+
594
ACL2::RIGHT-DISTRIBUTIVITY-OF-M-*-OVER-M-+)))
600
(and (equal (l (m-- (x k) (xhatmin k))) (n))
601
(equal (c (m-- (m-id (n)) (m-* (gain k) (h k)))) (n)))))
605
(m-= (m-mean (ACL2::M-BINARY-*
606
(ACL2::M-BINARY-+ (ACL2::M-1 (N))
607
(ACL2::M-UNARY-- (ACL2::M-BINARY-* (GAIN K) (H K))))
609
(ACL2::M-BINARY-+ (X K)
610
(ACL2::M-UNARY-- (XHATMIN K)))
612
(ACL2::M-BINARY-+ (ACL2::M-TRANS (X K))
613
(ACL2::M-UNARY-- (ACL2::M-TRANS (XHATMIN K))))
616
(ACL2::M-UNARY-- (ACL2::M-BINARY-* (ACL2::M-TRANS (H K))
617
(ACL2::M-TRANS (GAIN K)))))))))
619
(m-* (gain k) (h k)))
620
(m-* (m-mean (m-* (m-- (x k) (xhatmin k))
621
(m-trans (m-- (x k) (xhatmin k)))))
622
(m-trans (m-- (m-id (n))
623
(m-* (gain k) (h k)))))))
625
:use ((:instance mean-*
627
(m-* (gain k) (h k))))
628
(q (m-* (m-- (x k) (xhatmin k))
629
(m-* (m-trans (m-- (x k) (xhatmin k)))
630
(m-trans (m-- (m-id (n))
631
(m-* (gain k) (h k))))))))
633
(p (m-* (m-- (x k) (xhatmin k))
634
(m-trans (m-- (x k) (xhatmin k)))))
635
(q (m-trans (m-- (m-id (n))
636
(m-* (gain k) (h k))))))
637
(:instance mean-delete
639
(:instance mean-delete
640
(p (m-* (gain k) (h k)))))
641
:in-theory (disable x xhatmin gain gain-recdef
646
ACL2::LEFT-DISTRIBUTIVITY-OF-M-*-OVER-M-+
647
ACL2::RIGHT-DISTRIBUTIVITY-OF-M-*-OVER-M-+
648
;acl2::trans-* acl2::trans-+ acl2::trans---
653
(m-= (m-mean (ACL2::M-UNARY--
655
(ACL2::M-BINARY-+ (ACL2::M-1 (N))
656
(ACL2::M-UNARY-- (ACL2::M-BINARY-* (GAIN K) (H K))))
657
(ACL2::M-BINARY-* (ACL2::M-BINARY-+ (X K)
658
(ACL2::M-UNARY-- (XHATMIN K)))
659
(ACL2::M-BINARY-* (ACL2::M-TRANS (V K))
660
(ACL2::M-TRANS (GAIN K)))))))
662
:hints (("Goal" :do-not-induct t
663
:use ((:instance mean-*
665
(m-* (gain k) (h k))))
666
(q (m-* (m-* (m-- (x k) (xhatmin k))
668
(m-trans (gain k)))))
670
(p (m-* (m-- (x k) (xhatmin k))
672
(q (m-trans (gain k))))
673
(:instance mean-of-x-xhatmin*vtrans))
674
:in-theory (disable mean-of-x-xhatmin*vtrans
680
ACL2::LEFT-DISTRIBUTIVITY-OF-M-*-OVER-M-+
681
ACL2::RIGHT-DISTRIBUTIVITY-OF-M-*-OVER-M-+
693
(ACL2::M-BINARY-+ (ACL2::M-TRANS (X K))
694
(ACL2::M-UNARY-- (ACL2::M-TRANS (XHATMIN K))))
697
(ACL2::M-UNARY-- (ACL2::M-BINARY-* (ACL2::M-TRANS (H K))
698
(ACL2::M-TRANS (GAIN K))))))))))
702
:hints (("Goal" :do-not-induct t
703
:use ((:instance mean-*
706
(m-trans (m-- (x k) (xhatmin k))))
707
(m-trans (m-- (m-id (n))
708
(m-* (gain k) (h k)))))))
711
(m-trans (m-- (x k) (xhatmin k)))))
712
(q (m-trans (m-- (m-id (n))
713
(m-* (gain k) (h k))))))
714
(:instance mean-of-v*trans-of-x-xhatmin))
715
:in-theory (disable mean-of-v*trans-of-x-xhatmin
721
ACL2::LEFT-DISTRIBUTIVITY-OF-M-*-OVER-M-+
722
ACL2::RIGHT-DISTRIBUTIVITY-OF-M-*-OVER-M-+
728
(equal (m-mean (m-* (gain k)
731
(m-trans (gain k))))))
734
(m-trans (gain k)))))
736
:use ((:instance mean-*
740
(m-trans (gain k)))))
744
(q (m-trans (gain k))))
745
(:instance mean-delete
747
:in-theory (disable gain gain-recdef)))))
761
(ACL2::M-BINARY-* (V K)
762
(ACL2::M-BINARY-* (ACL2::M-TRANS (V K))
763
(ACL2::M-TRANS (GAIN K)))))))
770
(ACL2::M-BINARY-+ (ACL2::M-1 (N))
771
(ACL2::M-UNARY-- (ACL2::M-BINARY-* (GAIN K) (H K))))
772
(ACL2::M-BINARY-* (ACL2::M-BINARY-+ (X K)
773
(ACL2::M-UNARY-- (XHATMIN K)))
774
(ACL2::M-BINARY-* (ACL2::M-TRANS (V K))
775
(ACL2::M-TRANS (GAIN K))))))
783
(ACL2::M-BINARY-+ (ACL2::M-TRANS (X K))
784
(ACL2::M-UNARY-- (ACL2::M-TRANS (XHATMIN K))))
787
(ACL2::M-UNARY-- (ACL2::M-BINARY-* (ACL2::M-TRANS (H K))
788
(ACL2::M-TRANS (GAIN K)))))))))
790
(ACL2::M-BINARY-+ (ACL2::M-1 (N))
791
(ACL2::M-UNARY-- (ACL2::M-BINARY-* (GAIN K) (H K))))
793
(ACL2::M-BINARY-+ (X K)
794
(ACL2::M-UNARY-- (XHATMIN K)))
796
(ACL2::M-BINARY-+ (ACL2::M-TRANS (X K))
797
(ACL2::M-UNARY-- (ACL2::M-TRANS (XHATMIN K))))
801
(ACL2::M-BINARY-* (ACL2::M-TRANS (H K))
802
(ACL2::M-TRANS (GAIN K)))))))))))))
804
:in-theory (disable gain gain-recdef x xhat xhatmin
809
ACL2::LEFT-DISTRIBUTIVITY-OF-M-*-OVER-M-+
810
ACL2::RIGHT-DISTRIBUTIVITY-OF-M-*-OVER-M-+)))))
821
(ACL2::M-BINARY-* (V K)
822
(ACL2::M-BINARY-* (ACL2::M-TRANS (V K))
823
(ACL2::M-TRANS (GAIN K)))))))
830
(ACL2::M-BINARY-+ (ACL2::M-1 (N))
831
(ACL2::M-UNARY-- (ACL2::M-BINARY-* (GAIN K) (H K))))
832
(ACL2::M-BINARY-* (ACL2::M-BINARY-+ (X K)
833
(ACL2::M-UNARY-- (XHATMIN K)))
834
(ACL2::M-BINARY-* (ACL2::M-TRANS (V K))
835
(ACL2::M-TRANS (GAIN K))))))
843
(ACL2::M-BINARY-+ (ACL2::M-TRANS (X K))
844
(ACL2::M-UNARY-- (ACL2::M-TRANS (XHATMIN K))))
847
(ACL2::M-UNARY-- (ACL2::M-BINARY-* (ACL2::M-TRANS (H K))
848
(ACL2::M-TRANS (GAIN K)))))))))
850
(ACL2::M-BINARY-+ (ACL2::M-1 (N))
851
(ACL2::M-UNARY-- (ACL2::M-BINARY-* (GAIN K) (H K))))
853
(ACL2::M-BINARY-+ (X K)
854
(ACL2::M-UNARY-- (XHATMIN K)))
856
(ACL2::M-BINARY-+ (ACL2::M-TRANS (X K))
857
(ACL2::M-UNARY-- (ACL2::M-TRANS (XHATMIN K))))
861
(ACL2::M-BINARY-* (ACL2::M-TRANS (H K))
862
(ACL2::M-TRANS (GAIN K)))))))))))))
864
:in-theory (disable gain gain-recdef x xhat xhatmin
869
ACL2::LEFT-DISTRIBUTIVITY-OF-M-*-OVER-M-+
870
ACL2::RIGHT-DISTRIBUTIVITY-OF-M-*-OVER-M-+)))))
881
(ACL2::M-BINARY-+ (ACL2::M-1 (N))
882
(ACL2::M-UNARY-- (ACL2::M-BINARY-* (GAIN K) (H K))))
883
(ACL2::M-BINARY-* (ACL2::M-BINARY-+ (X K)
884
(ACL2::M-UNARY-- (XHATMIN K)))
885
(ACL2::M-BINARY-* (ACL2::M-TRANS (V K))
886
(ACL2::M-TRANS (GAIN K))))))))
897
(ACL2::M-BINARY-+ (ACL2::M-TRANS (X K))
898
(ACL2::M-UNARY-- (ACL2::M-TRANS (XHATMIN K))))
901
(ACL2::M-UNARY-- (ACL2::M-BINARY-* (ACL2::M-TRANS (H K))
902
(ACL2::M-TRANS (GAIN K)))))))))
904
(ACL2::M-BINARY-+ (ACL2::M-1 (N))
905
(ACL2::M-UNARY-- (ACL2::M-BINARY-* (GAIN K) (H K))))
907
(ACL2::M-BINARY-+ (X K)
908
(ACL2::M-UNARY-- (XHATMIN K)))
910
(ACL2::M-BINARY-+ (ACL2::M-TRANS (X K))
911
(ACL2::M-UNARY-- (ACL2::M-TRANS (XHATMIN K))))
914
(ACL2::M-UNARY-- (ACL2::M-BINARY-* (ACL2::M-TRANS (H K))
915
(ACL2::M-TRANS (GAIN K))))))))))))
918
:in-theory (disable gain gain-recdef x xhat xhatmin
923
ACL2::LEFT-DISTRIBUTIVITY-OF-M-*-OVER-M-+
924
ACL2::RIGHT-DISTRIBUTIVITY-OF-M-*-OVER-M-+)))))
935
(ACL2::M-BINARY-+ (ACL2::M-1 (N))
936
(ACL2::M-UNARY-- (ACL2::M-BINARY-* (GAIN K) (H K))))
937
(ACL2::M-BINARY-* (ACL2::M-BINARY-+ (X K)
938
(ACL2::M-UNARY-- (XHATMIN K)))
939
(ACL2::M-BINARY-* (ACL2::M-TRANS (V K))
940
(ACL2::M-TRANS (GAIN K))))))))
951
(ACL2::M-BINARY-+ (ACL2::M-TRANS (X K))
952
(ACL2::M-UNARY-- (ACL2::M-TRANS (XHATMIN K))))
955
(ACL2::M-UNARY-- (ACL2::M-BINARY-* (ACL2::M-TRANS (H K))
956
(ACL2::M-TRANS (GAIN K)))))))))
958
(ACL2::M-BINARY-+ (ACL2::M-1 (N))
959
(ACL2::M-UNARY-- (ACL2::M-BINARY-* (GAIN K) (H K))))
961
(ACL2::M-BINARY-+ (X K)
962
(ACL2::M-UNARY-- (XHATMIN K)))
964
(ACL2::M-BINARY-+ (ACL2::M-TRANS (X K))
965
(ACL2::M-UNARY-- (ACL2::M-TRANS (XHATMIN K))))
968
(ACL2::M-UNARY-- (ACL2::M-BINARY-* (ACL2::M-TRANS (H K))
969
(ACL2::M-TRANS (GAIN K))))))))))))
972
:in-theory (disable gain gain-recdef x xhat xhatmin
977
ACL2::LEFT-DISTRIBUTIVITY-OF-M-*-OVER-M-+
978
ACL2::RIGHT-DISTRIBUTIVITY-OF-M-*-OVER-M-+)))))
993
(ACL2::M-BINARY-+ (ACL2::M-TRANS (X K))
994
(ACL2::M-UNARY-- (ACL2::M-TRANS (XHATMIN K))))
997
(ACL2::M-UNARY-- (ACL2::M-BINARY-* (ACL2::M-TRANS (H K))
998
(ACL2::M-TRANS (GAIN K)))))))))))
1003
(ACL2::M-BINARY-+ (ACL2::M-1 (N))
1004
(ACL2::M-UNARY-- (ACL2::M-BINARY-* (GAIN K) (H K))))
1006
(ACL2::M-BINARY-+ (X K)
1007
(ACL2::M-UNARY-- (XHATMIN K)))
1009
(ACL2::M-BINARY-+ (ACL2::M-TRANS (X K))
1010
(ACL2::M-UNARY-- (ACL2::M-TRANS (XHATMIN K))))
1013
(ACL2::M-UNARY-- (ACL2::M-BINARY-* (ACL2::M-TRANS (H K))
1014
(ACL2::M-TRANS (GAIN K)))))))))))
1017
:in-theory (disable gain gain-recdef x xhat xhatmin
1022
ACL2::LEFT-DISTRIBUTIVITY-OF-M-*-OVER-M-+
1023
ACL2::RIGHT-DISTRIBUTIVITY-OF-M-*-OVER-M-+)))))
1038
(ACL2::M-BINARY-+ (ACL2::M-TRANS (X K))
1039
(ACL2::M-UNARY-- (ACL2::M-TRANS (XHATMIN K))))
1042
(ACL2::M-UNARY-- (ACL2::M-BINARY-* (ACL2::M-TRANS (H K))
1043
(ACL2::M-TRANS (GAIN K)))))))))))
1048
(ACL2::M-BINARY-+ (ACL2::M-1 (N))
1049
(ACL2::M-UNARY-- (ACL2::M-BINARY-* (GAIN K) (H K))))
1051
(ACL2::M-BINARY-+ (X K)
1052
(ACL2::M-UNARY-- (XHATMIN K)))
1054
(ACL2::M-BINARY-+ (ACL2::M-TRANS (X K))
1055
(ACL2::M-UNARY-- (ACL2::M-TRANS (XHATMIN K))))
1058
(ACL2::M-UNARY-- (ACL2::M-BINARY-* (ACL2::M-TRANS (H K))
1059
(ACL2::M-TRANS (GAIN K)))))))))))
1062
:in-theory (disable gain gain-recdef x xhat xhatmin
1067
ACL2::LEFT-DISTRIBUTIVITY-OF-M-*-OVER-M-+
1068
ACL2::RIGHT-DISTRIBUTIVITY-OF-M-*-OVER-M-+)))))
1081
(ACL2::M-BINARY-* (GAIN K)
1082
(ACL2::M-BINARY-* (R K)
1083
(ACL2::M-TRANS (GAIN K))))
1085
(ACL2::M-BINARY-+ (ACL2::M-1 (N))
1086
(ACL2::M-UNARY-- (ACL2::M-BINARY-* (GAIN K) (H K))))
1090
(ACL2::M-BINARY-+ (X K)
1091
(ACL2::M-UNARY-- (XHATMIN K)))
1092
(ACL2::M-TRANS (ACL2::M-BINARY-+ (X K)
1093
(ACL2::M-UNARY-- (XHATMIN K))))))
1095
(ACL2::M-BINARY-+ (ACL2::M-1 (N))
1096
(ACL2::M-UNARY-- (ACL2::M-BINARY-* (GAIN K)
1099
(ACL2::M-BINARY-* (GAIN K)
1100
(ACL2::M-BINARY-* (R K)
1101
(ACL2::M-TRANS (GAIN K))))
1103
(ACL2::M-BINARY-+ (ACL2::M-1 (N))
1104
(ACL2::M-UNARY-- (ACL2::M-BINARY-* (GAIN K) (H K))))
1108
(ACL2::M-BINARY-+ (X K)
1109
(ACL2::M-UNARY-- (XHATMIN K)))
1110
(ACL2::M-BINARY-+ (ACL2::M-TRANS (X K))
1111
(ACL2::M-UNARY-- (ACL2::M-TRANS (XHATMIN K))))))
1114
(ACL2::M-UNARY-- (ACL2::M-BINARY-* (ACL2::M-TRANS (H K))
1115
(ACL2::M-TRANS (GAIN K)))))))))
1118
:in-theory (disable gain gain-recdef x xhat xhatmin
1123
ACL2::LEFT-DISTRIBUTIVITY-OF-M-*-OVER-M-+
1124
ACL2::RIGHT-DISTRIBUTIVITY-OF-M-*-OVER-M-+)))))
1135
(ACL2::M-BINARY-* (V K)
1136
(ACL2::M-BINARY-* (ACL2::M-TRANS (V K))
1137
(ACL2::M-TRANS (GAIN K)))))
1141
(ACL2::M-BINARY-+ (ACL2::M-1 (N))
1142
(ACL2::M-UNARY-- (ACL2::M-BINARY-* (GAIN K) (H K))))
1143
(ACL2::M-BINARY-* (ACL2::M-BINARY-+ (X K)
1144
(ACL2::M-UNARY-- (XHATMIN K)))
1145
(ACL2::M-BINARY-* (ACL2::M-TRANS (V K))
1146
(ACL2::M-TRANS (GAIN K))))))
1154
(ACL2::M-BINARY-+ (ACL2::M-TRANS (X K))
1155
(ACL2::M-UNARY-- (ACL2::M-TRANS (XHATMIN K))))
1158
(ACL2::M-UNARY-- (ACL2::M-BINARY-* (ACL2::M-TRANS (H K))
1159
(ACL2::M-TRANS (GAIN K)))))))))
1161
(ACL2::M-BINARY-+ (ACL2::M-1 (N))
1162
(ACL2::M-UNARY-- (ACL2::M-BINARY-* (GAIN K) (H K))))
1164
(ACL2::M-BINARY-+ (X K)
1165
(ACL2::M-UNARY-- (XHATMIN K)))
1167
(ACL2::M-BINARY-+ (ACL2::M-TRANS (X K))
1168
(ACL2::M-UNARY-- (ACL2::M-TRANS (XHATMIN K))))
1172
(ACL2::M-BINARY-* (ACL2::M-TRANS (H K))
1173
(ACL2::M-TRANS (GAIN K))))))))))))
1175
(ACL2::M-BINARY-* (GAIN K)
1176
(ACL2::M-BINARY-* (R K)
1177
(ACL2::M-TRANS (GAIN K))))
1179
(ACL2::M-BINARY-+ (ACL2::M-1 (N))
1180
(ACL2::M-UNARY-- (ACL2::M-BINARY-* (GAIN K) (H K))))
1184
(ACL2::M-BINARY-+ (X K)
1185
(ACL2::M-UNARY-- (XHATMIN K)))
1186
(ACL2::M-BINARY-+ (ACL2::M-TRANS (X K))
1187
(ACL2::M-UNARY-- (ACL2::M-TRANS (XHATMIN K))))))
1190
(ACL2::M-UNARY-- (ACL2::M-BINARY-* (ACL2::M-TRANS (H K))
1191
(ACL2::M-TRANS (GAIN K)))))))))
1195
(:CHANGE-GOAL NIL T)
1200
:NX (:REWRITE MEAN-+)
1201
(:CHANGE-GOAL NIL T)
1206
:NX (:REWRITE MEAN-+)
1207
(:CHANGE-GOAL NIL T)
1212
:NX (:REWRITE LEMMA-3A)
1214
(:REWRITE ACL2::COMMUTATIVITY-2-OF-M-+)
1215
(:DIVE 2) ; changed by Matt K. for v2-9 due to proof-checker DV fix for binops
1216
(:REWRITE ACL2::COMMUTATIVITY-2-OF-M-+)
1217
:TOP (:USE LEMMA-3K))))
1221
(m-= (m-mean (m-* (m-- (x k) (xhat k))
1222
(m-trans (m-- (x k) (xhat k)))))
1223
(m-+ (m-* (m-- (m-id (n))
1224
(m-* (gain k) (h k)))
1225
(m-* (m-mean (m-* (m-- (x k) (xhatmin k))
1226
(m-trans (m-- (x k) (xhatmin k)))))
1227
(m-trans (m-- (m-id (n))
1228
(m-* (gain k) (h k))))))
1231
(m-trans (gain k))))))
1233
:use ((:instance lemma-2))
1234
:in-theory (disable x xhat xhatmin
1235
gain-recdef pplus-recdef xhatmin-recdef
1240
ACL2::LEFT-DISTRIBUTIVITY-OF-M-*-OVER-M-+
1241
ACL2::RIGHT-DISTRIBUTIVITY-OF-M-*-OVER-M-+
1244
:by (:instance lemma-3l)))
1249
(m-= (m-* (m-- (m-id (n))
1250
(m-* (gain k) (h k)))
1252
(m-trans (m-- (m-id (n))
1253
(m-* (gain k) (h k))))))
1255
(m-+ (m-unary-- (m-* (gain k) (m-* (h k) (pminus k))))
1256
(m-+ (m-unary-- (m-* (pminus k)
1257
(m-* (m-trans (h k))
1258
(m-trans (gain k)))))
1262
(m-* (m-trans (h k))
1263
(m-trans (gain k))))))))))
1264
:hints (("Goal" :do-not-induct t
1265
:in-theory (disable gain gain-recdef
1266
pminus pminus-recdef)))
1271
(m-= (m-+ (m-* (m-- (m-id (n))
1272
(m-* (gain k) (h k)))
1274
(m-trans (m-- (m-id (n))
1275
(m-* (gain k) (h k))))))
1278
(m-trans (gain k)))))
1280
(m-+ (m-unary-- (m-* (gain k) (m-* (h k) (pminus k))))
1281
(m-+ (m-unary-- (m-* (pminus k)
1282
(m-* (m-trans (h k))
1283
(m-trans (gain k)))))
1287
(m-* (m-trans (h k))
1288
(m-trans (gain k))))))
1291
(m-trans (gain k)))))))))
1292
:hints (("Goal" :do-not-induct t
1293
:use ((:instance lemma-4))
1294
:in-theory (disable gain gain-recdef
1295
pminus pminus-recdef)))
1300
(m-= (m-+ (m-* (gain k)
1303
(m-* (m-trans (h k))
1304
(m-trans (gain k))))))
1307
(m-trans (gain k)))))
1309
(m-* (m-+ (m-* (h k) (m-* (pminus k) (m-trans (h k))))
1311
(m-trans (gain k)))))
1313
:in-theory (disable gain gain-recdef pminus pminus-recdef)))
1318
(implies (and (not (m-singular x))
1319
(m-matrixp (l x) (c x) x)
1320
(m-matrixp (l y) (c y) y)
1323
(equal (c x) (l y)))
1330
:use ((:instance acl2::assoc-*
1334
(:instance acl2::inv-*-x
1336
:in-theory (disable acl2::assoc-*
1339
:in-theory (enable acl2::assoc-*)))))
1343
(implies (and (integerp k) (<= 0 k))
1344
(m-= (m-+ (m-* (gain k)
1347
(m-* (m-trans (h k))
1348
(m-trans (gain k))))))
1351
(m-trans (gain k)))))
1353
(m-* (m-trans (h k)) (m-trans (gain k))))))
1355
:use ((:instance lemma-6))
1356
:in-theory (disable gain pminus pminus-recdef
1363
ACL2::RIGHT-DISTRIBUTIVITY-OF-M-*-OVER-M-+
1364
ACL2::left-DISTRIBUTIVITY-OF-M-*-OVER-M-+
1365
acl2::COMMUTATIVITY-2-OF-M-+
1369
(implies (and (integerp k) (<= 0 k))
1371
(m-* (m-+ (m-* (h k)
1372
(m-* (pminus k) (m-trans (h k))))
1374
(m-trans (gain k))))
1376
(m-* (m-trans (h k))
1377
(m-trans (gain k))))))))
1379
:in-theory (disable gain pminus pminus-recdef
1385
ACL2::RIGHT-DISTRIBUTIVITY-OF-M-*-OVER-M-+
1386
ACL2::left-DISTRIBUTIVITY-OF-M-*-OVER-M-+
1387
acl2::COMMUTATIVITY-2-OF-M-+
1394
(implies (and (integerp k) (<= 0 k))
1395
(m-= (m-+ (m-* (m-- (m-id (n))
1396
(m-* (gain k) (h k)))
1398
(m-trans (m-- (m-id (n))
1399
(m-* (gain k) (h k))))))
1402
(m-trans (gain k)))))
1404
(m-* (gain k) (m-* (h k) (pminus k))))))
1405
:hints (("Goal" :do-not-induct t
1406
:use ((:instance lemma-5)
1408
(:instance lemma-7))
1409
:in-theory (disable gain gain-recdef
1410
pminus pminus-recdef
1417
ACL2::RIGHT-DISTRIBUTIVITY-OF-M-*-OVER-M-+
1418
ACL2::left-DISTRIBUTIVITY-OF-M-*-OVER-M-+
1419
acl2::COMMUTATIVITY-2-OF-M-+
1425
(m-= (m-+ (pminus k)
1426
(m-+ (m-unary-- (m-* (gain k) (m-* (h k) (pminus k))))
1430
(m-* (h k) (pminus k))))))
1431
:in-theory (disable pminus pminus-recdef gain gain-recdef)))
1435
(defthm lemma-9-for-lemma-10
1436
(implies (and (integerp k) (<= 0 k))
1437
(m-= (m-+ (m-* (m-- (m-id (n))
1438
(m-* (gain k) (h k)))
1440
(m-trans (m-- (m-id (n))
1441
(m-* (gain k) (h k))))))
1444
(m-trans (gain k)))))
1445
(m-* (m-- (m-id (n))
1446
(m-* (gain k) (h k)))
1448
:hints (("Goal" :do-not-induct t
1449
:use ((:instance lemma-8))
1450
:in-theory (disable pminus pminus-recdef gain gain-recdef)))
1455
(implies (and (integerp k) (<= 0 k))
1456
(m-= (m-+ (m-* (m-- (m-id (n))
1457
(m-* (gain k) (h k)))
1459
(m-trans (m-- (m-id (n))
1460
(m-* (gain k) (h k))))))
1463
(m-trans (gain k)))))
1465
:hints (("Goal" :do-not-induct t
1466
:use ((:instance lemma-9-for-lemma-10))
1467
:in-theory (disable pminus pminus-recdef gain gain-recdef)))
1471
(defthm pplus-as-mean-case-0
1472
(implies (equal k 0)
1474
(m-mean (m-* (m-- (x k) (xhat k))
1475
(m-trans (m-- (x k) (xhat k)))))))
1476
:hints (("Goal" :do-not-induct t
1477
:use ((:instance lemma-3)
1478
(:instance lemma-10)
1479
(:instance pminus-as-mean-case-0))
1480
:in-theory (disable pminus pminus-recdef gain gain-recdef)))
1484
(defthm pplus-as-mean-almost
1485
(implies (and (integerp k)
1488
(m-mean (m-* (m-- (x (1- k))
1490
(m-trans (m-- (x (1- k))
1493
(m-mean (m-* (m-- (x k) (xhat k))
1494
(m-trans (m-- (x k) (xhat k)))))))
1495
:hints (("Goal" :do-not-induct t
1496
:use ((:instance lemma-3)
1497
(:instance lemma-10)
1498
(:instance pminus-as-mean-almost))
1499
:in-theory (disable gain gain-recdef
1500
pminus pminus-recdef
1507
ACL2::RIGHT-DISTRIBUTIVITY-OF-M-*-OVER-M-+
1508
ACL2::left-DISTRIBUTIVITY-OF-M-*-OVER-M-+
1509
acl2::COMMUTATIVITY-2-OF-M-+
1516
(defun natural-induction (n)
1519
(1+ (natural-induction (1- n))))))
1521
(defthm pplus-as-mean
1522
(implies (and (integerp k)
1525
(m-mean (m-* (m-- (x k) (xhat k))
1526
(m-trans (m-- (x k) (xhat k)))))))
1528
:induct (natural-induction k))
1530
:use ((:instance pplus-as-mean-almost)))
1532
:use ((:instance pplus-as-mean-case-0)))
1537
(defthm pminus-as-mean
1538
(implies (and (integerp k) (<= 0 k))
1540
(m-mean (m-* (m-- (x k) (xhatmin k))
1541
(m-trans (m-- (x k) (xhatmin k)))))))
1542
:hints (("Goal" :do-not-induct t
1543
:use ((:instance pminus-as-mean-almost)
1544
(:instance pplus-as-mean (k (1- k))))
1545
:in-theory (disable pminus-as-mean-almost pplus-as-mean
1547
gain-recdef pplus-recdef xhatmin-recdef
1548
(pminus) (x) (xhatmin)))))
1559
(implies (and (m-matrixp (l y) (c y) y)
1560
(m-matrixp (l z) (c z) z)
1562
(equal (c y) (l z)))
1563
(equal (m-* x (m-mean (m-* y z)))
1564
(m-mean (m-* (m-* x y) z))))
1566
:use ((:instance mean-*
1569
(:instance mean-delete
1574
(implies (and (m-matrixp (l x) (c x) x)
1575
(m-matrixp (l y) (c y) y)
1577
(equal (c y) (l z)))
1578
(equal (m-* (m-mean (m-* x y)) z)
1579
(m-mean (m-* x (m-* y z)))))
1581
:use ((:instance mean-*
1584
(:instance mean-delete
1588
(implies (and (integerp k) (<= 0 k))
1589
(m-= (m-* (pminus k) (m-trans (h k)))
1590
(m-mean (m-* (m-- (x k) (xhatmin k))
1591
(m-trans (m-- (m-* (h k) (x k))
1592
(m-* (h k) (xhatmin k))))))))
1593
:hints (("Goal" :do-not-induct t
1594
:use ((:instance pminus-as-mean))
1595
:in-theory (disable pplus-as-mean pminus-as-mean))))
1599
(implies (and (integerp k) (<= 0 k))
1600
(m-= (m-* (h k) (m-* (pminus k) (m-trans (h k))))
1601
(m-mean (m-* (m-- (m-* (h k) (x k))
1602
(m-* (h k) (xhatmin k)))
1603
(m-trans (m-- (m-* (h k) (x k))
1604
(m-* (h k) (xhatmin k)))))))))
1613
(equal (l (m-* (v k) (m-trans (v k))))
1614
(l (m-* (m-- (m-* (h k) (x k))
1615
(m-* (h k) (xhatmin k)))
1616
(m-trans (m-- (m-* (h k) (x k))
1617
(m-* (h k) (xhatmin k)))))))))
1621
(equal (c (m-* (v k) (m-trans (v k))))
1622
(c (m-* (m-- (m-* (h k) (x k))
1623
(m-* (h k) (xhatmin k)))
1624
(m-trans (m-- (m-* (h k) (x k))
1625
(m-* (h k) (xhatmin k)))))))))
1628
(implies (and (integerp k) (<= 0 k))
1629
(m-= (m-+ (m-* (h k)
1630
(m-* (pminus k) (m-trans (h k))))
1631
(m-mean (m-* (v k) (m-trans (v k)))))
1632
(m-mean (m-+ (m-* (m-- (m-* (h k) (x k))
1633
(m-* (h k) (xhatmin k)))
1634
(m-trans (m-- (m-* (h k) (x k))
1635
(m-* (h k) (xhatmin k)))))
1636
(m-* (v k) (m-trans (v k)))))))
1637
:hints (("Goal" :do-not-induct t
1638
:in-theory '(lemma-1 mean-+ lemma-2-1 lemma-2-2
1639
acl2::m-=-implies-equal-m-+-1))))
1645
(implies (and (integerp k) (<= 0 k))
1646
(m-= (m-+ (m-* (h k)
1650
(m-mean (m-+ (m-* (m-- (m-* (h k) (x k))
1651
(m-* (h k) (xhatmin k)))
1652
(m-trans (m-- (m-* (h k) (x k))
1653
(m-* (h k) (xhatmin k)))))
1654
(m-* (v k) (m-trans (v k)))))))
1656
:use ((:instance mean-of-v-vtrans)
1657
(:instance lemma-2))
1658
:in-theory '(acl2::m-=-implies-equal-m-+-2)))))
1666
(implies (and (m-matrixp (l a) (c a) a)
1667
(m-matrixp (l b) (c b) b)
1669
(equal (c a) (c b)))
1670
(m-= (m-mean (m-* (m-+ a b) (m-trans (m-+ a b))))
1671
(m-+ (m-mean (m-* a (m-trans a)))
1672
(m-+ (m-mean (m-* a (m-trans b)))
1673
(m-+ (m-mean (m-* b (m-trans a)))
1674
(m-mean (m-* b (m-trans b))))))))))
1678
(m-= (m-mean (m-* (m-- (m-* (h k) (x k))
1679
(m-* (h k) (xhatmin k)))
1682
:hints (("Goal" :do-not-induct t
1683
:use ((:instance mean-of-x-xhatmin*vtrans)
1684
(:instance acl2::x-*-zero
1688
(:instance acl2::*-+-right
1690
(acl2::q (m-* (x k) (m-trans (v k))))
1691
(acl2::r (m-* (m-unary-- (xhatmin k))
1695
(q (m-* (m-- (x k) (xhatmin k))
1697
(:instance mean-delete
1699
:in-theory (disable mean-of-x-xhatmin*vtrans
1701
acl2::*-+-right)))))
1705
(m-= (m-mean (m-* (v k)
1706
(m-trans (m-- (m-* (h k) (x k))
1707
(m-* (h k) (xhatmin k))))))
1709
:hints (("Goal" :do-not-induct t
1710
:use ((:instance mean-of-v*trans-of-x-xhatmin)
1711
(:instance acl2::zero-*-x
1712
(acl2::p (m-trans (h k)))
1717
(m-trans (m-- (x k) (xhatmin k)))))
1718
(q (m-trans (h k))))
1719
(:instance mean-delete
1720
(p (m-trans (h k)))))
1721
:in-theory (disable mean-of-v*trans-of-x-xhatmin
1726
ACL2::LEFT-DISTRIBUTIVITY-OF-M-*-OVER-M-+
1727
ACL2::RIGHT-DISTRIBUTIVITY-OF-M-*-OVER-M-+
1731
(IMPLIES (m-= (m-mean (m-* (v k)
1732
(m-* (m-- (m-trans (x k))
1733
(m-trans (xhatmin k)))
1735
(m-* (m-zero (m) (n))
1737
(m-= (m-mean (m-* (v k)
1738
(m-- (m-* (m-trans (x k))
1740
(m-* (m-trans (xhatmin k))
1742
(m-zero (m) (m)))))))
1744
:in-theory (enable acl2::*-+-left)))))
1747
(m-= (m-mean (m-* (m-+ (m-- (m-* (h k) (x k))
1748
(m-* (h k) (xhatmin k)))
1750
(m-trans (m-+ (m-- (m-* (h k) (x k))
1751
(m-* (h k) (xhatmin k)))
1753
(m-mean (m-+ (m-* (m-- (m-* (h k) (x k))
1754
(m-* (h k) (xhatmin k)))
1755
(m-trans (m-- (m-* (h k) (x k))
1756
(m-* (h k) (xhatmin k)))))
1757
(m-* (v k) (m-trans (v k))))))
1758
:hints (("Goal" :do-not-induct t
1759
:use ((:instance lemma-4-1
1760
(a (m-- (m-* (h k) (x k))
1761
(m-* (h k) (xhatmin k))))
1763
:in-theory (disable lemma-4-1
1783
(implies (and (equal (l a) (l b))
1786
(equal (c b) (c c)))
1787
(m-= (m-+ b (m-+ a c))
1790
:use ((:instance acl2::assoc-+
1794
(:instance acl2::assoc-+
1798
:in-theory (disable acl2::assoc-+)))))
1801
(m-= (m-+ (m-- (m-* (h k) (x k))
1802
(m-* (h k) (xhatmin k)))
1804
(m-- (z k) (m-* (h k) (xhatmin k))))
1805
:hints (("Goal" :do-not-induct t)))
1810
(m-= (m-mean (m-* (m-- (z k) (m-* (h k) (xhatmin k)))
1811
(m-trans (m-- (z k) (m-* (h k) (xhatmin k))))))
1812
(m-mean (m-+ (m-* (m-- (m-* (h k) (x k))
1813
(m-* (h k) (xhatmin k)))
1814
(m-trans (m-- (m-* (h k) (x k))
1815
(m-* (h k) (xhatmin k)))))
1816
(m-* (v k) (m-trans (v k))))))
1817
:hints (("Goal" :do-not-induct t
1818
:use ((:instance lemma-4)
1819
(:instance lemma-5))
1820
:in-theory (disable lemma-4
1828
acl2::commutativity-2-of-m-+
1836
ACL2::LEFT-DISTRIBUTIVITY-OF-M-*-OVER-M-+
1837
ACL2::RIGHT-DISTRIBUTIVITY-OF-M-*-OVER-M-+)))))
1841
(implies (and (integerp k) (<= 0 k))
1842
(m-= (m-+ (m-* (h k)
1846
(m-mean (m-* (m-- (z k) (m-* (h k) (xhatmin k)))
1847
(m-trans (m-- (z k) (m-* (h k) (xhatmin k))))))))
1848
:hints (("Goal" :do-not-induct t
1849
:use ((:instance lemma-3)
1850
(:instance lemma-6))
1851
:in-theory (disable lemma-3
1859
acl2::commutativity-2-of-m-+
1867
ACL2::LEFT-DISTRIBUTIVITY-OF-M-*-OVER-M-+
1868
ACL2::RIGHT-DISTRIBUTIVITY-OF-M-*-OVER-M-+)))))
1872
(implies (and (integerp k) (<= 0 k))
1873
(m-= (s-* 2 (m-* (gain k)
1874
(m-mean (m-* (m-- (z k)
1875
(m-* (h k) (xhatmin k)))
1877
(m-* (h k) (xhatmin k))))))))
1878
(s-* 2 (m-* (pminus k) (m-trans (h k))))))
1879
:hints (("Goal" :do-not-induct t
1880
:use ((:instance lemma-7)
1881
(:instance gain-recdef))
1882
:in-theory (disable lemma-0 lemma-1 lemma-3 lemma-7
1891
acl2::left-distributivity-of-m-*-over-m-+
1892
acl2::right-distributivity-of-m-*-over-m-+
1896
(implies (and (integerp k) (<= 0 k))
1897
(m-= (s-* 2 (m-* (pminus k)
1898
(m-* (m-trans (h k))
1911
(m-trans (h k))))))))
1913
:use ((:instance acl2::inv-*-x
1917
(m-trans (h k))))))))
1918
:in-theory (disable lemma-0 lemma-1 lemma-3 lemma-7
1940
(implies (and (integerp k) (<= 0 k))
1941
(m-= (s-* 2 (m-* (gain k)
1942
(m-mean (m-* (m-- (z k)
1943
(m-* (h k) (xhatmin k)))
1945
(m-* (h k) (xhatmin k))))))))
1946
(s-* 2 (m-mean (m-* (m-- (x k) (xhatmin k))
1947
(m-trans (m-- (m-* (h k) (x k))
1948
(m-* (h k) (xhatmin k)))))))))
1949
:hints (("Goal" :do-not-induct t
1950
:use ((:instance lemma-0)
1951
(:instance lemma-8))
1952
:in-theory (disable lemma-0 lemma-8
1966
(implies (and (equal (l a) (l b))
1969
(equal (c b) (c c)))
1970
(m-= (m-+ b (m-+ a c))
1973
:use ((:instance acl2::assoc-+
1977
(:instance acl2::assoc-+
1981
:in-theory (disable acl2::assoc-+)))))
1985
(equal (m-- (z k) (m-* (h k) (xhatmin k)))
1986
(m-+ (m-* (h k) (m-- (x k) (xhatmin k))) (v k)))
1987
:hints (("Goal" :do-not-induct t))
1992
(m-= (m-trans (m-- (z k) (m-* (h k) (xhatmin k))))
1993
(m-+ (m-trans (m-- (m-* (h k) (x k))
1994
(m-* (h k) (xhatmin k))))
1996
:hints (("Goal" :do-not-induct t))))
2000
(m-= (m-mean (m-* (m-- (xhatmin k) (x k))
2002
(m-* (h k) (xhatmin k))))))
2003
(m-mean (m-* (m-- (xhatmin k) (x k))
2004
(m-trans (m-- (m-* (h k) (x k))
2005
(m-* (h k) (xhatmin k)))))))
2006
:hints (("Goal" :do-not-induct t
2007
:in-theory (disable MEAN-UNARY--
2019
acl2::left-distributivity-of-m-*-over-m-+
2020
acl2::right-distributivity-of-m-*-over-m-+
2026
:use ((:instance acl2::*-+-right
2027
(acl2::p (M-- (XHATMIN K) (X K)))
2028
(acl2::q (M-TRANS (M-- (M-* (H K) (X K))
2029
(M-* (H K) (XHATMIN K)))))
2030
(acl2::r (M-TRANS (V K)))))
2031
:in-theory (disable z
2042
acl2::left-distributivity-of-m-*-over-m-+
2043
acl2::right-distributivity-of-m-*-over-m-+
2049
(m-mean (m-+ (m-* (m-+ (xhatmin k) (m-unary-- (x k)))
2050
(m-trans (m-+ (m-* (h k) (x k))
2051
(m-unary-- (m-* (h k) (xhatmin k))))))
2052
(m-* (m-+ (xhatmin k) (m-unary-- (x k)))
2054
(m-mean (m-* (m-+ (xhatmin k) (m-unary-- (x k)))
2055
(m-trans (m-+ (m-* (h k) (x k))
2056
(m-unary-- (m-* (h k) (xhatmin k))))))))))
2058
:use ((:instance mean-of-x-xhatmin*vtrans)
2059
(:instance mean-unary--
2061
(m-unary-- (xhatmin k)))
2063
(:theorem (m-= (m-unary-- (m-* (m-+ (x k)
2064
(m-unary-- (xhatmin k)))
2066
(m-* (m-+ (xhatmin k) (m-unary-- (x k)))
2068
:in-theory (disable mean-of-x-xhatmin*vtrans
2072
:use ((:instance M-=-IMPLIES-M-=-M-MEAN-1
2073
(x (m-* (m-- (xhatmin k) (x k))
2075
(x-equiv (m-unary-- (m-* (m-- (x k) (xhatmin k))
2078
:in-theory (disable mean-of-x-xhatmin*vtrans
2089
acl2::left-distributivity-of-m-*-over-m-+
2090
acl2::right-distributivity-of-m-*-over-m-+
2091
(:congruence M-=-IMPLIES-M-=-M-MEAN-1)
2097
(implies (and (m-matrixp (l a) (c a) a)
2098
(m-matrixp (l b) (c b) b)
2100
(equal (c a) (c b)))
2102
(m-unary-- (m-- a b))))))
2107
(implies (and (m-matrixp (l a) (c a) a)
2108
(m-matrixp (l b) (c b) b)
2109
(m-matrixp (l c) (c c) c)
2112
(equal (c b) (l c)))
2113
(m-= (m-unary-- (m-mean (m-* (m-- a b) c)))
2114
(m-mean (m-* (m-- b a) c))))
2116
:use ((:instance lemma-10-5)
2117
(:instance M-=-IMPLIES-M-=-M-MEAN-1
2118
(x (ACL2::M-BINARY-* (ACL2::M-BINARY-+ B (ACL2::M-UNARY-- A))
2120
(x-equiv (m-* (m-unary-- (m-- a b)) c)))
2122
:in-theory (disable lemma-10-5 acl2::unary---+ acl2::assoc-+
2123
m-=-implies-m-=-m-mean-1))
2127
(and (acl2::matrixp (car (dimensions 'acl2::$arg a))
2128
(car (dimensions 'acl2::$arg c))
2130
(acl2::matrixp (car (dimensions 'acl2::$arg a))
2131
(car (dimensions 'acl2::$arg c))
2133
(acl2::matrixp (car (dimensions 'acl2::$arg c))
2134
(cadr (dimensions 'acl2::$arg c))
2138
(m-mean (acl2::m-binary-* (acl2::m-binary-+ a (acl2::m-unary-- b))
2140
(m-mean (acl2::m-binary-*
2141
(acl2::m-unary-- (acl2::m-binary-+ a (acl2::m-unary-- b)))
2143
:in-theory (disable lemma-10-5 acl2::unary---+ acl2::assoc-+)))))
2146
(m-= (m-mean (m-* (m-- (xhatmin k) (x k))
2148
(m-* (h k) (xhatmin k))))))
2149
(m-unary-- (m-mean (m-* (m-- (x k) (xhatmin k))
2150
(m-trans (m-- (m-* (h k) (x k))
2151
(m-* (h k) (xhatmin k))))))))
2152
:hints (("Goal" :do-not-induct t
2153
:use ((:instance lemma-10-4)
2154
(:instance lemma-10-6
2157
(c (m-trans (m-- (m-* (h k) (x k))
2158
(m-* (h k) (xhatmin k))))))
2160
:in-theory (disable lemma-10-2
2177
ACL2::LEFT-DISTRIBUTIVITY-OF-M-*-OVER-M-+
2178
ACL2::right-DISTRIBUTIVITY-OF-M-*-OVER-M-+
2182
(defthm gain-minimizes-error
2183
(implies (and (integerp k) (<= 0 k))
2184
(m-= (result-form-derivative (gain k) (xhatmin k) k)
2186
:hints (("Goal" :do-not-induct t
2187
:use ((:instance lemma-9)
2188
(:instance lemma-10)
2189
(:instance gain-recdef))
2190
:in-theory (disable lemma-9
2212
;MINUS-AS-PLUS-INVERSE
2216
(defthm xhatmin=best-prior-almost
2217
(implies (m-= (xhat (1- k))
2218
(best-estimate-of-x (1- k)))
2220
(best-prior-estimate-of-x k)))
2221
:hints (("Goal" :do-not-induct t
2222
:in-theory (disable xhat z)))
2226
(defun natural-induction (k)
2229
(1+ (natural-induction (1- k))))))
2231
(defthm result-form-=-xhat
2232
(equal (result-form (gain k) (xhatmin k) k)
2235
(defthm xhat=best-estimate
2236
(implies (and (integerp k)
2239
(best-estimate-of-x k)))
2241
:induct (natural-induction k))
2243
:use ((:instance xhatmin=best-prior-almost)
2244
(:instance best-estimate-of-x-def
2247
(:instance gain-minimizes-error))
2248
:in-theory (disable xhat))
2250
:use ((:instance best-estimate-of-x-def
2254
:in-theory (disable gain-recdef
2255
(best-prior-estimate-of-x)
2261
(defthm xhatmin=best-prior
2262
(implies (and (integerp k)
2265
(best-prior-estimate-of-x k)))
2266
:hints (("Goal" :do-not-induct t
2267
:use ((:instance xhatmin=best-prior-almost)
2268
(:instance xhat=best-estimate (k (1- k))))
2269
:in-theory '(best-prior-estimate-of-x zp)))