1
;;;;; Provides indexed access to rows, columns and entries in a matrix.
4
;;; If (nfix i) is greater then the length of a list, then the nth equals nil.
6
(implies (<= (len l) (nfix i))
7
(equal (nth i l) nil)))
9
(include-book "mdefthms")
11
(defmacro row-guard (i m)
15
(< ,i (row-count ,m))))
17
;;; Returns row at index i in matrix m.
19
(declare (xargs :guard (row-guard i m)))
20
(cond ((m-emptyp m) nil)
22
(t (row (1- i) (row-cdr m)))))
24
;;; Provide an alterate definition of row that uses col-cdr instead of row-cdr.
25
(defthm row-by-col-def
29
(>= (nfix i) (row-count m)))
31
(cons (nth i (col-car m))
32
(row i (col-cdr m))))))
33
:hints (("Goal" :induct (row i m)))
34
:rule-classes :definition)
39
:rule-classes (:rewrite :type-prescription))
43
(equal (len (row i m))
44
(if (< (nfix i) (row-count m))
47
:hints (("Goal" :induct (row i m))))
51
(equal (consp (row i m))
52
(< (nfix i) (row-count m))))
53
:hints (("Subgoal *1/6"
54
:cases ((< (1- i) (row-count (row-cdr m)))))))
56
(defmacro col-guard (i m)
60
(< ,i (col-count ,m))))
63
(declare (xargs :guard (col-guard i m)))
64
(cond ((m-emptyp m) nil)
66
(t (col (1- i) (col-cdr m)))))
68
(defthm col-by-row-def
72
(>= (nfix i) (col-count m)))
74
(cons (nth i (row-car m))
75
(col i (row-cdr m))))))
76
:hints (("Goal" :induct (col i m)))
77
:rule-classes :definition)
82
:rule-classes (:rewrite :type-prescription))
86
(equal (len (col i m))
87
(if (< (nfix i) (col-count m))
93
(equal (consp (col i m))
94
(< (nfix i) (col-count m))))
95
:hints (("Subgoal *1/6"
96
:cases ((< (1- i) (col-count (col-cdr m)))))))
98
(defmacro mentry-guard (r c m)
102
(< ,r (row-count ,m))
105
(< ,c (col-count ,m))))
107
;;; Return the entry at the specified row and column
108
(defun mentry (r c m)
109
(declare (xargs :guard (mentry-guard r c m)))
112
;;; Provide an alterate equivalent definition of mentry.
113
(defthmd mentry-by-col
115
(equal (mentry r c m)
117
:rule-classes :definition)