diff --git a/books/bookvol9.pamphlet b/books/bookvol9.pamphlet
index fe5d500..238f2ec 100644
--- a/books/bookvol9.pamphlet
+++ b/books/bookvol9.pamphlet
@@ -10289,6 +10289,84 @@ An angry JHD - August 15th., 1984
\end{chunk}
+\defun{compCategoryItem}{compCategoryItem}
+\calls{compCategoryItem}{pairp}
+\calls{compCategoryItem}{qcar}
+\calls{compCategoryItem}{qcdr}
+\calls{compCategoryItem}{compCategoryItem}
+\calls{compCategoryItem}{mkpf}
+\refsdollar{compCategoryItem}{sigList}
+\refsdollar{compCategoryItem}{atList}
+\begin{chunk}{defun compCategoryItem}
+(defun |compCategoryItem| (x predl)
+ (let (p e a tmp2 b tmp3 c predlp pred tmp1 y z op sig)
+ (declare (special |$sigList| |$atList|))
+ (cond
+ ((null x) nil)
+; 1. if x is a conditional expression, recurse; otherwise, form the predicate
+ ((and (pairp x) (eq (qcar x) 'cond)
+ (pairp (qcdr x)) (eq (qcdr (qcdr x)) nil)
+ (pairp (qcar (qcdr x)))
+ (pairp (qcdr (qcar (qcdr x))))
+ (eq (qcdr (qcdr (qcar (qcdr x)))) nil))
+ (setq p (qcar (qcar (qcdr x))))
+ (setq e (qcar (qcdr (qcar (qcdr x)))))
+ (setq predlp (cons p predl))
+ (cond
+ ((and (pairp e) (eq (qcar e) 'progn))
+ (setq z (qcdr e))
+ (dolist (y z) (|compCategoryItem| y predlp)))
+ (t (|compCategoryItem| e predlp))))
+ ((and (pairp x) (eq (qcar x) 'if) (pairp (qcdr x))
+ (pairp (qcdr (qcdr x))) (pairp (qcdr (qcdr (qcdr x))))
+ (eq (qcdr (qcdr (qcdr (qcdr x)))) nil))
+ (setq a (qcar (qcdr x)))
+ (setq b (qcar (qcdr (qcdr x))))
+ (setq c (qcar (qcdr (qcdr (qcdr x)))))
+ (setq predlp (cons a predl))
+ (unless (eq b '|noBranch|)
+ (cond
+ ((and (pairp b) (eq (qcar b) 'progn))
+ (setq z (qcdr b))
+ (dolist (y z) (|compCategoryItem| y predlp)))
+ (t (|compCategoryItem| b predlp))))
+ (cond
+ ((eq c '|noBranch|) nil)
+ (t
+ (setq predlp (cons (list '|not| a) predl))
+ (cond
+ ((and (pairp c) (eq (qcar c) 'progn))
+ (setq z (qcdr c))
+ (dolist (y z) (|compCategoryItem| y predlp)))
+ (t (|compCategoryItem| c predlp))))))
+ (t
+ (setq pred (if predl (mkpf predl 'and) t))
+ (cond
+; 2. if attribute, push it and return
+ ((and (pairp x) (eq (qcar x) 'attribute)
+ (pairp (qcdr x)) (eq (qcdr (qcdr x)) nil))
+ (setq y (qcar (qcdr x)))
+ (push (mkq (list y pred)) |$atList|))
+; 3. it may be a list, with PROGN as the CAR, and some information as the CDR
+ ((and (pairp x) (eq (qcar x) 'progn))
+ (setq z (qcdr x))
+ (dolist (u z) (|compCategoryItem| u predl)))
+ (t
+; 4. otherwise, x gives a signature for a single operator name or a list of
+; names; if a list of names, recurse
+ (cond ((eq (car x) 'signature) (car x)))
+ (setq op (cadr x))
+ (setq sig (cddr x))
+ (cond
+ ((null (atom op))
+ (dolist (y op)
+ (|compCategoryItem| (cons 'signature (cons y sig)) predl)))
+ (t
+; 5. branch on a single type or a signature %with source and target
+ (push (mkq (list (cdr x) pred)) |$sigList|)))))))))
+
+\end{chunk}
+
\defun{mkExplicitCategoryFunction}{mkExplicitCategoryFunction}
\calls{mkExplicitCategoryFunction}{mkq}
\calls{mkExplicitCategoryFunction}{union}
@@ -10332,6 +10410,23 @@ An angry JHD - August 15th., 1984
\end{chunk}
+;mustInstantiate D ==
+; D is [fn,:.] and ^(member(fn,$DummyFunctorNames) or GET(fn,"makeFunctionList"))
+
+\defun{mustInstantiate}{mustInstantiate}
+\calls{mustInstantiate}{pairp}
+\calls{mustInstantiate}{qcar}
+\calls{mustInstantiate}{getl}
+\refsdollar{mustInstantiate}{DummyFunctorNames}
+\begin{chunk}{defun mustInstantiate}
+(defun |mustInstantiate| (d)
+ (declare (special |$DummyFunctorNames|))
+ (and (pairp d)
+ (null (or (member (qcar d) |$DummyFunctorNames|)
+ (getl (qcar d) '|makeFunctionList|)))))
+
+\end{chunk}
+
\defun{wrapDomainSub}{wrapDomainSub}
\begin{chunk}{defun wrapDomainSub}
(defun |wrapDomainSub| (parameters x)
@@ -21353,6 +21448,7 @@ The current input line.
\getchunk{defun compCase1}
\getchunk{defun compCat}
\getchunk{defun compCategory}
+\getchunk{defun compCategoryItem}
\getchunk{defun compCoerce}
\getchunk{defun compCoerce1}
\getchunk{defun compColon}
@@ -21584,6 +21680,7 @@ The current input line.
\getchunk{defun modeEqualSubst}
\getchunk{defun modemapPattern}
\getchunk{defun moveORsOutside}
+\getchunk{defun mustInstantiate}
\getchunk{defun ncINTERPFILE}
\getchunk{defun next-char}
diff --git a/changelog b/changelog
index 03b75cc..05ac2f4 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,9 @@
+20110826 tpd src/axiom-website/patches.html 20110826.01.tpd.patch
+20110826 tpd src/interp/Makefile remove define.lisp
+20110826 tpd src/interp/define.lisp removed
+20110826 tpd src/interp/functor.lisp treeshake compiler
+20110826 tpd src/interp/package.lisp treeshake compiler
+20110826 tpd books/bookvol9 treeshake compiler
20110825 tpd src/axiom-website/patches.html 20110825.01.tpd.patch
20110825 tpd src/interp/define.lisp treeshake compiler
20110825 tpd books/bookvol9 treeshake compiler
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index a7da462..7750cc0 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -3596,5 +3596,7 @@ src/interp/Makefile remove foam_l
books/bookvol9 treeshake compiler
20110825.01.tpd.patch
books/bookvol9 treeshake compiler
+20110826.01.tpd.patch
+books/bookvol9 treeshake compiler