internal override void ToMonaString(StringBuilder sb, CharSetSolver solver)
        {
            string s = BitVecUtil.GetIntBinaryString(label);
            var    c = s[0];

            if (c == '1')
            {
                sb.AppendFormat("is_{0}({1})", c, set);
            }
            else
            {
                sb.AppendFormat("~is_{0}({1})", c, set);
            }
            for (int i = 1; i < s.Length; i++)
            {
                sb.Append(" & ");
                c = s[i];
                if (c == '1')
                {
                    sb.AppendFormat("is_{0}({1})", c, set);
                }
                else
                {
                    sb.AppendFormat("~is_{0}({1})", c, set);
                }
            }
        }
        internal override void ToMonaString(StringBuilder sb, CharSetSolver solver)
        {
            var addOr = false;

            foreach (var bv in solver.GenerateAllCharacters(pred, false))
            {
                if (addOr)
                {
                    sb.Append(" | ");
                }
                else
                {
                    addOr = true;
                }

                string s = BitVecUtil.GetIntBinaryString(bv);
                sb.Append("(");
                var c = s[0];
                if (c == '1')
                {
                    sb.AppendFormat("is_{0}({1})", c, set);
                }
                else
                {
                    sb.AppendFormat("~is_{0}({1})", c, set);
                }
                for (int i = 1; i < s.Length; i++)
                {
                    sb.Append(" & ");
                    c = s[i];
                    if (c == '1')
                    {
                        sb.AppendFormat("is_{0}({1})", c, set);
                    }
                    else
                    {
                        sb.AppendFormat("~is_{0}({1})", c, set);
                    }
                }
                sb.Append(")");
            }
        }