      :three-gens-size-and-instruction three-gens-size-and-instruction-diversifying?
      :diffmeans diffmeans-diversifying?
      :minimal-reproductive-difference minimal-reproductive-difference-diversifying?
+     :use-mate-differently use-mate-differently-diversifying?
      :no-clones no-clones-diversifying?
      :none (fn [genome argmap] true))
     g

         (not (zero? c2-diff))
         (not= c1-diff c2-diff))))

(defn use-mate-differently-diversifying?
  "Returns true iff genome g passes the diversification test."
  [g argmap]
  (let [mate (vec (repeat (count g) {:instruction :from-mate}))
        c1 (produce-child-genome-by-autoconstruction g mate false argmap)
        c1-from-mate (count (filter #(= (:instruction %) :from-mate) c1))]
    (if (> c1-from-mate 0)
      (let [c2 (produce-child-genome-by-autoconstruction g mate false argmap)
            c2-from-mate (count (filter #(= (:instruction %) :from-mate) c2))]
        (and (> c2-from-mate 0)
             (not= c1-from-mate c2-from-mate)))
      false)))
    

(defn diversifying?
  "Returns true iff genome g passes the diversification test."
