def example_1(): """ AB perpendicular to BC, AB = x, and BC = 4. Is CA = sqrt(x^2+16) a correct answer? :return: """ vh = VariableHandler() x = vh.number('x') A = vh.point('A') B = vh.point('B') C = vh.point('C') AB = vh.line(A, B) BC = vh.line(B, C) CA = vh.line(C, A) c = vh.apply('LengthOf', AB) a = vh.apply('LengthOf', BC) b = vh.apply('LengthOf', CA) p1 = a == 4 p2 = c == x p3 = vh.apply('Perpendicular', AB, BC) q1 = b == (16 + x**2)**0.5 q2 = b == x**2 ns = NumericSolver([p1, p2, p3], vh) print( ns.find_assignment(q1) ) # find_assignment simply analyzes whether the query relation can be satisfied print(ns.query_invar(q1) ) # query_invar analyzes whether the query relation must hold true print(ns.find_assignment(q2) ) # this is satisfiable; there exists x that satisfies q2. print(ns.query_invar(q2) ) # this is False because q2 is not true for all possible x.
def example_1(): """ AB perpendicular to BC, AB = x, and BC = 4. Is CA = sqrt(x^2+16) a correct answer? :return: """ vh = VariableHandler() x = vh.number('x') A = vh.point('A') B = vh.point('B') C = vh.point('C') AB = vh.line(A, B) BC = vh.line(B, C) CA = vh.line(C, A) c = vh.apply('LengthOf', AB) a = vh.apply('LengthOf', BC) b = vh.apply('LengthOf', CA) p1 = a == 4 p2 = c == x p3 = vh.apply('Perpendicular', AB, BC) q1 = b == (16 + x**2)**0.5 q2 = b == x**2 ns = NumericSolver([p1, p2, p3], vh) print(ns.find_assignment(q1)) # find_assignment simply analyzes whether the query relation can be satisfied print(ns.query_invar(q1)) # query_invar analyzes whether the query relation must hold true print(ns.find_assignment(q2)) # this is satisfiable; there exists x that satisfies q2. print(ns.query_invar(q2)) # this is False because q2 is not true for all possible x.
def example_0(): """ AB = x, BC = 3, CA = 4. Is an answer x=5, x=8 possible? :return: """ vh = VariableHandler() x = vh.number('x') A = vh.point('A') B = vh.point('B') C = vh.point('C') AB = vh.line(A, B) BC = vh.line(B, C) CA = vh.line(C, A) c = vh.apply('LengthOf', AB) a = vh.apply('LengthOf', BC) b = vh.apply('LengthOf', CA) p1 = a == 3 p2 = b == 4 p3 = c == x q1 = x == 8 q2 = x == 5 ns = NumericSolver([p1, p2, p3], vh) print(ns.find_assignment(q1)) print(ns.find_assignment(q2))
def example_0(): """ AB = x, BC = 3, CA = 4. Is an answer x=5, x=8 possible? :return: """ vh = VariableHandler() x = vh.number('x') A = vh.point('A') B = vh.point('B') C = vh.point('C') AB = vh.line(A, B) BC = vh.line(B, C) CA = vh.line(C, A) c = vh.apply('LengthOf', AB) a = vh.apply('LengthOf', BC) b = vh.apply('LengthOf', CA) p1 = a == 3 p2 = b == 4 p3 = c == x q1 = x == 8 q2 = x == 5 ns = NumericSolver([p1, p2, p3], vh) print(ns.find_assignment(q1)) print(ns.find_assignment(q2))