anchor.diff:    Fact _requiredAndAllowed(Required required, Dependency dependency) {
       assert(required.dep.name == dependency.allowed.name);
   
  -    var intersection = _intersectDeps([required.dep, dependency.allowed]);
  +    var intersection = _intersectDeps(required.dep, dependency.allowed);
       if (intersection == null) {
         // If there are no versions covered by both [dependency.allowed] and
         // [required], then this dependency can never be satisfied and the
  
positive.code:         // Add the new dependencies to [_toProcess] so they don't get thrown
          // away when we return `false`.
          _toProcess.add(new Dependency(
              _intersectDeps([dependency.depender, fact.depender]),
              _intersectDeps([dependency.allowed, fact.allowed]),
              [dependency, fact]));
  
          var dependencyDifference = _depMinus(dependency, fact.depender);
  
negative.code:     }
    }
  
    void _removeDependency(Dependency dependency) {
      assert(_dependenciesByDepender[dependency.depender.toRef()]
          .remove(dependency));
      assert(_dependenciesByAllowed[dependency.allowed.toRef()]
          .remove(dependency));
    }
  
    void _removeIncompatibility(Incompatibility incompatibility) {
      assert(_incompatibilities[incompatibility.dep1.toRef()]
          .remove(incompatibility));
      assert(_incompatibilities[incompatibility.dep2.toRef()]
          .remove(incompatibility));
    }
  
    /// Enqueue [fact] to be procesed instead of the current fact.
    ///
  