   (or (.sup lattice)
       (let [order (order lattice)
 	    base  (base-set lattice)]
-	(fn [x y]
+	(memo-fn _ [x y]
 	  (first (for [z base
 		       :when (and (order [x z])
 				  (order [y z])

		   z))))))

(defmethod print-method Lattice [^Lattice lattice out]
  (.write out
	  (str "Lattice on " (count (base-set lattice)) " elements.")))


;;; Constructors

  (or (.inf lattice)
      (let [order (order lattice)
	    base  (base-set lattice)]
	(memo-fn _ [x y]
	  (first (for [z base
		       :when (and (order [z x])
				  (order [z y])
