code: protected function propagate($level)
      {
          while ($this->decisions->validOffset($this->propagateIndex)) {
              $decision = $this->decisions->atOffset($this->propagateIndex);
  
              $conflict = $this->watchGraph->propagateLiteral(
                  $decision[Decisions::DECISION_LITERAL],
                  $level,
                  $this->decisions
              );
  
              $this->propagateIndex++;
  
              if ($conflict) {
                  return $conflict;
              }
          }
  
          return null;
      }
docs: Makes a decision and propagates it to all rules.
  
  Evaluates each term affected by the decision (linked through watches)
  If we find unit rules we make new decisions based on them
  
  @param  int       $level
  @return Rule|null A rule on conflict, otherwise null.