コード例 #1
0
        private void loadTree()
        {
            Text = model.LogFileName + ": Axiom Profiler";

            z3AxiomTree.Nodes.Add(historyNode);
            if (model.conflicts.Count > 0)
            {
                AddTopNode(Common.Callback("CONFLICTS", () => model.conflicts));
                AddTopNode(Common.Callback("100 CONFLICTS", () => RandomConflicts(100)));
            }

            if (model.proofSteps.ContainsKey(0))
            {
                AddTopNode(model.proofSteps[0]);
                AddTopNode(model.SetupImportantInstantiations());
            }

            model.NewModel();
            AddTopNodes(model.models);

            model.PopScopes(model.scopes.Count - 1, null, 0);

            var   rootSD = model.scopes[0];
            Scope root   = rootSD.Scope;
            var   l      = new Literal
            {
                Id   = -1,
                Term = new Term("root", new Term[0])
            };

            rootSD.Implied.Insert(0, rootSD.Literal);
            l.Implied = rootSD.Implied.ToArray();
            root.Literals.Add(l);

            root.PropagateImpliedByChildren();
            root.ComputeConflictCost(new List <Conflict>());
            root.AccountLastDecision(model);
            model.rootScope = root;

            List <Quantifier> quantByCnfls = model.GetRootNamespaceQuantifiers().Values.Where(q => q.GeneratedConflicts > 0).ToList();

            quantByCnfls.Sort((q1, q2) => q2.GeneratedConflicts.CompareTo(q1.GeneratedConflicts));
            if (quantByCnfls.Count > 0)
            {
                AddTopNode(Common.Callback("Quant. by last conflict", () => quantByCnfls));
            }

            AddTopNode(root);

            AddTopNodes(model.GetQuantifiersSortedByInstantiations());
        }
コード例 #2
0
ファイル: Z3AxiomProfiler.cs プロジェクト: Suchiman/vcc
        private void loadTree()
        {
            this.Text = model.LogFileName + ": Z3 Axiom Profiler";
            z3AxiomTree.Nodes.Clear();

            if (model.conflicts.Count > 0)
            {
                AddTopNode(Common.Callback("CONFLICTS", delegate() { return(model.conflicts); }));
                AddTopNode(Common.Callback("100 CONFLICTS", delegate() { return(RandomConflicts(100)); }));
            }

            if (model.proofSteps.ContainsKey(0))
            {
                AddTopNode(model.proofSteps[0]);
                AddTopNode(model.SetupImportantInstantiations());
            }

            model.NewModel();
            foreach (var c in model.models)
            {
                AddTopNode(c);
            }

            model.PopScopes(model.scopes.Count - 1, null);

            var   rootSD = model.scopes[0];
            Scope root   = rootSD.Scope;

            if (rootSD.Literal == null)
            {
                foreach (var i in rootSD.Implied)
                {
                    System.Diagnostics.Debug.Assert(i.Id == -13);
                }
            }
            else
            {
                var l = new Literal();
                l.Id   = -1;
                l.Term = new Term("root", new Term[0]);
                rootSD.Implied.Insert(0, rootSD.Literal);
                l.Implied = rootSD.Implied.ToArray();
                root.Literals.Add(l);
            }
            root.PropagateImpliedByChildren();
            root.ComputeConflictCost(new List <Conflict>());
            root.AccountLastDecision(model);
            model.rootScope = root;

            List <Quantifier> quantByCnfls = new List <Quantifier>();

            foreach (var q in model.quantifiers.Values)
            {
                if (q.GeneratedConflicts > 0)
                {
                    quantByCnfls.Add(q);
                }
            }
            quantByCnfls.Sort(delegate(Quantifier q1, Quantifier q2) { return(q2.GeneratedConflicts.CompareTo(q1.GeneratedConflicts)); });
            if (quantByCnfls.Count > 0)
            {
                AddTopNode(Common.Callback("Quant. by last conflict", delegate() { return(quantByCnfls); }));
            }

            AddTopNode(root);

            foreach (Quantifier q in model.GetQuantifiersSortedByInstantiations())
            {
                AddTopNode(q);
            }
            z3AxiomTree.ShowNodeToolTips = true;
        }