def f1(x, z): b1 = z3.And(concolic.get('x') >= 0, concolic.get('z') <= 0) if (x >= 0 and z <= 0): concolic.guard(b1) y = 100 concolic.set('y', 100) else: concolic.guard(z3.Not(b1)) b2 = z3.And(concolic.get('x') >= 0, concolic.get('z') > concolic.get('x')) if (x >= 0 and z > x): concolic.guard(b2) t = x * z concolic.set('t', concolic.get('x') * concolic.get('z')) y = t + 30 concolic.set('y', concolic.get('t')) else: concolic.guard(z3.Not(b2)) y = -x concolic.set('y', -concolic.get('x')) # y must be nonnegative assert y >= 0 concolic.guard(True) # Filled out by instructors # you can print your constraint in short-hand or SMT-LIB format: # concolic.dump_path() # concolic.dump_smt() return y
def signed(x): condition = concolic.get('x') < 0 if (x < 0): concolic.guard(condition) y = -x concolic.set('y', -concolic.get('x')) else: concolic.guard(z3.Not(condition)) y = x concolic.set('y', concolic.get('x')) # y must be nonnegative assert y >= 0 concolic.guard(concolic.get('y') >= 0) # concolic: you can print your constraint in short-hand or SMT-LIB format: # concolic.dump_path() # concolic.dump_smt() return y
def sum(x): i = 0 concolic.set('i', 0) r = 0 concolic.set('r', 0) if x > 0 and x <= 5: concolic.guard(z3.And(concolic.get('x') > 0, concolic.get('x') <= 5)) while i < x: concolic.guard(concolic.get('i') < concolic.get('x')) i = i + 1 concolic.set('i', concolic.get('i') + 1) r = r + i concolic.set('r', concolic.get('r') + concolic.get('i')) else: concolic.guard(z3.Not(concolic.get('i') < concolic.get('x'))) assert r == x * (x + 1) / 2 concolic.guard(concolic.get('r') == concolic.get('x') * (concolic. get('x') + 1) / 2) else: concolic.guard(z3.Not(z3.And(concolic.get('x') > 0, concolic.get( 'x') <= 5))) return r
def f1(x, z): if x >= 0 and z <= 0: concolic.guard(z3.And(concolic.get('x') >= 0, concolic.get('z') <= 0)) y = 100 concolic.set('y', 100) else: concolic.guard(z3.Not(z3.And(concolic.get('x') >= 0, concolic.get( 'z') <= 0))) if x >= 0 and z > x: concolic.guard(z3.And(concolic.get('x') >= 0, concolic.get('z') > concolic.get('x'))) t = x * z concolic.set('t', concolic.get('x') * concolic.get('z')) y = t + 30 concolic.set('y', concolic.get('t') + 30) else: concolic.guard(z3.Not(z3.And(concolic.get('x') >= 0, concolic. get('z') > concolic.get('x')))) y = -x concolic.set('y', -concolic.get('x')) assert y >= 0 concolic.guard(concolic.get('y') >= 0) return y
def f2(a, b, c): x = 0 y = 0 z = 0 concolic.set('x', 0) concolic.set('y', 0) concolic.set('z', 0) if (a != 0): concolic.guard(concolic.get('a') != 0) x = -2 concolic.set('x', -2) else: concolic.guard(concolic.get('a') == 0) if (b < 5): concolic.guard(concolic.get('b') < 5) if (a == 0 and c != 0): concolic.guard( z3.And(concolic.get('a') == 0, concolic.get('c') != 0)) y = 1 concolic.set('y', 1) else: concolic.guard( z3.Not(z3.And(concolic.get('a') == 0, concolic.get('c') != 0))) z = 2 concolic.set('z', 2) else: concolic.guard(concolic.get('b') >= 5) assert (x + y + z != 3) concolic.guard( concolic.get('x') + concolic.get('y') + concolic.get('z') != 3) return x + y + z
def f2(a, b, c): x = 0 concolic.set('x', 0) y = 0 concolic.set('y', 0) z = 0 concolic.set('z', 0) if a != 0: concolic.guard(concolic.get('a') != 0) x = -2 concolic.set('x', -2) else: concolic.guard(z3.Not(concolic.get('a') != 0)) if b < 5: concolic.guard(concolic.get('b') < 5) if a == 0 and c != 0: concolic.guard( z3.And(concolic.get('a') == 0, concolic.get('c') != 0)) y = 1 concolic.set('y', 1) else: concolic.guard( z3.Not(z3.And(concolic.get('a') == 0, concolic.get('c') != 0))) z = 2 concolic.set('z', 2) else: concolic.guard(z3.Not(concolic.get('b') < 5)) assert x + y + z != 3 concolic.guard( concolic.get('x') + concolic.get('y') + concolic.get('z') != 3) return x + y + z