public SimplifyLikeOpLineariser(SimplifyLikeExprLineariser ExprLineariser, TextWriter wr) { Contract.Requires(wr != null); Contract.Requires(ExprLineariser != null); this.ExprLineariser = ExprLineariser; this.wr = wr; }
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()); }
public bool VisitBoogieFunctionOp(VCExprNAry node, LineariserOptions options) { //Contract.Requires(options != null); //Contract.Requires(node != null); VCExprBoogieFunctionOp op = (VCExprBoogieFunctionOp)node.Op; Contract.Assert(op != null); string funcName = op.Func.Name; Contract.Assert(funcName != null); string bvzName = op.Func.FindStringAttribute("external"); string printedName = ExprLineariser.Namer.GetName(op.Func, funcName); Contract.Assert(printedName != null); if (bvzName != null) { printedName = bvzName; } if (options.UseTypes) { // we use term notation for arguments whose type is not bool, and // formula notation for boolean arguments wr.Write("("); ExprLineariser.WriteId(printedName); foreach (VCExpr e in node) { Contract.Assert(e != null); wr.Write(" "); ExprLineariser.Linearise(e, options.SetAsTerm(!e.Type.IsBool)); } wr.Write(")"); } else { // arguments are always terms WriteApplicationTermOnly(SimplifyLikeExprLineariser.MakeIdPrintable(printedName), node, options); } return(true); }