public static string ToString(VCExpr /*!*/ e, LineariserOptions /*!*/ options, UniqueNamer /*!*/ namer)
        {
            Contract.Requires(e != null);
            Contract.Requires(options != null);
            Contract.Requires(namer != null);
            Contract.Ensures(Contract.Result <string>() != null);

            StringWriter sw = new StringWriter();
            SimplifyLikeExprLineariser lin = new SimplifyLikeExprLineariser(sw, namer);

            lin.Linearise(e, options);
            return(sw.ToString());
        }
            private void WriteApplication(string termOp, string predOp, IEnumerable <VCExpr /*!*/> /*!*/ args, LineariserOptions options, bool argsAsTerms)
            {
                Contract.Requires(options != null);
                Contract.Requires(predOp != null);
                Contract.Requires(termOp != null);
                Contract.Requires(cce.NonNullElements(args));// change the AsTerm option for the arguments?
                wr.Write("({0}", options.AsTerm ? termOp : predOp);

                LineariserOptions newOptions = options.SetAsTerm(argsAsTerms);

                foreach (VCExpr e in args)
                {
                    Contract.Assert(e != null);
                    wr.Write(" ");
                    ExprLineariser.Linearise(e, newOptions);
                }

                wr.Write(")");
            }