anchor.diff:  %% Internal Functions
   %% =============================================================================
   
  +%% Reduction %%
   
   -spec reduce( X0, Rho, Gamma ) -> [cf_sem:str()]
   when X0    :: [cf_sem:expr()],
  
positive.code:      Gamma :: #{string() => cf_sem:lam()}.
  
  reduce( X0, Rho, Gamma ) ->
    X1 = cf_sem:eval( X0, {Rho, fun cre:submit/1, Gamma, #{}} ),
    case cf_sem:pfinal( X1 ) of
      true  -> X1;
      false ->
        receive
          {failed, ActScript, Out} -> {failed, ActScript, Out};
          {finished, Summary} ->
            Ret = maps:get( ret, Summary ),
            Prefix = maps:get( prefix, Summary ),
  
negative.code:                     fun( N, Delta0 ) ->
                        acc_delta( N, Delta0, Ret, Prefix )
                      end,
                      #{}, maps:keys( Ret ) ),
            reduce( X1, {Rho, Mu, Gamma, maps:merge( Omega, Delta )} )
        end
    end.
  
  