Consider this example:public class SimpleValidator{    public virtual bool InRange(int x)    {        return x >= 6 && x <=12;    }}public class OffsetAwareValidator : SimpleValidator{    int offset = 0;    public OffsetAwareValidator(int offset)    {        this.offset = offset;    }    public override bool InRange(int x)    {        var num = x + offset;        return num >= 6 && num <= 12;    }}Now, obviously, new OffsetAwareValidator(0) will have the exact same behavior as SimpleValidator. However, when offset is non zero, some values that pass validation in OffsetAwareValidator would not pass it in  SimpleValidator.Is this a violation of LSP? 
Does my example violate LSP?
solid
The only way this violates LSP is if the contract for SimpleValidator requires that it return the same answers for the same inputs. If the contract is merely, must return either true or false, never throw, and have no side effects, then LSP isn't broken.-- In Response to a Comment --If you reverse the inheritance hierarchy, then you remove the need for the SimpleValidator completely (caution: I don't know C#, I'm just guessing on the syntax):public class Validator {    int offset = 0;    public static Validator SimpleValidator() {        return Validator(0);    }    public Validator(int offset) {        this.offset = offset;    }    public bool InRange(int x) {        var num = x + offset;        return 6 <= num && num <= 12;    }}