code: func rewriteEquals(x interface{}) {
  	doubleEq := Equal.Ref()
  	unifyOp := Equality.Ref()
  	WalkExprs(x, func(x *Expr) bool {
  		if x.IsCall() {
  			operator := x.Operator()
  			if operator.Equal(doubleEq) && len(x.Operands()) == 2 {
  				x.SetOperator(NewTerm(unifyOp))
  			}
  		}
  		return false
  	})
  }
docs: // rewriteEquals will rewrite exprs under x as unification calls instead of ==
  // calls. For example:
  //
  // data.foo == data.bar is rewritten as data.foo = data.bar
  //
  // This stage should only run the safety check (since == is a built-in with no
  // outputs, so the inputs must not be marked as safe.)
  //
  // This stage is not executed by the query compiler by default because when
  // callers specify == instead of = they expect to receive a true/false/undefined
  // result back whereas with = the result is only ever true/undefined. For
  // partial evaluation cases we do want to rewrite == to = to simplify the
  // result.