If include_nonconstraining is false, returns the list of parameters that are
constrained by value - i.e., the value of each parameter in the list is
uniquely determined by value (see RFC 447). If it is true, return the list
of parameters whose values are needed in order to constrain value - these
differ, with the latter being a superset, in the presence of projections.
Order the predicates in predicates such that each parameter is
constrained before it is used, if that is possible, and add the
parameters so constrained to input_parameters. For example,
imagine the following impl: