static bool IsGood(RealNumber cand, RealNumber[] nums, bool disableIrrational) { var minLevel = nums.Select(n => (int)n.Type).Min(); return(cand.IsRational() || ((int)cand.Type <= minLevel && !disableIrrational) || (cand.IsIrrational() && cand.Value == 0)); // TODO: make im:0 downcastable }