anchor.diff:  ;;            (concl x y z))))
   
   (defun flip-typed-vars (x)
  +  (declare (xargs :guard (typed-arg-listp x)))
     (cond ((atom x) nil)
  +        ((atom (car x))
  +         (cons (car x) (flip-typed-vars (cdr x))))
           (t (cons (list (cadar x) (caar x))
                    (flip-typed-vars (cdr x))))))
   
  
positive.code: ;;;;;;;;;;;;;;;;;;
  
  (defmacro defpredicate (name args &rest rst)
    (append (list 'defund-typed name (list (car args)) 'booleanp)
            rst))
  
  
negative.code:                                       (cdar type-cases))
                   (map-transform-type-case (cdr type-cases))))))
  
  (defun defcoproduct-concrete-fn (type type-cases)
    (declare (xargs :mode :program))
    `(defsum ,type ,@(map-transform-type-case type-cases)))
  
    ;; (append (list 'defsum
    ;;               type)
    ;;         (map-transform-type-case type-cases)))
  
  (defmacro defcoproduct-concrete (type &rest type-cases)
    (defcoproduct-concrete-fn type type-cases))
  
  (defun replace-_-with-& (x)
    (cond ((atom x) (if (eq x '_) '& x))
          (t (cons (replace-_-with-& (car x))
                   (replace-_-with-& (cdr x))))))
  
  