     (and (> (reduce min diffs) 0)
          (apply distinct? diffs))))
 
+(defn three-gens-same-inputs-diff-diffs-diversifying?
+  "Returns true iff genome g passes the diversification test."
+  [g argmap]
+  (let [make-child #(produce-child-genome-by-autoconstruction % g g false argmap)
+        diff #(expressed-difference %1 %2 argmap)
+        c1 (make-child g)
+        c2 (make-child g)
+        gc1 (make-child c1)
+        gc2 (make-child c2)
+        c1-diff (diff g c1)
+        c2-diff (diff g c2)
+        gc1-diff (diff c1 gc1)
+        gc2-diff (diff c2 gc2)
+        diffs [c1-diff c2-diff gc1-diff gc2-diff]]
+    (and (> (reduce min diffs) 0)
+         (apply distinct? diffs))))
+
 (defn three-gens-some-diff-diffs-diversifying?
   "Returns true iff genome g passes the diversification test."
   [g argmap]

  ((case (:autoconstructive-diversification-test argmap)
     :gecco2016 gecco2016-diversifying?
     :three-gens-diff-diffs three-gens-diff-diffs-diversifying?
     :three-gens-some-diff-diffs three-gens-some-diff-diffs-diversifying?
     :size-and-instruction size-and-instruction-diversifying?
     :three-gens-size-and-instruction three-gens-size-and-instruction-diversifying?

        :is-random-replacement
        (if use-child false true)))))


