public static void CreateProver(string z3exe) { CommandLineOptions.Clo.Z3ExecutablePath = z3exe; CommandLineOptions.Clo.ApplyDefaultOptions(); CommandLineOptions.Clo.StratifiedInlining = 1; prover = ProverInterface.CreateProver(new Program(), "log", CommandLineOptions.Clo.SimplifyLogFileAppend, -1); }
public static void InitializeVCGen(Program prog) { //create VC.vcgen/VC.proverInterface VC.vcgen = new VCGen(prog, CommandLineOptions.Clo.SimplifyLogFilePath, CommandLineOptions.Clo.SimplifyLogFileAppend, new List <Checker>()); VC.proverInterface = ProverInterface.CreateProver(prog, CommandLineOptions.Clo.SimplifyLogFilePath, CommandLineOptions.Clo.SimplifyLogFileAppend, CommandLineOptions.Clo.ProverKillTime); VC.translator = VC.proverInterface.Context.BoogieExprTranslator; VC.exprGen = VC.proverInterface.Context.ExprGen; VC.collector = new ConditionGeneration.CounterexampleCollector(); }
public StratifiedVCGenBase(Program program, string /*?*/ logFilePath, bool appendLogFile, List<Checker> checkers, Action<Implementation> PassiveImplInstrumentation) : base(program, logFilePath, appendLogFile, checkers) { implName2StratifiedInliningInfo = new Dictionary<string, StratifiedInliningInfo>(); prover = ProverInterface.CreateProver(program, logFilePath, appendLogFile, CommandLineOptions.Clo.TimeLimit); foreach (var impl in program.Implementations) { implName2StratifiedInliningInfo[impl.Name] = new StratifiedInliningInfo(impl, this, PassiveImplInstrumentation); } GenerateRecordFunctions(); }
public AbstractHoudini(Program program) { this.program = program; this.impl2VC = new Dictionary <string, VCExpr>(); this.impl2EndStateVars = new Dictionary <string, List <VCExpr> >(); this.impl2CalleeSummaries = new Dictionary <string, List <Tuple <string, VCExprNAry> > >(); this.impl2Summary = new Dictionary <string, ISummaryElement>(); this.name2Impl = BoogieUtil.nameImplMapping(program); this.vcgen = new VCGen(program, CommandLineOptions.Clo.ProverLogFilePath, CommandLineOptions.Clo.ProverLogFileAppend, new List <Checker>()); this.prover = ProverInterface.CreateProver(program, CommandLineOptions.Clo.ProverLogFilePath, CommandLineOptions.Clo.ProverLogFileAppend, CommandLineOptions.Clo.TimeLimit); this.reporter = new AbstractHoudiniErrorReporter(); var impls = new List <Implementation>( program.TopLevelDeclarations.OfType <Implementation>()); // Create all VCs impls .Iter(attachEnsures); impls .Iter(GenVC); }
public ConcurrentHoudini(int id, Program program, HoudiniSession.HoudiniStatistics stats, string cexTraceFile = "houdiniCexTrace.bpl") { Contract.Assert(id >= 0); this.id = id; this.program = program; this.cexTraceFile = cexTraceFile; if (CommandLineOptions.Clo.Trace) { Console.WriteLine("Collecting existential constants..."); } this.houdiniConstants = CollectExistentialConstants(); if (CommandLineOptions.Clo.Trace) { Console.WriteLine("Building call graph..."); } this.callGraph = Program.BuildCallGraph(program); if (CommandLineOptions.Clo.Trace) { Console.WriteLine("Number of implementations = {0}", callGraph.Nodes.Count); } if (CommandLineOptions.Clo.HoudiniUseCrossDependencies) { if (CommandLineOptions.Clo.Trace) { Console.WriteLine("Computing procedure cross dependencies ..."); } this.crossDependencies = new CrossDependencies(this.houdiniConstants); this.crossDependencies.Visit(program); } Inline(); this.vcgen = new VCGen(program, CommandLineOptions.Clo.SimplifyLogFilePath, CommandLineOptions.Clo.SimplifyLogFileAppend, new List <Checker>()); this.proverInterface = ProverInterface.CreateProver(program, CommandLineOptions.Clo.SimplifyLogFilePath, CommandLineOptions.Clo.SimplifyLogFileAppend, CommandLineOptions.Clo.ProverKillTime, id); vcgenFailures = new HashSet <Implementation>(); Dictionary <Implementation, HoudiniSession> houdiniSessions = new Dictionary <Implementation, HoudiniSession>(); if (CommandLineOptions.Clo.Trace) { Console.WriteLine("Beginning VC generation for Houdini..."); } foreach (Implementation impl in callGraph.Nodes) { try { if (CommandLineOptions.Clo.Trace) { Console.WriteLine("Generating VC for {0}", impl.Name); } HoudiniSession session = new HoudiniSession(this, vcgen, proverInterface, program, impl, stats, taskID: id); houdiniSessions.Add(impl, session); } catch (VCGenException) { if (CommandLineOptions.Clo.Trace) { Console.WriteLine("VC generation failed"); } vcgenFailures.Add(impl); } } this.houdiniSessions = new ReadOnlyDictionary <Implementation, HoudiniSession>(houdiniSessions); if (CommandLineOptions.Clo.ExplainHoudini) { // Print results of ExplainHoudini to a dotty file explainHoudiniDottyFile = new StreamWriter("explainHoudini.dot"); explainHoudiniDottyFile.WriteLine("digraph explainHoudini {"); foreach (var constant in houdiniConstants) { explainHoudiniDottyFile.WriteLine("{0} [ label = \"{0}\" color=black ];", constant.Name); } explainHoudiniDottyFile.WriteLine("TimeOut [label = \"TimeOut\" color=red ];"); } }