Microsoft.Z3.Context.ParseSMTLIB2File C# (CSharp) Méthode

ParseSMTLIB2File() public méthode

Parse the given file using the SMT-LIB2 parser.
public ParseSMTLIB2File ( string fileName, Symbol sortNames = null, Microsoft.Z3.Sort sorts = null, Symbol declNames = null, FuncDecl decls = null ) : BoolExpr
fileName string
sortNames Symbol
sorts Microsoft.Z3.Sort
declNames Symbol
decls FuncDecl
Résultat BoolExpr
        public BoolExpr ParseSMTLIB2File(string fileName, Symbol[] sortNames = null, Sort[] sorts = null, Symbol[] declNames = null, FuncDecl[] decls = null)
        {
            Contract.Ensures(Contract.Result<BoolExpr>() != null);

            uint csn = Symbol.ArrayLength(sortNames);
            uint cs = Sort.ArrayLength(sorts);
            uint cdn = Symbol.ArrayLength(declNames);
            uint cd = AST.ArrayLength(decls);
            if (csn != cs || cdn != cd)
                throw new Z3Exception("Argument size mismatch");
            return (BoolExpr)Expr.Create(this, Native.Z3_parse_smtlib2_file(nCtx, fileName,
                AST.ArrayLength(sorts), Symbol.ArrayToNative(sortNames), AST.ArrayToNative(sorts),
                AST.ArrayLength(decls), Symbol.ArrayToNative(declNames), AST.ArrayToNative(decls)));
        }

Usage Example

Exemple #1
0
        /// <summary>
        /// Shows how to read an SMT2 file.
        /// </summary>
        static void SMT2FileTest(string filename)
        {
            System.DateTime before = System.DateTime.Now;

            Console.WriteLine("SMT2 File test ");
            System.GC.Collect();

            using (Context ctx = new Context(new Dictionary<string, string>() { { "MODEL", "true" } }))
            {
                Expr a = ctx.ParseSMTLIB2File(filename);

                Console.WriteLine("SMT2 file read time: " + (System.DateTime.Now - before).TotalSeconds + " sec");

                // Iterate over the formula.

                Queue q = new Queue();
                q.Enqueue(a);
                uint cnt = 0;
                while (q.Count > 0)
                {
                    AST cur = (AST)q.Dequeue();
                    cnt++;

                    // This here ...
                    if (cur is Expr)
                        if (!(cur.IsVar))
                            foreach (Expr c in ((Expr)cur).Args)
                                q.Enqueue(c);

                    // Takes the same time as this:
                    //switch ((cur).ASTKind)
                    //{
                    //    case Z3_ast_kind.Z3_APP_AST:
                    //        foreach (Expr e in ((Expr)cur).Args)
                    //            q.Enqueue(e);
                    //        break;
                    //    case Z3_ast_kind.Z3_QUANTIFIER_AST:
                    //        q.Enqueue(((Quantifier)cur).Args[0]);
                    //        break;
                    //    case Z3_ast_kind.Z3_VAR_AST: break;
                    //    case Z3_ast_kind.Z3_NUMERAL_AST: break;
                    //    case Z3_ast_kind.Z3_FUNC_DECL_AST: break;
                    //    case Z3_ast_kind.Z3_SORT_AST: break;
                    //}
                }
                Console.WriteLine(cnt + " ASTs");
            }

            Console.WriteLine("SMT2 file test took " + (System.DateTime.Now - before).TotalSeconds + " sec");
        }
Context