Finding MinMax values and returning a tuple as a result
What bothers me with the tuple is that fields are not readonly and we cannot prevent users of the method to mess up and break flow.


We cannot prevent everything and sometimes it's just easier and quicker to use the simplest solution like tuples in this case. You can always switch to something more complex if necessary but it's good to start by following the YAGNI principle.




  I was coding some tooling stuff


It depnds on what kind of tooling stuff your are coding. If this is some tiny helper then I'd go with tuples. If I was creatng a general purpose library then and big type would be better. You could validate the parameters and make sure that min &lt;= max etc. 

As an example you can take a look at my generic Range.cs that is supported by expressions to be able to work with any comparable type BinaryOperation.cs.



Regarding your ComparerExtensions I start with what I already said in my comment: LeftStrictlyLesserThanRight - I think virtually all programming languages call this just less-than and its counterpart less-than-or-equal.

I also find the extensions are not intuitive. They should be extensions on the T and not on the comparer like that:

x.LessThen(y)


and/or

x.LessThen(y, comparer)


It's more natural (and shorter) to write than


comparer.LeftLessThenRight(x, y)





This means you can create two pairs of these extensions for each operation.

public static bool LessThen&lt;T&gt;(this T x, T y) where T : IComparable&lt;T&gt;
public static bool LessThen&lt;T&gt;(this T x, T y, IComparer&lt;T&gt; comparer)


one that uses the interface IComparable implemented by T and the other one that uses a custom comparer.