No, you aren't wrong. When I designed it, I deliberately decided to break the ISP, because I thought the utility of it would be better, because it allows you to use LINQ over Reflection and then call the appropriate overload of `Verify` in order to verify at whatever level of query you find appropriate. This, in my experience, has indeed turned out to be quite useful.

While I considered alternatives, I thought that it was best to design the interface like that for the above reason. The constraint was that the Reflection types (`PropertyInfo`, `ConstructorInfo`, etc.) aren't properly polymorphic (as we've been discussing elsewhere), and it was necessary to support all of them. So, while I decided to explicitly break the ISP here, I also provided the `IdiomaticAssertion` base class to make it easier to develop 'leaf' assertions.

You can't meaningfully use that base class in order to implement the Composite, but that's one of the rare exceptions where you actually need to implement the interface directly.