anchor.diff:  
   (defun zdd-meet% (a b)
     (ematch* (a b)
  -    (((leaf nil) _) (leaf nil))
  -    ((_ (leaf nil)) (leaf nil))
  -
  -    (((leaf t) _) (leaf t))
  -    ((_ (leaf t)) (leaf t))
  +    (((sink nil) _) (leaf nil))
  +    ((_ (sink nil)) (leaf nil))
  +
  +    (((sink t) _) (leaf t))
  +    ((_ (sink t)) (leaf t))
   
       (((node var-a hi-a lo-a)
         (node var-b hi-b lo-b))
  
positive.code: 
        ;; If Z = {∅} we might have some heads we need to cons later in the rule
        ;; tree, so recur down the lo side of it.
        (((leaf t) (node _ _ lo))
         (recur zdd lo))
  
        ;; Otherwise we need to filter.
  
negative.code: (defun zdd-keep-supersets-of% (zdd set)
    (ematch* (zdd set)
      ((_ nil) zdd)
      (((sink) _) (leaf nil))
      (((node var hi lo) (list* el remaining))
       (cond
         ((= var el) (zdd-node var
  