public State Reduce(IEnvironment environment) { if (Expression.IsReducible) { return(new State( new Assign <T>(variable, Expression.Reduce(environment)), environment)); } return(new State( new DoNothing(), environment.AddValue(variable.Name, Expression))); }