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))))))))) AddRecDefinition(hbst, x, If(x == nil, fgsetsort.lattice_bottom, SetAdd(SetUnion(hbst(lft(x)), hbst(rght(x))), x))) AddAxiom((), lft(nil) == nil) AddAxiom((), rght(nil) == nil) # Problem parameters goal = Implies(bst(x), Implies(And(x != nil, And(IsMember(y, hbst(x)),
# 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 = 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), And(