import importlib_resources import z3 from z3 import And, Or, Not, Implies, If from z3 import IsMember, IsSubset, SetUnion, SetIntersect, SetComplement, EmptySet, SetAdd from naturalproofs.uct import fgsort, fgsetsort, intsort, intsetsort, boolsort, min_intsort, max_intsort from naturalproofs.decl_api import Const, Consts, Var, Vars, Function, RecFunction, AddRecDefinition, AddAxiom from lemsynth.lemsynth_engine import solveProblem # Declarations x = Var('x', fgsort) y, nil = Consts('y nil', fgsort) k = Const('k', intsort) key = Function('key', fgsort, intsort) lft = Function('lft', fgsort, fgsort) rght = Function('rght', fgsort, fgsort) minr = Function('minr', fgsort, intsort) maxr = Function('maxr', fgsort, intsort) bst = RecFunction('bst', fgsort, boolsort) hbst = RecFunction('hbst', fgsort, fgsetsort) AddRecDefinition(minr, x, If(x == nil, 100, min_intsort(key(x), minr(lft(x)), minr(rght(x))))) AddRecDefinition(maxr, x, If(x == nil, -1, max_intsort(key(x), maxr(lft(x)), maxr(rght(x))))) AddRecDefinition(bst, x, If(x == nil, True, And(0 < key(x), And(key(x) < 100, And(bst(lft(x)), And(bst(rght(x)), And(maxr(lft(x)) <= key(x), key(x) <= minr(rght(x)))))))))
import importlib_resources import z3 from z3 import And, Or, Not, Implies, If from z3 import IsSubset, Union, SetIntersect, SetComplement, EmptySet from naturalproofs.uct import fgsort, fgsetsort, intsort, intsetsort, boolsort from naturalproofs.decl_api import Const, Consts, Var, Vars, Function, RecFunction, AddRecDefinition, AddAxiom from naturalproofs.prover import NPSolver import naturalproofs.proveroptions as proveroptions from lemsynth.lemsynth_engine import solveProblem # Declarations x, y = Vars('x y', fgsort) nil, c = Consts('nil c', fgsort) nxt = Function('nxt', fgsort, fgsort) prv = Function('prv', fgsort, fgsort) lst = RecFunction('lst', fgsort, boolsort) dlst = RecFunction('dlst', fgsort, boolsort) lseg = RecFunction('lseg', fgsort, fgsort, boolsort) AddRecDefinition(lst, x, If(x == nil, True, lst(nxt(x)))) AddRecDefinition(dlst, x, If(x == nil, True, If(nxt(x) == nil, True, And(prv(nxt(x)) == x, dlst(nxt(x)))))) AddRecDefinition(lseg, (x, y) , If(x == y, True, lseg(nxt(x), y))) AddAxiom((), nxt(nil) == nil) # Problem parameters goal = Implies(lseg(x, y), Implies(x != c, Implies(dlst(y), lst(x))))
from naturalproofs.prover import NPSolver from naturalproofs.uct import fgsort, fgsetsort, intsort, intsetsort, boolsort, min_intsort, max_intsort from naturalproofs.decl_api import Const, Consts, Var, Vars, Function, RecFunction, AddRecDefinition, AddAxiom from naturalproofs.pfp import make_pfp_formula from lemsynth.lemsynth_engine import solveProblem def notInChildren(x): return And(Not(IsMember(x, htree(lft(x)))), Not(IsMember(x, htree(rght(x))))) # declarations x, y = Vars('x y', fgsort) nil, ret = Consts('nil ret', fgsort) lft = Function('lft', fgsort, fgsort) rght = Function('rght', fgsort, fgsort) tree = RecFunction('tree', fgsort, boolsort) htree = RecFunction('htree', fgsort, fgsetsort) reach_lr = RecFunction('reach_lr', fgsort, fgsort, boolsort) AddRecDefinition( tree, x, If( x == nil, True, And( notInChildren(x), And( SetIntersect(htree(lft(x)), htree(rght(x))) == fgsetsort.lattice_bottom, And(tree(lft(x)), tree(rght(x)))))))
import z3 from z3 import And, Or, Not, Implies, If from z3 import IsSubset, Union, SetIntersect, SetComplement, EmptySet from naturalproofs.uct import fgsort, fgsetsort, intsort, intsetsort, boolsort from naturalproofs.decl_api import Const, Consts, Var, Vars, Function, RecFunction, AddRecDefinition, AddAxiom from naturalproofs.prover import NPSolver import naturalproofs.proveroptions as proveroptions from naturalproofs.pfp import make_pfp_formula from lemsynth.lemsynth_engine import solveProblem # declarations x, y = Vars('x y', fgsort) nil, z = Consts('nil z', fgsort) k = Const('k', intsort) nxt = Function('nxt', fgsort, fgsort) lst = RecFunction('lst', fgsort, boolsort) lseg = RecFunction('lseg', fgsort, fgsort, boolsort) key = Function('key', fgsort, intsort) AddRecDefinition(lst, x, If(x == nil, True, lst(nxt(x)))) AddRecDefinition(lseg, (x, y), If(x == y, True, lseg(nxt(x), y))) AddAxiom((), nxt(nil) == nil) # vc goal = Implies(lseg(x, y), Implies(And(key(x) != k, nxt(y) == z), lseg(x, z))) # check validity with natural proof solver and no hardcoded lemmas np_solver = NPSolver() solution = np_solver.solve(make_pfp_formula(goal))
import importlib_resources import z3 from z3 import And, Or, Not, Implies, If from z3 import IsSubset, Union, SetIntersect, SetComplement, EmptySet from naturalproofs.prover import NPSolver from naturalproofs.uct import fgsort, fgsetsort, intsort, intsetsort, boolsort from naturalproofs.decl_api import Const, Consts, Var, Vars, Function, RecFunction, AddRecDefinition, AddAxiom from naturalproofs.pfp import make_pfp_formula from lemsynth.lemsynth_engine import solveProblem # declarations x = Var('x', fgsort) c, s, nil = Consts('c s nil', fgsort) v1 = Function('v1', fgsort, fgsort) v2 = Function('v2', fgsort, fgsort) p = Function('p', fgsort, fgsort) n = Function('n', fgsort, fgsort) reach_pgm = RecFunction('reach_pgm', fgsort, boolsort) # precondition AddAxiom((), v1(s) == n(v2(s))) cond = v1(p(x)) != nil assign1 = v1(x) == n(v1(p(x))) assign2 = v2(x) == n(v2(p(x))) assign = And(assign1, assign2) AddRecDefinition(reach_pgm, x,
from z3 import And, Or, Not, Implies, If from z3 import IsMember, IsSubset, SetUnion, SetIntersect, SetComplement, EmptySet, SetAdd from naturalproofs.prover import NPSolver from naturalproofs.uct import fgsort, fgsetsort, intsort, intsetsort, boolsort, min_intsort, max_intsort from naturalproofs.decl_api import Const, Consts, Var, Vars, Function, RecFunction, AddRecDefinition, AddAxiom from naturalproofs.pfp import make_pfp_formula from lemsynth.lemsynth_engine import solveProblem def notInChildren(x): return And(Not(IsMember(x, hbst(lft(x)))), Not(IsMember(x, hbst(rght(x))))) # declarations x, y = Vars('x y', fgsort) z, nil = Consts('z nil', fgsort) key = Function('key', fgsort, intsort) lft = Function('lft', fgsort, fgsort) rght = Function('rght', fgsort, fgsort) minr = RecFunction('minr', fgsort, intsort) maxr = RecFunction('maxr', fgsort, intsort) bst = RecFunction('bst', fgsort, boolsort) hbst = RecFunction('hbst', fgsort, fgsetsort) AddRecDefinition(minr, x, If(x == nil, 100, min_intsort(key(x), minr(lft(x)), minr(rght(x))))) AddRecDefinition(maxr, x, If(x == nil, -1, max_intsort(key(x), maxr(lft(x)), maxr(rght(x))))) AddRecDefinition(bst, x, If(x == nil, True, And(0 < key(x), And(key(x) < 100, And(bst(lft(x)), And(bst(rght(x)), And(maxr(lft(x)) <= key(x),
import importlib_resources import z3 from z3 import And, Or, Not, Implies, If from z3 import IsSubset, Union, SetIntersect, SetComplement, EmptySet from naturalproofs.uct import fgsort, fgsetsort, intsort, intsetsort, boolsort from naturalproofs.decl_api import Const, Consts, Var, Vars, Function, RecFunction, AddRecDefinition, AddAxiom from naturalproofs.prover import NPSolver import naturalproofs.proveroptions as proveroptions from lemsynth.lemsynth_engine import solveProblem # Declarations x, y = Vars('x y', fgsort) c, nil, z = Consts('c nil z', fgsort) nxt = Function('nxt', fgsort, fgsort) lst = RecFunction('lst', fgsort, boolsort) lseg = RecFunction('lseg', fgsort, fgsort, boolsort) AddRecDefinition(lst, x, If(x == nil, True, lst(nxt(x)))) AddRecDefinition(lseg, (x, y) , If(x == y, True, lseg(nxt(x), y))) AddAxiom((), nxt(nil) == nil) # Problem parameters pgm = And(lst(y), And(x != c, nxt(y) == z)) goal = Implies(lseg(x, y), Implies(pgm, And(lseg(x, z), lst(z)))) # parameters representing the grammar for synth-fun and # terms on which finite model is extracted # TODO: extract this automatically from grammar_string v1, v2 = Vars('v1 v2', fgsort)
# Only importing this for writing this file as a test import unittest from z3 import And, Or, Not, Implies, If from z3 import IsSubset, Union, SetIntersect, SetComplement, EmptySet from naturalproofs.uct import fgsort, fgsetsort, intsort, intsetsort, boolsort from naturalproofs.decl_api import Const, Consts, Function, RecFunction, AddRecDefinition, AddAxiom from naturalproofs.pfp import make_pfp_formula from naturalproofs.prover import NPSolver import naturalproofs.proveroptions as proveroptions # Declarations a, b, c, zero = Consts('a b c zero', fgsort) suc = Function('suc', fgsort, fgsort) pred = Function('pred', fgsort, fgsort) AddAxiom(a, pred(suc(a)) == a) nat = RecFunction('nat', fgsort, boolsort) add = RecFunction('add', fgsort, fgsort, fgsort, boolsort) AddRecDefinition(nat, a, If(a == zero, True, nat(pred(a)))) AddRecDefinition(add, (a, b, c), If(a == zero, b == c, add(pred(a), suc(b), c))) # Problem parameters goal = Implies(add(a, b, c), Implies(And(nat(a), nat(b)), nat(c))) pfp_of_goal = make_pfp_formula(goal) # Call a natural proofs solver npsolver = NPSolver() # Configure the solver npsolver.options.instantiation_mode = proveroptions.manual_instantiation npsolver.options.terms_to_instantiate = {a, b, c, zero, pred(b), suc(b)} # Ask for proof npsolution = npsolver.solve(pfp_of_goal)
""" # Only importing this for writing this file as a test import unittest from z3 import And, Or, Not, Implies, If from z3 import IsSubset, Union, SetIntersect, SetComplement, EmptySet from naturalproofs.uct import fgsort, fgsetsort, intsort, intsetsort, boolsort from naturalproofs.decl_api import Const, Consts, Function, RecFunction, AddRecDefinition, AddAxiom from naturalproofs.pfp import make_pfp_formula from naturalproofs.prover import NPSolver import naturalproofs.proveroptions as proveroptions # Declarations a, zero = Consts('a zero', fgsort) suc = Function('suc', fgsort, fgsort) pred = Function('pred', fgsort, fgsort) AddAxiom(a, pred(suc(a)) == a) nat = RecFunction('nat', fgsort, boolsort) even = RecFunction('even', fgsort, boolsort) odd = RecFunction('odd', fgsort, boolsort) AddRecDefinition(nat, a, If(a == zero, True, nat(pred(a)))) AddRecDefinition(even, a, If(a == zero, True, odd(pred(a)))) AddRecDefinition(odd, a, If(a == zero, False, If(a == suc(zero), True, even(pred(a))))) # Problem parameters goal = Implies(nat(a), Or(even(a), odd(a))) pfp_of_goal = make_pfp_formula(goal) # Call a natural proofs solver npsolver = NPSolver() # Ask for proof
import z3 from z3 import And, Or, Not, Implies, If from z3 import IsSubset, Union, SetIntersect, SetComplement, EmptySet from naturalproofs.uct import fgsort, fgsetsort, intsort, intsetsort, boolsort from naturalproofs.decl_api import Const, Consts, Var, Vars, Function, RecFunction, AddRecDefinition, AddAxiom from naturalproofs.prover import NPSolver import naturalproofs.proveroptions as proveroptions from naturalproofs.pfp import make_pfp_formula from lemsynth.lemsynth_engine import solveProblem # declarations x = Var('x', fgsort) nil, yc, zc = Consts('nil yc zc', fgsort) k = Const('k', intsort) nxt = Function('nxt', fgsort, fgsort) lsegy = RecFunction('lsegy', fgsort, boolsort) lsegz = RecFunction('lsegz', fgsort, boolsort) lsegy_p = RecFunction('lsegy_p', fgsort, boolsort) lsegz_p = RecFunction('lsegz_p', fgsort, boolsort) key = Function('key', fgsort, intsort) AddRecDefinition(lsegy, x, If(x == yc, True, lsegy(nxt(x)))) AddRecDefinition(lsegz, x, If(x == zc, True, lsegz(nxt(x)))) # lsegy_p, lsegz_p defs reflect change of nxt(y) == z AddRecDefinition(lsegy_p, x, If(x == yc, True, lsegy_p(If(x == yc, zc, nxt(x))))) AddRecDefinition(lsegz_p, x, If(x == zc, True, lsegz_p(If(x == yc, zc, nxt(x))))) AddAxiom((), nxt(nil) == nil)
import z3 from z3 import And, Or, Not, Implies, If from z3 import IsSubset, Union, SetIntersect, SetComplement, EmptySet from naturalproofs.uct import fgsort, fgsetsort, intsort, intsetsort, boolsort from naturalproofs.decl_api import Const, Consts, Var, Vars, Function, RecFunction, AddRecDefinition, AddAxiom from naturalproofs.prover import NPSolver import naturalproofs.proveroptions as proveroptions from naturalproofs.pfp import make_pfp_formula from lemsynth.lemsynth_engine import solveProblem # declarations x, y = Vars('x y', fgsort) nil, c, z = Consts('nil c z', fgsort) nxt = Function('nxt', fgsort, fgsort) lst = RecFunction('lst', fgsort, boolsort) lseg = RecFunction('lseg', fgsort, fgsort, boolsort) AddRecDefinition(lst, x, If(x == nil, True, lst(nxt(x)))) AddRecDefinition(lseg, (x, y), If(x == y, True, lseg(nxt(x), y))) AddAxiom((), nxt(nil) == nil) # vc rhs = Implies(And(lst(y), And(x != c, nxt(y) == z)), And(lseg(x, z), lst(z))) goal = Implies(lseg(x, y), rhs) # check validity with natural proof solver and no hardcoded lemmas np_solver = NPSolver() solution = np_solver.solve(make_pfp_formula(goal)) if not solution.if_sat:
import importlib_resources import z3 from z3 import And, Or, Not, Implies, If, Exists from z3 import IsSubset, IsMember, SetUnion, SetIntersect, SetComplement, EmptySet, SetAdd from naturalproofs.uct import fgsort, fgsetsort, intsort, intsetsort, boolsort from naturalproofs.decl_api import Const, Consts, Var, Vars, Function, RecFunction, AddRecDefinition, AddAxiom from naturalproofs.prover import NPSolver import naturalproofs.proveroptions as proveroptions from lemsynth.lemsynth_engine import solveProblem l, tl = Vars('l tl', fgsort) k, h = Consts('k h', intsort) x = Var('x', intsort) # ADT definition of lists nil = Const('nil', fgsort) cons = Function('cons', intsort, fgsort, fgsort) # projections for cons head = Function('head', fgsort, intsort) tail = Function('tail', fgsort, fgsort) # rec defs slst = RecFunction('slst', fgsort, boolsort) elems = RecFunction('elems', fgsort, fgsetsort) member = RecFunction('member', fgsort, boolsort) AddRecDefinition( slst, l,
from naturalproofs.prover import NPSolver from naturalproofs.uct import fgsort, fgsetsort, intsort, intsetsort, boolsort, min_intsort, max_intsort from naturalproofs.decl_api import Const, Consts, Var, Vars, Function, RecFunction, AddRecDefinition, AddAxiom from naturalproofs.pfp import make_pfp_formula from lemsynth.lemsynth_engine import solveProblem def notInChildren(x): return And(Not(IsMember(x, htree(lft(x)))), Not(IsMember(x, htree(rght(x))))) # declarations x, y = Vars('x y', fgsort) nil, ret, z = Consts('nil ret z', fgsort) k = Const('k', intsort) key = Function('key', fgsort, intsort) lft = Function('lft', fgsort, fgsort) rght = Function('rght', fgsort, fgsort) tree = RecFunction('tree', fgsort, boolsort) htree = RecFunction('htree', fgsort, fgsetsort) reach_lr = RecFunction('reach_lr', fgsort, fgsort, boolsort) AddRecDefinition( tree, x, If( x == nil, True, And( notInChildren(x), And( SetIntersect(htree(lft(x)),
""" # Only importing this for writing this file as a test import unittest from z3 import And, Or, Not, Implies, If from z3 import IsSubset, Union, SetIntersect, SetComplement, EmptySet from naturalproofs.uct import fgsort, fgsetsort, intsort, intsetsort, boolsort from naturalproofs.decl_api import Const, Consts, Function, RecFunction, AddRecDefinition, AddAxiom from naturalproofs.prover import NPSolver import naturalproofs.proveroptions as proveroptions from naturalproofs.extensions.finitemodel import extract_finite_model, add_fg_element_offset, get_fg_elements # Declarations x, y, nil = Consts('x y nil', fgsort) nxt = Function('nxt', fgsort, fgsort) lst = RecFunction('lst', fgsort, boolsort) ls = RecFunction('ls', fgsort, fgsort, boolsort) AddRecDefinition(lst, x, If(x == nil, True, lst(nxt(x)))) AddRecDefinition(ls, (x, y), If(x == nil, True, ls(nxt(x), y))) # Problem parameters goal = Implies(ls(x, nil), lst(x)) lemma1_params = (x, y) lemma1_body = Implies(And(ls(x, y), lst(y)), lst(x)) lemmas = {(lemma1_params, lemma1_body)} # Call a natural proofs solver npsolver = NPSolver() # Configure the solver npsolver.options.instantiation_mode = proveroptions.manual_instantiation npsolver.options.terms_to_instantiate = {x, y, nil}
import importlib_resources import z3 from z3 import And, Or, Not, Implies, If from z3 import IsSubset, SetUnion, SetIntersect, SetComplement, EmptySet, SetAdd from naturalproofs.uct import fgsort, fgsetsort, intsort, intsetsort, boolsort from naturalproofs.decl_api import Const, Consts, Var, Vars, Function, RecFunction, AddRecDefinition, AddAxiom from naturalproofs.prover import NPSolver import naturalproofs.proveroptions as proveroptions from lemsynth.lemsynth_engine import solveProblem # Declarations x, y = Vars('x y', fgsort) c, nil = Consts('c nil', fgsort) key = Function('key', fgsort, intsort) nxt = Function('nxt', fgsort, fgsort) lst = RecFunction('lst', fgsort, boolsort) lseg = RecFunction('lseg', fgsort, fgsort, boolsort) keys = RecFunction('keys', fgsort, intsetsort) lsegkeys = RecFunction('lsegkeys', fgsort, fgsort, intsetsort) AddRecDefinition(lst, x, If(x == nil, True, lst(nxt(x)))) AddRecDefinition(lseg, (x, y), If(x == y, True, lseg(nxt(x), y))) AddRecDefinition( keys, x, If(x == nil, intsetsort.lattice_bottom, SetAdd(keys(nxt(x)), key(x)))) AddRecDefinition( lsegkeys, (x, y),
# Only importing this for writing this file as a test import unittest from z3 import And, Or, Not, Implies, If from z3 import IsSubset, Union, SetIntersect, SetComplement, EmptySet from naturalproofs.uct import fgsort, fgsetsort, intsort, intsetsort, boolsort from naturalproofs.decl_api import Const, Consts, Function, RecFunction, AddRecDefinition, AddAxiom from naturalproofs.prover import NPSolver import naturalproofs.proveroptions as proveroptions # Declarations x, nil = Consts('x nil', fgsort) nxt = Function('nxt', fgsort, fgsort) prv = Function('prv', fgsort, fgsort) lst = RecFunction('lst', fgsort, boolsort) dlst = RecFunction('dlst', fgsort, boolsort) AddRecDefinition(lst, x, If(x == nil, True, lst(nxt(x)))) AddRecDefinition( dlst, x, If(x == nil, True, If(nxt(x) == nil, True, And(prv(nxt(x)) == x, dlst(nxt(x)))))) # Problem parameters goal = Implies(And(dlst(x), x == nil), lst(x)) lemma1_params = (x, ) lemma1_body = Implies(dlst(x), lst(x)) lemmas = {(lemma1_params, lemma1_body)} # Call a natural proofs solver npsolver = NPSolver() # Configure the solver