public static IEnumerable<ReplaceAction> GetSimplifications(ConditionalExpressionSyntax ternaryNode, ISemanticModel model, Assumptions assume, CancellationToken cancellationToken = default(CancellationToken))
        {
            if (!ternaryNode.DefinitelyHasBooleanType(model)) yield break;
            var whenTrueFalseCmp = ternaryNode.WhenTrue.TryEvalAlternativeComparison(ternaryNode.WhenFalse, model, assume);

            if (whenTrueFalseCmp == true) {
                // (c ? b : b) --> b
                yield return new ReplaceAction(
                    "Simplify",
                    ternaryNode,
                    ternaryNode.WhenTrue);

                // if condition has side effects we may need to keep it
                // (c ? b : b) --> ((c && false) || b)
                if (ternaryNode.Condition.HasSideEffects(model, assume) != false) {
                    var replacement = ternaryNode.Condition
                                      .BracketedOrProtected()
                                      .BOpLogicalAnd(false.AsLiteral())
                                      .Bracketed()
                                      .BOpLogicalOr(ternaryNode.WhenTrue);
                    yield return new ReplaceAction(
                        "Simplify (keeping condition evaluation)",
                        ternaryNode,
                        replacement);
                }
            }
            if (whenTrueFalseCmp == false) {
                // (c ? b : !b) --> (c == b)
                var replacement = ternaryNode.Condition
                                  .BracketedOrProtected()
                                  .BOpEquals(ternaryNode.WhenTrue);
                yield return new ReplaceAction(
                    "Simplify",
                    ternaryNode,
                    replacement);
            }
        }