protected override bool Equals(BinaryOp other) { if (ReferenceEquals(this, other)) { return(true); } if (other is null || this is null) { return(false); } return((IsSimple ? this : Simplify()).Terms().Equals((other.IsSimple ? other : other.Simplify()).Terms())); }