def test_logical(self): f1 = (x == 0) f2 = (y == 0) self.assertEqual(str(Not(f1)), "!((x == 0))") self.assertEqual(str(Implies(f1, f2)), str(Or(Not(f1), f2))) self.assertEqual(str(Iff(f1, f2)), str(And(Implies(f1, f2), Implies(f2, f1)))) # Test single-operand logical statements self.assertEqual(str(And(x >= 1)), "(x >= 1)") self.assertEqual(str(Or(x >= 1)), "(x >= 1)") # Test binary operand logical statements self.assertEqual(str(And(x >= 1, x <= 2)), "((x >= 1) and (x <= 2))") self.assertEqual(str(Or(x <= 1, x >= 2)), "((x >= 2) or (x <= 1))") # Test multiple operand logical statements self.assertEqual(str(And(x >= 1, x <= 2, y == 2)), "((y == 2) and (x >= 1) and (x <= 2))") self.assertEqual(str(Or(x >= 1, x <= 2, y == 2)), "((y == 2) or (x >= 1) or (x <= 2))")
def dReal_check(barrier, vector_field, region=TUNCALI_PHASE_U, exclude=TUNCALI_PHASE_X0): final_conjuncts = [ region.formula(delta=EPSILON, strict=True), Not(exclude.formula(strict=True)) ] # Check that there are feasible points in this region sanity = CheckSatisfiability(And(*final_conjuncts), EPSILON) if sanity is None: raise RuntimeError("empty satisfiability region") # ... and that having negative Lie derivative is required. ld = barrier.lie_derivative(vector_field, region.variables, mp=DREAL) final_conjuncts.append(ld > -EPSILON) result = CheckSatisfiability(And(*final_conjuncts), EPSILON) return result # should be None
def test_logical2(self): self.assertEqual(str(And(b1, b2, Implies(b1, b2))), "(b1 and b2 and (b2 or !(b1)))") self.assertEqual(str(Or(b1, b2, Implies(b1, b2))), "(b1 or b2 or !(b1))") self.assertEqual(str(Not(b1)), "!(b1)")