• Given generic arguments from an obligation and an impl, could these two be unified after replacing parameters in the the impl with inference variables.


  • See simplify_type.
  • Generic parameters are pretty much just bound variables, e.g. the type of fn foo<'a, T>(x: &'a T) -> u32 { ... } can be thought of as for<'a, T> fn(&'a T) -> u32.
  • During fast-rejection, we have the choice of treating projection types as either simplifiable or not, depending on whether we expect the projection to be normalized/rigid.


  • Tries to simplify a type by only returning the outermost injective¹ layer, if one exists.