MiniKanren conde

First let us understand cond:

cond returns the first successful result:

(run (q)
  (cond
    (#s (== olive q)) ;; First branch matches
    (#s (== fire q))
    (else #u)))
    
;; evaluates to (olive)

We want all possible values of q however:

(run (q)
  (conde
    (#s (== olive q)) ;; First branch matches
    (#s (== fire q))
    (else #u)))

;; evaluates to (olive, fire)