the trait solver sometimes uses negative reasoning, e.g. in discard_impls_shadowed_by_env. Whether we're currently employing negative reason is not tracked by the nested goals.
I am worried that we need to track this as right now a cycle where T: Trait only holds if T: Trait does not hold gets treated incorrectly.