kdrag.solvers.prolog
Functions
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | A small prolog interpreter. | 
| 
 | Run a Prolog-like string and return the results. | 
- kdrag.solvers.prolog.get_vars(e: ExprRef) list[ExprRef]
- Parameters:
- e (ExprRef) 
- Return type:
- list[ExprRef] 
 
- kdrag.solvers.prolog.interp(t: Tree) tuple[list[BoolRef | QuantifierRef], list[tuple[list[ExprRef], list[BoolRef]]]]
- Parameters:
- t (Tree) 
- Return type:
- tuple[list[BoolRef | QuantifierRef], list[tuple[list[ExprRef], list[BoolRef]]]] 
 
- kdrag.solvers.prolog.interp_pred(t: Tree) BoolRef
- Parameters:
- t (Tree) 
- Return type:
- BoolRef 
 
- kdrag.solvers.prolog.interp_term(t: Tree) ExprRef
- Parameters:
- t (Tree) 
- Return type:
- ExprRef 
 
- kdrag.solvers.prolog.prolog(vs0: list[ExprRef], goals: list[BoolRef], rules0: Sequence[Rule | QuantifierRef | BoolRef])
- A small prolog interpreter. THis is a generator of solutions consisting of variable list, substitution pairs. - >>> import kdrag.theories.nat as nat >>> x,y,z = smt.Consts("x y z", nat.Nat) >>> plus = smt.Function("plus", nat.Nat, nat.Nat, nat.Nat, smt.BoolSort()) >>> rules = [ kd.QForAll([y], plus(nat.Z, y, y)), kd.QForAll([x,y,z], smt.Implies( plus(x, y, z), plus(nat.S(x), y, nat.S(z)) ))] >>> list(prolog([x,y], [plus(x, y, nat.S(nat.Z))], rules)) [([], {y: S(Z), x: Z}), ([], {x: S(Z), y: Z})] - Parameters:
- vs0 (list[ExprRef]) 
- goals (list[BoolRef]) 
- rules0 (Sequence[Rule | QuantifierRef | BoolRef]) 
 
 
- kdrag.solvers.prolog.run_string(s: str)
- Run a Prolog-like string and return the results. - >>> run_string("plus(z, Y, Y). plus(s(X), Y, s(Z)) :- plus(X, Y, Z). ?- plus(X, Y, s(z)).") [([], {Y: s(z), X: z}), ([], {X: s(z), Y: z})] - Parameters:
- s (str)