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, ret = Consts('nil ret', fgsort) nxt = Function('nxt', fgsort, fgsort) lst = RecFunction('lst', fgsort, boolsort) rlst = RecFunction('rlst', fgsort, boolsort) red = Function('red', fgsort, boolsort) black = Function('black', fgsort, boolsort) AddRecDefinition(lst, x, If(x == nil, True, lst(nxt(x)))) AddRecDefinition( rlst, x, If( x == nil, True, And( Or( And(red(x), And(Not(black(x)), And(black(nxt(x)), Not(red(nxt(x)))))), And(black(x), And(Not(red(x)), And(red(nxt(x)), Not(black(nxt(x))))))),
import z3 from z3 import And, Or, Not, Implies, If from z3 import IsSubset, Union, SetIntersect, SetComplement, SetAdd, EmptySet, IsMember 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 from naturalproofs.pfp import make_pfp_formula from lemsynth.lemsynth_engine import solveProblem # declarations x, y = Vars('x y', fgsort) nil = Const('nil', fgsort) k = Const('k', intsort) nxt = Function('nxt', fgsort, fgsort) key = Function('key', fgsort, intsort) lst = RecFunction('lst', fgsort, boolsort) hlst = RecFunction('hlst', fgsort, fgsetsort) lseg = RecFunction('lseg', fgsort, fgsort, boolsort) AddRecDefinition(lst, x, If(x == nil, True, lst(nxt(x)))) AddRecDefinition(hlst, x, If(x == nil, fgsetsort.lattice_bottom, SetAdd(hlst(nxt(x)), x))) AddRecDefinition(lseg, (x, y), If(x == y, True, lseg(nxt(x), y))) AddAxiom((), nxt(nil) == nil) # vc goal = Implies(lst(x), Implies(key(x) != k, Implies(IsMember(y, hlst(x)), lseg(x,y)))) # check validity with natural proof solver and no hardcoded lemmas np_solver = NPSolver() solution = np_solver.solve(make_pfp_formula(goal))
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) k = Const('k', intsort) key = Function('key', fgsort, intsort) lft = Function('lft', fgsort, fgsort) rght = Function('rght', fgsort, fgsort) parent = Function('parent', fgsort, fgsort) tree = RecFunction('tree', fgsort, boolsort) tree_p = RecFunction('tree_p', 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)),
import z3 from z3 import And, Or, Not, Implies, If from z3 import IsSubset, Union, 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 naturalproofs.pfp import make_pfp_formula from lemsynth.lemsynth_engine import solveProblem # declarations x, y, v, z = Vars('x y v z', fgsort) nil = Const('nil', fgsort) nxt = Function('nxt', fgsort, fgsort) lseg = RecFunction('lseg', fgsort, fgsort, boolsort) hlseg = RecFunction('hlseg', fgsort, fgsort, fgsort, boolsort) AddRecDefinition(lseg, (x, y), If(x == nil, False, If(nxt(x) == y, True, lseg(nxt(x), y)))) # v \in hlseg(x, y) AddRecDefinition(hlseg, (x, y, v), If(x == nil, False, If(v == x, True, hlseg(nxt(x), y, v)))) AddAxiom((), nxt(nil) == nil) # Uncomment this line for fixed_depth=1 mode # config_params['goal_instantiation_mode'] = proveroptions.fixed_depth # Default depth is 1 # Uncomment these two lines for manual instantiation mode # config_params['goal_instantiation_mode'] = proveroptions.manual_instantiation
# Helper function for normalising conjunctive expressions def binary_anded(exprs): if len(exprs) == 0: return z3.BoolVal(True) elif len(exprs) == 1: return exprs[0] else: return And(exprs[0], binary_anded(exprs[1:])) # Signature x = Var('x', fgsort) nil = Const('nil', fgsort) lft = Function('lft', fgsort, fgsort) rght = Function('rght', fgsort, fgsort) parent = Function('parent', fgsort, fgsort) key = Function('key', fgsort, intsort) tree = RecFunction('tree', fgsort, boolsort) signature = dict() signature['x'] = x signature['nil'] = nil signature['lft'] = lft signature['rght'] = rght signature['parent'] = parent signature['key'] = key signature['tree'] = tree # Additional recursive definitions
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 lemsynth.lemsynth_engine import solveProblem # Declarations x = Var('x', fgsort) nil = Const('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(dlst(x), Implies(x == 0, lst(x))) # parameters representing the grammar for synth-fun and # terms on which finite model is extracted # TODO: extract this automatically from grammar_string v = Var('v', fgsort) lemma_grammar_args = [v, nil]
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) == 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, If(x == s, True, And(reach_pgm(p(x)), And(cond, assign))))
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 x, y, nx, ny = Vars('x y nx ny', fgsort) # ADT definition of nats zero = Const('zero', fgsort) succ = Function('succ', fgsort, fgsort) # projection function - analogous to tail of list pred = Function('pred', fgsort, fgsort) # rec defs plus = RecFunction('plus', fgsort, fgsort, fgsort) AddRecDefinition(plus, (x, y), If(x == zero, y, succ(plus(pred(x), y)))) # axioms AddAxiom(x, pred(succ(x)) == x) AddAxiom(x, succ(x) != zero) goal = plus(x, y) == plus(y, x) # adt pfp of goal
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 = Var('x', fgsort) nil = Const('nil', fgsort) k = Const('k', intsort) key = Function('key', fgsort, intsort) keys = Function('keys', fgsort, intsetsort) 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,
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 = Var('x', fgsort) nil, ret = Consts('nil ret', fgsort) lft = Function('lft', fgsort, fgsort) rght = Function('rght', fgsort, fgsort) parent = Function('parent', fgsort, fgsort) tree = RecFunction('tree', fgsort, boolsort) tree_p = RecFunction('tree_p', fgsort, boolsort) htree = RecFunction('htree', fgsort, fgsetsort) 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 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) nil = Const('nil', fgsort) k = Const('k', intsort) key = Function('key', fgsort, intsort) keys = Function('keys', fgsort, intsetsort) 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) 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(